[FFmpeg-devel] Add waveformat extensible support in wav muxer (SoC qualification task)

Michael Niedermayer michaelni
Sun Mar 29 23:10:55 CEST 2009


On Mon, Mar 30, 2009 at 12:29:04AM +0800, zhentan feng wrote:
> Hi
> 
> 2009/3/29 Michael Niedermayer <michaelni at gmx.at>
> 
> > On Sun, Mar 29, 2009 at 11:51:57AM +0800, zhentan feng wrote:
[...]
> > looks broken when extradata_size is not 0
> >
> >
> thanks and here is the new patch attached below.
> 
> -- 
> Best wishes~

> Index: libavformat/riff.c
> ===================================================================
> --- libavformat/riff.c	(revision 18184)
> +++ libavformat/riff.c	(working copy)
> @@ -282,12 +282,19 @@
>  int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
>  {
>      int bps, blkalign, bytespersec;
> +    int waveformatextensible = 0;
>      int hdrsize = 18;
> +    int flg = 0;
>  
>      if(!enc->codec_tag || enc->codec_tag > 0xffff)
>          return -1;
>  
> -    put_le16(pb, enc->codec_tag);
> +    waveformatextensible = enc->channels > 2 && enc->channel_layout;
> +    if (waveformatextensible)
> +        put_le16(pb, 0xfffe);
> +    else
> +        put_le16(pb, enc->codec_tag);
> +
>      put_le16(pb, enc->channels);
>      put_le32(pb, enc->sample_rate);
>      if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3 || enc->codec_id == CODEC_ID_GSM_MS) {
> @@ -351,18 +358,35 @@
>          put_le16(pb, 2); /* wav_extra_size */
>          hdrsize += 2;
>          put_le16(pb, enc->frame_size); /* wSamplesPerBlock */
> -    } else if(enc->extradata_size){
> -        put_le16(pb, enc->extradata_size);
> -        put_buffer(pb, enc->extradata, enc->extradata_size);
> -        hdrsize += enc->extradata_size;
> -        if(hdrsize&1){
> -            hdrsize++;
> -            put_byte(pb, 0);
> -        }
> -    } else {
> -        hdrsize -= 2;
> +    } else
> +        flg = 1;
> +
> +    if (waveformatextensible) {                     /* write WAVEFORMATEXTENSIBLE extensions */
> +        put_le16(pb, enc->extradata_size+22);       /* 22 is the size of WAVEFORMATEXTENSIBLE-WAVEFORMATEX */
> +        put_le16(pb, enc->bits_per_coded_sample);   /* ValidBitsPerSample || SamplesPerBlock || Reserved */
> +        put_le32(pb, enc->channel_layout);          /* dwChannelMask */
> +        put_le32(pb, enc->codec_tag);               /* GUID + next 3 */
> +        put_le32(pb, 0x00100000);
> +        put_le32(pb, 0xAA000080);
> +        put_le32(pb, 0x719B3800);
> +        hdrsize += 22;
>      }

i doubt this will work when flg != 1

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

GMX, the mailprovider that uses RBL lists to reject mails from your friends
running their own mailserver at home. The mailprovider that obscures the
origin of mails (mis)identified as viruses. The mailprovider that improves
security my disallowing more secure forms of authentication.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090329/05e7b523/attachment.pgp>



More information about the ffmpeg-devel mailing list