[FFmpeg-devel] [PATCH] Fix for ogg timestamps when packets span multiple ogg pages

David Conrad lessen42
Sun Nov 9 08:48:01 CET 2008

On Nov 6, 2008, at 5:51 PM, David Conrad wrote:

> Hi,
> The problem with the current code comes from how an ogg page with  
> only a partial packet uses the special granulepos of -1. The  
> granulepos needs to be saved from the last page that completed a  
> packet until the next page that completes a packet, where it is the  
> timestamp of the first complete packet.

After looking at ogg granule_position some more, there's another  
problem in that Dirac and ogm both assume that the timestamp is the  
beginning of the associated packet, wheras Xiph codecs define the  
granule as the time after the associated packet is fully decoded (I'm  
assuming, I've only found Vorbis and Theora to do so explicitly.)

Currently the ogg demuxer simply assumes that all codecs use the  
latter definition and does codec-specific interpretation of the  
granule on the next packet. This causes problems with determining  
Theora keyframes, as the frame after the actual keyframe gets the flag.

Here's a general fix to always associate the granule and derived flags  
with the correct packet, and then delay the interpreted timestamp to  
the next packet for Xiph codecs. This fixes ogm timestamps, Theora  
keyframes, and allows for correct Dirac timestamps.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: ogg-granule.txt
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081109/1c8ec08f/attachment.txt>
-------------- next part --------------

More information about the ffmpeg-devel mailing list