diff --git a/libavcodec/alpha/Makefile b/libavcodec/alpha/Makefile index 8b7f1abd9f..34e5275d99 100644 --- a/libavcodec/alpha/Makefile +++ b/libavcodec/alpha/Makefile @@ -1,10 +1,10 @@ -OBJS += alpha/blockdsp_alpha.o \ - alpha/dsputil_alpha.o \ - alpha/dsputil_alpha_asm.o \ - alpha/motion_est_alpha.o \ - alpha/motion_est_mvi_asm.o \ - alpha/simple_idct_alpha.o \ - +OBJS-$(CONFIG_BLOCKDSP) += alpha/blockdsp_alpha.o +OBJS-$(CONFIG_DSPUTIL) += alpha/dsputil_alpha.o \ + alpha/motion_est_alpha.o \ + alpha/motion_est_mvi_asm.o OBJS-$(CONFIG_HPELDSP) += alpha/hpeldsp_alpha.o \ alpha/hpeldsp_alpha_asm.o +OBJS-$(CONFIG_IDCTDSP) += alpha/idctdsp_alpha.o \ + alpha/idctdsp_alpha_asm.o \ + alpha/simple_idct_alpha.o OBJS-$(CONFIG_MPEGVIDEO) += alpha/mpegvideo_alpha.o diff --git a/libavcodec/alpha/dsputil_alpha.c b/libavcodec/alpha/dsputil_alpha.c index ad98cfa47e..06a1a6d0b0 100644 --- a/libavcodec/alpha/dsputil_alpha.c +++ b/libavcodec/alpha/dsputil_alpha.c @@ -24,11 +24,6 @@ #include "dsputil_alpha.h" #include "asm.h" -void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, - int line_size); -void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, - int line_size); - #if 0 /* These functions were the base for the optimized assembler routines, and remain here for documentation purposes. */ @@ -107,11 +102,6 @@ av_cold void ff_dsputil_init_alpha(DSPContext *c, AVCodecContext *avctx) /* amask clears all bits that correspond to present features. */ if (amask(AMASK_MVI) == 0) { -// Disabled as these have been moved to a different context -// Patch to update these is welcome! -// c->put_pixels_clamped = put_pixels_clamped_mvi_asm; -// c->add_pixels_clamped = add_pixels_clamped_mvi_asm; - if (!high_bit_depth) c->get_pixels = get_pixels_mvi; c->diff_pixels = diff_pixels_mvi; @@ -124,16 +114,4 @@ av_cold void ff_dsputil_init_alpha(DSPContext *c, AVCodecContext *avctx) c->pix_abs[0][3] = pix_abs16x16_xy2_mvi; } -// Disabled as these have been moved to a different context -// Patch to update these is welcome! -// put_pixels_clamped_axp_p = c->put_pixels_clamped; -// add_pixels_clamped_axp_p = c->add_pixels_clamped; -// -// if (!avctx->lowres && avctx->bits_per_raw_sample <= 8 && -// (avctx->idct_algo == FF_IDCT_AUTO || -// avctx->idct_algo == FF_IDCT_SIMPLEALPHA)) { -// c->idct_put = ff_simple_idct_put_axp; -// c->idct_add = ff_simple_idct_add_axp; -// c->idct = ff_simple_idct_axp; -// } } diff --git a/libavcodec/alpha/dsputil_alpha.h b/libavcodec/alpha/dsputil_alpha.h index 828cd167cc..bc29469c10 100644 --- a/libavcodec/alpha/dsputil_alpha.h +++ b/libavcodec/alpha/dsputil_alpha.h @@ -22,19 +22,6 @@ #include #include -void ff_simple_idct_axp(int16_t *block); -void ff_simple_idct_put_axp(uint8_t *dest, int line_size, int16_t *block); -void ff_simple_idct_add_axp(uint8_t *dest, int line_size, int16_t *block); - -void put_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels, - int line_size); -void add_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels, - int line_size); -extern void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, - int line_size); -extern void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, - int line_size); - void get_pixels_mvi(int16_t *restrict block, const uint8_t *restrict pixels, int line_size); void diff_pixels_mvi(int16_t *block, const uint8_t *s1, const uint8_t *s2, diff --git a/libavcodec/alpha/idctdsp_alpha.c b/libavcodec/alpha/idctdsp_alpha.c new file mode 100644 index 0000000000..73f48210cd --- /dev/null +++ b/libavcodec/alpha/idctdsp_alpha.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2002 Falk Hueffner + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/attributes.h" +#include "libavcodec/idctdsp.h" +#include "idctdsp_alpha.h" +#include "asm.h" + +void put_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels, + int line_size); +void add_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels, + int line_size); + +void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, + int line_size); +void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, + int line_size); + +av_cold void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth) +{ + /* amask clears all bits that correspond to present features. */ + if (amask(AMASK_MVI) == 0) { + c->put_pixels_clamped = put_pixels_clamped_mvi_asm; + c->add_pixels_clamped = add_pixels_clamped_mvi_asm; + } + + put_pixels_clamped_axp_p = c->put_pixels_clamped; + add_pixels_clamped_axp_p = c->add_pixels_clamped; + + if (!high_bit_depth && !avctx->lowres && + (avctx->idct_algo == FF_IDCT_AUTO || + avctx->idct_algo == FF_IDCT_SIMPLEALPHA)) { + c->idct_put = ff_simple_idct_put_axp; + c->idct_add = ff_simple_idct_add_axp; + c->idct = ff_simple_idct_axp; + } +} diff --git a/libavcodec/alpha/idctdsp_alpha.h b/libavcodec/alpha/idctdsp_alpha.h new file mode 100644 index 0000000000..e52cd80047 --- /dev/null +++ b/libavcodec/alpha/idctdsp_alpha.h @@ -0,0 +1,34 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_ALPHA_IDCTDSP_ALPHA_H +#define AVCODEC_ALPHA_IDCTDSP_ALPHA_H + +#include +#include + +extern void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, + int line_size); +extern void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels, + int line_size); + +void ff_simple_idct_axp(int16_t *block); +void ff_simple_idct_put_axp(uint8_t *dest, int line_size, int16_t *block); +void ff_simple_idct_add_axp(uint8_t *dest, int line_size, int16_t *block); + +#endif /* AVCODEC_ALPHA_IDCTDSP_ALPHA_H */ diff --git a/libavcodec/alpha/dsputil_alpha_asm.S b/libavcodec/alpha/idctdsp_alpha_asm.S similarity index 99% rename from libavcodec/alpha/dsputil_alpha_asm.S rename to libavcodec/alpha/idctdsp_alpha_asm.S index d801bcf5ce..e3a8364a48 100644 --- a/libavcodec/alpha/dsputil_alpha_asm.S +++ b/libavcodec/alpha/idctdsp_alpha_asm.S @@ -1,5 +1,5 @@ /* - * Alpha optimized DSP utils + * Alpha optimized IDCT-related routines * Copyright (c) 2002 Falk Hueffner * * This file is part of FFmpeg. diff --git a/libavcodec/alpha/simple_idct_alpha.c b/libavcodec/alpha/simple_idct_alpha.c index 3bd1b336fe..04be0cef06 100644 --- a/libavcodec/alpha/simple_idct_alpha.c +++ b/libavcodec/alpha/simple_idct_alpha.c @@ -26,7 +26,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "dsputil_alpha.h" +#include "idctdsp_alpha.h" #include "asm.h" // cos(i * M_PI / 16) * sqrt(2) * (1 << 14) diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c index b0d41854df..31a4854ccb 100644 --- a/libavcodec/idctdsp.c +++ b/libavcodec/idctdsp.c @@ -299,6 +299,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) c->put_signed_pixels_clamped = put_signed_pixels_clamped_c; c->add_pixels_clamped = add_pixels_clamped_c; + if (ARCH_ALPHA) + ff_idctdsp_init_alpha(c, avctx, high_bit_depth); if (ARCH_ARM) ff_idctdsp_init_arm(c, avctx, high_bit_depth); if (ARCH_PPC) diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h index d93790e8aa..b1fa6e29cb 100644 --- a/libavcodec/idctdsp.h +++ b/libavcodec/idctdsp.h @@ -94,6 +94,8 @@ typedef struct IDCTDSPContext { void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx); +void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx, unsigned high_bit_depth); void ff_idctdsp_init_ppc(IDCTDSPContext *c, AVCodecContext *avctx,