On 28/02/12 20:57, Justin Ruggles wrote:
> On 02/28/2012 05:08 AM, Luca Barbato wrote:
> 
>> 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?
> 
> 
> The issue here is that we want to be able to access these independent of
> the decoder or encoder being available and/or for stream copy. The same
> applies to av_get_audio_frame_duration().
> 

Let's push them as they are, we'll figure out a better way later.

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