[FFmpeg-trac] #500(undetermined:new): Seemingly inconsistent AVIndexEntry timestamps for movs starting with B-Frames

FFmpeg trac at avcodec.org
Thu Sep 22 15:47:16 CEST 2011


#500: Seemingly inconsistent AVIndexEntry timestamps for movs starting with
B-Frames
-------------------------------------+-------------------------------------
             Reporter:  rmk          |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 A while ago I asked on the ml regarding the semantics of the undocumented
 fields of AVIndexEntry defined in avformat.h (http://www.mail-archive.com
 /libav-user at ffmpeg.org/msg00535.html). I didn't get an answer so I still
 do not know what the correct behaviour is but I have observed things that
 at least appear inconsistent. I have two examples of MPEG-2 files in a mov
 container which both start with the sequence BBI (presentation order). One
 is the file that is attached to issue #479 that has the following
 properties:

 Mesht0456_01_cut.MP4

 AVStream.time_base = 1/30000
 AVStream.start_time = 3003 (0.1001s)
 start frame order = BBI
 PTS of first I-Frame = 3003
 PTS of first frame (B) = 0
 first I-frame AVIndexEntry.timestamp = 0

 Then another one (uploaded to http://www.datafilehost.com/download-
 27d635cc.html since I do not have a smaller sample):

 xdcam_hd422_1080p24.mov

 AVStream.time_base = 1/2400
 AVStream.start_time = 200 (0.08333333333333334s)
 start frame order = BBI
 PTS of first I-Frame = 200
 PTS of first frame (B) = 0
 first I-frame AVIndexEntry.timestamp = -100 (-0.416666666666667s)

 The first sample looks like AVIndexEntry.timestamp is set with the
 stream's start_time subtracted from the respective frame's PTS. This also
 works for all following index entries. However, this does not work for the
 second example. I have no idea if this is related to issue #479. All I'm
 trying to do is use the index (if it is there) to find out the PTSs of
 keyframes and I thought that was OK to do via AVIndexEntry. So either I am
 abusing the API and it would help to document this so others don't run
 into this or one of the files is broken or it is indeed a bug. In any
 case, just a short, unambiguous sentence of documentation for each
 AVIndexEntry field by someone who knows the semantics would help libav API
 users a great deal to use this and to help improve the seeking
 functionality of ffmpeg be it only by providing bug reports with samples.

 One more observation is that in both cases the timestamp of the index
 entry corresponding to the first I frame matches the DTS of the packet
 containing the I-Frame. Is that the semantics of AVIndexEntry.timestamp?
 In that case how would one derive the PTS of the I-frame from the index
 entry? Any insight/help would be greatly appreciated.

-- 
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/500>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list