Suppose the frames are like this(in order of pts): I BBB P BBB P [B]BB P
Now I want to skip to [B] as fast as possible.
There is one I frame and two P frames required to be put into the decoder.
How to skip the 6 B frames before [B]?
What I have tried, is to check the packets to see whether they are useless.
Once I find it is the packet of a B frame, I have 2 choices.
1)free the packet and go to read a packet from av_read_frame to continue the
loop
2)free the packet and put it into the "avcodec_decode_video2", try to get a
frame. And then , continue the loop
These two both don't work well. The target frame [B] I got is destroyed.
The way I check whether the packet is of a B frame is like this:
There is a "last_pframe" to declare the pts of the last P(or I) frame which has
been put into the "avcodec_decode_video2". Get a packet, and check if
packet.pts>last_pframe. If it is true, it is a packet from a new P frame. Else,
it is a B frame and consider to skip it. Because a P frame is always followed
by the B frames in the order of dts. For an experimental video with 25 frames,
the judgement is as what I want.
How to skip some useless B frames in the right way?
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user