mirror of
https://github.com/mpv-player/mpv.git
synced 2026-10-26 04:59:30 +08:00
Merge svn changes up to r31141
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -385,6 +385,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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -147,6 +147,10 @@ static void draw_func(void *ctx, int x0,int y0, int w,int h,unsigned char* src,
|
||||
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]);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -197,16 +197,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:
|
||||
|
||||
@@ -428,7 +428,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) {
|
||||
|
||||
+33
@@ -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<h;y++){
|
||||
|
||||
@@ -29,6 +29,8 @@ void vo_draw_alpha_yuy2(int w, int h, unsigned char* src, unsigned char *srca,
|
||||
void vo_draw_alpha_uyvy(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
|
||||
void vo_draw_alpha_rgb24(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
|
||||
void vo_draw_alpha_rgb32(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
|
||||
void vo_draw_alpha_rgb12(int w, int h, unsigned char* src, unsigned char *srca,
|
||||
int srcstride, unsigned char* dstbase, int dststride);
|
||||
void vo_draw_alpha_rgb15(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
|
||||
void vo_draw_alpha_rgb16(int w, int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase, int dststride);
|
||||
|
||||
|
||||
@@ -317,9 +317,13 @@ DFBSurfacePixelFormat convformat(uint32_t format)
|
||||
#if DIRECTFBVERSION > 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;
|
||||
@@ -539,6 +543,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;
|
||||
@@ -663,8 +669,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;
|
||||
}
|
||||
@@ -676,8 +684,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");
|
||||
@@ -1473,6 +1483,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);
|
||||
|
||||
+12
-1
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1118,6 +1118,7 @@ static struct {
|
||||
{"bgr32", IMGFMT_BGR32},
|
||||
{"bgr16", IMGFMT_BGR16},
|
||||
{"bgr15", IMGFMT_BGR15},
|
||||
{"bgr12", IMGFMT_BGR12},
|
||||
{"bgr8", IMGFMT_BGR8},
|
||||
{"bgr4", IMGFMT_BGR4},
|
||||
{"bg4b", IMGFMT_BG4B},
|
||||
@@ -1129,6 +1130,7 @@ static struct {
|
||||
{"rgb32", IMGFMT_RGB32},
|
||||
{"rgb16", IMGFMT_RGB16},
|
||||
{"rgb15", IMGFMT_RGB15},
|
||||
{"rgb12", IMGFMT_RGB12},
|
||||
{"rgb8", IMGFMT_RGB8},
|
||||
{"rgb4", IMGFMT_RGB4},
|
||||
{"rg4b", IMGFMT_RG4B},
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user