Re: [libav-devel] [PATCH] atrac3plus: Make initialization dependant on channel count rather than channel map

2014-01-30 Thread Derek Buitenhuis
On 1/30/2014 9:37 AM, Jan Ekström wrote:
> Makes it easier to recreate an AVCodecContext for ATRAC3+ decoding,
> which is needed in multimedia frameworks, as well as in general cases
> where demuxing and decoding are separate entities.
> ---
>  libavcodec/atrac3plusdec.c | 28 ++--
>  1 file changed, 18 insertions(+), 10 deletions(-)

This seems like a reasonable idea to me.

- Derek
___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel


[libav-devel] [PATCH] atrac3plus: Make initialization dependant on channel count rather than channel map

2014-01-30 Thread Jan Ekström
Makes it easier to recreate an AVCodecContext for ATRAC3+ decoding,
which is needed in multimedia frameworks, as well as in general cases
where demuxing and decoding are separate entities.
---
 libavcodec/atrac3plusdec.c | 28 ++--
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/libavcodec/atrac3plusdec.c b/libavcodec/atrac3plusdec.c
index dbdb3b3..ddbfb53 100644
--- a/libavcodec/atrac3plusdec.c
+++ b/libavcodec/atrac3plusdec.c
@@ -77,35 +77,42 @@ static av_cold int set_channel_params(ATRAC3PContext *ctx,
 {
 memset(ctx->channel_blocks, 0, sizeof(ctx->channel_blocks));
 
-switch (avctx->channel_layout) {
-case AV_CH_FRONT_LEFT:
-case AV_CH_LAYOUT_MONO:
+switch (avctx->channels) {
+case 1:
+if (avctx->channel_layout != AV_CH_FRONT_LEFT)
+avctx->channel_layout = AV_CH_LAYOUT_MONO;
+
 ctx->num_channel_blocks = 1;
 ctx->channel_blocks[0]  = CH_UNIT_MONO;
 break;
-case AV_CH_LAYOUT_STEREO:
+case 2:
+avctx->channel_layout   = AV_CH_LAYOUT_STEREO;
 ctx->num_channel_blocks = 1;
 ctx->channel_blocks[0]  = CH_UNIT_STEREO;
 break;
-case AV_CH_LAYOUT_SURROUND:
+case 3:
+avctx->channel_layout   = AV_CH_LAYOUT_SURROUND;
 ctx->num_channel_blocks = 2;
 ctx->channel_blocks[0]  = CH_UNIT_STEREO;
 ctx->channel_blocks[1]  = CH_UNIT_MONO;
 break;
-case AV_CH_LAYOUT_4POINT0:
+case 4:
+avctx->channel_layout   = AV_CH_LAYOUT_4POINT0;
 ctx->num_channel_blocks = 3;
 ctx->channel_blocks[0]  = CH_UNIT_STEREO;
 ctx->channel_blocks[1]  = CH_UNIT_MONO;
 ctx->channel_blocks[2]  = CH_UNIT_MONO;
 break;
-case AV_CH_LAYOUT_5POINT1_BACK:
+case 6:
+avctx->channel_layout   = AV_CH_LAYOUT_5POINT1_BACK;
 ctx->num_channel_blocks = 4;
 ctx->channel_blocks[0]  = CH_UNIT_STEREO;
 ctx->channel_blocks[1]  = CH_UNIT_MONO;
 ctx->channel_blocks[2]  = CH_UNIT_STEREO;
 ctx->channel_blocks[3]  = CH_UNIT_MONO;
 break;
-case AV_CH_LAYOUT_6POINT1_BACK:
+case 7:
+avctx->channel_layout   = AV_CH_LAYOUT_6POINT1_BACK;
 ctx->num_channel_blocks = 5;
 ctx->channel_blocks[0]  = CH_UNIT_STEREO;
 ctx->channel_blocks[1]  = CH_UNIT_MONO;
@@ -113,7 +120,8 @@ static av_cold int set_channel_params(ATRAC3PContext *ctx,
 ctx->channel_blocks[3]  = CH_UNIT_MONO;
 ctx->channel_blocks[4]  = CH_UNIT_MONO;
 break;
-case AV_CH_LAYOUT_7POINT1:
+case 8:
+avctx->channel_layout   = AV_CH_LAYOUT_7POINT1;
 ctx->num_channel_blocks = 5;
 ctx->channel_blocks[0]  = CH_UNIT_STEREO;
 ctx->channel_blocks[1]  = CH_UNIT_MONO;
@@ -123,7 +131,7 @@ static av_cold int set_channel_params(ATRAC3PContext *ctx,
 break;
 default:
 av_log(avctx, AV_LOG_ERROR,
-   "Unsupported channel layout: %"PRIx64"!\n", 
avctx->channel_layout);
+   "Unsupported channel count: %d!\n", avctx->channels);
 return AVERROR_INVALIDDATA;
 }
 
-- 
1.8.5.2

___
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel