int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb,

                      AVCodecParameters *par, int flags)

{

    int bps, blkalign, bytespersec, frame_size;

    int hdrsize;

    int64_t hdrstart = avio_tell(pb);

    int waveformatextensible;

    uint8_t temp[256];

    uint8_t *riff_extradata       = temp;

    uint8_t *riff_extradata_start = temp;



    if (!par->codec_tag || par->codec_tag > 0xffff)

        return -1;



    /* We use the known constant frame size for the codec if known, otherwise

     * fall back on using AVCodecContext.frame_size, which is not as reliable

     * for indicating packet duration. */

    frame_size = av_get_audio_frame_duration2(par, par->block_align);



    waveformatextensible = (par->channels > 2 && par->channel_layout) ||



                           par->sample_rate > 48000 ||

                           par->codec_id == AV_CODEC_ID_EAC3 ||

                           av_get_bits_per_sample(par->codec_id) > 16;



    if (waveformatextensible)

        avio_wl16(pb, 0xfffe);

    else

        avio_wl16(pb, par->codec_tag);



    avio_wl16(pb, par->channels);

    avio_wl32(pb, par->sample_rate);

    if (par->codec_id == AV_CODEC_ID_ATRAC3 ||

        par->codec_id == AV_CODEC_ID_G723_1 ||

        par->codec_id == AV_CODEC_ID_MP2    ||

        par->codec_id == AV_CODEC_ID_MP3    ||

        par->codec_id == AV_CODEC_ID_GSM_MS) {

        bps = 0;

    } else {

        if (!(bps = av_get_bits_per_sample(par->codec_id))) {

            if (par->bits_per_coded_sample)

                bps = par->bits_per_coded_sample;

            else

                bps = 16;  // default to 16

        }

    }

    if (bps != par->bits_per_coded_sample && par->bits_per_coded_sample) {

        av_log(s, AV_LOG_WARNING,

               "requested bits_per_coded_sample (%d) "

               "and actually stored (%d) differ\n",

               par->bits_per_coded_sample, bps);

    }



    if (par->codec_id == AV_CODEC_ID_MP2) {

        blkalign = (144 * par->bit_rate - 1)/par->sample_rate + 1;

    } else if (par->codec_id == AV_CODEC_ID_MP3) {

        blkalign = 576 * (par->sample_rate <= (24000 + 32000)/2 ? 1 : 2);

    } else if (par->codec_id == AV_CODEC_ID_AC3) {

        blkalign = 3840;                /* maximum bytes per frame */

    } else if (par->codec_id == AV_CODEC_ID_AAC) {

        blkalign = 768 * par->channels; /* maximum bytes per frame */

    } else if (par->codec_id == AV_CODEC_ID_G723_1) {

        blkalign = 24;

    } else if (par->block_align != 0) { /* specified by the codec */

        blkalign = par->block_align;

    } else

        blkalign = bps * par->channels / av_gcd(8, bps);

    if (par->codec_id == AV_CODEC_ID_PCM_U8 ||

        par->codec_id == AV_CODEC_ID_PCM_S24LE ||

        par->codec_id == AV_CODEC_ID_PCM_S32LE ||

        par->codec_id == AV_CODEC_ID_PCM_F32LE ||

        par->codec_id == AV_CODEC_ID_PCM_F64LE ||

        par->codec_id == AV_CODEC_ID_PCM_S16LE) {

        bytespersec = par->sample_rate * blkalign;

    } else if (par->codec_id == AV_CODEC_ID_G723_1) {

        bytespersec = 800;

    } else {

        bytespersec = par->bit_rate / 8;

    }

    avio_wl32(pb, bytespersec); /* bytes per second */

    avio_wl16(pb, blkalign);    /* block align */

    avio_wl16(pb, bps);         /* bits per sample */

    if (par->codec_id == AV_CODEC_ID_MP3) {

        bytestream_put_le16(&riff_extradata, 1);    /* wID */

        bytestream_put_le32(&riff_extradata, 2);    /* fdwFlags */

        bytestream_put_le16(&riff_extradata, 1152); /* nBlockSize */

        bytestream_put_le16(&riff_extradata, 1);    /* nFramesPerBlock */

        bytestream_put_le16(&riff_extradata, 1393); /* nCodecDelay */

    } else if (par->codec_id == AV_CODEC_ID_MP2) {

        /* fwHeadLayer */

        bytestream_put_le16(&riff_extradata, 2);

        /* dwHeadBitrate */

        bytestream_put_le32(&riff_extradata, par->bit_rate);

        /* fwHeadMode */

        bytestream_put_le16(&riff_extradata, par->channels == 2 ? 1 : 8);

        /* fwHeadModeExt */

        bytestream_put_le16(&riff_extradata, 0);

        /* wHeadEmphasis */

        bytestream_put_le16(&riff_extradata, 1);

        /* fwHeadFlags */

        bytestream_put_le16(&riff_extradata, 16);

        /* dwPTSLow */

        bytestream_put_le32(&riff_extradata, 0);

        /* dwPTSHigh */

        bytestream_put_le32(&riff_extradata, 0);

    } else if (par->codec_id == AV_CODEC_ID_G723_1) {

        bytestream_put_le32(&riff_extradata, 0x9ace0002); /* extradata needed for msacm g723.1 codec */

        bytestream_put_le32(&riff_extradata, 0xaea2f732);

        bytestream_put_le16(&riff_extradata, 0xacde);

    } else if (par->codec_id == AV_CODEC_ID_GSM_MS ||

               par->codec_id == AV_CODEC_ID_ADPCM_IMA_WAV) {

        /* wSamplesPerBlock */

        bytestream_put_le16(&riff_extradata, frame_size);

    } else if (par->extradata_size) {

        riff_extradata_start = par->extradata;

        riff_extradata       = par->extradata + par->extradata_size;

    }

    /* write WAVEFORMATEXTENSIBLE extensions */

    if (waveformatextensible) {

        int write_channel_mask = !(flags & FF_PUT_WAV_HEADER_SKIP_CHANNELMASK) &&

                                 (s->strict_std_compliance < FF_COMPLIANCE_NORMAL ||

                                  par->channel_layout < 0x40000);

        /* 22 is WAVEFORMATEXTENSIBLE size */

        avio_wl16(pb, riff_extradata - riff_extradata_start + 22);

        /* ValidBitsPerSample || SamplesPerBlock || Reserved */

        avio_wl16(pb, bps);

        /* dwChannelMask */

        avio_wl32(pb, write_channel_mask ? par->channel_layout : 0);

        /* GUID + next 3 */

        if (par->codec_id == AV_CODEC_ID_EAC3) {

            ff_put_guid(pb, ff_get_codec_guid(par->codec_id, ff_codec_wav_guids));

        } else {

        avio_wl32(pb, par->codec_tag);

        avio_wl32(pb, 0x00100000);

        avio_wl32(pb, 0xAA000080);

        avio_wl32(pb, 0x719B3800);

        }

    } else if ((flags & FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX) ||

               par->codec_tag != 0x0001 /* PCM */ ||

               riff_extradata - riff_extradata_start) {

        /* WAVEFORMATEX */

        avio_wl16(pb, riff_extradata - riff_extradata_start); /* cbSize */

    } /* else PCMWAVEFORMAT */

    avio_write(pb, riff_extradata_start, riff_extradata - riff_extradata_start);

    hdrsize = avio_tell(pb) - hdrstart;

    if (hdrsize & 1) {

        hdrsize++;

        avio_w8(pb, 0);

    }



    return hdrsize;

}
int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb,

                      AVCodecParameters *par, int flags)

