From b4e852b30544d1dbeb4cb3514685b43049316002 Mon Sep 17 00:00:00 2001 From: henry Date: Sat, 9 Dec 2006 10:34:27 +0000 Subject: sync to libmpeg2-0.4.1 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21542 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpeg2/attributes.h | 2 +- libmpeg2/cpu_accel.c | 18 +- libmpeg2/cpu_state.c | 18 +- libmpeg2/decode.c | 2 +- libmpeg2/header.c | 2 +- libmpeg2/idct.c | 4 +- libmpeg2/idct_alpha.c | 2 +- libmpeg2/idct_altivec.c | 8 +- libmpeg2/idct_mmx.c | 2 +- libmpeg2/libmpeg-0.4.0.diff | 436 -------------------------------------------- libmpeg2/libmpeg-0.4.1.diff | 375 +++++++++++++++++++++++++++++++++++++ libmpeg2/motion_comp.c | 2 +- libmpeg2/motion_comp_mmx.c | 4 +- libmpeg2/mpeg2.h | 4 +- libmpeg2/mpeg2_internal.h | 2 +- libmpeg2/slice.c | 2 +- 16 files changed, 412 insertions(+), 471 deletions(-) delete mode 100644 libmpeg2/libmpeg-0.4.0.diff create mode 100644 libmpeg2/libmpeg-0.4.1.diff (limited to 'libmpeg2') diff --git a/libmpeg2/attributes.h b/libmpeg2/attributes.h index e1d311a08e..ef3965c411 100644 --- a/libmpeg2/attributes.h +++ b/libmpeg2/attributes.h @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/cpu_accel.c b/libmpeg2/cpu_accel.c index 43d45ed649..59f7167c37 100644 --- a/libmpeg2/cpu_accel.c +++ b/libmpeg2/cpu_accel.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ @@ -50,7 +50,7 @@ static inline uint32_t arch_accel (void) int AMD; uint32_t caps; -#if !defined(PIC) && !defined(__PIC__) +#if defined(__x86_64__) || (!defined(PIC) && !defined(__PIC__)) #define cpuid(op,eax,ebx,ecx,edx) \ __asm__ ("cpuid" \ : "=a" (eax), \ @@ -59,12 +59,12 @@ static inline uint32_t arch_accel (void) "=d" (edx) \ : "a" (op) \ : "cc") -#else /* PIC version : save ebx */ +#else /* PIC version : save ebx (not needed on x86_64) */ #define cpuid(op,eax,ebx,ecx,edx) \ - __asm__ ("push %%ebx\n\t" \ + __asm__ ("pushl %%ebx\n\t" \ "cpuid\n\t" \ "movl %%ebx,%1\n\t" \ - "pop %%ebx" \ + "popl %%ebx" \ : "=a" (eax), \ "=r" (ebx), \ "=c" (ecx), \ @@ -73,6 +73,7 @@ static inline uint32_t arch_accel (void) : "cc") #endif +#ifndef __x86_64__ /* x86_64 supports the cpuid op */ __asm__ ("pushf\n\t" "pushf\n\t" "pop %0\n\t" @@ -90,6 +91,7 @@ static inline uint32_t arch_accel (void) if (eax == ebx) /* no cpuid */ return 0; +#endif cpuid (0x00000000, eax, ebx, ecx, edx); if (!eax) /* vendor string only */ @@ -154,7 +156,7 @@ static RETSIGTYPE sigill_handler (int sig) } #ifdef ARCH_PPC -static inline uint32_t arch_accel (void) +static uint32_t arch_accel (void) { static RETSIGTYPE (* oldsig) (int); @@ -184,7 +186,7 @@ static inline uint32_t arch_accel (void) #endif /* ARCH_PPC */ #ifdef ARCH_SPARC -static inline uint32_t arch_accel (void) +static uint32_t arch_accel (void) { static RETSIGTYPE (* oldsig) (int); @@ -220,7 +222,7 @@ static inline uint32_t arch_accel (void) #endif /* ARCH_PPC || ARCH_SPARC */ #ifdef ARCH_ALPHA -static inline uint32_t arch_accel (void) +static uint32_t arch_accel (void) { #ifdef CAN_COMPILE_ALPHA_MVI uint64_t no_mvi; diff --git a/libmpeg2/cpu_state.c b/libmpeg2/cpu_state.c index b1113ed715..07b9ebf354 100644 --- a/libmpeg2/cpu_state.c +++ b/libmpeg2/cpu_state.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ @@ -47,19 +47,19 @@ static void state_restore_mmx (cpu_state_t * state) } #endif -#if defined( ARCH_PPC ) && defined( HAVE_ALTIVEC ) -#if defined( __APPLE_CC__ ) && defined( __APPLE_ALTIVEC__ ) /* apple */ -#define LI(a,b) "li r" #a "," #b "\n\t" -#define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t" -#define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #c "\n\t" -#define LVX0(a,b,c) "lvx v" #a ",0,r" #c "\n\t" -#define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #c "\n\t" -#else /* gnu */ +#ifdef ARCH_PPC +#ifdef HAVE_ALTIVEC_H /* gnu */ #define LI(a,b) "li " #a "," #b "\n\t" #define STVX0(a,b,c) "stvx " #a ",0," #c "\n\t" #define STVX(a,b,c) "stvx " #a "," #b "," #c "\n\t" #define LVX0(a,b,c) "lvx " #a ",0," #c "\n\t" #define LVX(a,b,c) "lvx " #a "," #b "," #c "\n\t" +#else /* apple */ +#define LI(a,b) "li r" #a "," #b "\n\t" +#define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t" +#define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #c "\n\t" +#define LVX0(a,b,c) "lvx v" #a ",0,r" #c "\n\t" +#define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #c "\n\t" #endif static void state_save_altivec (cpu_state_t * state) diff --git a/libmpeg2/decode.c b/libmpeg2/decode.c index 94cf010538..ebfcaaf6f8 100644 --- a/libmpeg2/decode.c +++ b/libmpeg2/decode.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/header.c b/libmpeg2/header.c index 2df830b39b..5d59b3a193 100644 --- a/libmpeg2/header.c +++ b/libmpeg2/header.c @@ -21,7 +21,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/idct.c b/libmpeg2/idct.c index 46ecec8a68..df4979b63f 100644 --- a/libmpeg2/idct.c +++ b/libmpeg2/idct.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ @@ -253,7 +253,7 @@ void mpeg2_idct_init (uint32_t accel) mpeg2_idct_mmx_init (); } else #endif -#if defined( ARCH_PPC ) && defined( HAVE_ALTIVEC ) +#ifdef ARCH_PPC if (accel & MPEG2_ACCEL_PPC_ALTIVEC) { mpeg2_idct_copy = mpeg2_idct_copy_altivec; mpeg2_idct_add = mpeg2_idct_add_altivec; diff --git a/libmpeg2/idct_alpha.c b/libmpeg2/idct_alpha.c index 74ebedf43d..95d580fe1c 100644 --- a/libmpeg2/idct_alpha.c +++ b/libmpeg2/idct_alpha.c @@ -21,7 +21,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/idct_altivec.c b/libmpeg2/idct_altivec.c index 3eec6b49d0..6b1b8586c0 100644 --- a/libmpeg2/idct_altivec.c +++ b/libmpeg2/idct_altivec.c @@ -41,7 +41,7 @@ typedef vector unsigned short vector_u16_t; typedef vector signed int vector_s32_t; typedef vector unsigned int vector_u32_t; -#if defined( HAVE_ALTIVEC_H ) && !defined( __APPLE_ALTIVEC__ ) && (__GNUC__ * 100 + __GNUC_MINOR__ < 303) +#if defined(HAVE_ALTIVEC_H) && (__GNUC__ * 100 + __GNUC_MINOR__ < 303) /* work around gcc <3.3 vec_mergel bug */ static inline vector_s16_t my_vec_mergel (vector_s16_t const A, vector_s16_t const B) @@ -56,10 +56,10 @@ static inline vector_s16_t my_vec_mergel (vector_s16_t const A, #define vec_mergel my_vec_mergel #endif -#if defined( __APPLE_CC__ ) && defined( __APPLE_ALTIVEC__ ) /* apple */ -#define VEC_S16(a,b,c,d,e,f,g,h) (vector_s16_t) (a, b, c, d, e, f, g, h) -#else /* gnu */ +#ifdef HAVE_ALTIVEC_H /* gnu */ #define VEC_S16(a,b,c,d,e,f,g,h) {a, b, c, d, e, f, g, h} +#else /* apple */ +#define VEC_S16(a,b,c,d,e,f,g,h) (vector_s16_t) (a, b, c, d, e, f, g, h) #endif static const vector_s16_t constants ATTR_ALIGN(16) = diff --git a/libmpeg2/idct_mmx.c b/libmpeg2/idct_mmx.c index 8f6359c3f9..da477698ae 100644 --- a/libmpeg2/idct_mmx.c +++ b/libmpeg2/idct_mmx.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/libmpeg-0.4.0.diff b/libmpeg2/libmpeg-0.4.0.diff deleted file mode 100644 index 64beba9310..0000000000 --- a/libmpeg2/libmpeg-0.4.0.diff +++ /dev/null @@ -1,436 +0,0 @@ ---- include/attributes.h 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/attributes.h 2006-06-16 20:12:50.000000000 +0200 -@@ -25,7 +29,7 @@ - #ifdef ATTRIBUTE_ALIGNED_MAX - #define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) - #else --#define ATTR_ALIGN(align) -+#define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((16 < align) ? 16 : align))) - #endif - - #ifdef HAVE_BUILTIN_EXPECT ---- libmpeg2/cpu_accel.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/cpu_accel.c 2006-06-16 20:12:50.000000000 +0200 -@@ -22,6 +26,7 @@ - */ - - #include "config.h" -+#include "cpudetect.h" - - #include - -@@ -30,9 +35,17 @@ - #include "mpeg2_internal.h" - - #ifdef ACCEL_DETECT --#ifdef ARCH_X86 -+#if defined(ARCH_X86) || defined(ARCH_X86_64) -+ -+/* MPlayer imports libmpeg2 as decoder, which detects MMX / 3DNow! -+ * instructions via assembly. However, it is regarded as duplicaed work -+ * in MPlayer, so that we enforce to use MPlayer's implementation. -+ */ -+#define USE_MPLAYER_CPUDETECT -+ - static inline uint32_t arch_accel (void) - { -+#if !defined(USE_MPLAYER_CPUDETECT) - uint32_t eax, ebx, ecx, edx; - int AMD; - uint32_t caps; -@@ -105,10 +118,24 @@ - caps |= MPEG2_ACCEL_X86_MMXEXT; - - return caps; -+#else /* USE_MPLAYER_CPUDETECT: Use MPlayer's cpu capability property */ -+ caps = 0; -+ if (gCpuCaps.hasMMX) -+ caps |= MPEG2_ACCEL_X86_MMX; -+ if (gCpuCaps.hasSSE2) -+ caps |= MPEG2_ACCEL_X86_SSE2; -+ if (gCpuCaps.hasMMX2) -+ caps |= MPEG2_ACCEL_X86_MMXEXT; -+ if (gCpuCaps.has3DNow) -+ caps |= MPEG2_ACCEL_X86_3DNOW; -+ -+ return caps; -+ -+#endif /* USE_MPLAYER_CPUDETECT */ - } --#endif /* ARCH_X86 */ -+#endif /* ARCH_X86 || ARCH_X86_64 */ - --#if defined(ARCH_PPC) || defined(ARCH_SPARC) -+#if defined(ARCH_PPC) || (defined(ARCH_SPARC) && defined(HAVE_VIS)) - #include - #include - -@@ -166,10 +166,10 @@ - - canjump = 1; - --#ifdef HAVE_ALTIVEC_H /* gnu */ --#define VAND(a,b,c) "vand " #a "," #b "," #c "\n\t" --#else /* apple */ -+#if defined( __APPLE_CC__ ) && defined( __APPLE_ALTIVEC__ ) /* apple */ - #define VAND(a,b,c) "vand v" #a ",v" #b ",v" #c "\n\t" -+#else /* gnu */ -+#define VAND(a,b,c) "vand " #a "," #b "," #c "\n\t" - #endif - asm volatile ("mtspr 256, %0\n\t" - VAND (0, 0, 0) -@@ -195,6 +222,7 @@ - #ifdef ARCH_ALPHA - static inline uint32_t arch_accel (void) - { -+#ifdef CAN_COMPILE_ALPHA_MVI - uint64_t no_mvi; - - asm volatile ("amask %1, %0" -@@ -202,6 +230,9 @@ - : "rI" (256)); /* AMASK_MVI */ - return no_mvi ? MPEG2_ACCEL_ALPHA : (MPEG2_ACCEL_ALPHA | - MPEG2_ACCEL_ALPHA_MVI); -+#else -+ return MPEG2_ACCEL_ALPHA; -+#endif - } - #endif /* ARCH_ALPHA */ - #endif /* ACCEL_DETECT */ -@@ -212,7 +243,7 @@ - - accel = 0; - #ifdef ACCEL_DETECT --#if defined (ARCH_X86) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC) -+#if defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC) - accel = arch_accel (); - #endif - #endif ---- libmpeg2/cpu_state.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/cpu_state.c 2006-06-16 20:12:50.000000000 +0200 -@@ -29,14 +33,14 @@ - #include "mpeg2.h" - #include "attributes.h" - #include "mpeg2_internal.h" --#ifdef ARCH_X86 -+#if defined(ARCH_X86) || defined(ARCH_X86_64) - #include "mmx.h" - #endif - - void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL; - void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL; - --#ifdef ARCH_X86 -+#if defined(ARCH_X86) || defined(ARCH_X86_64) - static void state_restore_mmx (cpu_state_t * state) - { - emms (); -@@ -115,12 +119,12 @@ - - void mpeg2_cpu_state_init (uint32_t accel) - { --#ifdef ARCH_X86 -+#if defined(ARCH_X86) || defined(ARCH_X86_64) - if (accel & MPEG2_ACCEL_X86_MMX) { - mpeg2_cpu_state_restore = state_restore_mmx; - } - #endif --#ifdef ARCH_PPC -+#if defined(ARCH_PPC) && defined(HAVE_ALTIVEC) - if (accel & MPEG2_ACCEL_PPC_ALTIVEC) { - mpeg2_cpu_state_save = state_save_altivec; - mpeg2_cpu_state_restore = state_restore_altivec; ---- libmpeg2/decode.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/decode.c 2006-06-16 20:12:50.000000000 +0200 -@@ -351,6 +355,15 @@ - fbuf->buf[1] = buf[1]; - fbuf->buf[2] = buf[2]; - fbuf->id = id; -+ // HACK! FIXME! At first I frame, copy pointers to prediction frame too! -+ if (mpeg2dec->custom_fbuf && !mpeg2dec->fbuf[1]->buf[0]){ -+ mpeg2dec->fbuf[1]->buf[0]=buf[0]; -+ mpeg2dec->fbuf[1]->buf[1]=buf[1]; -+ mpeg2dec->fbuf[1]->buf[2]=buf[2]; -+ mpeg2dec->fbuf[1]->id=NULL; -+ } -+// printf("libmpeg2: FBUF 0:%p 1:%p 2:%p\n", -+// mpeg2dec->fbuf[0]->buf[0],mpeg2dec->fbuf[1]->buf[0],mpeg2dec->fbuf[2]->buf[0]); - } - - void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf) ---- libmpeg2/header.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/header.c 2006-06-16 20:12:50.000000000 +0200 -@@ -100,6 +104,9 @@ - mpeg2dec->decoder.convert = NULL; - mpeg2dec->decoder.convert_id = NULL; - mpeg2dec->picture = mpeg2dec->pictures; -+ memset(&mpeg2dec->fbuf_alloc[0].fbuf, 0, sizeof(mpeg2_fbuf_t)); -+ memset(&mpeg2dec->fbuf_alloc[1].fbuf, 0, sizeof(mpeg2_fbuf_t)); -+ memset(&mpeg2dec->fbuf_alloc[2].fbuf, 0, sizeof(mpeg2_fbuf_t)); - mpeg2dec->fbuf[0] = &mpeg2dec->fbuf_alloc[0].fbuf; - mpeg2dec->fbuf[1] = &mpeg2dec->fbuf_alloc[1].fbuf; - mpeg2dec->fbuf[2] = &mpeg2dec->fbuf_alloc[2].fbuf; -@@ -272,9 +272,11 @@ - if (!(buffer[2] & 2)) /* missing marker_bit */ - return 1; - -- sequence->display_width = (buffer[1] << 6) | (buffer[2] >> 2); -- sequence->display_height = -- ((buffer[2]& 1 ) << 13) | (buffer[3] << 5) | (buffer[4] >> 3); -+ if( (buffer[1] << 6) | (buffer[2] >> 2) ) -+ sequence->display_width = (buffer[1] << 6) | (buffer[2] >> 2); -+ if( ((buffer[2]& 1 ) << 13) | (buffer[3] << 5) | (buffer[4] >> 3) ) -+ sequence->display_height = -+ ((buffer[2]& 1 ) << 13) | (buffer[3] << 5) | (buffer[4] >> 3); - - return 0; - } -@@ -551,6 +558,7 @@ - if (!(mpeg2dec->sequence.flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE)) { - picture->nb_fields = (buffer[3] & 2) ? 3 : 2; - flags |= (buffer[3] & 128) ? PIC_FLAG_TOP_FIELD_FIRST : 0; -+ flags |= (buffer[3] & 2) ? PIC_FLAG_REPEAT_FIRST_FIELD : 0; - } else - picture->nb_fields = (buffer[3]&2) ? ((buffer[3]&128) ? 6 : 4) : 2; - break; -@@ -799,6 +807,7 @@ - mpeg2dec->scaled[index] = mpeg2dec->q_scale_type; - for (i = 0; i < 32; i++) { - k = mpeg2dec->q_scale_type ? non_linear_scale[i] : (i << 1); -+ decoder->quantizer_scales[i] = k; - for (j = 0; j < 64; j++) - decoder->quantizer_prescale[index][i][j] = - k * mpeg2dec->quantizer_matrix[index][j]; ---- libmpeg2/idct.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/idct.c 2006-06-16 20:12:50.000000000 +0200 -@@ -66,7 +70,7 @@ - } while (0) - #endif - --static void inline idct_row (int16_t * const block) -+static inline void idct_row (int16_t * const block) - { - int d0, d1, d2, d3; - int a0, a1, a2, a3, b0, b1, b2, b3; -@@ -119,7 +123,7 @@ - block[7] = (a0 - b0) >> 12; - } - --static void inline idct_col (int16_t * const block) -+static inline void idct_col (int16_t * const block) - { - int d0, d1, d2, d3; - int a0, a1, a2, a3, b0, b1, b2, b3; -@@ -239,12 +239,15 @@ - - void mpeg2_idct_init (uint32_t accel) - { --#ifdef ARCH_X86 -+#ifdef HAVE_MMX2 - if (accel & MPEG2_ACCEL_X86_MMXEXT) { - mpeg2_idct_copy = mpeg2_idct_copy_mmxext; - mpeg2_idct_add = mpeg2_idct_add_mmxext; - mpeg2_idct_mmx_init (); -- } else if (accel & MPEG2_ACCEL_X86_MMX) { -+ } else -+#endif -+#ifdef HAVE_MMX -+ if (accel & MPEG2_ACCEL_X86_MMX) { - mpeg2_idct_copy = mpeg2_idct_copy_mmx; - mpeg2_idct_add = mpeg2_idct_add_mmx; - mpeg2_idct_mmx_init (); -@@ -254,11 +261,14 @@ - } else - #endif - #ifdef ARCH_ALPHA -+#ifdef CAN_COMPILE_ALPHA_MVI - if (accel & MPEG2_ACCEL_ALPHA_MVI) { - mpeg2_idct_copy = mpeg2_idct_copy_mvi; - mpeg2_idct_add = mpeg2_idct_add_mvi; - mpeg2_idct_alpha_init (); -- } else if (accel & MPEG2_ACCEL_ALPHA) { -+ } else -+#endif -+ if (accel & MPEG2_ACCEL_ALPHA) { - int i; - - mpeg2_idct_copy = mpeg2_idct_copy_alpha; ---- libmpeg2/idct_alpha.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/idct_alpha.c 2006-06-16 20:12:50.000000000 +0200 -@@ -59,7 +63,7 @@ - } while (0) - #endif - --static void inline idct_row (int16_t * const block) -+static inline void idct_row (int16_t * const block) - { - uint64_t l, r; - int_fast32_t d0, d1, d2, d3; -@@ -116,7 +120,7 @@ - block[7] = (a0 - b0) >> 12; - } - --static void inline idct_col (int16_t * const block) -+static inline void idct_col (int16_t * const block) - { - int_fast32_t d0, d1, d2, d3; - int_fast32_t a0, a1, a2, a3, b0, b1, b2, b3; -@@ -157,6 +161,7 @@ - block[8*7] = (a0 - b0) >> 17; - } - -+#ifdef CAN_COMPILE_ALPHA_MVI - void mpeg2_idct_copy_mvi (int16_t * block, uint8_t * dest, const int stride) - { - uint64_t clampmask; -@@ -289,6 +294,7 @@ - stq (p7, dest + 7 * stride); - } - } -+#endif - - void mpeg2_idct_copy_alpha (int16_t * block, uint8_t * dest, const int stride) - { ---- libmpeg2/idct_mmx.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/idct_mmx.c 2006-06-16 20:12:50.000000000 +0200 -@@ -23,7 +27,7 @@ - - #include "config.h" - --#ifdef ARCH_X86 -+#if defined(ARCH_X86) || defined(ARCH_X86_64) - - #include - ---- libmpeg2/motion_comp.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/motion_comp.c 2006-06-16 20:12:50.000000000 +0200 -@@ -37,16 +37,22 @@ - - void mpeg2_mc_init (uint32_t accel) - { --#ifdef ARCH_X86 -+#ifdef HAVE_MMX2 - if (accel & MPEG2_ACCEL_X86_MMXEXT) - mpeg2_mc = mpeg2_mc_mmxext; -- else if (accel & MPEG2_ACCEL_X86_3DNOW) -+ else -+#endif -+#ifdef HAVE_3DNOW -+ if (accel & MPEG2_ACCEL_X86_3DNOW) - mpeg2_mc = mpeg2_mc_3dnow; -- else if (accel & MPEG2_ACCEL_X86_MMX) -+ else -+#endif -+#ifdef HAVE_MMX -+ if (accel & MPEG2_ACCEL_X86_MMX) - mpeg2_mc = mpeg2_mc_mmx; -- elseo -+ else - #endif --#ifdef ARCH_PPC -+#if defined(ARCH_PPC) && defined(HAVE_ALTIVEC) - if (accel & MPEG2_ACCEL_PPC_ALTIVEC) - mpeg2_mc = mpeg2_mc_altivec; - else -@@ -52,7 +62,7 @@ - mpeg2_mc = mpeg2_mc_alpha; - else - #endif --#ifdef ARCH_SPARC -+#if defined(ARCH_SPARC) && defined(HAVE_VIS) - if (accel & MPEG2_ACCEL_SPARC_VIS) - mpeg2_mc = mpeg2_mc_vis; - else ---- libmpeg2/motion_comp_mmx.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/motion_comp_mmx.c 2006-06-16 20:12:50.000000000 +0200 -@@ -23,7 +27,7 @@ - - #include "config.h" - --#ifdef ARCH_X86 -+#if defined(ARCH_X86) || defined(ARCH_X86_64) - - #include - ---- include/mpeg2.h 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/mpeg2.h 2006-06-16 20:12:50.000000000 +0200 -@@ -82,6 +86,7 @@ - #define PIC_FLAG_COMPOSITE_DISPLAY 32 - #define PIC_FLAG_SKIP 64 - #define PIC_FLAG_TAGS 128 -+#define PIC_FLAG_REPEAT_FIRST_FIELD 256 - #define PIC_MASK_COMPOSITE_DISPLAY 0xfffff000 - - typedef struct mpeg2_picture_s { -@@ -154,6 +159,7 @@ - #define MPEG2_ACCEL_X86_MMX 1 - #define MPEG2_ACCEL_X86_3DNOW 2 - #define MPEG2_ACCEL_X86_MMXEXT 4 -+#define MPEG2_ACCEL_X86_SSE2 8 - #define MPEG2_ACCEL_PPC_ALTIVEC 1 - #define MPEG2_ACCEL_ALPHA 1 - #define MPEG2_ACCEL_ALPHA_MVI 2 ---- libmpeg2/mpeg2_internal.h 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/mpeg2_internal.h 2006-06-16 20:12:50.000000000 +0200 -@@ -144,6 +148,12 @@ - int second_field; - - int mpeg1; -+ -+ /* for MPlayer: */ -+ int quantizer_scales[32]; -+ int quantizer_scale; -+ char* quant_store; -+ int quant_stride; - }; - - typedef struct { -@@ -214,6 +224,10 @@ - int8_t q_scale_type, scaled[4]; - uint8_t quantizer_matrix[4][64]; - uint8_t new_quantizer_matrix[4][64]; -+ -+ /* for MPlayer: */ -+ unsigned char *pending_buffer; -+ int pending_length; - }; - - typedef struct { ---- libmpeg2/slice.c 2006-06-16 20:12:26.000000000 +0200 -+++ libmpeg2/slice.c 2006-06-16 20:12:50.000000000 +0200 -@@ -142,6 +146,7 @@ - - quantizer_scale_code = UBITS (bit_buf, 5); - DUMPBITS (bit_buf, bits, 5); -+ decoder->quantizer_scale = decoder->quantizer_scales[quantizer_scale_code]; - - decoder->quantizer_matrix[0] = - decoder->quantizer_prescale[0][quantizer_scale_code]; -@@ -1252,7 +1252,7 @@ - ref[0] + offset, decoder->stride, 16); \ - table[4] (decoder->dest[1] + decoder->offset, \ - ref[1] + offset, decoder->stride, 16); \ -- table[4] (decoder->dest[2] + (decoder->offset >> 1), \ -+ table[4] (decoder->dest[2] + decoder->offset, \ - ref[2] + offset, decoder->stride, 16) - - #define bit_buf (decoder->bitstream_buf) -@@ -1568,6 +1569,18 @@ - - #define NEXT_MACROBLOCK \ - do { \ -+ if(decoder->quant_store) { \ -+ if (decoder->picture_structure == TOP_FIELD) \ -+ decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \ -+ +(decoder->offset>>4)] = decoder->quantizer_scale; \ -+ else if (decoder->picture_structure == BOTTOM_FIELD) \ -+ decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \ -+ + decoder->quant_stride \ -+ +(decoder->offset>>4)] = decoder->quantizer_scale; \ -+ else \ -+ decoder->quant_store[decoder->quant_stride*(decoder->v_offset>>4) \ -+ +(decoder->offset>>4)] = decoder->quantizer_scale; \ -+ } \ - decoder->offset += 16; \ - if (decoder->offset == decoder->width) { \ - do { /* just so we can use the break statement */ \ diff --git a/libmpeg2/libmpeg-0.4.1.diff b/libmpeg2/libmpeg-0.4.1.diff new file mode 100644 index 0000000000..7ea7e27784 --- /dev/null +++ b/libmpeg2/libmpeg-0.4.1.diff @@ -0,0 +1,375 @@ +--- include/attributes.h 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/attributes.h 2006-06-16 20:12:50.000000000 +0200 +@@ -25,7 +29,7 @@ + #ifdef ATTRIBUTE_ALIGNED_MAX + #define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) + #else +-#define ATTR_ALIGN(align) ++#define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((16 < align) ? 16 : align))) + #endif + + #ifdef HAVE_BUILTIN_EXPECT +--- libmpeg2/cpu_accel.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/cpu_accel.c 2006-06-16 20:12:50.000000000 +0200 +@@ -22,6 +26,7 @@ + */ + + #include "config.h" ++#include "cpudetect.h" + + #include + +@@ -30,9 +35,17 @@ + #include "mpeg2_internal.h" + + #ifdef ACCEL_DETECT +-#ifdef ARCH_X86 ++#if defined(ARCH_X86) || defined(ARCH_X86_64) ++ ++/* MPlayer imports libmpeg2 as decoder, which detects MMX / 3DNow! ++ * instructions via assembly. However, it is regarded as duplicaed work ++ * in MPlayer, so that we enforce to use MPlayer's implementation. ++ */ ++#define USE_MPLAYER_CPUDETECT ++ + static inline uint32_t arch_accel (void) + { ++#if !defined(USE_MPLAYER_CPUDETECT) + uint32_t eax, ebx, ecx, edx; + int AMD; + uint32_t caps; +@@ -105,10 +118,24 @@ + caps |= MPEG2_ACCEL_X86_MMXEXT; + + return caps; ++#else /* USE_MPLAYER_CPUDETECT: Use MPlayer's cpu capability property */ ++ caps = 0; ++ if (gCpuCaps.hasMMX) ++ caps |= MPEG2_ACCEL_X86_MMX; ++ if (gCpuCaps.hasSSE2) ++ caps |= MPEG2_ACCEL_X86_SSE2; ++ if (gCpuCaps.hasMMX2) ++ caps |= MPEG2_ACCEL_X86_MMXEXT; ++ if (gCpuCaps.has3DNow) ++ caps |= MPEG2_ACCEL_X86_3DNOW; ++ ++ return caps; ++ ++#endif /* USE_MPLAYER_CPUDETECT */ + } +-#endif /* ARCH_X86 */ ++#endif /* ARCH_X86 || ARCH_X86_64 */ + +-#if defined(ARCH_PPC) || defined(ARCH_SPARC) ++#if defined(ARCH_PPC) || (defined(ARCH_SPARC) && defined(HAVE_VIS)) + #include + #include + +@@ -166,10 +166,10 @@ + + canjump = 1; + +-#ifdef HAVE_ALTIVEC_H /* gnu */ +-#define VAND(a,b,c) "vand " #a "," #b "," #c "\n\t" +-#else /* apple */ ++#if defined( __APPLE_CC__ ) && defined( __APPLE_ALTIVEC__ ) /* apple */ + #define VAND(a,b,c) "vand v" #a ",v" #b ",v" #c "\n\t" ++#else /* gnu */ ++#define VAND(a,b,c) "vand " #a "," #b "," #c "\n\t" + #endif + asm volatile ("mtspr 256, %0\n\t" + VAND (0, 0, 0) +@@ -195,6 +222,7 @@ + #ifdef ARCH_ALPHA + static inline uint32_t arch_accel (void) + { ++#ifdef CAN_COMPILE_ALPHA_MVI + uint64_t no_mvi; + + asm volatile ("amask %1, %0" +@@ -202,6 +230,9 @@ + : "rI" (256)); /* AMASK_MVI */ + return no_mvi ? MPEG2_ACCEL_ALPHA : (MPEG2_ACCEL_ALPHA | + MPEG2_ACCEL_ALPHA_MVI); ++#else ++ return MPEG2_ACCEL_ALPHA; ++#endif + } + #endif /* ARCH_ALPHA */ + #endif /* ACCEL_DETECT */ +@@ -212,7 +243,7 @@ + + accel = 0; + #ifdef ACCEL_DETECT +-#if defined (ARCH_X86) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC) ++#if defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC) + accel = arch_accel (); + #endif + #endif +--- libmpeg2/cpu_state.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/cpu_state.c 2006-06-16 20:12:50.000000000 +0200 +@@ -29,14 +33,14 @@ + #include "mpeg2.h" + #include "attributes.h" + #include "mpeg2_internal.h" +-#ifdef ARCH_X86 ++#if defined(ARCH_X86) || defined(ARCH_X86_64) + #include "mmx.h" + #endif + + void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL; + void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL; + +-#ifdef ARCH_X86 ++#if defined(ARCH_X86) || defined(ARCH_X86_64) + static void state_restore_mmx (cpu_state_t * state) + { + emms (); +@@ -115,12 +119,12 @@ + + void mpeg2_cpu_state_init (uint32_t accel) + { +-#ifdef ARCH_X86 ++#if defined(ARCH_X86) || defined(ARCH_X86_64) + if (accel & MPEG2_ACCEL_X86_MMX) { + mpeg2_cpu_state_restore = state_restore_mmx; + } + #endif +-#ifdef ARCH_PPC ++#if defined(ARCH_PPC) && defined(HAVE_ALTIVEC) + if (accel & MPEG2_ACCEL_PPC_ALTIVEC) { + mpeg2_cpu_state_save = state_save_altivec; + mpeg2_cpu_state_restore = state_restore_altivec; +--- libmpeg2/decode.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/decode.c 2006-06-16 20:12:50.000000000 +0200 +@@ -351,6 +355,15 @@ + fbuf->buf[1] = buf[1]; + fbuf->buf[2] = buf[2]; + fbuf->id = id; ++ // HACK! FIXME! At first I frame, copy pointers to prediction frame too! ++ if (mpeg2dec->custom_fbuf && !mpeg2dec->fbuf[1]->buf[0]){ ++ mpeg2dec->fbuf[1]->buf[0]=buf[0]; ++ mpeg2dec->fbuf[1]->buf[1]=buf[1]; ++ mpeg2dec->fbuf[1]->buf[2]=buf[2]; ++ mpeg2dec->fbuf[1]->id=NULL; ++ } ++// printf("libmpeg2: FBUF 0:%p 1:%p 2:%p\n", ++// mpeg2dec->fbuf[0]->buf[0],mpeg2dec->fbuf[1]->buf[0],mpeg2dec->fbuf[2]->buf[0]); + } + + void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf) +--- libmpeg2/header.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/header.c 2006-06-16 20:12:50.000000000 +0200 +@@ -100,6 +104,9 @@ + mpeg2dec->decoder.convert = NULL; + mpeg2dec->decoder.convert_id = NULL; + mpeg2dec->picture = mpeg2dec->pictures; ++ memset(&mpeg2dec->fbuf_alloc[0].fbuf, 0, sizeof(mpeg2_fbuf_t)); ++ memset(&mpeg2dec->fbuf_alloc[1].fbuf, 0, sizeof(mpeg2_fbuf_t)); ++ memset(&mpeg2dec->fbuf_alloc[2].fbuf, 0, sizeof(mpeg2_fbuf_t)); + mpeg2dec->fbuf[0] = &mpeg2dec->fbuf_alloc[0].fbuf; + mpeg2dec->fbuf[1] = &mpeg2dec->fbuf_alloc[1].fbuf; + mpeg2dec->fbuf[2] = &mpeg2dec->fbuf_alloc[2].fbuf; +@@ -551,6 +558,7 @@ + if (!(mpeg2dec->sequence.flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE)) { + picture->nb_fields = (buffer[3] & 2) ? 3 : 2; + flags |= (buffer[3] & 128) ? PIC_FLAG_TOP_FIELD_FIRST : 0; ++ flags |= (buffer[3] & 2) ? PIC_FLAG_REPEAT_FIRST_FIELD : 0; + } else + picture->nb_fields = (buffer[3]&2) ? ((buffer[3]&128) ? 6 : 4) : 2; + break; +@@ -799,6 +807,7 @@ + mpeg2dec->scaled[index] = mpeg2dec->q_scale_type; + for (i = 0; i < 32; i++) { + k = mpeg2dec->q_scale_type ? non_linear_scale[i] : (i << 1); ++ decoder->quantizer_scales[i] = k; + for (j = 0; j < 64; j++) + decoder->quantizer_prescale[index][i][j] = + k * mpeg2dec->quantizer_matrix[index][j]; +--- libmpeg2/idct.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/idct.c 2006-06-16 20:12:50.000000000 +0200 +@@ -239,12 +239,15 @@ + + void mpeg2_idct_init (uint32_t accel) + { +-#ifdef ARCH_X86 ++#ifdef HAVE_MMX2 + if (accel & MPEG2_ACCEL_X86_MMXEXT) { + mpeg2_idct_copy = mpeg2_idct_copy_mmxext; + mpeg2_idct_add = mpeg2_idct_add_mmxext; + mpeg2_idct_mmx_init (); +- } else if (accel & MPEG2_ACCEL_X86_MMX) { ++ } else ++#endif ++#ifdef HAVE_MMX ++ if (accel & MPEG2_ACCEL_X86_MMX) { + mpeg2_idct_copy = mpeg2_idct_copy_mmx; + mpeg2_idct_add = mpeg2_idct_add_mmx; + mpeg2_idct_mmx_init (); +@@ -254,11 +261,14 @@ + } else + #endif + #ifdef ARCH_ALPHA ++#ifdef CAN_COMPILE_ALPHA_MVI + if (accel & MPEG2_ACCEL_ALPHA_MVI) { + mpeg2_idct_copy = mpeg2_idct_copy_mvi; + mpeg2_idct_add = mpeg2_idct_add_mvi; + mpeg2_idct_alpha_init (); +- } else if (accel & MPEG2_ACCEL_ALPHA) { ++ } else ++#endif ++ if (accel & MPEG2_ACCEL_ALPHA) { + int i; + + mpeg2_idct_copy = mpeg2_idct_copy_alpha; +--- libmpeg2/idct_alpha.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/idct_alpha.c 2006-06-16 20:12:50.000000000 +0200 +@@ -157,6 +161,7 @@ + block[8*7] = (a0 - b0) >> 17; + } + ++#ifdef CAN_COMPILE_ALPHA_MVI + void mpeg2_idct_copy_mvi (int16_t * block, uint8_t * dest, const int stride) + { + uint64_t clampmask; +@@ -289,6 +294,7 @@ + stq (p7, dest + 7 * stride); + } + } ++#endif + + void mpeg2_idct_copy_alpha (int16_t * block, uint8_t * dest, const int stride) + { +--- libmpeg2/idct_mmx.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/idct_mmx.c 2006-06-16 20:12:50.000000000 +0200 +@@ -23,7 +27,7 @@ + + #include "config.h" + +-#ifdef ARCH_X86 ++#if defined(ARCH_X86) || defined(ARCH_X86_64) + + #include + +--- libmpeg2/motion_comp.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/motion_comp.c 2006-06-16 20:12:50.000000000 +0200 +@@ -37,16 +37,22 @@ + + void mpeg2_mc_init (uint32_t accel) + { +-#ifdef ARCH_X86 ++#ifdef HAVE_MMX2 + if (accel & MPEG2_ACCEL_X86_MMXEXT) + mpeg2_mc = mpeg2_mc_mmxext; +- else if (accel & MPEG2_ACCEL_X86_3DNOW) ++ else ++#endif ++#ifdef HAVE_3DNOW ++ if (accel & MPEG2_ACCEL_X86_3DNOW) + mpeg2_mc = mpeg2_mc_3dnow; +- else if (accel & MPEG2_ACCEL_X86_MMX) ++ else ++#endif ++#ifdef HAVE_MMX ++ if (accel & MPEG2_ACCEL_X86_MMX) + mpeg2_mc = mpeg2_mc_mmx; + else + #endif +-#ifdef ARCH_PPC ++#if defined(ARCH_PPC) && defined(HAVE_ALTIVEC) + if (accel & MPEG2_ACCEL_PPC_ALTIVEC) + mpeg2_mc = mpeg2_mc_altivec; + else +@@ -52,7 +62,7 @@ + mpeg2_mc = mpeg2_mc_alpha; + else + #endif +-#ifdef ARCH_SPARC ++#if defined(ARCH_SPARC) && defined(HAVE_VIS) + if (accel & MPEG2_ACCEL_SPARC_VIS) + mpeg2_mc = mpeg2_mc_vis; + else +--- libmpeg2/motion_comp_mmx.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/motion_comp_mmx.c 2006-06-16 20:12:50.000000000 +0200 +@@ -23,7 +27,7 @@ + + #include "config.h" + +-#ifdef ARCH_X86 ++#if defined(ARCH_X86) || defined(ARCH_X86_64) + + #include + +--- include/mpeg2.h 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/mpeg2.h 2006-06-16 20:12:50.000000000 +0200 +@@ -82,6 +86,7 @@ + #define PIC_FLAG_COMPOSITE_DISPLAY 32 + #define PIC_FLAG_SKIP 64 + #define PIC_FLAG_TAGS 128 ++#define PIC_FLAG_REPEAT_FIRST_FIELD 256 + #define PIC_MASK_COMPOSITE_DISPLAY 0xfffff000 + + typedef struct mpeg2_picture_s { +@@ -154,6 +159,7 @@ + #define MPEG2_ACCEL_X86_MMX 1 + #define MPEG2_ACCEL_X86_3DNOW 2 + #define MPEG2_ACCEL_X86_MMXEXT 4 ++#define MPEG2_ACCEL_X86_SSE2 8 + #define MPEG2_ACCEL_PPC_ALTIVEC 1 + #define MPEG2_ACCEL_ALPHA 1 + #define MPEG2_ACCEL_ALPHA_MVI 2 +--- libmpeg2/mpeg2_internal.h 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/mpeg2_internal.h 2006-06-16 20:12:50.000000000 +0200 +@@ -144,6 +148,12 @@ + int second_field; + + int mpeg1; ++ ++ /* for MPlayer: */ ++ int quantizer_scales[32]; ++ int quantizer_scale; ++ char* quant_store; ++ int quant_stride; + }; + + typedef struct { +@@ -214,6 +224,10 @@ + int8_t q_scale_type, scaled[4]; + uint8_t quantizer_matrix[4][64]; + uint8_t new_quantizer_matrix[4][64]; ++ ++ /* for MPlayer: */ ++ unsigned char *pending_buffer; ++ int pending_length; + }; + + typedef struct { +--- libmpeg2/slice.c 2006-06-16 20:12:26.000000000 +0200 ++++ libmpeg2/slice.c 2006-06-16 20:12:50.000000000 +0200 +@@ -142,6 +146,7 @@ + + quantizer_scale_code = UBITS (bit_buf, 5); + DUMPBITS (bit_buf, bits, 5); ++ decoder->quantizer_scale = decoder->quantizer_scales[quantizer_scale_code]; + + decoder->quantizer_matrix[0] = + decoder->quantizer_prescale[0][quantizer_scale_code]; +@@ -1568,6 +1569,18 @@ + + #define NEXT_MACROBLOCK \ + do { \ ++ if(decoder->quant_store) { \ ++ if (decoder->picture_structure == TOP_FIELD) \ ++ decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \ ++ +(decoder->offset>>4)] = decoder->quantizer_scale; \ ++ else if (decoder->picture_structure == BOTTOM_FIELD) \ ++ decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \ ++ + decoder->quant_stride \ ++ +(decoder->offset>>4)] = decoder->quantizer_scale; \ ++ else \ ++ decoder->quant_store[decoder->quant_stride*(decoder->v_offset>>4) \ ++ +(decoder->offset>>4)] = decoder->quantizer_scale; \ ++ } \ + decoder->offset += 16; \ + if (decoder->offset == decoder->width) { \ + do { /* just so we can use the break statement */ \ diff --git a/libmpeg2/motion_comp.c b/libmpeg2/motion_comp.c index b6cc4bfcb9..a2fd71fec4 100644 --- a/libmpeg2/motion_comp.c +++ b/libmpeg2/motion_comp.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/motion_comp_mmx.c b/libmpeg2/motion_comp_mmx.c index 8c47a142a8..4f2aacfc84 100644 --- a/libmpeg2/motion_comp_mmx.c +++ b/libmpeg2/motion_comp_mmx.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ @@ -67,7 +67,7 @@ static mmx_t round4 = {0x0002000200020002LL}; * unrolling will help */ -static inline void mmx_zero_reg (void) +static inline void mmx_zero_reg () { /* load 0 into mm0 */ pxor_r2r (mm0, mm0); diff --git a/libmpeg2/mpeg2.h b/libmpeg2/mpeg2.h index af950df238..923c9facf6 100644 --- a/libmpeg2/mpeg2.h +++ b/libmpeg2/mpeg2.h @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ @@ -29,7 +29,7 @@ #define MPEG2_H #define MPEG2_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c)) -#define MPEG2_RELEASE MPEG2_VERSION (0, 4, 0) /* 0.4.0 */ +#define MPEG2_RELEASE MPEG2_VERSION (0, 4, 1) /* 0.4.1 */ #define SEQ_FLAG_MPEG2 1 #define SEQ_FLAG_CONSTRAINED_PARAMETERS 2 diff --git a/libmpeg2/mpeg2_internal.h b/libmpeg2/mpeg2_internal.h index 2511e447ab..9238f630d0 100644 --- a/libmpeg2/mpeg2_internal.h +++ b/libmpeg2/mpeg2_internal.h @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ diff --git a/libmpeg2/slice.c b/libmpeg2/slice.c index 31a8250891..2b644540cd 100644 --- a/libmpeg2/slice.c +++ b/libmpeg2/slice.c @@ -21,7 +21,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes. + * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ * $Id$ */ -- cgit v1.2.3