Skip to content

Commit

Permalink
Merge remote-tracking branch 'qatar/master'
Browse files Browse the repository at this point in the history
* qatar/master:
  x86: dsputil: Move Xvid IDCT put/add functions to a more suitable place
  trasher: Include all the necessary headers
  x86: Remove some leftover declarations for non-existent functions
  ARM: libavresample: NEON optimised generic fltp to s16 conversion
  ARM: libavresample: NEON optimised stereo fltp to s16 conversion
  ARM: libavresample: NEON optimised flat float to s16 conversion

Conflicts:
	libavcodec/x86/dsputil_mmx.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
  • Loading branch information
michaelni committed Sep 14, 2012
2 parents 3633078 + 58139e1 commit 509f502
Show file tree
Hide file tree
Showing 10 changed files with 452 additions and 25 deletions.
1 change: 0 additions & 1 deletion libavcodec/dct-test.c
Expand Up @@ -57,7 +57,6 @@ void ff_bfin_fdct(DCTELEM *block);

// ALTIVEC
void ff_fdct_altivec(DCTELEM *block);
//void ff_idct_altivec(DCTELEM *block);?? no routine

// ARM
void ff_j_rev_dct_arm(DCTELEM *data);
Expand Down
24 changes: 0 additions & 24 deletions libavcodec/x86/dsputil_mmx.c
Expand Up @@ -2291,30 +2291,6 @@ static void ff_libmpeg2mmx2_idct_add(uint8_t *dest, int line_size,
}
#endif

static void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx(block);
ff_put_pixels_clamped_mmx(block, dest, line_size);
}

static void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx(block);
ff_add_pixels_clamped_mmx(block, dest, line_size);
}

static void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx2(block);
ff_put_pixels_clamped_mmx(block, dest, line_size);
}

static void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx2(block);
ff_add_pixels_clamped_mmx(block, dest, line_size);
}

static void vorbis_inverse_coupling_3dnow(float *mag, float *ang, int blocksize)
{
int i;
Expand Down
25 changes: 25 additions & 0 deletions libavcodec/x86/idct_mmx_xvid.c
Expand Up @@ -44,6 +44,7 @@
#include "config.h"
#include "libavcodec/avcodec.h"
#include "libavutil/mem.h"
#include "dsputil_mmx.h"
#include "idct_xvid.h"

#if HAVE_INLINE_ASM
Expand Down Expand Up @@ -529,4 +530,28 @@ __asm__ volatile(
:: "r"(block), "r"(rounder_0), "r"(tab_i_04_xmm), "r"(tg_1_16));
}

void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx(block);
ff_put_pixels_clamped_mmx(block, dest, line_size);
}

void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx(block);
ff_add_pixels_clamped_mmx(block, dest, line_size);
}

void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx2(block);
ff_put_pixels_clamped_mmx(block, dest, line_size);
}

void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block)
{
ff_idct_xvid_mmx2(block);
ff_add_pixels_clamped_mmx(block, dest, line_size);
}

#endif /* HAVE_INLINE_ASM */
8 changes: 8 additions & 0 deletions libavcodec/x86/idct_xvid.h
Expand Up @@ -28,8 +28,16 @@

#include <stdint.h>

#include "libavcodec/dsputil.h"

void ff_idct_xvid_mmx(short *block);
void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block);
void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block);

void ff_idct_xvid_mmx2(short *block);
void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block);
void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block);

void ff_idct_xvid_sse2(short *block);
void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block);
void ff_idct_xvid_sse2_add(uint8_t *dest, int line_size, short *block);
Expand Down
2 changes: 2 additions & 0 deletions libavresample/arm/Makefile
@@ -0,0 +1,2 @@
OBJS += arm/audio_convert_init.o
NEON-OBJS += arm/audio_convert_neon.o
49 changes: 49 additions & 0 deletions libavresample/arm/audio_convert_init.c
@@ -0,0 +1,49 @@
/*
* 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 <stdint.h>

#include "config.h"
#include "libavutil/attributes.h"
#include "libavutil/cpu.h"
#include "libavutil/arm/cpu.h"
#include "libavutil/samplefmt.h"
#include "libavresample/audio_convert.h"

void ff_conv_flt_to_s16_neon(int16_t *dst, const float *src, int len);
void ff_conv_fltp_to_s16_neon(int16_t *dst, float *const *src,
int len, int channels);
void ff_conv_fltp_to_s16_2ch_neon(int16_t *dst, float *const *src,
int len, int channels);

av_cold void ff_audio_convert_init_arm(AudioConvert *ac)
{
int cpu_flags = av_get_cpu_flags();

if (have_neon(cpu_flags)) {
ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT,
0, 16, 8, "NEON",
ff_conv_flt_to_s16_neon);
ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
0, 16, 8, "NEON",
ff_conv_fltp_to_s16_neon);
ff_audio_convert_set_func(ac, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLTP,
2, 16, 8, "NEON",
ff_conv_fltp_to_s16_2ch_neon);
}
}

0 comments on commit 509f502

Please sign in to comment.