[Ffmpeg-devel] [PATCH] ODML AVI Duration

Michael Niedermayer michaelni
Wed Aug 23 20:26:08 CEST 2006


Hi

On Wed, Aug 23, 2006 at 11:26:40AM -0500, Brian Brice wrote:
> Michael Niedermayer wrote:
> >Hi
> >
> >On Tue, Aug 22, 2006 at 07:18:16PM -0500, Brian Brice wrote:
> >>Michael Niedermayer wrote:
> >>>Hi
> >>>
> >>>On Tue, Aug 22, 2006 at 04:38:39PM -0500, Brian Brice wrote:
> >>>>Michael Niedermayer wrote:
> >>>>>Hi
> >>>>>
> >>>>>On Tue, Aug 22, 2006 at 03:21:23PM -0500, Brian Brice wrote:
> >>>>>>If I encoded an AVI that was over 2 GB (or 4m:43s DV), then video
> >>>>>>players would read the wrong duration, thus not being able to show the
> >>>>>>entire clip.  For example, encoding a DV clip that is about 5 minutes
> >>>>>>in duration:
> >>>>>>
> >>>>>>ffmpeg -i INPUT.mpg -f avi -vcodec dvvideo -acodec pcm_s16le -s ntsc
> >>>>>>-r ntsc -ar 48000 -pix_fmt yuv411p -t 00:05:00 OUTPUT.avi
> >>>>>>
> >>>>>>Windows Media Player and even ffmpeg would report the duration as 
> >>>>>>4:43.
> >>>>>>This patch is to write the proper lengths in the AVI and stream 
> >>>>>>headers.
> >>>>>>If the file contains only 1 RIFF, then all will be the same.  If there
> >>>>>>is more than 1 RIFF, then in the write_trailer, it updates the odml's
> >>>>>>length along with the headers.
> >>>>>quoting the odml spec
> >>>>>"The dwTotalFrames field indicates the size (number of frames) within 
> >>>>>the first RIFF
> >>>>>chunk."
> >>>>>
> >>>>>...
> >>>>>
> >>>>>"Extended AVI Header (dmlh)
> >>>>>typedef struct {
> >>>>> DWORD dwTotalFrames;
> >>>>>} ODMLExtendedAVIHeader;
> >>>>>Total Frames
> >>>>>The dwTotalFrames field indicates the real size of the AVI file. Since 
> >>>>>the same field in the
> >>>>>Main AVI Header indicates the size within the first RIFF chunk.
> >>>>>"
> >>>>OK.  This version updates ONLY the stream headers' length but leaves
> >>>>the avih's total frames referring to ONLY the first RIFF's.  Having ONLY
> >>>>the streams' headers updated reports the correct duration in both
> >>>>Windows Media Player and ffmpeg.
> >[...]
> >>>and it contains tabs and consequently messed up indention
> >>Added.  Forgot to turn off tabs.. :-(
> >[...]
> >>+        if(au_ssize == 0) {
> >>+           put_le32(pb, avi->packet_count[n]);
> >>+        } else {
> >>+           put_le32(pb, avi->audio_strm_length[n] / au_ssize);
> >>+        }
> >>+        if(stream->codec_type == CODEC_TYPE_VIDEO)
> >>+           nb_frames = FFMAX(nb_frames, avi->packet_count[n]);
> >
> >these also arent indented correctly (they have 3 spaces instead of 4)
> >
> OK.  Corrected.

patch looks ok

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

In the past you could go to a library and read, borrow or copy any book
Today you'd get arrested for mere telling someone where the library is




More information about the ffmpeg-devel mailing list