diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2001-09-23 17:16:51 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2001-09-23 17:16:51 +0000 |
commit | a96b68b717ee7c93833eb7c07900456e055ef29d (patch) | |
tree | 0a1cd1f7e88f9a02bd11ccf80b044d70d21de97b /libavcodec/utils.c | |
parent | a56c66a7efb603055381a916b1c7f05bc0b82275 (diff) | |
download | ffmpeg-a96b68b717ee7c93833eb7c07900456e055ef29d.tar.gz |
added pcm codecs
Originally committed as revision 140 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/utils.c')
-rw-r--r-- | libavcodec/utils.c | 56 |
1 files changed, 39 insertions, 17 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index dd397af282..d93c8d9a23 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -205,6 +205,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) const char *codec_name; AVCodec *p; char buf1[32]; + int bitrate; if (encode) p = avcodec_find_encoder(enc->codec_id); @@ -245,6 +246,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) 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 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) 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 @@ void avcodec_register_all(void) register_avcodec(&mpeg4_encoder); register_avcodec(&msmpeg4_encoder); #endif /* CONFIG_ENCODERS */ - register_avcodec(&pcm_codec); register_avcodec(&rawvideo_codec); /* decoders */ @@ -382,13 +401,28 @@ void avcodec_register_all(void) 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 @@ static int encode_frame(AVCodecContext *avctx, 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, |