aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/alac.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-12-06 16:03:13 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-12-06 16:14:38 +0100
commit71949ef715a29878424b2fb40c471cfb71c6bb98 (patch)
tree6d83bab24e4218eba1c840ba76081d00ba746315 /libavcodec/alac.c
parent54a71f2e6c9d8ff42ac0367d54b9df39a31cb3ff (diff)
parent5945c7b35d9169caf9ecef1c419eebdebb909e60 (diff)
downloadffmpeg-71949ef715a29878424b2fb40c471cfb71c6bb98.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: h264: slice-mt: check master context for valid current_picture_ptr h264: slice-mt: get last_pic_dropable from master context alacenc: add support for multi-channel encoding Conflicts: Changelog libavcodec/alac.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/alac.c')
-rw-r--r--libavcodec/alac.c48
1 files changed, 7 insertions, 41 deletions
diff --git a/libavcodec/alac.c b/libavcodec/alac.c
index 23beb5d363..4e8903114d 100644
--- a/libavcodec/alac.c
+++ b/libavcodec/alac.c
@@ -52,9 +52,9 @@
#include "internal.h"
#include "unary.h"
#include "mathops.h"
+#include "alac_data.h"
#define ALAC_EXTRADATA_SIZE 36
-#define MAX_CHANNELS 8
typedef struct {
AVCodecContext *avctx;
@@ -78,40 +78,6 @@ typedef struct {
int direct_output;
} ALACContext;
-enum RawDataBlockType {
- /* At the moment, only SCE, CPE, LFE, and END are recognized. */
- TYPE_SCE,
- TYPE_CPE,
- TYPE_CCE,
- TYPE_LFE,
- TYPE_DSE,
- TYPE_PCE,
- TYPE_FIL,
- TYPE_END
-};
-
-static const uint8_t alac_channel_layout_offsets[8][8] = {
- { 0 },
- { 0, 1 },
- { 2, 0, 1 },
- { 2, 0, 1, 3 },
- { 2, 0, 1, 3, 4 },
- { 2, 0, 1, 4, 5, 3 },
- { 2, 0, 1, 4, 5, 6, 3 },
- { 2, 6, 7, 0, 1, 4, 5, 3 }
-};
-
-static const uint16_t alac_channel_layouts[8] = {
- AV_CH_LAYOUT_MONO,
- AV_CH_LAYOUT_STEREO,
- AV_CH_LAYOUT_SURROUND,
- AV_CH_LAYOUT_4POINT0,
- AV_CH_LAYOUT_5POINT0_BACK,
- AV_CH_LAYOUT_5POINT1_BACK,
- AV_CH_LAYOUT_6POINT1_BACK,
- AV_CH_LAYOUT_7POINT1_WIDE_BACK
-};
-
static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
{
unsigned int x = get_unary_0_9(gb);
@@ -475,7 +441,7 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
int *got_frame_ptr, AVPacket *avpkt)
{
ALACContext *alac = avctx->priv_data;
- enum RawDataBlockType element;
+ enum AlacRawDataBlockType element;
int channels;
int ch, ret, got_end;
@@ -497,14 +463,14 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
channels = (element == TYPE_CPE) ? 2 : 1;
if ( ch + channels > alac->channels
- || alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels
+ || ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels
) {
av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n");
return AVERROR_INVALIDDATA;
}
ret = decode_element(avctx, data,
- alac_channel_layout_offsets[alac->channels - 1][ch],
+ ff_alac_channel_layout_offsets[alac->channels - 1][ch],
channels);
if (ret < 0 && get_bits_left(&alac->gb))
return ret;
@@ -634,17 +600,17 @@ static av_cold int alac_decode_init(AVCodecContext * avctx)
av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
alac->channels = avctx->channels;
} else {
- if (alac->channels > MAX_CHANNELS)
+ if (alac->channels > ALAC_MAX_CHANNELS)
alac->channels = avctx->channels;
else
avctx->channels = alac->channels;
}
- if (avctx->channels > MAX_CHANNELS || avctx->channels <= 0 ) {
+ if (avctx->channels > ALAC_MAX_CHANNELS || avctx->channels <= 0 ) {
av_log(avctx, AV_LOG_ERROR, "Unsupported channel count: %d\n",
avctx->channels);
return AVERROR_PATCHWELCOME;
}
- avctx->channel_layout = alac_channel_layouts[alac->channels - 1];
+ avctx->channel_layout = ff_alac_channel_layouts[alac->channels - 1];
if ((ret = allocate_buffers(alac)) < 0) {
av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");