-#include "avi.h"
-
-const CodecTag codec_wav_tags[] = {
- { CODEC_ID_MP2, 0x50 },
- { CODEC_ID_MP3, 0x55 },
- { CODEC_ID_AC3, 0x2000 },
- { CODEC_ID_PCM_S16LE, 0x01 },
- { CODEC_ID_PCM_U8, 0x01 }, /* must come after s16le in this list */
- { CODEC_ID_PCM_ALAW, 0x06 },
- { CODEC_ID_PCM_MULAW, 0x07 },
- { CODEC_ID_ADPCM_MS, 0x02 },
- { CODEC_ID_ADPCM_IMA_WAV, 0x11 },
- { CODEC_ID_ADPCM_G726, 0x45 },
- { CODEC_ID_ADPCM_IMA_DK4, 0x61 }, /* rogue format number */
- { CODEC_ID_ADPCM_IMA_DK3, 0x62 }, /* rogue format number */
- { CODEC_ID_WMAV1, 0x160 },
- { CODEC_ID_WMAV2, 0x161 },
- { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id?
- { 0, 0 },
-};
-
-#ifdef CONFIG_ENCODERS
-/* WAVEFORMATEX header */
-/* returns the size or -1 on error */
-int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
-{
- int bps, blkalign, bytespersec;
- int hdrsize = 18;
-
- if(!enc->codec_tag)
- enc->codec_tag = codec_get_tag(codec_wav_tags, enc->codec_id);
- if(!enc->codec_tag)
- return -1;
-
- put_le16(pb, enc->codec_tag);
- put_le16(pb, enc->channels);
- put_le32(pb, enc->sample_rate);
- if (enc->codec_id == CODEC_ID_PCM_U8 ||
- enc->codec_id == CODEC_ID_PCM_ALAW ||
- enc->codec_id == CODEC_ID_PCM_MULAW) {
- bps = 8;
- } else if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) {
- bps = 0;
- } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id == CODEC_ID_ADPCM_MS) {
- bps = 4;
- } else {
- bps = 16;
- }
-
- if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) {
- blkalign = 1;
- //blkalign = 144 * enc->bit_rate/enc->sample_rate;
- } else if (enc->block_align != 0) { /* specified by the codec */
- blkalign = enc->block_align;
- } else
- blkalign = enc->channels*bps >> 3;
- if (enc->codec_id == CODEC_ID_PCM_U8 ||
- enc->codec_id == CODEC_ID_PCM_S16LE) {
- bytespersec = enc->sample_rate * blkalign;
- } else {
- bytespersec = enc->bit_rate / 8;
- }
- put_le32(pb, bytespersec); /* bytes per second */
- put_le16(pb, blkalign); /* block align */
- put_le16(pb, bps); /* bits per sample */
- 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 */
- put_le16(pb, 1152); /* nBlockSize */
- 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 */
- put_le16(pb, enc->channels == 2 ? 1 : 8); /* fwHeadMode */
- put_le16(pb, 0); /* fwHeadModeExt */
- put_le16(pb, 1); /* wHeadEmphasis */
- put_le16(pb, 16); /* fwHeadFlags */
- put_le32(pb, 0); /* dwPTSLow */
- put_le32(pb, 0); /* dwPTSHigh */
- } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV) {
- put_le16(pb, 2); /* wav_extra_size */
- hdrsize += 2;
- put_le16(pb, ((enc->block_align - 4 * enc->channels) / (4 * enc->channels)) * 8 + 1); /* wSamplesPerBlock */
- } else {
- 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);
- }
- }