mlib merge
Originally committed as revision 131 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		@@ -29,6 +29,13 @@ ASM_OBJS += armv4l/jrevdct_arm.o
 | 
				
			|||||||
OBJS += armv4l/dsputil_arm.o
 | 
					OBJS += armv4l/dsputil_arm.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# sun mediaLib specific stuff
 | 
				
			||||||
 | 
					# currently only works when libavcodec is used in mplayer
 | 
				
			||||||
 | 
					ifeq ($(HAVE_MLIB),yes)
 | 
				
			||||||
 | 
					OBJS += mlib/dsputil_mlib.o
 | 
				
			||||||
 | 
					CFLAGS += $(MLIB_INC)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS = $(OBJS:.o=.c) $(ASM_OBJS:.o=.s)
 | 
					SRCS = $(OBJS:.o=.c) $(ASM_OBJS:.o=.s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB= libavcodec.a
 | 
					LIB= libavcodec.a
 | 
				
			||||||
@@ -58,8 +65,8 @@ depend:
 | 
				
			|||||||
clean: 
 | 
					clean: 
 | 
				
			||||||
	rm -f *.o *~ *.a i386/*.o i386/*~ \
 | 
						rm -f *.o *~ *.a i386/*.o i386/*~ \
 | 
				
			||||||
	   armv4l/*.o armv4l/*~ \
 | 
						   armv4l/*.o armv4l/*~ \
 | 
				
			||||||
 | 
						   mlib/*.o mlib/*~ \
 | 
				
			||||||
           libac3/*.o libac3/*~ \
 | 
					           libac3/*.o libac3/*~ \
 | 
				
			||||||
           mpglib/*.o mpglib/*~ \
 | 
					 | 
				
			||||||
           apiexample $(TESTS)
 | 
					           apiexample $(TESTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
distclean: clean
 | 
					distclean: clean
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -413,6 +413,7 @@ void block_permute(INT16 *block)
 | 
				
			|||||||
void dsputil_init(void)
 | 
					void dsputil_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i, j;
 | 
					    int i, j;
 | 
				
			||||||
 | 
					    int use_permuted_idct;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
 | 
					    for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
 | 
				
			||||||
    for(i=0;i<MAX_NEG_CROP;i++) {
 | 
					    for(i=0;i<MAX_NEG_CROP;i++) {
 | 
				
			||||||
@@ -435,17 +436,7 @@ void dsputil_init(void)
 | 
				
			|||||||
    pix_abs16x16_xy2 = pix_abs16x16_xy2_c;
 | 
					    pix_abs16x16_xy2 = pix_abs16x16_xy2_c;
 | 
				
			||||||
    av_fdct = jpeg_fdct_ifast;
 | 
					    av_fdct = jpeg_fdct_ifast;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* permute for IDCT */
 | 
					    use_permuted_idct = 1;
 | 
				
			||||||
    for(i=0;i<64;i++) {
 | 
					 | 
				
			||||||
        j = zigzag_direct[i];
 | 
					 | 
				
			||||||
        zigzag_direct[i] = block_permute_op(j);
 | 
					 | 
				
			||||||
        j = ff_alternate_horizontal_scan[i];
 | 
					 | 
				
			||||||
        ff_alternate_horizontal_scan[i] = block_permute_op(j);
 | 
					 | 
				
			||||||
        j = ff_alternate_vertical_scan[i];
 | 
					 | 
				
			||||||
        ff_alternate_vertical_scan[i] = block_permute_op(j);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    block_permute(default_intra_matrix);
 | 
					 | 
				
			||||||
    block_permute(default_non_intra_matrix);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef HAVE_MMX
 | 
					#ifdef HAVE_MMX
 | 
				
			||||||
    dsputil_init_mmx();
 | 
					    dsputil_init_mmx();
 | 
				
			||||||
@@ -453,4 +444,22 @@ void dsputil_init(void)
 | 
				
			|||||||
#ifdef ARCH_ARMV4L
 | 
					#ifdef ARCH_ARMV4L
 | 
				
			||||||
    dsputil_init_armv4l();
 | 
					    dsputil_init_armv4l();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_MLIB
 | 
				
			||||||
 | 
					    dsputil_init_mlib();
 | 
				
			||||||
 | 
					    use_permuted_idct = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (use_permuted_idct) {
 | 
				
			||||||
 | 
					        /* permute for IDCT */
 | 
				
			||||||
 | 
					        for(i=0;i<64;i++) {
 | 
				
			||||||
 | 
					            j = zigzag_direct[i];
 | 
				
			||||||
 | 
					            zigzag_direct[i] = block_permute_op(j);
 | 
				
			||||||
 | 
					            j = ff_alternate_horizontal_scan[i];
 | 
				
			||||||
 | 
					            ff_alternate_horizontal_scan[i] = block_permute_op(j);
 | 
				
			||||||
 | 
					            j = ff_alternate_vertical_scan[i];
 | 
				
			||||||
 | 
					            ff_alternate_vertical_scan[i] = block_permute_op(j);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        block_permute(default_intra_matrix);
 | 
				
			||||||
 | 
					        block_permute(default_non_intra_matrix);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,6 +111,15 @@ void dsputil_init_mmx(void);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void dsputil_init_armv4l(void);   
 | 
					void dsputil_init_armv4l(void);   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif defined(HAVE_MLIB)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					#define emms_c()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */
 | 
				
			||||||
 | 
					#define __align8 __attribute__ ((aligned (8)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void dsputil_init_mlib(void);   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define emms_c()
 | 
					#define emms_c()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										144
									
								
								libavcodec/mlib/dsputil_mlib.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								libavcodec/mlib/dsputil_mlib.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,144 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Sun mediaLib optimized DSP utils
 | 
				
			||||||
 | 
					 * Copyright (c) 2001 Juergen Keil.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program 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 General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../dsputil.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <mlib_types.h>
 | 
				
			||||||
 | 
					#include <mlib_status.h>
 | 
				
			||||||
 | 
					#include <mlib_sys.h>
 | 
				
			||||||
 | 
					#include <mlib_video.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void put_pixels_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
								     int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoCopyRef_U8_U8_8x16(dest, (uint8_t *)ref, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoCopyRef_U8_U8_8x8 (dest, (uint8_t *)ref, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void put_pixels_x2_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
									int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoInterpX_U8_U8_8x16(dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoInterpX_U8_U8_8x8 (dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void put_pixels_y2_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
									int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoInterpY_U8_U8_8x16(dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoInterpY_U8_U8_8x8 (dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void put_pixels_xy2_mlib(uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
									int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16) 
 | 
				
			||||||
 | 
						mlib_VideoInterpXY_U8_U8_8x16(dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoInterpXY_U8_U8_8x8 (dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void avg_pixels_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
								     int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoCopyRefAve_U8_U8_8x16(dest, (uint8_t *)ref, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoCopyRefAve_U8_U8_8x8 (dest, (uint8_t *)ref, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void avg_pixels_x2_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
									int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoInterpAveX_U8_U8_8x16(dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoInterpAveX_U8_U8_8x8 (dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void avg_pixels_y2_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
									int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoInterpAveY_U8_U8_8x16(dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoInterpAveY_U8_U8_8x8 (dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void avg_pixels_xy2_mlib (uint8_t * dest, const uint8_t * ref,
 | 
				
			||||||
 | 
									 int stride, int height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    assert(height == 16 || height == 8);
 | 
				
			||||||
 | 
					    if (height == 16)
 | 
				
			||||||
 | 
						mlib_VideoInterpAveXY_U8_U8_8x16(dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
						mlib_VideoInterpAveXY_U8_U8_8x8 (dest, (uint8_t *)ref, stride, stride);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void add_pixels_clamped_mlib(const DCTELEM *block, UINT8 *pixels, int line_size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mlib_VideoAddBlock_U8_S16(pixels, (mlib_s16 *)block, line_size);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ff_idct_mlib(DCTELEM *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mlib_VideoIDCT8x8_S16_S16 (data, data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ff_fdct_mlib(DCTELEM *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    mlib_VideoDCT8x8_S16_S16 (data, data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void dsputil_init_mlib(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    av_fdct = ff_fdct_mlib;
 | 
				
			||||||
 | 
					    ff_idct = ff_idct_mlib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    put_pixels_tab[0] = put_pixels_mlib;
 | 
				
			||||||
 | 
					    put_pixels_tab[1] = put_pixels_x2_mlib;
 | 
				
			||||||
 | 
					    put_pixels_tab[2] = put_pixels_y2_mlib;
 | 
				
			||||||
 | 
					    put_pixels_tab[3] = put_pixels_xy2_mlib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avg_pixels_tab[0] = avg_pixels_mlib;
 | 
				
			||||||
 | 
					    avg_pixels_tab[1] = avg_pixels_x2_mlib;
 | 
				
			||||||
 | 
					    avg_pixels_tab[2] = avg_pixels_y2_mlib;
 | 
				
			||||||
 | 
					    avg_pixels_tab[3] = avg_pixels_xy2_mlib;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    put_no_rnd_pixels_tab[0] = put_pixels_mlib;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    add_pixels_clamped = add_pixels_clamped_mlib;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user