[FFmpeg-devel] [PATCH] RealMedia muxer: support audio codecs other than AC-3

Francesco Lavra francescolavra
Wed May 19 19:31:44 CEST 2010


And now back to the subject of this thread...

On Sun, 2010-05-02 at 18:00 -0400, Ronald S. Bultje wrote:
> Hi,
> 
> On Sun, May 2, 2010 at 10:26 AM, Francesco Lavra
> <francescolavra at interfree.it> wrote:
> > Updated patches attached.
> [..]
> > Index: libavformat/rm.h
> > ===================================================================
> > --- libavformat/rm.h	(revision 23008)
> > +++ libavformat/rm.h	(working copy)
> > @@ -23,9 +23,11 @@
> >  #define AVFORMAT_RM_H
> >
> >  #include "avformat.h"
> > +#include "riff.h"
> 
> Why? Rest of patch #1 is OK.

Because AVCodecTag is defined there. In fact, compilation fails without
the #include.

> For patch #2:
> 
> > Index: libavformat/rmenc.c
> > ===================================================================
> > --- libavformat/rmenc.c	(revision 23008)
> > +++ libavformat/rmenc.c	(working copy)
> > @@ -225,7 +225,15 @@
> >              put_be32(s, 0x10); /* unknown */
> >              put_be16(s, stream->enc->channels);
> >              put_str8(s, "Int0"); /* codec name */
> > +            if (!stream->enc->codec_tag)
> > +                stream->enc->codec_tag =
> > +                    ff_codec_get_tag(ff_rm_codec_tags, stream->enc->codec_id);
> > +            if (stream->enc->codec_tag) {
> > +                put_byte(s, 4); /* tag length */
> > +                put_le32(s, stream->enc->codec_tag);
> > +            } else {
> >              put_str8(s, "dnet"); /* codec name */
> > +            }
> 
> The term spaghetti code comes to mind. This is of course not OK. I
> understand the original muxer was written for AC-3, but it's not OK to
> leave it as-is if you want to generalize that.
> 
> I'd replace this whole thing. codec_tag is undefined for any practical
> purpose. Imagine one of the custom divx variants in AVI, it will set
> codec_tag. Do we want that in .rm? Probably not. If codec_id does not
> result in a good tag, then error out.

Based on the discussion in this thread, the attached implementation uses
codec_tag if codec_id is CODEC_ID_NONE, otherwise it looks for the tag
in ff_rm_codec_tags. In either case, if no valid value can be found for
codec_tag, the write_header function errors out.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 01_rm.patch
Type: text/x-patch
Size: 3499 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100519/fd4c1955/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 02_rm.patch
Type: text/x-patch
Size: 2208 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100519/fd4c1955/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 03_rm.patch
Type: text/x-patch
Size: 756 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100519/fd4c1955/attachment-0002.bin>



More information about the ffmpeg-devel mailing list