[Ffmpeg-devel] [PATCH] waveformatetensible support

Michael Niedermayer michaelni
Thu Jan 25 22:25:11 CET 2007


Hi

On Thu, Jan 25, 2007 at 07:02:40PM +0100, Baptiste Coudurier wrote:
> Michael Niedermayer wrote:
> > Hi
> > 
> > On Sun, Jan 14, 2007 at 10:44:34PM +0100, Baptiste Coudurier wrote:
> >> Michael Niedermayer wrote:
> >>> Hi
> >>>
> >>> On Sun, Jan 14, 2007 at 01:51:29PM +0100, Baptiste Coudurier wrote:
> >>>> Hi
> >>>>
> >>>> Michael Niedermayer wrote:
> >>>>> Hi
> >>>>>
> >>>>> On Sun, Jan 14, 2007 at 01:39:27AM +0100, Baptiste Coudurier wrote:
> >>>>>> Hi
> >>>>>>
> >>>>>> Here is a patch to support waveformatextensible header.
> >>>>>> Only four first byte of GUID are needed, and they seem to match twocc.
> >>>>> [...]
> >>>>>
> >>>>> cosmetics must be in seperate patches
> >>>>>
> >>>> Ok. Here it is.
> >>> [...]
> >>>
> >>>> -    codec->codec_id = wav_codec_get_id(id, codec->bits_per_sample);
> >>>> -
> >>>>      if (size > 16) {  /* We're obviously dealing with WAVEFORMATEX */
> >>>> -        codec->extradata_size = get_le16(pb);
> >>>> +        int cbSize = get_le16(pb);
> >>>> +        if (id == 0xfffe) {
> >>>> +            codec->bits_per_sample = get_le16(pb);
> >>>> +            get_le32(pb); /* dwChannelMask */
> >>>> +            id = get_le32(pb); /* 4 first bytes of GUID */
> >>>> +            cbSize = 10; /* skip remaining bytes */
> >>> why? why not read them in extradata?
> >>>
> >> What would you do with 12 last bytes of GUID in extradata ?
> > 
> > nothing but maybe i want the 13th and later bytes
> > 
> 
> Like that ?
> 
> -- 
> Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
> SMARTJOG S.A.                                    http://www.smartjog.com
> Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
> Phone: +33 1 49966312

> Index: libavformat/riff.c
> ===================================================================
> --- libavformat/riff.c	(revision 7707)
> +++ libavformat/riff.c	(working copy)
> @@ -422,22 +422,32 @@
>          codec->bits_per_sample = 8;
>      }else
>          codec->bits_per_sample = get_le16(pb);
> -    codec->codec_id = wav_codec_get_id(id, codec->bits_per_sample);
> -
>      if (size > 16) {  /* We're obviously dealing with WAVEFORMATEX */
> -        codec->extradata_size = get_le16(pb);
> -        if (codec->extradata_size > 0) {
> -            if (codec->extradata_size > size - 18)
> -                codec->extradata_size = size - 18;
> +        int cbSize = get_le16(pb); /* cbSize */
> +        size -= 18;

is the >16 / -18 intended? shouldnt that be >=18 ?


> +        if (cbSize > size)
> +            cbSize = size;

cbSize= FFMIN(cbSize, size);


> +        if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */
> +            codec->bits_per_sample = get_le16(pb);
> +            get_le32(pb); /* dwChannelMask */
> +            id = get_le32(pb); /* 4 first bytes of GUID */
> +            url_fskip(pb, 12); /* skip end of GUID */
> +            cbSize -= 22;
> +            size -= 22;
> +        }
> +        if (cbSize > 0) {
> +            codec->extradata_size = cbSize;
>              codec->extradata = av_mallocz(codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
>              get_buffer(pb, codec->extradata, codec->extradata_size);
> +            size -= cbSize;
>          } else
>              codec->extradata_size = 0;

codec->extradata_size= cbSize; before the if() should work too

except these the patch looks ok

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

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070125/1bc67d71/attachment.pgp>



More information about the ffmpeg-devel mailing list