Yes, you need to flush decoder also.
You had errors while decoding because simple copying AVPacket's data and size 
no longer works(sorry, it was my fault). It should be like following:

uint8_t *orig_ptr;
ssize_t orig_size;

orig_ptr = pkt.data;
orig_size = pkt.size;

while (pkt.size > 0 && (size = av_decode_video2()) > 0)
{
        pkt.data += size;
        pkt.size -= size;
}

pkt.data = orig_ptr;
pkt.size = orig_size;

av_free_packet(pkt);

24.03.2013, в 17:42, Pauli Suuraho написал(а):

> > This code is not very readable, due to the ugly c++ coding style and bloat.
> 
> Oh, sorry you had problems reading my code.
> 
> >If I read it correctly, you are forgetting to flush the decoder after the
> >end of the stream. You have to feed empty packets to the decoder until it
> >returns no frame.
> 
> That's it! demuxing.c example had example how to flush the codec.
> 
> Now I'm nicely getting all the frames, well at least if there is one frame 
> per packet.
> 
> -Pauli
> _______________________________________________
> Libav-user mailing list
> [email protected]
> http://ffmpeg.org/mailman/listinfo/libav-user

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to