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

Reply via email to