diff utils.c @ 92:1d3eb6cdc6b5 libavcodec

added pcm codecs
author glantau
date Sun, 23 Sep 2001 17:16:51 +0000
parents db55e2d3b380
children 7e263a256a6f
line wrap: on
line diff
--- a/utils.c	Fri Sep 21 21:30:15 2001 +0000
+++ b/utils.c	Sun Sep 23 17:16:51 2001 +0000
@@ -205,6 +205,7 @@
     const char *codec_name;
     AVCodec *p;
     char buf1[32];
+    int bitrate;
 
     if (encode)
         p = avcodec_find_encoder(enc->codec_id);
@@ -245,6 +246,7 @@
                      enc->width, enc->height, 
                      (float)enc->frame_rate / FRAME_RATE_BASE);
         }
+        bitrate = enc->bit_rate;
         break;
     case CODEC_TYPE_AUDIO:
         snprintf(buf, buf_size,
@@ -256,13 +258,31 @@
                      enc->sample_rate,
                      enc->channels == 2 ? "stereo" : "mono");
         }
+        /* for PCM codecs, compute bitrate directly */
+        switch(enc->codec_id) {
+        case CODEC_ID_PCM_S16LE:
+        case CODEC_ID_PCM_S16BE:
+        case CODEC_ID_PCM_U16LE:
+        case CODEC_ID_PCM_U16BE:
+            bitrate = enc->sample_rate * 16;
+            break;
+        case CODEC_ID_PCM_S8:
+        case CODEC_ID_PCM_U8:
+        case CODEC_ID_PCM_ALAW:
+        case CODEC_ID_PCM_MULAW:
+            bitrate = enc->sample_rate * 8;
+            break;
+        default:
+            bitrate = enc->bit_rate;
+            break;
+        }
         break;
     default:
         abort();
     }
-    if (enc->bit_rate != 0) {
+    if (bitrate != 0) {
         snprintf(buf + strlen(buf), buf_size - strlen(buf), 
-                 ", %d kb/s", enc->bit_rate / 1000);
+                 ", %d kb/s", bitrate / 1000);
     }
 }
 
@@ -370,7 +390,6 @@
     register_avcodec(&mpeg4_encoder);
     register_avcodec(&msmpeg4_encoder);
 #endif /* CONFIG_ENCODERS */
-    register_avcodec(&pcm_codec);
     register_avcodec(&rawvideo_codec);
 
     /* decoders */
@@ -382,13 +401,28 @@
     register_avcodec(&h263i_decoder);
     register_avcodec(&rv10_decoder);
     register_avcodec(&mjpeg_decoder);
-//#ifdef CONFIG_MPGLIB
     register_avcodec(&mp3_decoder);
-//#endif
 #ifdef CONFIG_AC3
     register_avcodec(&ac3_decoder);
 #endif
 #endif /* CONFIG_DECODERS */
+
+    /* pcm codecs */
+
+#define PCM_CODEC(id, name) \
+    register_avcodec(& name ## _encoder); \
+    register_avcodec(& name ## _decoder); \
+
+PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
+PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
+PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
+PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
+PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
+PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
+PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
+PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
+
+#undef PCM_CODEC
 }
 
 static int encode_init(AVCodecContext *s)
@@ -409,18 +443,6 @@
     return -1;
 }
 
-/* dummy pcm codec */
-AVCodec pcm_codec = {
-    "pcm",
-    CODEC_TYPE_AUDIO,
-    CODEC_ID_PCM,
-    0,
-    encode_init,
-    encode_frame,
-    NULL,
-    decode_frame,
-};
-
 AVCodec rawvideo_codec = {
     "rawvideo",
     CODEC_TYPE_VIDEO,