I build a simple H.263 decoder based on the example code provided. I am receiving a H.263 stream from a Polycom codec (CIF resolution, 64Kbps). I do not get any errors, but the decoded video has several horizontal bands of macroblocks that are black. If there is motion in those black areas, they are correctly redrawn. Also, there are other macroblocks that periodically corrupt (blocks of corrupted video). Below is the code I use to initialize the decoder and decode theframes:
status = m_pDecoder->GetFrame(m_pDataIn, m_pDataOut);
This is actually in the ::FillBuffer member function of a DirectShow transform filter. I print the results of each RTP packet I receive. I strip off the RTP header and the H.263 header (though the 263 header is simply ignored if I leave it there). The marker bit in the RTP header indicates a "completed" frame. I use this to combine the RTP data into a single buffer containing a full frame, which I then feed to the decoder via GetFrame(). Does anyone have any thought as to why some of the macroblocks would be corrupted in my decoded video? Thanks for any input anyone can provide.
(The output below shows the size of the RTP packet, followed by the first 32 bytes of the packet and then the last 16 bytes of the packet.