{

    int bps, blkalign, bytespersec, frame_size;

    int hdrsize;

    int64_t hdrstart = avio_tell(pb);

    int waveformatextensible;

    uint8_t temp[256];

    uint8_t *riff_extradata       = temp;

    uint8_t *riff_extradata_start = temp;



    if (!par->codec_tag || par->codec_tag > 0xffff)

        return -1;



    





    frame_size = av_get_audio_frame_duration2(par, par->block_align);



    waveformatextensible = (par->channels > 2 && par->channel_layout) ||



                           par->sample_rate > 48000 ||

                           par->codec_id == AV_CODEC_ID_EAC3 ||

                           av_get_bits_per_sample(par->codec_id) > 16;



    if (waveformatextensible)

        avio_wl16(pb, 0xfffe);

    else

        avio_wl16(pb, par->codec_tag);



    avio_wl16(pb, par->channels);

    avio_wl32(pb, par->sample_rate);

    if (par->codec_id == AV_CODEC_ID_ATRAC3 ||

        par->codec_id == AV_CODEC_ID_G723_1 ||

        par->codec_id == AV_CODEC_ID_MP2    ||

        par->codec_id == AV_CODEC_ID_MP3    ||

        par->codec_id == AV_CODEC_ID_GSM_MS) {

        bps = 0;

    } else {

        if (!(bps = av_get_bits_per_sample(par->codec_id))) {

            if (par->bits_per_coded_sample)

                bps = par->bits_per_coded_sample;

            else

                bps = 16;  

        }

    }

    if (bps != par->bits_per_coded_sample && par->bits_per_coded_sample) {

        av_log(s, AV_LOG_WARNING,

               "requested bits_per_coded_sample (%d) "

               "and actually stored (%d) differ\n",

               par->bits_per_coded_sample, bps);

    }



    if (par->codec_id == AV_CODEC_ID_MP2) {

        blkalign = (144 * par->bit_rate - 1)/par->sample_rate + 1;

    } else if (par->codec_id == AV_CODEC_ID_MP3) {

        blkalign = 576 * (par->sample_rate <= (24000 + 32000)/2 ? 1 : 2);

    } else if (par->codec_id == AV_CODEC_ID_AC3) {

        blkalign = 3840;                

    } else if (par->codec_id == AV_CODEC_ID_AAC) {

        blkalign = 768 * par->channels; 

    } else if (par->codec_id == AV_CODEC_ID_G723_1) {

        blkalign = 24;

    } else if (par->block_align != 0) { 

        blkalign = par->block_align;

    } else

        blkalign = bps * par->channels / av_gcd(8, bps);

    if (par->codec_id == AV_CODEC_ID_PCM_U8 ||

        par->codec_id == AV_CODEC_ID_PCM_S24LE ||

        par->codec_id == AV_CODEC_ID_PCM_S32LE ||

        par->codec_id == AV_CODEC_ID_PCM_F32LE ||

        par->codec_id == AV_CODEC_ID_PCM_F64LE ||

        par->codec_id == AV_CODEC_ID_PCM_S16LE) {

        bytespersec = par->sample_rate * blkalign;

    } else if (par->codec_id == AV_CODEC_ID_G723_1) {

        bytespersec = 800;

    } else {

        bytespersec = par->bit_rate / 8;

    }

    avio_wl32(pb, bytespersec); 

    avio_wl16(pb, blkalign);    

    avio_wl16(pb, bps);         

    if (par->codec_id == AV_CODEC_ID_MP3) {

        bytestream_put_le16(&riff_extradata, 1);    

        bytestream_put_le32(&riff_extradata, 2);    

        bytestream_put_le16(&riff_extradata, 1152); 

        bytestream_put_le16(&riff_extradata, 1);    

        bytestream_put_le16(&riff_extradata, 1393); 

    } else if (par->codec_id == AV_CODEC_ID_MP2) {

        

        bytestream_put_le16(&riff_extradata, 2);

        

        bytestream_put_le32(&riff_extradata, par->bit_rate);

        

        bytestream_put_le16(&riff_extradata, par->channels == 2 ? 1 : 8);

        

        bytestream_put_le16(&riff_extradata, 0);

        

        bytestream_put_le16(&riff_extradata, 1);

        

        bytestream_put_le16(&riff_extradata, 16);

        

        bytestream_put_le32(&riff_extradata, 0);

        

        bytestream_put_le32(&riff_extradata, 0);

    } else if (par->codec_id == AV_CODEC_ID_G723_1) {

        bytestream_put_le32(&riff_extradata, 0x9ace0002); 

        bytestream_put_le32(&riff_extradata, 0xaea2f732);

        bytestream_put_le16(&riff_extradata, 0xacde);

    } else if (par->codec_id == AV_CODEC_ID_GSM_MS ||

               par->codec_id == AV_CODEC_ID_ADPCM_IMA_WAV) {

        

        bytestream_put_le16(&riff_extradata, frame_size);

    } else if (par->extradata_size) {

        riff_extradata_start = par->extradata;

        riff_extradata       = par->extradata + par->extradata_size;

    }

    

    if (waveformatextensible) {

        int write_channel_mask = !(flags & FF_PUT_WAV_HEADER_SKIP_CHANNELMASK) &&

                                 (s->strict_std_compliance < FF_COMPLIANCE_NORMAL ||

                                  par->channel_layout < 0x40000);

        

        avio_wl16(pb, riff_extradata - riff_extradata_start + 22);

        

        avio_wl16(pb, bps);

        

        avio_wl32(pb, write_channel_mask ? par->channel_layout : 0);

        

        if (par->codec_id == AV_CODEC_ID_EAC3) {

            ff_put_guid(pb, ff_get_codec_guid(par->codec_id, ff_codec_wav_guids));

        } else {

        avio_wl32(pb, par->codec_tag);

        avio_wl32(pb, 0x00100000);

        avio_wl32(pb, 0xAA000080);

        avio_wl32(pb, 0x719B3800);

        }

    } else if ((flags & FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX) ||

               par->codec_tag != 0x0001  ||

               riff_extradata - riff_extradata_start) {

        

        avio_wl16(pb, riff_extradata - riff_extradata_start); 

    } 

    avio_write(pb, riff_extradata_start, riff_extradata - riff_extradata_start);

    hdrsize = avio_tell(pb) - hdrstart;

    if (hdrsize & 1) {

        hdrsize++;

        avio_w8(pb, 0);

    }



    return hdrsize;

}
int FUNC_0(AVFormatContext *VAR_0, AVIOContext *VAR_1,

                      AVCodecParameters *VAR_2, int VAR_3)

