[FFmpeg-devel] Add waveformat extensible support in wav muxer (SoC qualification task)
zhentan feng
spyfeng
Sat Apr 4 11:14:06 CEST 2009
2009/4/4 Michael Niedermayer <michaelni at gmx.at>
> [...]
>
> > Index: libavformat/riff.c
> > ===================================================================
> > --- libavformat/riff.c (revision 18184)
> > +++ libavformat/riff.c (working copy)
> > @@ -283,6 +283,7 @@
> > {
> > int bps, blkalign, bytespersec;
> > int hdrsize = 18;
> > + int pre_size = 0;
> >
> > if(!enc->codec_tag || enc->codec_tag > 0xffff)
> > return -1;
> > @@ -292,8 +293,16 @@
> > 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) {
> > bps = 0;
> > + if (enc->codec_id == CODEC_ID_MP2) {
> > + pre_size = 22; /* wav_extra_size */
> > + } else if(enc->codec_id == CODEC_ID_MP3) {
> > + pre_size = 12; /* wav_extra_size */
> > + } else
> > + pre_size = 2; /* wav_extra_size */
> > } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id
> == CODEC_ID_ADPCM_MS || enc->codec_id == CODEC_ID_ADPCM_G726 ||
> enc->codec_id == CODEC_ID_ADPCM_YAMAHA) { //
> > bps = 4;
> > + if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV)
> > + pre_size = 2; /* wav_extra_size */
> > } else {
> > if (!(bps = av_get_bits_per_sample(enc->codec_id)))
> > bps = 16; // default to 16
> > @@ -324,8 +333,15 @@
> > put_le32(pb, bytespersec); /* bytes per second */
> > put_le16(pb, blkalign); /* block align */
> > put_le16(pb, bps); /* bits per sample */
> > +
> > + if (!pre_size && enc->extradata_size)
> > + pre_size = enc->extradata_size;
> > + if (pre_size)
> > + put_le16(pb, pre_size);
> > + else
> > + return hdrsize - 2;
> > +
> > if (enc->codec_id == CODEC_ID_MP3) {
> > - put_le16(pb, 12); /* wav_extra_size */
> > hdrsize += 12;
> > put_le16(pb, 1); /* wID */
> > put_le32(pb, 2); /* fdwFlags */
> > @@ -333,7 +349,6 @@
> > put_le16(pb, 1); /* nFramesPerBlock */
> > put_le16(pb, 1393); /* nCodecDelay */
> > } else if (enc->codec_id == CODEC_ID_MP2) {
> > - put_le16(pb, 22); /* wav_extra_size */
> > hdrsize += 22;
> > put_le16(pb, 2); /* fwHeadLayer */
> > put_le32(pb, enc->bit_rate); /* dwHeadBitrate */
> > @@ -344,15 +359,12 @@
> > put_le32(pb, 0); /* dwPTSLow */
> > put_le32(pb, 0); /* dwPTSHigh */
> > } else if (enc->codec_id == CODEC_ID_GSM_MS) {
> > - put_le16(pb, 2); /* wav_extra_size */
> > hdrsize += 2;
> > put_le16(pb, enc->frame_size); /* wSamplesPerBlock */
> > } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV) {
> > - 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){
>
> uint8_t temp[256];
> uint8_t *riff_extradata= temp;
> uint8_t *riff_extradata_start= temp;
>
> if(codec_id == abc){
> bytestream_put_le16()
> ...
> }else if ...
> ...
> } else if(enc->extradata_size){
> riff_extradata_start= enc->extradata;
> riff_extradata= enc->extradata + enc->extradata_size;
> }
>
> if(waveformatext){
> ...
> }else{
> ...
> }
> put_buffer(pb, riff_extradata, riff_extradata - riff_extradata_start);
>
here is the new patch.
I'll submit the indent patch and extract some code lines later.
zhentan
--
Best wishes~
-------------- next part --------------
A non-text attachment was scrubbed...
Name: waveformatextensible_12.patch
Type: application/octet-stream
Size: 4626 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090404/6bb78478/attachment.obj>
More information about the ffmpeg-devel
mailing list