From 3159780b18976dfd108576da473f4f97a9d7ca6f Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sat, 21 Mar 2009 00:44:42 +0000 Subject: [PATCH] share channel mode constants between the FLAC decoder and FLAC encoder Originally committed as revision 18082 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/flac.h | 7 +++++++ libavcodec/flacdec.c | 25 +++++++++---------------- libavcodec/flacenc.c | 14 ++++---------- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/libavcodec/flac.h b/libavcodec/flac.h index c957893d30..1e44a3b394 100644 --- a/libavcodec/flac.h +++ b/libavcodec/flac.h @@ -34,6 +34,13 @@ #define FLAC_MIN_BLOCKSIZE 16 #define FLAC_MAX_BLOCKSIZE 65535 +enum { + FLAC_CHMODE_INDEPENDENT = 0, + FLAC_CHMODE_LEFT_SIDE = 8, + FLAC_CHMODE_RIGHT_SIDE = 9, + FLAC_CHMODE_MID_SIDE = 10, +}; + enum { FLAC_METADATA_TYPE_STREAMINFO = 0, FLAC_METADATA_TYPE_PADDING, diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index 7f2542a301..2ef52617f3 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -46,13 +46,6 @@ #undef NDEBUG #include -enum decorrelation_type { - INDEPENDENT, - LEFT_SIDE, - RIGHT_SIDE, - MID_SIDE, -}; - typedef struct FLACContext { FLACSTREAMINFO @@ -63,7 +56,7 @@ typedef struct FLACContext { int curr_bps; ///< bps for current subframe, adjusted for channel correlation and wasted bits int sample_shift; ///< shift required to make output samples 16-bit or 32-bit int is32; ///< flag to indicate if output should be 32-bit instead of 16-bit - enum decorrelation_type decorrelation; ///< channel decorrelation type in the current frame + int decorrelation; ///< channel decorrelation type in the current frame int got_streaminfo; ///< indicates if the STREAMINFO has been read int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples @@ -445,10 +438,10 @@ static inline int decode_subframe(FLACContext *s, int channel) s->curr_bps = s->bps; if (channel == 0) { - if (s->decorrelation == RIGHT_SIDE) + if (s->decorrelation == FLAC_CHMODE_RIGHT_SIDE) s->curr_bps++; } else { - if (s->decorrelation == LEFT_SIDE || s->decorrelation == MID_SIDE) + if (s->decorrelation == FLAC_CHMODE_LEFT_SIDE || s->decorrelation == FLAC_CHMODE_MID_SIDE) s->curr_bps++; } @@ -508,9 +501,9 @@ static int decode_frame(FLACContext *s, int alloc_data_size) assignment = get_bits(&s->gb, 4); /* channel assignment */ if (assignment < FLAC_MAX_CHANNELS && s->channels == assignment+1) - decorrelation = INDEPENDENT; + decorrelation = FLAC_CHMODE_INDEPENDENT; else if (assignment >= FLAC_MAX_CHANNELS && assignment < 11 && s->channels == 2) - decorrelation = LEFT_SIDE + assignment - 8; + decorrelation = assignment; else { av_log(s->avctx, AV_LOG_ERROR, "unsupported channel assignment %d (channels=%d)\n", assignment, s->channels); @@ -710,7 +703,7 @@ static int flac_decode_frame(AVCodecContext *avctx, break; switch (s->decorrelation) { - case INDEPENDENT: + case FLAC_CHMODE_INDEPENDENT: for (j = 0; j < s->blocksize; j++) { for (i = 0; i < s->channels; i++) { if (s->is32) @@ -720,11 +713,11 @@ static int flac_decode_frame(AVCodecContext *avctx, } } break; - case LEFT_SIDE: + case FLAC_CHMODE_LEFT_SIDE: DECORRELATE(a,a-b) - case RIGHT_SIDE: + case FLAC_CHMODE_RIGHT_SIDE: DECORRELATE(a+b,b) - case MID_SIDE: + case FLAC_CHMODE_MID_SIDE: DECORRELATE( (a-=b>>1) + b, a) } diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c index 7ddaf7ed81..1b2e52a3e6 100644 --- a/libavcodec/flacenc.c +++ b/libavcodec/flacenc.c @@ -34,12 +34,6 @@ #define FLAC_SUBFRAME_FIXED 8 #define FLAC_SUBFRAME_LPC 32 -#define FLAC_CHMODE_NOT_STEREO 0 -#define FLAC_CHMODE_LEFT_RIGHT 1 -#define FLAC_CHMODE_LEFT_SIDE 8 -#define FLAC_CHMODE_RIGHT_SIDE 9 -#define FLAC_CHMODE_MID_SIDE 10 - #define MAX_FIXED_ORDER 4 #define MAX_PARTITION_ORDER 8 #define MAX_PARTITIONS (1 << MAX_PARTITION_ORDER) @@ -1006,7 +1000,7 @@ static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n) } } if(best == 0) { - return FLAC_CHMODE_LEFT_RIGHT; + return FLAC_CHMODE_INDEPENDENT; } else if(best == 1) { return FLAC_CHMODE_LEFT_SIDE; } else if(best == 2) { @@ -1031,14 +1025,14 @@ static void channel_decorrelation(FlacEncodeContext *ctx) right = frame->subframes[1].samples; if(ctx->channels != 2) { - frame->ch_mode = FLAC_CHMODE_NOT_STEREO; + frame->ch_mode = FLAC_CHMODE_INDEPENDENT; return; } frame->ch_mode = estimate_stereo_mode(left, right, n); /* perform decorrelation and adjust bits-per-sample */ - if(frame->ch_mode == FLAC_CHMODE_LEFT_RIGHT) { + if(frame->ch_mode == FLAC_CHMODE_INDEPENDENT) { return; } if(frame->ch_mode == FLAC_CHMODE_MID_SIDE) { @@ -1078,7 +1072,7 @@ static void output_frame_header(FlacEncodeContext *s) put_bits(&s->pb, 16, 0xFFF8); put_bits(&s->pb, 4, frame->bs_code[0]); put_bits(&s->pb, 4, s->sr_code[0]); - if(frame->ch_mode == FLAC_CHMODE_NOT_STEREO) { + if(frame->ch_mode == FLAC_CHMODE_INDEPENDENT) { put_bits(&s->pb, 4, s->ch_code); } else { put_bits(&s->pb, 4, frame->ch_mode);