mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-16 04:11:12 +00:00
av_get_bits_per_sample and due simplifications
Originally committed as revision 5661 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
29c5cdcaec
commit
ac3e183403
@ -2499,6 +2499,10 @@ void avcodec_default_free_buffers(AVCodecContext *s);
|
||||
*/
|
||||
char av_get_pict_type_char(int pict_type);
|
||||
|
||||
/**
|
||||
* returns codec bits per sample
|
||||
*/
|
||||
int av_get_bits_per_sample(enum CodecID codec_id);
|
||||
|
||||
/* frame parsing */
|
||||
typedef struct AVCodecParserContext {
|
||||
|
@ -1304,6 +1304,34 @@ char av_get_pict_type_char(int pict_type){
|
||||
}
|
||||
}
|
||||
|
||||
int av_get_bits_per_sample(enum CodecID codec_id){
|
||||
switch(codec_id){
|
||||
case CODEC_ID_PCM_ALAW:
|
||||
case CODEC_ID_PCM_MULAW:
|
||||
case CODEC_ID_PCM_S8:
|
||||
case CODEC_ID_PCM_U8:
|
||||
return 8;
|
||||
case CODEC_ID_PCM_S16BE:
|
||||
case CODEC_ID_PCM_S16LE:
|
||||
case CODEC_ID_PCM_U16BE:
|
||||
case CODEC_ID_PCM_U16LE:
|
||||
return 16;
|
||||
case CODEC_ID_PCM_S24DAUD:
|
||||
case CODEC_ID_PCM_S24BE:
|
||||
case CODEC_ID_PCM_S24LE:
|
||||
case CODEC_ID_PCM_U24BE:
|
||||
case CODEC_ID_PCM_U24LE:
|
||||
return 24;
|
||||
case CODEC_ID_PCM_S32BE:
|
||||
case CODEC_ID_PCM_S32LE:
|
||||
case CODEC_ID_PCM_U32BE:
|
||||
case CODEC_ID_PCM_U32LE:
|
||||
return 32;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* av_log API */
|
||||
|
||||
static int av_log_level = AV_LOG_INFO;
|
||||
|
@ -1463,27 +1463,7 @@ static int mov_write_header(AVFormatContext *s)
|
||||
}else if(st->codec->codec_type == CODEC_TYPE_AUDIO){
|
||||
track->tag = mov_find_audio_codec_tag(s, track);
|
||||
av_set_pts_info(st, 64, 1, st->codec->sample_rate);
|
||||
|
||||
switch (st->codec->codec_id) {
|
||||
case CODEC_ID_PCM_MULAW:
|
||||
case CODEC_ID_PCM_ALAW:
|
||||
track->sampleSize = 1 * st->codec->channels;
|
||||
break;
|
||||
case CODEC_ID_PCM_S16BE:
|
||||
case CODEC_ID_PCM_S16LE:
|
||||
track->sampleSize = 2 * st->codec->channels;
|
||||
break;
|
||||
case CODEC_ID_PCM_S24BE:
|
||||
case CODEC_ID_PCM_S24LE:
|
||||
track->sampleSize = 3 * st->codec->channels;
|
||||
break;
|
||||
case CODEC_ID_PCM_S32BE:
|
||||
case CODEC_ID_PCM_S32LE:
|
||||
track->sampleSize = 4 * st->codec->channels;
|
||||
break;
|
||||
default:
|
||||
track->sampleSize = 0;
|
||||
}
|
||||
track->sampleSize = (av_get_bits_per_sample(st->codec->codec_id) >> 3) * st->codec->channels;
|
||||
}
|
||||
track->language = ff_mov_iso639_to_lang(st->language, mov->mode != MODE_MOV);
|
||||
track->mode = mov->mode;
|
||||
|
@ -653,48 +653,17 @@ static int get_audio_frame_size(AVCodecContext *enc, int size)
|
||||
int frame_size;
|
||||
|
||||
if (enc->frame_size <= 1) {
|
||||
/* specific hack for pcm codecs because no frame size is
|
||||
provided */
|
||||
switch(enc->codec_id) {
|
||||
case CODEC_ID_PCM_S32LE:
|
||||
case CODEC_ID_PCM_S32BE:
|
||||
case CODEC_ID_PCM_U32LE:
|
||||
case CODEC_ID_PCM_U32BE:
|
||||
int bits_per_sample = av_get_bits_per_sample(enc->codec_id);
|
||||
|
||||
if (bits_per_sample) {
|
||||
if (enc->channels == 0)
|
||||
return -1;
|
||||
frame_size = size / (4 * enc->channels);
|
||||
break;
|
||||
case CODEC_ID_PCM_S24LE:
|
||||
case CODEC_ID_PCM_S24BE:
|
||||
case CODEC_ID_PCM_U24LE:
|
||||
case CODEC_ID_PCM_U24BE:
|
||||
case CODEC_ID_PCM_S24DAUD:
|
||||
if (enc->channels == 0)
|
||||
return -1;
|
||||
frame_size = size / (3 * enc->channels);
|
||||
break;
|
||||
case CODEC_ID_PCM_S16LE:
|
||||
case CODEC_ID_PCM_S16BE:
|
||||
case CODEC_ID_PCM_U16LE:
|
||||
case CODEC_ID_PCM_U16BE:
|
||||
if (enc->channels == 0)
|
||||
return -1;
|
||||
frame_size = size / (2 * enc->channels);
|
||||
break;
|
||||
case CODEC_ID_PCM_S8:
|
||||
case CODEC_ID_PCM_U8:
|
||||
case CODEC_ID_PCM_MULAW:
|
||||
case CODEC_ID_PCM_ALAW:
|
||||
if (enc->channels == 0)
|
||||
return -1;
|
||||
frame_size = size / (enc->channels);
|
||||
break;
|
||||
default:
|
||||
frame_size = size / ((bits_per_sample >> 3) * enc->channels);
|
||||
} else {
|
||||
/* used for example by ADPCM codecs */
|
||||
if (enc->bit_rate == 0)
|
||||
return -1;
|
||||
frame_size = (size * 8 * enc->sample_rate) / enc->bit_rate;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
frame_size = enc->frame_size;
|
||||
|
Loading…
Reference in New Issue
Block a user