From 68f481d7413f6642bcf3ac4ae46255cbfc8d8ddc Mon Sep 17 00:00:00 2001 From: diego Date: Tue, 4 May 2010 09:11:01 +0000 Subject: alternative LGPL-licensed, MMX-optimized YUV to RGB conversion routines written by Kostya Shishkov git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31135 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libswscale/Makefile | 3 +- libswscale/x86/yuv2rgb_mmx.c | 8 + libswscale/x86/yuv2rgb_template2.c | 459 +++++++++++++++++++++++++++++++++++++ libswscale/yuv2rgb.c | 2 +- 4 files changed, 469 insertions(+), 3 deletions(-) create mode 100644 libswscale/x86/yuv2rgb_template2.c diff --git a/libswscale/Makefile b/libswscale/Makefile index 9ae28e07ef..6976079686 100644 --- a/libswscale/Makefile +++ b/libswscale/Makefile @@ -12,10 +12,9 @@ OBJS-$(ARCH_BFIN) += bfin/internal_bfin.o \ bfin/yuv2rgb_bfin.o OBJS-$(CONFIG_MLIB) += mlib/yuv2rgb_mlib.o OBJS-$(HAVE_ALTIVEC) += ppc/yuv2rgb_altivec.o +OBJS-$(HAVE_MMX) += x86/yuv2rgb_mmx.o OBJS-$(HAVE_VIS) += sparc/yuv2rgb_vis.o -MMX-OBJS-$(CONFIG_GPL) += x86/yuv2rgb_mmx.o \ - TESTPROGS = colorspace swscale DIRS = bfin mlib ppc sparc x86 diff --git a/libswscale/x86/yuv2rgb_mmx.c b/libswscale/x86/yuv2rgb_mmx.c index 1e69df1641..d042421ff7 100644 --- a/libswscale/x86/yuv2rgb_mmx.c +++ b/libswscale/x86/yuv2rgb_mmx.c @@ -49,14 +49,22 @@ DECLARE_ASM_CONST(8, uint64_t, mmx_grnmask) = 0xfcfcfcfcfcfcfcfcULL; #define HAVE_MMX2 0 #define HAVE_AMD3DNOW 0 #define RENAME(a) a ## _MMX +#if CONFIG_GPL #include "yuv2rgb_template.c" +#else +#include "yuv2rgb_template2.c" +#endif //MMX2 versions #undef RENAME #undef HAVE_MMX2 #define HAVE_MMX2 1 #define RENAME(a) a ## _MMX2 +#if CONFIG_GPL #include "yuv2rgb_template.c" +#else +#include "yuv2rgb_template2.c" +#endif SwsFunc ff_yuv2rgb_init_mmx(SwsContext *c) { diff --git a/libswscale/x86/yuv2rgb_template2.c b/libswscale/x86/yuv2rgb_template2.c new file mode 100644 index 0000000000..f391cde1b1 --- /dev/null +++ b/libswscale/x86/yuv2rgb_template2.c @@ -0,0 +1,459 @@ +/* + * software YUV to RGB converter + * + * Copyright (C) 2001-2007 Michael Niedermayer + * (c) 2010 Konstantin Shishkov + * + * 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 + */ + +#undef MOVNTQ +#undef EMMS +#undef SFENCE + +#if HAVE_AMD3DNOW +/* On K6 femms is faster than emms. On K7 femms is directly mapped to emms. */ +#define EMMS "femms" +#else +#define EMMS "emms" +#endif + +#if HAVE_MMX2 +#define MOVNTQ "movntq" +#define SFENCE "sfence" +#else +#define MOVNTQ "movq" +#define SFENCE " # nop" +#endif + +#define REG_BLUE "0" +#define REG_RED "1" +#define REG_GREEN "2" +#define REG_ALPHA "3" + +#define YUV2RGB_LOOP(depth) \ + h_size = (c->dstW + 7) & ~7; \ + if (h_size * depth > FFABS(dstStride[0])) \ + h_size -= 8; \ + \ + if (c->srcFormat == PIX_FMT_YUV422P) { \ + srcStride[1] *= 2; \ + srcStride[2] *= 2; \ + } \ + \ + __asm__ volatile ("pxor %mm4, %mm4\n\t"); \ + for (y = 0; y < srcSliceH; y++) { \ + uint8_t *image = dst[0] + (y + srcSliceY) * dstStride[0]; \ + const uint8_t *py = src[0] + y * srcStride[0]; \ + const uint8_t *pu = src[1] + (y >> 1) * srcStride[1]; \ + const uint8_t *pv = src[2] + (y >> 1) * srcStride[2]; \ + x86_reg index = -h_size / 2; \ + +#define YUV2RGB_INITIAL_LOAD \ + __asm__ volatile ( \ + "movq (%5, %0, 2), %%mm6\n\t" \ + "movd (%2, %0), %%mm0\n\t" \ + "movd (%3, %0), %%mm1\n\t" \ + "1: \n\t" \ + +/* YUV2RGB core + * Conversion is performed in usual way: + * R = Y' * Ycoef + Vred * V' + * G = Y' * Ycoef + Vgreen * V' + Ugreen * U' + * B = Y' * Ycoef + Ublue * U' + * + * where X' = X * 8 - Xoffset (multiplication is performed to increase + * precision a bit). + * Since it operates in YUV420 colorspace, Y component is additionally + * split into Y1 and Y2 for even and odd pixels. + * + * Input: + * mm0 - U (4 elems), mm1 - V (4 elems), mm6 - Y (8 elems), mm4 - zero register + * Output: + * mm1 - R, mm2 - G, mm0 - B + */ +#define YUV2RGB \ + /* convert Y, U, V into Y1', Y2', U', V' */ \ + "movq %%mm6, %%mm7\n\t" \ + "punpcklbw %%mm4, %%mm0\n\t" \ + "punpcklbw %%mm4, %%mm1\n\t" \ + "pand "MANGLE(mmx_00ffw)", %%mm6\n\t" \ + "psrlw $8, %%mm7\n\t" \ + "psllw $3, %%mm0\n\t" \ + "psllw $3, %%mm1\n\t" \ + "psllw $3, %%mm6\n\t" \ + "psllw $3, %%mm7\n\t" \ + "psubsw "U_OFFSET"(%4), %%mm0\n\t" \ + "psubsw "V_OFFSET"(%4), %%mm1\n\t" \ + "psubw "Y_OFFSET"(%4), %%mm6\n\t" \ + "psubw "Y_OFFSET"(%4), %%mm7\n\t" \ +\ + /* multiply by coefficients */ \ + "movq %%mm0, %%mm2\n\t" \ + "movq %%mm1, %%mm3\n\t" \ + "pmulhw "UG_COEFF"(%4), %%mm2\n\t" \ + "pmulhw "VG_COEFF"(%4), %%mm3\n\t" \ + "pmulhw "Y_COEFF" (%4), %%mm6\n\t" \ + "pmulhw "Y_COEFF" (%4), %%mm7\n\t" \ + "pmulhw "UB_COEFF"(%4), %%mm0\n\t" \ + "pmulhw "VR_COEFF"(%4), %%mm1\n\t" \ + "paddsw %%mm3, %%mm2\n\t" \ + /* now: mm0 = UB, mm1 = VR, mm2 = CG */ \ + /* mm6 = Y1, mm7 = Y2 */ \ +\ + /* produce RGB */ \ + "movq %%mm7, %%mm3\n\t" \ + "movq %%mm7, %%mm5\n\t" \ + "paddsw %%mm0, %%mm3\n\t" \ + "paddsw %%mm1, %%mm5\n\t" \ + "paddsw %%mm2, %%mm7\n\t" \ + "paddsw %%mm6, %%mm0\n\t" \ + "paddsw %%mm6, %%mm1\n\t" \ + "paddsw %%mm6, %%mm2\n\t" \ +\ + /* pack and interleave even/odd pixels */ \ + "packuswb %%mm0, %%mm0\n\t" \ + "packuswb %%mm1, %%mm1\n\t" \ + "packuswb %%mm2, %%mm2\n\t" \ + "packuswb %%mm3, %%mm3\n\t" \ + "packuswb %%mm5, %%mm5\n\t" \ + "packuswb %%mm7, %%mm7\n\t" \ + "punpcklbw %%mm3, %%mm0\n\t" \ + "punpcklbw %%mm5, %%mm1\n\t" \ + "punpcklbw %%mm7, %%mm2\n\t" \ + +#define YUV2RGB_ENDLOOP(depth) \ + "movq 8 (%5, %0, 2), %%mm6\n\t" \ + "movd 4 (%3, %0), %%mm1\n\t" \ + "movd 4 (%2, %0), %%mm0\n\t" \ + "add $"AV_STRINGIFY(depth * 8)", %1\n\t" \ + "add $4, %0\n\t" \ + "js 1b\n\t" \ + +#define YUV2RGB_OPERANDS \ + : "+r" (index), "+r" (image) \ + : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), \ + "r" (py - 2*index) \ + ); \ + } \ + +#define YUV2RGB_OPERANDS_ALPHA \ + : "+r" (index), "+r" (image) \ + : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), \ + "r" (py - 2*index), "r" (pa - 2*index) \ + ); \ + } \ + +#define YUV2RGB_ENDFUNC \ + __asm__ volatile (SFENCE"\n\t"EMMS); \ + return srcSliceH; \ + + +#define RGB_PACK16(gmask, gshift, rshift) \ + "pand "MANGLE(mmx_redmask)", %%mm0\n\t" \ + "pand "MANGLE(mmx_redmask)", %%mm1\n\t" \ + "psrlw $3, %%mm0\n\t" \ + "pand "MANGLE(gmask)", %%mm2\n\t" \ + "movq %%mm0, %%mm5\n\t" \ + "movq %%mm1, %%mm6\n\t" \ + "movq %%mm2, %%mm7\n\t" \ + "punpcklbw %%mm4, %%mm0\n\t" \ + "punpcklbw %%mm4, %%mm1\n\t" \ + "punpcklbw %%mm4, %%mm2\n\t" \ + "punpckhbw %%mm4, %%mm5\n\t" \ + "punpckhbw %%mm4, %%mm6\n\t" \ + "punpckhbw %%mm4, %%mm7\n\t" \ + "psllw $"rshift", %%mm1\n\t" \ + "psllw $"rshift", %%mm6\n\t" \ + "psllw $"gshift", %%mm2\n\t" \ + "psllw $"gshift", %%mm7\n\t" \ + "por %%mm1, %%mm0\n\t" \ + "por %%mm6, %%mm5\n\t" \ + "por %%mm2, %%mm0\n\t" \ + "por %%mm7, %%mm5\n\t" \ + MOVNTQ " %%mm0, (%1)\n\t" \ + MOVNTQ " %%mm5, 8(%1)\n\t" \ + +#define DITHER_RGB \ + "paddusb "BLUE_DITHER"(%4), %%mm0\n\t" \ + "paddusb "GREEN_DITHER"(%4), %%mm2\n\t" \ + "paddusb "RED_DITHER"(%4), %%mm1\n\t" \ + +static inline int RENAME(yuv420_rgb15)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ + int y, h_size; + + YUV2RGB_LOOP(2) + +#ifdef DITHER1XBPP + c->blueDither = ff_dither8[y & 1]; + c->greenDither = ff_dither8[y & 1]; + c->redDither = ff_dither8[(y + 1) & 1]; +#endif + + YUV2RGB_INITIAL_LOAD + YUV2RGB +#ifdef DITHER1XBPP + DITHER_RGB +#endif + RGB_PACK16(mmx_redmask, "2", "7") + + YUV2RGB_ENDLOOP(2) + YUV2RGB_OPERANDS + YUV2RGB_ENDFUNC +} + +static inline int RENAME(yuv420_rgb16)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ + int y, h_size; + + YUV2RGB_LOOP(2) + +#ifdef DITHER1XBPP + c->blueDither = ff_dither8[y & 1]; + c->greenDither = ff_dither4[y & 1]; + c->redDither = ff_dither8[(y + 1) & 1]; +#endif + + YUV2RGB_INITIAL_LOAD + YUV2RGB +#ifdef DITHER1XBPP + DITHER_RGB +#endif + RGB_PACK16(mmx_grnmask, "3", "8") + + YUV2RGB_ENDLOOP(2) + YUV2RGB_OPERANDS + YUV2RGB_ENDFUNC +} + + +#define RGB_PACK24(red, blue) \ + /* generate first packed RGB octet */ \ + "movq %%mm2, %%mm5\n\t" \ + "movq %%mm"blue", %%mm6\n\t" \ + "movq %%mm"red", %%mm7\n\t" \ + "punpcklbw %%mm5, %%mm6\n\t" \ + "punpcklbw %%mm4, %%mm7\n\t" \ + "movq %%mm6, %%mm3\n\t" \ + "punpcklwd %%mm7, %%mm6\n\t" \ + "psrlq $32, %%mm3\n\t" \ + "movq %%mm6, %%mm5\n\t" \ + "psllq $40, %%mm6\n\t" \ + "psllq $48, %%mm3\n\t" \ + "psrlq $32, %%mm5\n\t" \ + "psrlq $40, %%mm6\n\t" \ + "psllq $24, %%mm5\n\t" \ + "por %%mm3, %%mm6\n\t" \ + "por %%mm5, %%mm6\n\t" \ + MOVNTQ " %%mm6, (%1)\n\t" \ +\ + /* generate second packed RGB octet */ \ + "movq %%mm"red", %%mm7\n\t" \ + "movq %%mm2, %%mm5\n\t" \ + "movq %%mm"blue", %%mm6\n\t" \ + "punpcklbw %%mm4, %%mm7\n\t" \ + "punpcklbw %%mm5, %%mm6\n\t" \ + "movq %%mm7, %%mm3\n\t" \ + "punpckhwd %%mm7, %%mm6\n\t" \ + "psllq $16, %%mm3\n\t" \ + "psrlq $32, %%mm6\n\t" \ + "psrlq $48, %%mm3\n\t" \ + "psllq $8, %%mm6\n\t" \ + "movq %%mm"red", %%mm7\n\t" \ + "por %%mm6, %%mm3\n\t" \ + "movq %%mm"blue", %%mm6\n\t" \ + "movq %%mm2, %%mm5\n\t" \ + "punpckhbw %%mm4, %%mm7\n\t" \ + "punpckhbw %%mm5, %%mm6\n\t" \ + "movq %%mm6, %%mm5\n\t" \ + "punpcklwd %%mm7, %%mm6\n\t" \ + "psrlq $16, %%mm5\n\t" \ + "psllq $56, %%mm5\n\t" \ + "por %%mm5, %%mm3\n\t" \ + "psllq $32, %%mm6\n\t" \ + "por %%mm6, %%mm3\n\t" \ + MOVNTQ " %%mm3, 8(%1)\n\t" \ +\ + /* generate third packed RGB octet */ \ + "movq %%mm"red", %%mm7\n\t" \ + "movq %%mm2, %%mm5\n\t" \ + "movq %%mm2, %%mm3\n\t" \ + "movq %%mm"blue", %%mm6\n\t" \ + "punpckhbw %%mm"red", %%mm3\n\t" \ + "punpckhbw %%mm4, %%mm7\n\t" \ + "psllq $32, %%mm3\n\t" \ + "punpckhbw %%mm5, %%mm6\n\t" \ + "psrlq $48, %%mm3\n\t" \ + "punpckhwd %%mm7, %%mm6\n\t" \ + "movq %%mm6, %%mm7\n\t" \ + "psrlq $32, %%mm6\n\t" \ + "psllq $32, %%mm7\n\t" \ + "psllq $40, %%mm6\n\t" \ + "psrlq $16, %%mm7\n\t" \ + "por %%mm6, %%mm3\n\t" \ + "por %%mm7, %%mm3\n\t" \ + MOVNTQ " %%mm3, 16(%1)\n\t" \ + +static inline int RENAME(yuv420_rgb24)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ + int y, h_size; + + YUV2RGB_LOOP(3) + + YUV2RGB_INITIAL_LOAD + YUV2RGB + RGB_PACK24(REG_BLUE, REG_RED) + + YUV2RGB_ENDLOOP(3) + YUV2RGB_OPERANDS + YUV2RGB_ENDFUNC +} + +static inline int RENAME(yuv420_bgr24)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ + int y, h_size; + + YUV2RGB_LOOP(3) + + YUV2RGB_INITIAL_LOAD + YUV2RGB + RGB_PACK24(REG_RED, REG_BLUE) + + YUV2RGB_ENDLOOP(3) + YUV2RGB_OPERANDS + YUV2RGB_ENDFUNC +} + + +#define SET_EMPTY_ALPHA \ + "pcmpeqd %%mm"REG_ALPHA", %%mm"REG_ALPHA"\n\t" /* set alpha to 0xFF */ \ + +#define LOAD_ALPHA \ + "movq (%6, %0, 2), %%mm"REG_ALPHA"\n\t" \ + +#define RGB_PACK32(red, green, blue, alpha) \ + "movq %%mm"blue", %%mm5\n\t" \ + "movq %%mm"red", %%mm6\n\t" \ + "punpckhbw %%mm"green", %%mm5\n\t" \ + "punpcklbw %%mm"green", %%mm"blue"\n\t" \ + "punpckhbw %%mm"alpha", %%mm6\n\t" \ + "punpcklbw %%mm"alpha", %%mm"red"\n\t" \ + "movq %%mm"blue", %%mm"green"\n\t" \ + "movq %%mm5, %%mm"alpha"\n\t" \ + "punpcklwd %%mm"red", %%mm"blue"\n\t" \ + "punpckhwd %%mm"red", %%mm"green"\n\t" \ + "punpcklwd %%mm6, %%mm5\n\t" \ + "punpckhwd %%mm6, %%mm"alpha"\n\t" \ + MOVNTQ " %%mm"blue", 0(%1)\n\t" \ + MOVNTQ " %%mm"green", 8(%1)\n\t" \ + MOVNTQ " %%mm5, 16(%1)\n\t" \ + MOVNTQ " %%mm"alpha", 24(%1)\n\t" \ + +static inline int RENAME(yuv420_rgb32)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ + int y, h_size; + + YUV2RGB_LOOP(4) + + YUV2RGB_INITIAL_LOAD + YUV2RGB + SET_EMPTY_ALPHA + RGB_PACK32(REG_RED, REG_GREEN, REG_BLUE, REG_ALPHA) + + YUV2RGB_ENDLOOP(4) + YUV2RGB_OPERANDS + YUV2RGB_ENDFUNC +} + +static inline int RENAME(yuva420_rgb32)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ +#if HAVE_7REGS + int y, h_size; + + YUV2RGB_LOOP(4) + + const uint8_t *pa = src[3] + y * srcStride[3]; + YUV2RGB_INITIAL_LOAD + YUV2RGB + LOAD_ALPHA + RGB_PACK32(REG_RED, REG_GREEN, REG_BLUE, REG_ALPHA) + + YUV2RGB_ENDLOOP(4) + YUV2RGB_OPERANDS_ALPHA + YUV2RGB_ENDFUNC +#endif +} + +static inline int RENAME(yuv420_bgr32)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ + int y, h_size; + + YUV2RGB_LOOP(4) + + YUV2RGB_INITIAL_LOAD + YUV2RGB + SET_EMPTY_ALPHA + RGB_PACK32(REG_BLUE, REG_GREEN, REG_RED, REG_ALPHA) + + YUV2RGB_ENDLOOP(4) + YUV2RGB_OPERANDS + YUV2RGB_ENDFUNC +} + +static inline int RENAME(yuva420_bgr32)(SwsContext *c, const uint8_t *src[], + int srcStride[], + int srcSliceY, int srcSliceH, + uint8_t *dst[], int dstStride[]) +{ +#if HAVE_7REGS + int y, h_size; + + YUV2RGB_LOOP(4) + + const uint8_t *pa = src[3] + y * srcStride[3]; + YUV2RGB_INITIAL_LOAD + YUV2RGB + LOAD_ALPHA + RGB_PACK32(REG_BLUE, REG_GREEN, REG_RED, REG_ALPHA) + + YUV2RGB_ENDLOOP(4) + YUV2RGB_OPERANDS_ALPHA + YUV2RGB_ENDFUNC +#endif +} diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index 60764aeba1..f47b15d6ee 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -543,7 +543,7 @@ CLOSEYUV2RGBFUNC(1) SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) { SwsFunc t = NULL; -#if HAVE_MMX && CONFIG_GPL +#if HAVE_MMX t = ff_yuv2rgb_init_mmx(c); #endif #if HAVE_VIS -- cgit v1.2.3 From 0c3298d039cc59d58027da9062e46b48eb8771eb Mon Sep 17 00:00:00 2001 From: diego Date: Tue, 4 May 2010 11:46:50 +0000 Subject: Remove translated strings that are gone from the master translation. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31136 b3059339-0415-0410-9bf9-f77b7e298cf2 --- help/help_mp-cs.h | 3 --- help/help_mp-de.h | 3 --- help/help_mp-es.h | 3 --- help/help_mp-fr.h | 3 --- help/help_mp-ru.h | 3 --- help/help_mp-tr.h | 3 --- help/help_mp-zh_TW.h | 3 --- 7 files changed, 21 deletions(-) diff --git a/help/help_mp-cs.h b/help/help_mp-cs.h index ace0a4bf85..ddf9f71ddb 100644 --- a/help/help_mp-cs.h +++ b/help/help_mp-cs.h @@ -1272,10 +1272,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] Nelze vypnout převzorkování: %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] Nelze nastavit vzorkovací kmitočet-2: %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] Nelze nastavit časový buffer okolo: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] Nelze nastavit čas periody: %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] čas_bufferu: %d, čas_periody :%d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] Nelze získat velikost periody: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] Nelze nastavit velikost periody(%ld): %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] Nelze nastavit periody: %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] Nelze nastavit hw parametry: %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] Nelze získat velikost bufferu: %s\n" diff --git a/help/help_mp-de.h b/help/help_mp-de.h index a1acc609b2..68e1cb84dd 100644 --- a/help/help_mp-de.h +++ b/help/help_mp-de.h @@ -1254,10 +1254,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] Kann Resampling nicht deaktivieren: %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] Kann samplerate-2 nicht setzen: %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] Kann Puffer-Zeit in Nähe von %s nicht setzen.\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] Kann Periodenzeit nicht setzen: %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] Pufferzeit: %d, Periodenzeit: %d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] Kann Periodenzeit nicht ermitteln: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] Kann Periodenzeit (%ld) nicht setzen: %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] Kann Perioden nicht setzen: %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] Kann Hardwareparameter nicht setzen: %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] Kann Puffergröße nicht ermitteln: %s\n" diff --git a/help/help_mp-es.h b/help/help_mp-es.h index 4806048d49..0bc539b25c 100644 --- a/help/help_mp-es.h +++ b/help/help_mp-es.h @@ -1283,10 +1283,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] Incapaz de deshabilitar el resampling: %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] Incapaz de establecer el samplerate-2: %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] Incapaz de establecer el tiempo del buffer: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] Incapaz de establecer el período de tiempo: %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] tiempo_buffer: %d, tiempo_período :%d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] Incapaz de obtener el tamaño del período: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] Incapaz de establecer el tamaño del período(%ld): %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] Incapaz de establecer períodos: %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] Incapaz de establecer parámatros de hw: %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] Incapaz de obtener el tamaño del buffer: %s\n" diff --git a/help/help_mp-fr.h b/help/help_mp-fr.h index ba12805ecd..0097e93d13 100644 --- a/help/help_mp-fr.h +++ b/help/help_mp-fr.h @@ -1211,10 +1211,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] Impossible de désactiver resampling : %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] Impossible de fixer samplerate-2 : %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] Impossible de fixer le temps du tampon le plus poche : %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] Impossible de fixer la durée de la période : %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] Tampon/temps : %d, période/temps : %d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] Obtention impossible de la grandeur de la période : %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] Impossible de fixer la taille de la période(%ld) : %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] Impossible de fixer les périodes : %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] Impossible de fixer hw-parameters : %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] Obtention impossible de la taille du tampon : %s\n" diff --git a/help/help_mp-ru.h b/help/help_mp-ru.h index 2fcf089241..00e9147237 100644 --- a/help/help_mp-ru.h +++ b/help/help_mp-ru.h @@ -1273,10 +1273,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] Невозможно отключить ресэмплинг: %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] Невозможно установить частоту дискретизации-2: %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] Невозможно установить примерное время буфера: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] Невозможно установить время периода: %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] время_буфера: %d, время_периода :%d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] Невозможно получить время периода: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] Невозможно установить размер периода(%ld): %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] Невозможно установить периоды: %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] Невозможно установить hw-параметры: %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] Невозможно получить размер буфера: %s\n" diff --git a/help/help_mp-tr.h b/help/help_mp-tr.h index 39c620cde9..76fffc7872 100644 --- a/help/help_mp-tr.h +++ b/help/help_mp-tr.h @@ -1225,10 +1225,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] Tekrar örnekleme ayarlanamıyor: %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] Örnekleme-oranı-2 ayarlanamıyor: %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] Buffer zamanı şu civarda ayarlanamıyor: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] Şu zaman periyodu ayarlanamıyor: %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] buffer_time: %d, period_time :%d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] Periyot boyutu alınamıyor: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] Periyot boyutu ayarlanamıyor(%ld): %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] Periyotlar ayarlanamıyor: %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] hw-parameters ayarlanamıyor: %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] buffersize alınamıyor: %s\n" diff --git a/help/help_mp-zh_TW.h b/help/help_mp-zh_TW.h index 0eaeec33c9..b8e5c50fea 100644 --- a/help/help_mp-zh_TW.h +++ b/help/help_mp-zh_TW.h @@ -1196,10 +1196,7 @@ static const char help_text[]= #define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] 無法停用再抽様: %s\n" #define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] 無法設置 采様率-2: %s\n" #define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] 無法設置緩衝時間約: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodTime "[AO_ALSA] 無法設置區段時間: %s\n" -#define MSGTR_AO_ALSA_BufferTimePeriodTime "[AO_ALSA] buffer_time: %d, period_time :%d\n" #define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] 無法取得區段大小: %s\n" -#define MSGTR_AO_ALSA_UnableToSetPeriodSize "[AO ALSA] 無法設置區段大小(%ld): %s\n" #define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] 無法設置區段: %s\n" #define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] 無法設置 hw-parameters: %s\n" #define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] 無法取得緩衝大小: %s\n" -- cgit v1.2.3 From 88b6dd6fc23c051b2e84312dfc1d4b9ac7e57c7a Mon Sep 17 00:00:00 2001 From: aurel Date: Tue, 4 May 2010 18:46:42 +0000 Subject: cosmetic: typo, this wasn't supposed to be plural git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31137 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_lavf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 880e1f7dcc..212b312c0c 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -415,7 +415,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { break; sh_sub = new_sh_sub_sid(demuxer, i, priv->sub_streams); if(!sh_sub) break; - stream_type = "subtitles"; + stream_type = "subtitle"; priv->sstreams[priv->sub_streams] = i; sh_sub->type = type; if (codec->extradata_size) { -- cgit v1.2.3 From 84de3e95a808dcff4456d67a29dfb50a9152e5df Mon Sep 17 00:00:00 2001 From: cehoyos Date: Thu, 6 May 2010 10:10:34 +0000 Subject: Fix compilation with old libschroedinger-dev installed. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31138 b3059339-0415-0410-9bf9-f77b7e298cf2 --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 4c41f5d7fb..4f12093119 100755 --- a/configure +++ b/configure @@ -7591,7 +7591,7 @@ if test "$_libschroedinger_lavc" = auto ; then else cat > $TMPC << EOF #include -int main(void) { schro_init(); return 0; } +int main(void) { schro_init(); return SCHRO_ENCODER_RATE_CONTROL_CONSTANT_QUALITY; } EOF if $_pkg_config --exists schroedinger-1.0 ; then _inc_schroedinger=$($_pkg_config --silence-errors --cflags schroedinger-1.0) -- cgit v1.2.3 From 02641f54eee3ef4117489ba96cc16dce2c20d8c1 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Thu, 6 May 2010 10:18:25 +0000 Subject: Add support for 12-bit color mode on framebuffer devices. Patch Janusz Krzysztofik, jkrzyszt A tis icnet pl git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31139 b3059339-0415-0410-9bf9-f77b7e298cf2 --- fmt-conversion.c | 4 ++++ libmenu/menu.c | 3 +++ libmpcodecs/img_format.c | 2 ++ libmpcodecs/img_format.h | 10 ++++++++++ libmpcodecs/vf_1bpp.c | 6 ++++++ libmpcodecs/vf_expand.c | 4 ++++ libmpcodecs/vf_rgbtest.c | 8 ++++++++ libmpcodecs/vf_scale.c | 2 ++ libmpcodecs/vf_screenshot.c | 1 + libmpcodecs/vf_tile.c | 8 +++++--- libvo/osd.c | 33 +++++++++++++++++++++++++++++++++ libvo/osd.h | 2 ++ libvo/vo_directfb2.c | 19 +++++++++++++++++++ libvo/vo_fbdev.c | 13 ++++++++++++- libvo/vo_fbdev2.c | 8 ++++++++ m_option.c | 2 ++ 16 files changed, 121 insertions(+), 4 deletions(-) diff --git a/fmt-conversion.c b/fmt-conversion.c index 013e3fea55..9e881009e4 100644 --- a/fmt-conversion.c +++ b/fmt-conversion.c @@ -32,6 +32,8 @@ static const struct { {IMGFMT_BGR16LE, PIX_FMT_RGB565LE}, {IMGFMT_BGR15BE, PIX_FMT_RGB555BE}, {IMGFMT_BGR15LE, PIX_FMT_RGB555LE}, + {IMGFMT_BGR12BE, PIX_FMT_RGB444BE}, + {IMGFMT_BGR12LE, PIX_FMT_RGB444LE}, {IMGFMT_BGR8, PIX_FMT_RGB8}, {IMGFMT_BGR4, PIX_FMT_RGB4}, {IMGFMT_BGR1, PIX_FMT_MONOBLACK}, @@ -47,6 +49,8 @@ static const struct { {IMGFMT_RGB16LE, PIX_FMT_BGR565LE}, {IMGFMT_RGB15BE, PIX_FMT_BGR555BE}, {IMGFMT_RGB15LE, PIX_FMT_BGR555LE}, + {IMGFMT_RGB12BE, PIX_FMT_BGR444BE}, + {IMGFMT_RGB12LE, PIX_FMT_BGR444LE}, {IMGFMT_RGB8, PIX_FMT_BGR8}, {IMGFMT_RGB4, PIX_FMT_BGR4}, {IMGFMT_BGR8, PIX_FMT_PAL8}, diff --git a/libmenu/menu.c b/libmenu/menu.c index a262d7a960..a1fbe57876 100644 --- a/libmenu/menu.c +++ b/libmenu/menu.c @@ -376,6 +376,9 @@ typedef void (*draw_alpha_f)(int w,int h, unsigned char* src, unsigned char *src inline static draw_alpha_f get_draw_alpha(uint32_t fmt) { switch(fmt) { + case IMGFMT_BGR12: + case IMGFMT_RGB12: + return vo_draw_alpha_rgb12; case IMGFMT_BGR15: case IMGFMT_RGB15: return vo_draw_alpha_rgb15; diff --git a/libmpcodecs/img_format.c b/libmpcodecs/img_format.c index 5b858fa065..f0cb3db97e 100644 --- a/libmpcodecs/img_format.c +++ b/libmpcodecs/img_format.c @@ -29,6 +29,7 @@ const char *vo_format_name(int format) case IMGFMT_RGB4: return "RGB 4-bit"; case IMGFMT_RG4B: return "RGB 4-bit per byte"; case IMGFMT_RGB8: return "RGB 8-bit"; + case IMGFMT_RGB12: return "RGB 12-bit"; case IMGFMT_RGB15: return "RGB 15-bit"; case IMGFMT_RGB16: return "RGB 16-bit"; case IMGFMT_RGB24: return "RGB 24-bit"; @@ -39,6 +40,7 @@ const char *vo_format_name(int format) case IMGFMT_BGR4: return "BGR 4-bit"; case IMGFMT_BG4B: return "BGR 4-bit per byte"; case IMGFMT_BGR8: return "BGR 8-bit"; + case IMGFMT_BGR12: return "BGR 12-bit"; case IMGFMT_BGR15: return "BGR 15-bit"; case IMGFMT_BGR16: return "BGR 16-bit"; case IMGFMT_BGR24: return "BGR 24-bit"; diff --git a/libmpcodecs/img_format.h b/libmpcodecs/img_format.h index 2c4db36a04..e5800828d0 100644 --- a/libmpcodecs/img_format.h +++ b/libmpcodecs/img_format.h @@ -29,6 +29,7 @@ #define IMGFMT_RGB4 (IMGFMT_RGB|4) #define IMGFMT_RGB4_CHAR (IMGFMT_RGB|4|128) // RGB4 with 1 pixel per byte #define IMGFMT_RGB8 (IMGFMT_RGB|8) +#define IMGFMT_RGB12 (IMGFMT_RGB|12) #define IMGFMT_RGB15 (IMGFMT_RGB|15) #define IMGFMT_RGB16 (IMGFMT_RGB|16) #define IMGFMT_RGB24 (IMGFMT_RGB|24) @@ -42,6 +43,7 @@ #define IMGFMT_BGR4 (IMGFMT_BGR|4) #define IMGFMT_BGR4_CHAR (IMGFMT_BGR|4|128) // BGR4 with 1 pixel per byte #define IMGFMT_BGR8 (IMGFMT_BGR|8) +#define IMGFMT_BGR12 (IMGFMT_BGR|12) #define IMGFMT_BGR15 (IMGFMT_BGR|15) #define IMGFMT_BGR16 (IMGFMT_BGR|16) #define IMGFMT_BGR24 (IMGFMT_BGR|24) @@ -53,10 +55,14 @@ #define IMGFMT_ARGB IMGFMT_BGR32 #define IMGFMT_RGBA (IMGFMT_BGR32|64) #define IMGFMT_RGB48NE IMGFMT_RGB48BE +#define IMGFMT_RGB12BE IMGFMT_RGB12 +#define IMGFMT_RGB12LE (IMGFMT_RGB12|64) #define IMGFMT_RGB15BE IMGFMT_RGB15 #define IMGFMT_RGB15LE (IMGFMT_RGB15|64) #define IMGFMT_RGB16BE IMGFMT_RGB16 #define IMGFMT_RGB16LE (IMGFMT_RGB16|64) +#define IMGFMT_BGR12BE IMGFMT_BGR12 +#define IMGFMT_BGR12LE (IMGFMT_BGR12|64) #define IMGFMT_BGR15BE IMGFMT_BGR15 #define IMGFMT_BGR15LE (IMGFMT_BGR15|64) #define IMGFMT_BGR16BE IMGFMT_BGR16 @@ -67,10 +73,14 @@ #define IMGFMT_ARGB (IMGFMT_RGB32|64) #define IMGFMT_RGBA IMGFMT_RGB32 #define IMGFMT_RGB48NE IMGFMT_RGB48LE +#define IMGFMT_RGB12BE (IMGFMT_RGB12|64) +#define IMGFMT_RGB12LE IMGFMT_RGB12 #define IMGFMT_RGB15BE (IMGFMT_RGB15|64) #define IMGFMT_RGB15LE IMGFMT_RGB15 #define IMGFMT_RGB16BE (IMGFMT_RGB16|64) #define IMGFMT_RGB16LE IMGFMT_RGB16 +#define IMGFMT_BGR12BE (IMGFMT_BGR12|64) +#define IMGFMT_BGR12LE IMGFMT_BGR12 #define IMGFMT_BGR15BE (IMGFMT_BGR15|64) #define IMGFMT_BGR15LE IMGFMT_BGR15 #define IMGFMT_BGR16BE (IMGFMT_BGR16|64) diff --git a/libmpcodecs/vf_1bpp.c b/libmpcodecs/vf_1bpp.c index b564b82a6e..8d13735942 100644 --- a/libmpcodecs/vf_1bpp.c +++ b/libmpcodecs/vf_1bpp.c @@ -45,6 +45,8 @@ static const unsigned int bgr_list[]={ IMGFMT_444P, IMGFMT_YUY2, + IMGFMT_BGR12, + IMGFMT_RGB12, IMGFMT_BGR15, IMGFMT_RGB15, IMGFMT_BGR16, @@ -150,6 +152,10 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ case IMGFMT_YUY2: convert(mpi,dmpi,0x8000,0x80ff,2); break; + case IMGFMT_BGR12: + case IMGFMT_RGB12: + convert(mpi,dmpi,0,0x0fff,2); + break; case IMGFMT_BGR15: case IMGFMT_RGB15: convert(mpi,dmpi,0,0x7fff,2); diff --git a/libmpcodecs/vf_expand.c b/libmpcodecs/vf_expand.c index 1fa14b9218..f843d8fe43 100644 --- a/libmpcodecs/vf_expand.c +++ b/libmpcodecs/vf_expand.c @@ -146,6 +146,10 @@ static void draw_func(int x0,int y0, int w,int h,unsigned char* src, unsigned ch vf->dmpi->stride[0]*y0+ (vf->dmpi->bpp>>3)*x0; switch(vf->dmpi->imgfmt){ + case IMGFMT_BGR12: + case IMGFMT_RGB12: + vo_draw_alpha_rgb12(w, h, src, srca, stride, dst, vf->dmpi->stride[0]); + break; case IMGFMT_BGR15: case IMGFMT_RGB15: vo_draw_alpha_rgb15(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); diff --git a/libmpcodecs/vf_rgbtest.c b/libmpcodecs/vf_rgbtest.c index 3d69ab876a..9179934175 100644 --- a/libmpcodecs/vf_rgbtest.c +++ b/libmpcodecs/vf_rgbtest.c @@ -37,11 +37,13 @@ struct vf_priv_s { static unsigned int getfmt(unsigned int outfmt){ switch(outfmt){ + case IMGFMT_RGB12: case IMGFMT_RGB15: case IMGFMT_RGB16: case IMGFMT_RGB24: case IMGFMT_RGBA: case IMGFMT_ARGB: + case IMGFMT_BGR12: case IMGFMT_BGR15: case IMGFMT_BGR16: case IMGFMT_BGR24: @@ -54,6 +56,12 @@ static unsigned int getfmt(unsigned int outfmt){ static void put_pixel(uint8_t *buf, int x, int y, int stride, int r, int g, int b, int fmt){ switch(fmt){ + case IMGFMT_BGR12: ((uint16_t*)(buf + y*stride))[x]= + ((r >> 4) << 8) | ((g >> 4) << 4) | (b >> 4); + break; + case IMGFMT_RGB12: ((uint16_t*)(buf + y*stride))[x]= + ((b >> 4) << 8) | ((g >> 4) << 4) | (r >> 4); + break; case IMGFMT_BGR15: ((uint16_t*)(buf + y*stride))[x]= ((r>>3)<<10) | ((g>>3)<<5) | (b>>3); break; case IMGFMT_RGB15: ((uint16_t*)(buf + y*stride))[x]= ((b>>3)<<10) | ((g>>3)<<5) | (r>>3); diff --git a/libmpcodecs/vf_scale.c b/libmpcodecs/vf_scale.c index 46a7841b15..887bf3d2e2 100644 --- a/libmpcodecs/vf_scale.c +++ b/libmpcodecs/vf_scale.c @@ -96,6 +96,8 @@ static const unsigned int outfmt_list[]={ IMGFMT_RGB16, IMGFMT_BGR15, IMGFMT_RGB15, + IMGFMT_BGR12, + IMGFMT_RGB12, IMGFMT_Y800, IMGFMT_Y8, IMGFMT_BGR8, diff --git a/libmpcodecs/vf_screenshot.c b/libmpcodecs/vf_screenshot.c index 55ed820b1e..3ebcc17d3e 100644 --- a/libmpcodecs/vf_screenshot.c +++ b/libmpcodecs/vf_screenshot.c @@ -258,6 +258,7 @@ static int query_format(struct vf_instance *vf, unsigned int fmt) case IMGFMT_BGR24: case IMGFMT_BGR16: case IMGFMT_BGR15: + case IMGFMT_BGR12: case IMGFMT_RGB32: case IMGFMT_RGB24: case IMGFMT_Y800: diff --git a/libmpcodecs/vf_tile.c b/libmpcodecs/vf_tile.c index e20217e4a6..31193881f6 100644 --- a/libmpcodecs/vf_tile.c +++ b/libmpcodecs/vf_tile.c @@ -198,16 +198,18 @@ static void uninit(struct vf_instance *vf) free(vf->priv); } -/* rgb/bgr 15->32 supported & some Yxxx */ +/* rgb/bgr 12...32 supported & some Yxxx */ static int query_format(struct vf_instance *vf, unsigned int fmt) { switch (fmt) { - /* rgb 15 -> 32 bit */ + /* rgb 12...32 bit */ + case IMGFMT_RGB12: case IMGFMT_RGB15: case IMGFMT_RGB16: case IMGFMT_RGB24: case IMGFMT_RGB32: - /* bgr 15 -> 32 bit */ + /* bgr 12...32 bit */ + case IMGFMT_BGR12: case IMGFMT_BGR15: case IMGFMT_BGR16: case IMGFMT_BGR24: diff --git a/libvo/osd.c b/libvo/osd.c index a3664dadb3..54854c785f 100644 --- a/libvo/osd.c +++ b/libvo/osd.c @@ -329,6 +329,39 @@ void vo_draw_alpha_init(void){ } } +void vo_draw_alpha_rgb12(int w, int h, unsigned char* src, unsigned char *srca, + int srcstride, unsigned char* dstbase, int dststride) { + int y; + for (y = 0; y < h; y++) { + register unsigned short *dst = (unsigned short*) dstbase; + register int x; + for (x = 0; x < w; x++) { + if(srca[x]){ +#ifdef FAST_OSD +#ifdef FAST_OSD_TABLE + dst[x] = fast_osd_12bpp_table[src[x]]; +#else + register unsigned int a = src[x] >> 4; + dst[x] = (a << 8) | (a << 4) | a; +#endif +#else + unsigned char r = dst[x] & 0x0F; + unsigned char g = (dst[x] >> 4) & 0x0F; + unsigned char b = (dst[x] >> 8) & 0x0F; + r = (((r*srca[x]) >> 4) + src[x]) >> 4; + g = (((g*srca[x]) >> 4) + src[x]) >> 4; + b = (((b*srca[x]) >> 4) + src[x]) >> 4; + dst[x] = (b << 8) | (g << 4) | r; +#endif + } + } + src += srcstride; + srca += srcstride; + dstbase += dststride; + } + return; +} + void vo_draw_alpha_rgb15(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){ int y; for(y=0;y DFB_VERSION(0,9,15) case IMGFMT_RGB15: return DSPF_ARGB1555; break; case IMGFMT_BGR15: return DSPF_ARGB1555; break; + case IMGFMT_RGB12: return DSPF_ARGB4444; break; + case IMGFMT_BGR12: return DSPF_ARGB4444; break; #else case IMGFMT_RGB15: return DSPF_RGB15; break; case IMGFMT_BGR15: return DSPF_RGB15; break; + case IMGFMT_RGB12: return DSPF_RGB12; break; + case IMGFMT_BGR12: return DSPF_RGB12; break; #endif case IMGFMT_YUY2: return DSPF_YUY2; break; case IMGFMT_UYVY: return DSPF_UYVY; break; @@ -541,6 +545,8 @@ static int config(uint32_t s_width, uint32_t s_height, uint32_t d_width, case IMGFMT_BGR16: case IMGFMT_RGB15: case IMGFMT_BGR15: + case IMGFMT_RGB12: + case IMGFMT_BGR12: params.bpp=16; break; default: params.bpp=0; @@ -665,8 +671,10 @@ static int config(uint32_t s_width, uint32_t s_height, uint32_t d_width, case DSPF_RGB16: bpp=16;break; #if DIRECTFBVERSION > DFB_VERSION(0,9,15) case DSPF_ARGB1555: bpp=15;break; + case DSPF_ARGB4444: bpp=12; break; #else case DSPF_RGB15: bpp=15;break; + case DSPF_RGB12: bpp=12; break; #endif case DSPF_RGB332 : bpp=8;break; } @@ -678,8 +686,10 @@ static int config(uint32_t s_width, uint32_t s_height, uint32_t d_width, case DSPF_RGB16: #if DIRECTFBVERSION > DFB_VERSION(0,9,15) case DSPF_ARGB1555: + case DSPF_ARGB4444: #else case DSPF_RGB15: + case DSPF_RGB12: #endif case DSPF_RGB332: mp_msg(MSGT_VO, MSGL_V,"DirectFB: Trying to recover via videomode change (VM).\n"); @@ -1487,6 +1497,15 @@ static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, #endif vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + 2*x0,pitch); break; +#if DIRECTFBVERSION > DFB_VERSION(0,9,15) + case DSPF_ARGB4444: +#else + case DSPF_RGB12: +#endif + vo_draw_alpha_rgb12(w, h, src, srca, stride, + ((uint8_t *) dst) + pitch * y0 + 2 * x0, + pitch); + break; case DSPF_YUY2: vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) dst) + pitch*y0 + 2*x0,pitch); diff --git a/libvo/vo_fbdev.c b/libvo/vo_fbdev.c index c1d2051725..cfa7f522bc 100644 --- a/libvo/vo_fbdev.c +++ b/libvo/vo_fbdev.c @@ -521,6 +521,13 @@ static void set_bpp(struct fb_var_screeninfo *p, int bpp) p->green.offset = 5; p->blue.length = 5; break; + case 12: + p->red.offset = 8; + p->green.length = 4; + p->red.length = 4; + p->green.offset = 4; + p->blue.length = 4; + break; } } @@ -700,7 +707,8 @@ static int fb_preinit(int reset) } if (vo_dbpp) { - if (vo_dbpp != 15 && vo_dbpp != 16 && vo_dbpp != 24 && vo_dbpp != 32) { + if (vo_dbpp != 12 && vo_dbpp != 15 && vo_dbpp != 16 + && vo_dbpp != 24 && vo_dbpp != 32) { mp_msg(MSGT_VO, MSGL_ERR, "can't switch to %d bpp\n", vo_dbpp); goto err_out; } @@ -850,6 +858,9 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, case 15: draw_alpha_p = vo_draw_alpha_rgb15; break; + case 12: + draw_alpha_p = vo_draw_alpha_rgb12; + break; default: return 1; } diff --git a/libvo/vo_fbdev2.c b/libvo/vo_fbdev2.c index 0e8f3743cd..9c32736a35 100644 --- a/libvo/vo_fbdev2.c +++ b/libvo/vo_fbdev2.c @@ -77,6 +77,13 @@ static void set_bpp(struct fb_var_screeninfo *p, int bpp) p->green.offset = 5; p->blue.length = 5; break; + case 12: + p->red.offset = 8; + p->green.length = 4; + p->red.length = 4; + p->green.offset = 4; + p->blue.length = 4; + break; } } @@ -247,6 +254,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, case 24: draw_alpha_p = vo_draw_alpha_rgb24; break; case 16: draw_alpha_p = vo_draw_alpha_rgb16; break; case 15: draw_alpha_p = vo_draw_alpha_rgb15; break; + case 12: draw_alpha_p = vo_draw_alpha_rgb12; break; default: return 1; } diff --git a/m_option.c b/m_option.c index 8224ba7f35..f403fd684e 100644 --- a/m_option.c +++ b/m_option.c @@ -1080,6 +1080,7 @@ static struct { {"bgr32", IMGFMT_BGR32}, {"bgr16", IMGFMT_BGR16}, {"bgr15", IMGFMT_BGR15}, + {"bgr12", IMGFMT_BGR12}, {"bgr8", IMGFMT_BGR8}, {"bgr4", IMGFMT_BGR4}, {"bg4b", IMGFMT_BG4B}, @@ -1091,6 +1092,7 @@ static struct { {"rgb32", IMGFMT_RGB32}, {"rgb16", IMGFMT_RGB16}, {"rgb15", IMGFMT_RGB15}, + {"rgb12", IMGFMT_RGB12}, {"rgb8", IMGFMT_RGB8}, {"rgb4", IMGFMT_RGB4}, {"rg4b", IMGFMT_RG4B}, -- cgit v1.2.3 From 5c7c77603feb42e086754c9a1985c7fed079943d Mon Sep 17 00:00:00 2001 From: diego Date: Fri, 7 May 2010 18:24:41 +0000 Subject: Remove seemingly misplaced and commented-out liba52 #include. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31140 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mp3lib/sr1.c | 1 - 1 file changed, 1 deletion(-) diff --git a/mp3lib/sr1.c b/mp3lib/sr1.c index caed5f8c90..7e57ec4a44 100644 --- a/mp3lib/sr1.c +++ b/mp3lib/sr1.c @@ -18,7 +18,6 @@ #include "mp3.h" #include "mpbswap.h" #include "cpudetect.h" -//#include "liba52/mm_accel.h" #include "mp_msg.h" #include "libmpcodecs/ad_mp3lib.h" #include "libvo/fastmemcpy.h" -- cgit v1.2.3 From 1292c8adc351b1bf461354cd632b39ec3303a8f2 Mon Sep 17 00:00:00 2001 From: diego Date: Fri, 7 May 2010 18:27:46 +0000 Subject: Remove references to some long-removed files. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31141 b3059339-0415-0410-9bf9-f77b7e298cf2 --- DOCS/tech/general.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DOCS/tech/general.txt b/DOCS/tech/general.txt index 4ca3671cf3..b9ac61ff10 100644 --- a/DOCS/tech/general.txt +++ b/DOCS/tech/general.txt @@ -196,7 +196,7 @@ Now, go on: Only used if none of the above works. 4. Codecs. Consists of libmpcodecs/* and separate files or libs, - for example liba52, libmpeg2, xa/*, alaw.c, opendivx/*, loader, mp3lib. + for example liba52, libmpeg2, loader, mp3lib. mplayer.c doesn't call them directly, but through the dec_audio.c and dec_video.c files, so the mplayer.c doesn't have to know anything about -- cgit v1.2.3