]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/flvenc.c
try to guess the codec for imag2pipe too
[ffmpeg] / libavformat / flvenc.c
index 3bef887b0e5cff66d42030ecab58ca90928a365c..7f86036e736126d8cffb57d8dc044c56a9f3f06d 100644 (file)
@@ -34,6 +34,45 @@ static void put_be24(ByteIOContext *pb, int value)
     put_byte(pb, (value>> 0) & 0xFF );
 }
 
+static int get_audio_flags(AVCodecContext *enc){
+    int flags = 0x02;
+
+    switch (enc->sample_rate) {
+        case    44100:
+            flags |= 0x0C;
+            break;
+        case    22050:
+            flags |= 0x08;
+            break;
+        case    11025:
+            flags |= 0x04;
+            break;
+        case     8000: //nellymoser only
+        case     5512: //not mp3
+            flags |= 0x00;
+            break;
+        default:
+            return -1;
+    }
+
+    if (enc->channels > 1) {
+        flags |= 0x01;
+    }
+    
+    switch(enc->codec_id){
+    case CODEC_ID_MP3:
+        flags |= 0x20;
+        break;
+    case 0:
+        flags |= enc->codec_tag<<4;
+        break;
+    default:
+        return -1;
+    }
+    
+    return flags;
+}
+
 static int flv_write_header(AVFormatContext *s)
 {
     ByteIOContext *pb = &s->pb;
@@ -60,6 +99,8 @@ static int flv_write_header(AVFormatContext *s)
             put_be32(pb,11); // size
             flv->reserved=5;
         }
+        if(enc->codec_type == CODEC_TYPE_AUDIO && get_audio_flags(enc)<0)
+            return -1;
     }
 
     return 0;
@@ -99,41 +140,8 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
         flv->hasVideo = 1;
     } else {
         assert(enc->codec_type == CODEC_TYPE_AUDIO);
-        flags = 0x02;
-
-        switch (enc->sample_rate) {
-            case    44100:
-                flags |= 0x0C;
-                break;
-            case    22050:
-                flags |= 0x08;
-                break;
-            case    11025:
-                flags |= 0x04;
-                break;
-            case     8000: //nellymoser only
-            case     5512: //not mp3
-                flags |= 0x00;
-                break;
-            default:
-                assert(0);
-        }
-
-        if (enc->channels > 1) {
-            flags |= 0x01;
-        }
+        flags = get_audio_flags(enc);
         
-        switch(enc->codec_id){
-        case CODEC_ID_MP3:
-            flags |= 0x20;
-            break;
-        case 0:
-            flags |= enc->codec_tag<<4;
-            break;
-        default:
-            assert(0);
-        }
-
         assert(size);
 
         put_byte(pb, 8);