On 28/02/12 00:56, Justin Ruggles wrote:
> This only returns bits per sample when it is exactly correct. That is, the
> codec contains only raw samples with no frame headers or padding. This applies
> to basically all PCM codecs and a small subset of ADPCM codecs.
> ---
> doc/APIchanges | 3 +++
> libavcodec/avcodec.h | 10 ++++++++++
> libavcodec/utils.c | 34 +++++++++++++++++++++++-----------
> 3 files changed, 36 insertions(+), 11 deletions(-)
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 8b12de0..f10aa77 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -12,6 +12,9 @@ libavutil: 2011-04-18
>
> API changes, most recent first:
>
> +2012-xx-xx - xxxxxxx - lavc 54.x.x
> + Add av_get_exact_bits_per_sample()
> +
> 2012-02-25 - c9bca80 - lavu 51.24.0 - error.h
> Add AVERROR_UNKNOWN
>
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index cd86856..f2f21cb 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -3881,6 +3881,16 @@ void avcodec_default_free_buffers(AVCodecContext *s);
> */
> int av_get_bits_per_sample(enum CodecID codec_id);
>
> +/**
> + * Return codec bits per sample.
> + * Only return non-zero if the bits per sample is exactly correct, not an
> + * approximation.
> + *
> + * @param[in] codec_id the codec
> + * @return Number of bits per sample or zero if unknown for the given codec.
> + */
> +int av_get_exact_bits_per_sample(enum CodecID codec_id);
> +
> /* frame parsing */
> typedef struct AVCodecParserContext {
> void *priv_data;
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index e57f7ef..574d4cd 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -1668,21 +1668,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:
> @@ -1717,6 +1711,24 @@ int av_get_bits_per_sample(enum CodecID codec_id){
> }
> }
>
> +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);
> + }
> +}
> +
> #if !HAVE_THREADS
> int ff_thread_init(AVCodecContext *s){
> return -1;
Would be possible having something in the codec structure to deliver
this information so adding new codecs won't force us to update those?
lu
--
Luca Barbato
Gentoo/linux
http://dev.gentoo.org/~lu_zero
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel