use codec_tag for encoding too
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 18 Aug 2003 09:20:02 +0000 (09:20 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 18 Aug 2003 09:20:02 +0000 (09:20 +0000)
Originally committed as revision 2125 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/avcodec.h
libavformat/asf.c
libavformat/au.c
libavformat/wav.c

index e0f87c7..4872054 100644 (file)
@@ -611,7 +611,7 @@ typedef struct AVCodecContext {
     /**
      * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
      * 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
      */
     unsigned int codec_tag;
index 1712f8f..c05f28e 100644 (file)
@@ -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_str16(pb, p ? p->name : enc->codec_name);
         put_le16(pb, 0); /* no parameters */
+        
+        
         /* id */
         if (enc->codec_type == CODEC_TYPE_AUDIO) {
             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 {
             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);
index 4a8353c..b560437 100644 (file)
@@ -42,15 +42,14 @@ static const CodecTag codec_au_tags[] = {
 /* AUDIO_FILE header */
 static int put_au_header(ByteIOContext *pb, AVCodecContext *enc)
 {
-    int tag;
-
-    tag = codec_get_tag(codec_au_tags, enc->codec_id);
-    if (tag == 0)
+    if(!enc->codec_tag)
+       enc->codec_tag = codec_get_tag(codec_au_tags, enc->codec_id);
+    if(!enc->codec_tag)
         return -1;
     put_tag(pb, ".snd");       /* magic number */
     put_be32(pb, 24);           /* header 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, (uint32_t)enc->channels);
     return 0;
index f8dd6c4..df4203f 100644 (file)
@@ -38,13 +38,15 @@ const CodecTag codec_wav_tags[] = {
 /* returns the size or -1 on error */
 int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
 {
-    int tag, bps, blkalign, bytespersec;
+    int bps, blkalign, bytespersec;
     int hdrsize = 18;
 
-    tag = codec_get_tag(codec_wav_tags, enc->codec_id);
-    if (tag == 0)
+    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, tag);
+
+    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 ||