mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2025-10-30 04:02:04 +08:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: (31 commits) cdxl demux: do not create packets with uninitialized data at EOF. Replace computations of remaining bits with calls to get_bits_left(). amrnb/amrwb: Remove get_bits usage. cosmetics: reindent avformat: do not require a pixel/sample format if there is no decoder avformat: do not fill-in audio packet duration in compute_pkt_fields() lavf: Use av_get_audio_frame_duration() in get_audio_frame_size() dca_parser: parse the sample rate and frame durations libspeexdec: do not set AVCodecContext.frame_size libopencore-amr: do not set AVCodecContext.frame_size alsdec: do not set AVCodecContext.frame_size siff: do not set AVCodecContext.frame_size amr demuxer: do not set AVCodecContext.frame_size. aiffdec: do not set AVCodecContext.frame_size mov: do not set AVCodecContext.frame_size ape: do not set AVCodecContext.frame_size. rdt: remove workaround for infinite loop with aac avformat: do not require frame_size in avformat_find_stream_info() for CELT avformat: do not require frame_size in avformat_find_stream_info() for MP1/2/3 avformat: do not require frame_size in avformat_find_stream_info() for AAC ... Conflicts: doc/APIchanges libavcodec/Makefile libavcodec/avcodec.h libavcodec/h264.c libavcodec/h264_ps.c libavcodec/utils.c libavcodec/version.h libavcodec/x86/dsputil_mmx.c libavformat/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -1838,21 +1838,15 @@ void avcodec_default_free_buffers(AVCodecContext *avctx)
|
||||
}
|
||||
}
|
||||
|
||||
int av_get_bits_per_sample(enum CodecID codec_id){
|
||||
int av_get_exact_bits_per_sample(enum CodecID codec_id)
|
||||
{
|
||||
switch(codec_id){
|
||||
case CODEC_ID_ADPCM_SBPRO_2:
|
||||
return 2;
|
||||
case CODEC_ID_ADPCM_SBPRO_3:
|
||||
return 3;
|
||||
case CODEC_ID_ADPCM_SBPRO_4:
|
||||
case CODEC_ID_ADPCM_CT:
|
||||
case CODEC_ID_ADPCM_IMA_APC:
|
||||
case CODEC_ID_ADPCM_IMA_WAV:
|
||||
case CODEC_ID_ADPCM_IMA_QT:
|
||||
case CODEC_ID_ADPCM_SWF:
|
||||
case CODEC_ID_ADPCM_MS:
|
||||
case CODEC_ID_ADPCM_YAMAHA:
|
||||
case CODEC_ID_ADPCM_IMA_EA_SEAD:
|
||||
case CODEC_ID_ADPCM_IMA_WS:
|
||||
case CODEC_ID_ADPCM_G722:
|
||||
case CODEC_ID_ADPCM_YAMAHA:
|
||||
return 4;
|
||||
case CODEC_ID_PCM_ALAW:
|
||||
case CODEC_ID_PCM_MULAW:
|
||||
@@ -1908,6 +1902,166 @@ enum CodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
|
||||
return map[fmt][be];
|
||||
}
|
||||
|
||||
int av_get_bits_per_sample(enum CodecID codec_id)
|
||||
{
|
||||
switch (codec_id) {
|
||||
case CODEC_ID_ADPCM_SBPRO_2:
|
||||
return 2;
|
||||
case CODEC_ID_ADPCM_SBPRO_3:
|
||||
return 3;
|
||||
case CODEC_ID_ADPCM_SBPRO_4:
|
||||
case CODEC_ID_ADPCM_IMA_WAV:
|
||||
case CODEC_ID_ADPCM_IMA_QT:
|
||||
case CODEC_ID_ADPCM_SWF:
|
||||
case CODEC_ID_ADPCM_MS:
|
||||
return 4;
|
||||
default:
|
||||
return av_get_exact_bits_per_sample(codec_id);
|
||||
}
|
||||
}
|
||||
|
||||
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
|
||||
{
|
||||
int id, sr, ch, ba, tag, bps;
|
||||
|
||||
id = avctx->codec_id;
|
||||
sr = avctx->sample_rate;
|
||||
ch = avctx->channels;
|
||||
ba = avctx->block_align;
|
||||
tag = avctx->codec_tag;
|
||||
bps = av_get_exact_bits_per_sample(avctx->codec_id);
|
||||
|
||||
/* codecs with an exact constant bits per sample */
|
||||
if (bps > 0 && ch > 0 && frame_bytes > 0)
|
||||
return (frame_bytes * 8) / (bps * ch);
|
||||
bps = avctx->bits_per_coded_sample;
|
||||
|
||||
/* codecs with a fixed packet duration */
|
||||
switch (id) {
|
||||
case CODEC_ID_ADPCM_ADX: return 32;
|
||||
case CODEC_ID_ADPCM_IMA_QT: return 64;
|
||||
case CODEC_ID_ADPCM_EA_XAS: return 128;
|
||||
case CODEC_ID_AMR_NB:
|
||||
case CODEC_ID_GSM:
|
||||
case CODEC_ID_QCELP:
|
||||
case CODEC_ID_RA_144:
|
||||
case CODEC_ID_RA_288: return 160;
|
||||
case CODEC_ID_IMC: return 256;
|
||||
case CODEC_ID_AMR_WB:
|
||||
case CODEC_ID_GSM_MS: return 320;
|
||||
case CODEC_ID_MP1: return 384;
|
||||
case CODEC_ID_ATRAC1: return 512;
|
||||
case CODEC_ID_ATRAC3: return 1024;
|
||||
case CODEC_ID_MP2:
|
||||
case CODEC_ID_MUSEPACK7: return 1152;
|
||||
case CODEC_ID_AC3: return 1536;
|
||||
}
|
||||
|
||||
if (sr > 0) {
|
||||
/* calc from sample rate */
|
||||
if (id == CODEC_ID_TTA)
|
||||
return 256 * sr / 245;
|
||||
|
||||
if (ch > 0) {
|
||||
/* calc from sample rate and channels */
|
||||
if (id == CODEC_ID_BINKAUDIO_DCT)
|
||||
return (480 << (sr / 22050)) / ch;
|
||||
}
|
||||
}
|
||||
|
||||
if (ba > 0) {
|
||||
/* calc from block_align */
|
||||
if (id == CODEC_ID_SIPR) {
|
||||
switch (ba) {
|
||||
case 20: return 160;
|
||||
case 19: return 144;
|
||||
case 29: return 288;
|
||||
case 37: return 480;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (frame_bytes > 0) {
|
||||
/* calc from frame_bytes only */
|
||||
if (id == CODEC_ID_TRUESPEECH)
|
||||
return 240 * (frame_bytes / 32);
|
||||
if (id == CODEC_ID_NELLYMOSER)
|
||||
return 256 * (frame_bytes / 64);
|
||||
|
||||
if (bps > 0) {
|
||||
/* calc from frame_bytes and bits_per_coded_sample */
|
||||
if (id == CODEC_ID_ADPCM_G726)
|
||||
return frame_bytes * 8 / bps;
|
||||
}
|
||||
|
||||
if (ch > 0) {
|
||||
/* calc from frame_bytes and channels */
|
||||
switch (id) {
|
||||
case CODEC_ID_ADPCM_4XM:
|
||||
case CODEC_ID_ADPCM_IMA_ISS:
|
||||
return (frame_bytes - 4 * ch) * 2 / ch;
|
||||
case CODEC_ID_ADPCM_IMA_SMJPEG:
|
||||
return (frame_bytes - 4) * 2 / ch;
|
||||
case CODEC_ID_ADPCM_IMA_AMV:
|
||||
return (frame_bytes - 8) * 2 / ch;
|
||||
case CODEC_ID_ADPCM_XA:
|
||||
return (frame_bytes / 128) * 224 / ch;
|
||||
case CODEC_ID_INTERPLAY_DPCM:
|
||||
return (frame_bytes - 6 - ch) / ch;
|
||||
case CODEC_ID_ROQ_DPCM:
|
||||
return (frame_bytes - 8) / ch;
|
||||
case CODEC_ID_XAN_DPCM:
|
||||
return (frame_bytes - 2 * ch) / ch;
|
||||
case CODEC_ID_MACE3:
|
||||
return 3 * frame_bytes / ch;
|
||||
case CODEC_ID_MACE6:
|
||||
return 6 * frame_bytes / ch;
|
||||
case CODEC_ID_PCM_LXF:
|
||||
return 2 * (frame_bytes / (5 * ch));
|
||||
}
|
||||
|
||||
if (tag) {
|
||||
/* calc from frame_bytes, channels, and codec_tag */
|
||||
if (id == CODEC_ID_SOL_DPCM) {
|
||||
if (tag == 3)
|
||||
return frame_bytes / ch;
|
||||
else
|
||||
return frame_bytes * 2 / ch;
|
||||
}
|
||||
}
|
||||
|
||||
if (ba > 0) {
|
||||
/* calc from frame_bytes, channels, and block_align */
|
||||
int blocks = frame_bytes / ba;
|
||||
switch (avctx->codec_id) {
|
||||
case CODEC_ID_ADPCM_IMA_WAV:
|
||||
return blocks * (1 + (ba - 4 * ch) / (4 * ch) * 8);
|
||||
case CODEC_ID_ADPCM_IMA_DK3:
|
||||
return blocks * (((ba - 16) * 8 / 3) / ch);
|
||||
case CODEC_ID_ADPCM_IMA_DK4:
|
||||
return blocks * (1 + (ba - 4 * ch) * 2 / ch);
|
||||
case CODEC_ID_ADPCM_MS:
|
||||
return blocks * (2 + (ba - 7 * ch) * 2 / ch);
|
||||
}
|
||||
}
|
||||
|
||||
if (bps > 0) {
|
||||
/* calc from frame_bytes, channels, and bits_per_coded_sample */
|
||||
switch (avctx->codec_id) {
|
||||
case CODEC_ID_PCM_DVD:
|
||||
return 2 * (frame_bytes / ((bps * 2 / 8) * ch));
|
||||
case CODEC_ID_PCM_BLURAY:
|
||||
return frame_bytes / ((FFALIGN(ch, 2) * bps) / 8);
|
||||
case CODEC_ID_S302M:
|
||||
return 2 * (frame_bytes / ((bps + 4) / 4)) / ch;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if !HAVE_THREADS
|
||||
int ff_thread_init(AVCodecContext *s){
|
||||
return -1;
|
||||
|
||||
Reference in New Issue
Block a user