use codec_tag for encoding too

Originally committed as revision 2125 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Michael Niedermayer 22 years ago
parent f818862633
commit bd5a60201e
  1. 2
      libavcodec/avcodec.h
  2. 14
      libavformat/asf.c
  3. 9
      libavformat/au.c
  4. 10
      libavformat/wav.c

@ -611,7 +611,7 @@ typedef struct AVCodecContext {
/** /**
* fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
* this is used to workaround some encoder bugs * this is used to workaround some encoder bugs
* - encoding: unused * - encoding: set by user, if not then the default based on codec_id will be used
* - decoding: set by user, will be converted to upper case by lavc during init * - decoding: set by user, will be converted to upper case by lavc during init
*/ */
unsigned int codec_tag; unsigned int codec_tag;

@ -411,13 +411,23 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
put_le16(pb, asf->streams[n].num); put_le16(pb, asf->streams[n].num);
put_str16(pb, p ? p->name : enc->codec_name); put_str16(pb, p ? p->name : enc->codec_name);
put_le16(pb, 0); /* no parameters */ put_le16(pb, 0); /* no parameters */
/* id */ /* id */
if (enc->codec_type == CODEC_TYPE_AUDIO) { if (enc->codec_type == CODEC_TYPE_AUDIO) {
put_le16(pb, 2); put_le16(pb, 2);
put_le16(pb, codec_get_tag(codec_wav_tags, enc->codec_id)); 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);
} else { } else {
put_le16(pb, 4); put_le16(pb, 4);
put_le32(pb, codec_get_tag(codec_bmp_tags, enc->codec_id)); if(!enc->codec_tag)
enc->codec_tag = codec_get_tag(codec_bmp_tags, enc->codec_id);
if(!enc->codec_tag)
return -1;
put_le32(pb, enc->codec_tag);
} }
} }
end_header(pb, hpos); end_header(pb, hpos);

@ -42,15 +42,14 @@ static const CodecTag codec_au_tags[] = {
/* AUDIO_FILE header */ /* AUDIO_FILE header */
static int put_au_header(ByteIOContext *pb, AVCodecContext *enc) static int put_au_header(ByteIOContext *pb, AVCodecContext *enc)
{ {
int tag; if(!enc->codec_tag)
enc->codec_tag = codec_get_tag(codec_au_tags, enc->codec_id);
tag = codec_get_tag(codec_au_tags, enc->codec_id); if(!enc->codec_tag)
if (tag == 0)
return -1; return -1;
put_tag(pb, ".snd"); /* magic number */ put_tag(pb, ".snd"); /* magic number */
put_be32(pb, 24); /* header size */ put_be32(pb, 24); /* header size */
put_be32(pb, AU_UNKOWN_SIZE); /* data size */ put_be32(pb, AU_UNKOWN_SIZE); /* data size */
put_be32(pb, (uint32_t)tag); /* codec ID */ put_be32(pb, (uint32_t)enc->codec_tag); /* codec ID */
put_be32(pb, enc->sample_rate); put_be32(pb, enc->sample_rate);
put_be32(pb, (uint32_t)enc->channels); put_be32(pb, (uint32_t)enc->channels);
return 0; return 0;

@ -38,13 +38,15 @@ const CodecTag codec_wav_tags[] = {
/* returns the size or -1 on error */ /* returns the size or -1 on error */
int put_wav_header(ByteIOContext *pb, AVCodecContext *enc) int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
{ {
int tag, bps, blkalign, bytespersec; int bps, blkalign, bytespersec;
int hdrsize = 18; int hdrsize = 18;
tag = codec_get_tag(codec_wav_tags, enc->codec_id); if(!enc->codec_tag)
if (tag == 0) enc->codec_tag = codec_get_tag(codec_wav_tags, enc->codec_id);
if(!enc->codec_tag)
return -1; return -1;
put_le16(pb, tag);
put_le16(pb, enc->codec_tag);
put_le16(pb, enc->channels); put_le16(pb, enc->channels);
put_le32(pb, enc->sample_rate); put_le32(pb, enc->sample_rate);
if (enc->codec_id == CODEC_ID_PCM_U8 || if (enc->codec_id == CODEC_ID_PCM_U8 ||

Loading…
Cancel
Save