[FFmpeg-devel] support for audio with sample resolution better than 16bit
Sun Apr 20 10:44:16 CEST 2008
Recently I added a wish (#425) to the ffmpeg roundup system.
I'd like ffmpeg to be capable to transcode 24bit pcm into 24bit flac.
Therefore the audio handling has to be enhanced. Now I want to make some suggestions how I think this could be done.
At first the decoding needs to be able to handle other resolutions than 16bit.
I'd suggest to add the following function:
int attribute_align_arg avcodec_decode_audio3(AVCodecContext *avctx,
const uint8_t *buf, int buf_size)
When there is audio decoded in 24 bit depth the caller can tell that he only wants to receive 16bit depth with setting *sample_res=16.
Then low_frame_size_ptr and low_samples can be uninitialized.
when 16 < *sample_res <=24 low_samples is of type (unint8_t *) and the memory has to be allocated
when 24 < *sample_res <=32 low_samples is of type (uint16_t *) and the memory has to be allocated
when 32 < *sample_res return error
audio samples are always put into the high bits:
26 bit sample:
int32_t real_sample = samples<<16 | ((uint16_t *) low_samples & 0xfffc)
after decoding *sample_res is set to the actual sample resolution
e.g. the caller tells he wants 24bit maximum but the stream only had 20bit resolution then *sample_res is set to 20
When the caller sets *sample_res == 0 he accepts all depth up to 32bit.
Optionaly the samples pointer could also be of type (void *) and then *samples_res could distinguish 16bit samples from 8bit samples.
What do you think?
More information about the ffmpeg-devel