HRESULT TvideoCodecLibmpeg2::decompress(const unsigned char *src,size_t srcLen,IMediaSample *pIn)
{
    TffdshowVideoInputPin::TrateAndFlush *rateInfo = (TffdshowVideoInputPin::TrateAndFlush*)deciV->getRateInfo();
    HRESULT hr=decompressI(src,srcLen,pIn);

    // decompressI temporarily unlocks m_csCodecs_and_imgFilters in TffdshowDecVideo::deliverProcessedSample. Check if the context is valid here.
    if (rateInfo->m_flushing || rateInfo->m_endflush) {
        return hr;
    }
    int len=(int)(mpeg2dec->buf_end - mpeg2dec->buf_start);
    if (len>0) {
        unsigned char *b=(unsigned char *)buffer->alloc(len);
        memcpy(b, mpeg2dec->buf_start, len);
        mpeg2_buffer(mpeg2dec, b, b+len);
    }
    return hr;
}
Пример #2
0
void decompress(unsigned char s, unsigned char *dst)
{
  dst[0]=decompressI(s & 0x0F);
  dst[1]=decompressI((s & 0xF0) >> 4);
}