[FFmpeg-devel] [PATCH 1/2] avcodec/alacdec: split off decorrelate_stereo and append_extra_bits as alacdsp
James Almer
jamrial at gmail.com
Sun Oct 4 06:31:27 CEST 2015
On 10/4/2015 12:44 AM, James Almer wrote:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavcodec/Makefile | 2 +-
> libavcodec/alac.c | 65 +++++++++++++++++++---------------------------------
> libavcodec/alacdsp.c | 57 +++++++++++++++++++++++++++++++++++++++++++++
> libavcodec/alacdsp.h | 35 ++++++++++++++++++++++++++++
> 4 files changed, 116 insertions(+), 43 deletions(-)
> create mode 100644 libavcodec/alacdsp.c
> create mode 100644 libavcodec/alacdsp.h
>
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index b15e431..153c3f8 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -143,7 +143,7 @@ OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3enc.o ac3tab.o \
> ac3.o kbdwin.o
> OBJS-$(CONFIG_AC3_FIXED_ENCODER) += ac3enc_fixed.o ac3enc.o ac3tab.o ac3.o
> OBJS-$(CONFIG_AIC_DECODER) += aic.o
> -OBJS-$(CONFIG_ALAC_DECODER) += alac.o alac_data.o
> +OBJS-$(CONFIG_ALAC_DECODER) += alac.o alac_data.o alacdsp.o
> OBJS-$(CONFIG_ALAC_ENCODER) += alacenc.o alac_data.o
> OBJS-$(CONFIG_ALIAS_PIX_DECODER) += aliaspixdec.o
> OBJS-$(CONFIG_ALIAS_PIX_ENCODER) += aliaspixenc.o
> diff --git a/libavcodec/alac.c b/libavcodec/alac.c
> index 827c0db..b767438 100644
> --- a/libavcodec/alac.c
> +++ b/libavcodec/alac.c
> @@ -57,6 +57,7 @@
> #include "unary.h"
> #include "mathops.h"
> #include "alac_data.h"
> +#include "alacdsp.h"
>
> #define ALAC_EXTRADATA_SIZE 36
>
> @@ -81,6 +82,8 @@ typedef struct ALACContext {
>
> int direct_output;
> int extra_bit_bug;
> +
> + ALACDSPContext dsp;
> } ALACContext;
>
> static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
> @@ -230,35 +233,6 @@ static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out,
> }
> }
>
> -static void decorrelate_stereo(int32_t *buffer[2], int nb_samples,
> - int decorr_shift, int decorr_left_weight)
> -{
> - int i;
> -
> - for (i = 0; i < nb_samples; i++) {
> - int32_t a, b;
> -
> - a = buffer[0][i];
> - b = buffer[1][i];
> -
> - a -= (b * decorr_left_weight) >> decorr_shift;
> - b += a;
> -
> - buffer[0][i] = b;
> - buffer[1][i] = a;
> - }
> -}
> -
> -static void append_extra_bits(int32_t *buffer[2], int32_t *extra_bits_buffer[2],
> - int extra_bits, int channels, int nb_samples)
> -{
> - int i, ch;
> -
> - for (ch = 0; ch < channels; ch++)
> - for (i = 0; i < nb_samples; i++)
> - buffer[ch][i] = (buffer[ch][i] << extra_bits) | extra_bits_buffer[ch][i];
> -}
> -
> static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
> int channels)
> {
> @@ -389,19 +363,24 @@ static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
> decorr_left_weight = 0;
> }
>
> - if (alac->extra_bits && alac->extra_bit_bug) {
> - append_extra_bits(alac->output_samples_buffer, alac->extra_bits_buffer,
> - alac->extra_bits, channels, alac->nb_samples);
> - }
> + if (channels == 2) {
> + if (alac->extra_bits && alac->extra_bit_bug) {
> + alac->dsp.append_extra_bits_stereo(alac->output_samples_buffer, alac->extra_bits_buffer,
> + alac->extra_bits, channels, alac->nb_samples);
> + }
>
> - if (channels == 2 && decorr_left_weight) {
> - decorrelate_stereo(alac->output_samples_buffer, alac->nb_samples,
> - decorr_shift, decorr_left_weight);
> - }
> + if (decorr_left_weight) {
So while i was writing a checkasm unit i started looking at the possible
values for this, and found out that apparently it's either 0 or 1.
Since the function below is not called when it's 0, wouldn't that mean
it's a pointless argument?
I'll have to redo the asm function if that's the case, and change the
prototype and boilerplate c version.
> + alac->dsp.decorrelate_stereo(alac->output_samples_buffer, alac->nb_samples,
> + decorr_shift, decorr_left_weight);
> + }
More information about the ffmpeg-devel
mailing list