On 06/07/15 7:02 PM, Hendrik Leppkes wrote:
> On Mon, Jul 6, 2015 at 10:25 PM, James Almer <jamr...@gmail.com> wrote:
>> Signed-off-by: James Almer <jamr...@gmail.com>
>> ---
>>  libavcodec/libdcadec.c | 21 +++++++++++++++++++++
>>  1 file changed, 21 insertions(+)
>>
>> diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c
>> index 890d270..9d4b9e8 100644
>> --- a/libavcodec/libdcadec.c
>> +++ b/libavcodec/libdcadec.c
>> @@ -41,6 +41,7 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void 
>> *data,
>>  {
>>      DCADecContext *s = avctx->priv_data;
>>      AVFrame *frame = data;
>> +    struct dcadec_exss_info *exss;
>>      int ret, i, k;
>>      int **samples, nsamples, channel_mask, sample_rate, bits_per_sample, 
>> profile;
>>      uint32_t mrk;
>> @@ -127,6 +128,26 @@ static int dcadec_decode_frame(AVCodecContext *avctx, 
>> void *data,
>>      } else
>>          avctx->bit_rate = 0;
>>
>> +    if (exss = dcadec_context_get_exss_info(s->ctx)) {
>> +        enum AVMatrixEncoding matrix_encoding;
>> +
>> +        switch(exss->matrix_encoding) {
>> +        case DCADEC_MATRIX_ENCODING_SURROUND:
>> +            matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
>> +            break;
>> +        case DCADEC_MATRIX_ENCODING_HEADPHONE:
>> +            matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
>> +            break;
>> +        default:
>> +            matrix_encoding = AV_MATRIX_ENCODING_NONE;
>> +            break;
>> +        }
> 
> I think Dolby would disagree. ;)

The native dca decoder sets AV_MATRIX_ENCODING_DOLBY for the same type of 
frames this
would, stating they are the equivalent. So does mlpdec.

> 
> Maybe we should just not set anything when the expected value is NONE?
> Not that it really matters. but sending an "empty" value all the time
> may not be required?

I'm replicating the native dca decoder behavior with this. If you for example 
use the
ashowinfo filter, it will output "side data - matrix encoding: none".
Not setting anything in that case would save us a 
ff_side_data_update_matrix_encoding
call per frame, though, so i guess I'll do just that.

Both encodings are apparently guaranteed to be set only with stereo streams, so 
maybe
i should also check for channel amount and skip the entire branch? 99% of 
streams out
there are multichannel after all.

> 
> - Hendrik
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to