diff options
author | James Almer <jamrial@gmail.com> | 2015-07-07 14:29:08 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2015-07-07 16:18:46 -0300 |
commit | 7d5ab1650644f8f9ac1b3ecd6a7b67bd720cd652 (patch) | |
tree | 68e918ef21667c06d7886b968f096c912d8be10d | |
parent | 55e29ceec84aa498122576c1ae8a0fa1fab0b41e (diff) | |
download | ffmpeg-streaming-7d5ab1650644f8f9ac1b3ecd6a7b67bd720cd652.zip ffmpeg-streaming-7d5ab1650644f8f9ac1b3ecd6a7b67bd720cd652.tar.gz |
avcodec/libdcadec: export matrix encoding side data
Reviewed-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: James Almer <jamrial@gmail.com>
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | libavcodec/libdcadec.c | 21 |
2 files changed, 24 insertions, 1 deletions
@@ -1829,6 +1829,7 @@ TYPES_LIST=" CONDITION_VARIABLE_Ptr socklen_t struct_addrinfo + struct_dcadec_exss_info_matrix_encoding struct_group_source_req struct_ip_mreq_source struct_ipv6_mreq @@ -5121,7 +5122,8 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 && { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 || die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } enabled libcaca && require_pkg_config caca caca.h caca_create_canvas -enabled libdcadec && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create +enabled libdcadec && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create && + check_struct libdcadec/dca_context.h "struct dcadec_exss_info" matrix_encoding enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac enabled libfdk_aac && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen || { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c index 890d270..2d807a2 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 HAVE_STRUCT_DCADEC_EXSS_INFO_MATRIX_ENCODING + if (exss = dcadec_context_get_exss_info(s->ctx)) { + enum AVMatrixEncoding matrix_encoding = AV_MATRIX_ENCODING_NONE; + + 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; + } + dcadec_context_free_exss_info(exss); + + if (matrix_encoding != AV_MATRIX_ENCODING_NONE && + (ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0) + return ret; + } +#endif + frame->nb_samples = nsamples; if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; |