{

    int VAR_4, VAR_5, VAR_6, VAR_7;

    int VAR_8;

    int64_t hdrstart = avio_tell(VAR_1);

    int VAR_9;

    uint8_t temp[256];

    uint8_t *riff_extradata       = temp;

    uint8_t *riff_extradata_start = temp;



    if (!VAR_2->codec_tag || VAR_2->codec_tag > 0xffff)

        return -1;



    





    VAR_7 = av_get_audio_frame_duration2(VAR_2, VAR_2->block_align);



    VAR_9 = (VAR_2->channels > 2 && VAR_2->channel_layout) ||



                           VAR_2->sample_rate > 48000 ||

                           VAR_2->codec_id == AV_CODEC_ID_EAC3 ||

                           av_get_bits_per_sample(VAR_2->codec_id) > 16;



    if (VAR_9)

        avio_wl16(VAR_1, 0xfffe);

    else

        avio_wl16(VAR_1, VAR_2->codec_tag);



    avio_wl16(VAR_1, VAR_2->channels);

    avio_wl32(VAR_1, VAR_2->sample_rate);

    if (VAR_2->codec_id == AV_CODEC_ID_ATRAC3 ||

        VAR_2->codec_id == AV_CODEC_ID_G723_1 ||

        VAR_2->codec_id == AV_CODEC_ID_MP2    ||

        VAR_2->codec_id == AV_CODEC_ID_MP3    ||

        VAR_2->codec_id == AV_CODEC_ID_GSM_MS) {

        VAR_4 = 0;

    } else {

        if (!(VAR_4 = av_get_bits_per_sample(VAR_2->codec_id))) {

            if (VAR_2->bits_per_coded_sample)

                VAR_4 = VAR_2->bits_per_coded_sample;

            else

                VAR_4 = 16;  

        }

    }

    if (VAR_4 != VAR_2->bits_per_coded_sample && VAR_2->bits_per_coded_sample) {

        av_log(VAR_0, AV_LOG_WARNING,

               "requested bits_per_coded_sample (%d) "

               "and actually stored (%d) differ\n",

               VAR_2->bits_per_coded_sample, VAR_4);

    }



    if (VAR_2->codec_id == AV_CODEC_ID_MP2) {

        VAR_5 = (144 * VAR_2->bit_rate - 1)/VAR_2->sample_rate + 1;

    } else if (VAR_2->codec_id == AV_CODEC_ID_MP3) {

        VAR_5 = 576 * (VAR_2->sample_rate <= (24000 + 32000)/2 ? 1 : 2);

    } else if (VAR_2->codec_id == AV_CODEC_ID_AC3) {

        VAR_5 = 3840;                

    } else if (VAR_2->codec_id == AV_CODEC_ID_AAC) {

        VAR_5 = 768 * VAR_2->channels; 

    } else if (VAR_2->codec_id == AV_CODEC_ID_G723_1) {

        VAR_5 = 24;

    } else if (VAR_2->block_align != 0) { 

        VAR_5 = VAR_2->block_align;

    } else

        VAR_5 = VAR_4 * VAR_2->channels / av_gcd(8, VAR_4);

    if (VAR_2->codec_id == AV_CODEC_ID_PCM_U8 ||

        VAR_2->codec_id == AV_CODEC_ID_PCM_S24LE ||

        VAR_2->codec_id == AV_CODEC_ID_PCM_S32LE ||

        VAR_2->codec_id == AV_CODEC_ID_PCM_F32LE ||

        VAR_2->codec_id == AV_CODEC_ID_PCM_F64LE ||

        VAR_2->codec_id == AV_CODEC_ID_PCM_S16LE) {

        VAR_6 = VAR_2->sample_rate * VAR_5;

    } else if (VAR_2->codec_id == AV_CODEC_ID_G723_1) {

        VAR_6 = 800;

    } else {

        VAR_6 = VAR_2->bit_rate / 8;

    }

    avio_wl32(VAR_1, VAR_6); 

    avio_wl16(VAR_1, VAR_5);    

    avio_wl16(VAR_1, VAR_4);         

    if (VAR_2->codec_id == AV_CODEC_ID_MP3) {

        bytestream_put_le16(&riff_extradata, 1);    

        bytestream_put_le32(&riff_extradata, 2);    

        bytestream_put_le16(&riff_extradata, 1152); 

        bytestream_put_le16(&riff_extradata, 1);    

        bytestream_put_le16(&riff_extradata, 1393); 

    } else if (VAR_2->codec_id == AV_CODEC_ID_MP2) {

        

        bytestream_put_le16(&riff_extradata, 2);

        

        bytestream_put_le32(&riff_extradata, VAR_2->bit_rate);

        

        bytestream_put_le16(&riff_extradata, VAR_2->channels == 2 ? 1 : 8);

        

        bytestream_put_le16(&riff_extradata, 0);

        

        bytestream_put_le16(&riff_extradata, 1);

        

        bytestream_put_le16(&riff_extradata, 16);

        

        bytestream_put_le32(&riff_extradata, 0);

        

        bytestream_put_le32(&riff_extradata, 0);

    } else if (VAR_2->codec_id == AV_CODEC_ID_G723_1) {

        bytestream_put_le32(&riff_extradata, 0x9ace0002); 

        bytestream_put_le32(&riff_extradata, 0xaea2f732);

        bytestream_put_le16(&riff_extradata, 0xacde);

    } else if (VAR_2->codec_id == AV_CODEC_ID_GSM_MS ||

               VAR_2->codec_id == AV_CODEC_ID_ADPCM_IMA_WAV) {

        

        bytestream_put_le16(&riff_extradata, VAR_7);

    } else if (VAR_2->extradata_size) {

        riff_extradata_start = VAR_2->extradata;

        riff_extradata       = VAR_2->extradata + VAR_2->extradata_size;

    }

    

    if (VAR_9) {

        int VAR_10 = !(VAR_3 & FF_PUT_WAV_HEADER_SKIP_CHANNELMASK) &&

                                 (VAR_0->strict_std_compliance < FF_COMPLIANCE_NORMAL ||

                                  VAR_2->channel_layout < 0x40000);

        

        avio_wl16(VAR_1, riff_extradata - riff_extradata_start + 22);

        

        avio_wl16(VAR_1, VAR_4);

        

        avio_wl32(VAR_1, VAR_10 ? VAR_2->channel_layout : 0);

        

        if (VAR_2->codec_id == AV_CODEC_ID_EAC3) {

            ff_put_guid(VAR_1, ff_get_codec_guid(VAR_2->codec_id, ff_codec_wav_guids));

        } else {

        avio_wl32(VAR_1, VAR_2->codec_tag);

        avio_wl32(VAR_1, 0x00100000);

        avio_wl32(VAR_1, 0xAA000080);

        avio_wl32(VAR_1, 0x719B3800);

        }

    } else if ((VAR_3 & FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX) ||

               VAR_2->codec_tag != 0x0001  ||

               riff_extradata - riff_extradata_start) {

        

        avio_wl16(VAR_1, riff_extradata - riff_extradata_start); 

    } 

    avio_write(VAR_1, riff_extradata_start, riff_extradata - riff_extradata_start);

    VAR_8 = avio_tell(VAR_1) - hdrstart;

    if (VAR_8 & 1) {

        VAR_8++;

        avio_w8(VAR_1, 0);

    }



    return VAR_8;

}
int FUNC_0(AVFormatContext *VAR_0, AVIOContext *VAR_1,
AVCodecParameters *VAR_2, int VAR_3)
{ int VAR_4, VAR_5, VAR_6, VAR_7; int VAR_8; int64_t hdrstart = avio_tell(VAR_1); int VAR_9; uint8_t temp[256]; uint8_t *riff_extradata       = temp; uint8_t *riff_extradata_start = temp; if (!VAR_2->codec_tag || VAR_2->codec_tag > 0xffff)
return -1; VAR_7 = av_get_audio_frame_duration2(VAR_2, VAR_2->block_align); VAR_9 = (VAR_2->channels > 2 && VAR_2->channel_layout) ||
VAR_2->sample_rate > 48000 ||
VAR_2->codec_id == AV_CODEC_ID_EAC3 ||
av_get_bits_per_sample(VAR_2->codec_id) > 16; if (VAR_9)
avio_wl16(VAR_1, 0xfffe); else
avio_wl16(VAR_1, VAR_2->codec_tag); avio_wl16(VAR_1, VAR_2->channels); avio_wl32(VAR_1, VAR_2->sample_rate); if (VAR_2->codec_id == AV_CODEC_ID_ATRAC3 ||
VAR_2->codec_id == AV_CODEC_ID_G723_1 ||
VAR_2->codec_id == AV_CODEC_ID_MP2    ||
VAR_2->codec_id == AV_CODEC_ID_MP3    ||
VAR_2->codec_id == AV_CODEC_ID_GSM_MS) { VAR_4 = 0; } else { if (!(VAR_4 = av_get_bits_per_sample(VAR_2->codec_id))) { if (VAR_2->bits_per_coded_sample)
VAR_4 = VAR_2->bits_per_coded_sample; else
VAR_4 = 16; } } if (VAR_4 != VAR_2->bits_per_coded_sample && VAR_2->bits_per_coded_sample) { av_log(VAR_0, AV_LOG_WARNING,
"requested bits_per_coded_sample (%d) "
"and actually stored (%d) differ\n",
VAR_2->bits_per_coded_sample, VAR_4); } if (VAR_2->codec_id == AV_CODEC_ID_MP2) { VAR_5 = (144 * VAR_2->bit_rate - 1)/VAR_2->sample_rate + 1; } else if (VAR_2->codec_id == AV_CODEC_ID_MP3) { VAR_5 = 576 * (VAR_2->sample_rate <= (24000 + 32000)/2 ? 1 : 2); } else if (VAR_2->codec_id == AV_CODEC_ID_AC3) { VAR_5 = 3840; } else if (VAR_2->codec_id == AV_CODEC_ID_AAC) { VAR_5 = 768 * VAR_2->channels; } else if (VAR_2->codec_id == AV_CODEC_ID_G723_1) { VAR_5 = 24; } else if (VAR_2->block_align != 0) { VAR_5 = VAR_2->block_align; } else VAR_5 = VAR_4 * VAR_2->channels / av_gcd(8, VAR_4); if (VAR_2->codec_id == AV_CODEC_ID_PCM_U8 ||
VAR_2->codec_id == AV_CODEC_ID_PCM_S24LE ||
VAR_2->codec_id == AV_CODEC_ID_PCM_S32LE ||
VAR_2->codec_id == AV_CODEC_ID_PCM_F32LE ||
VAR_2->codec_id == AV_CODEC_ID_PCM_F64LE ||
VAR_2->codec_id == AV_CODEC_ID_PCM_S16LE) { VAR_6 = VAR_2->sample_rate * VAR_5; } else if (VAR_2->codec_id == AV_CODEC_ID_G723_1) { VAR_6 = 800; } else { VAR_6 = VAR_2->bit_rate / 8; } avio_wl32(VAR_1, VAR_6); avio_wl16(VAR_1, VAR_5); avio_wl16(VAR_1, VAR_4); if (VAR_2->codec_id == AV_CODEC_ID_MP3) { bytestream_put_le16(&riff_extradata, 1); bytestream_put_le32(&riff_extradata, 2); bytestream_put_le16(&riff_extradata, 1152); bytestream_put_le16(&riff_extradata, 1); bytestream_put_le16(&riff_extradata, 1393); } else if (VAR_2->codec_id == AV_CODEC_ID_MP2) { bytestream_put_le16(&riff_extradata, 2); bytestream_put_le32(&riff_extradata, VAR_2->bit_rate); bytestream_put_le16(&riff_extradata, VAR_2->channels == 2 ? 1 : 8); bytestream_put_le16(&riff_extradata, 0); bytestream_put_le16(&riff_extradata, 1); bytestream_put_le16(&riff_extradata, 16); bytestream_put_le32(&riff_extradata, 0); bytestream_put_le32(&riff_extradata, 0); } else if (VAR_2->codec_id == AV_CODEC_ID_G723_1) { bytestream_put_le32(&riff_extradata, 0x9ace0002); bytestream_put_le32(&riff_extradata, 0xaea2f732); bytestream_put_le16(&riff_extradata, 0xacde); } else if (VAR_2->codec_id == AV_CODEC_ID_GSM_MS || VAR_2->codec_id == AV_CODEC_ID_ADPCM_IMA_WAV) { bytestream_put_le16(&riff_extradata, VAR_7); } else if (VAR_2->extradata_size) { riff_extradata_start = VAR_2->extradata; riff_extradata       = VAR_2->extradata + VAR_2->extradata_size; } if (VAR_9) { int VAR_10 = !(VAR_3 & FF_PUT_WAV_HEADER_SKIP_CHANNELMASK) &&
(VAR_0->strict_std_compliance < FF_COMPLIANCE_NORMAL ||
VAR_2->channel_layout < 0x40000); avio_wl16(VAR_1, riff_extradata - riff_extradata_start + 22); avio_wl16(VAR_1, VAR_4); avio_wl32(VAR_1, VAR_10 ? VAR_2->channel_layout : 0); if (VAR_2->codec_id == AV_CODEC_ID_EAC3) { ff_put_guid(VAR_1, ff_get_codec_guid(VAR_2->codec_id, ff_codec_wav_guids)); } else { avio_wl32(VAR_1, VAR_2->codec_tag); avio_wl32(VAR_1, 0x00100000); avio_wl32(VAR_1, 0xAA000080); avio_wl32(VAR_1, 0x719B3800); } } else if ((VAR_3 & FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX) || VAR_2->codec_tag != 0x0001  ||
riff_extradata - riff_extradata_start) { avio_wl16(VAR_1, riff_extradata - riff_extradata_start); } avio_write(VAR_1, riff_extradata_start, riff_extradata - riff_extradata_start); VAR_8 = avio_tell(VAR_1) - hdrstart; if (VAR_8 & 1) { VAR_8++; avio_w8(VAR_1, 0); } return VAR_8; }