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