mirror of
https://github.com/mpv-player/mpv
synced 2025-04-18 13:16:43 +00:00
Implement bob (pseudo?) deinterlacing for xvmc.
Patch from Tomas Janousek (tomi at nomi cz) with modifications by Carl Eugen Hoyos (cehoyos at ag or at) and me. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@20250 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
045b49c45e
commit
140ee2645b
@ -3230,6 +3230,10 @@ Deaktiviert die Anzeige von Bildern.
|
|||||||
Benötigt für einwandfreies Benchmarking von Treibern, die den Bildpuffer nur
|
Benötigt für einwandfreies Benchmarking von Treibern, die den Bildpuffer nur
|
||||||
bei einem Monitor-Retrace ändern (nVidia).
|
bei einem Monitor-Retrace ändern (nVidia).
|
||||||
Voreinstellung ist, die Bildwiedergabe nicht zu deaktivieren (nobenchmark).
|
Voreinstellung ist, die Bildwiedergabe nicht zu deaktivieren (nobenchmark).
|
||||||
|
.IPs (no)bobdeint
|
||||||
|
Sehr einfacher Deinterlacer.
|
||||||
|
Sieht m\366glicherweise nicht besser als -vf tfields=1 aus, ist aber
|
||||||
|
der einzige Deinterlacer, der mit xvmc funktioniert. (Standard: nobobdeint)
|
||||||
.IPs (no)queue
|
.IPs (no)queue
|
||||||
Frames werden in einer Queue angeordnet, um der Videohardware weitergehendes
|
Frames werden in einer Queue angeordnet, um der Videohardware weitergehendes
|
||||||
paralleles Arbeiten zu ermöglichen.
|
paralleles Arbeiten zu ermöglichen.
|
||||||
|
@ -3087,6 +3087,10 @@ Disables image display.
|
|||||||
Necessary for proper benchmarking of drivers that change
|
Necessary for proper benchmarking of drivers that change
|
||||||
image buffers on monitor retrace only (nVidia).
|
image buffers on monitor retrace only (nVidia).
|
||||||
Default is not to disable image display (nobenchmark).
|
Default is not to disable image display (nobenchmark).
|
||||||
|
.IPs (no)bobdeint
|
||||||
|
Very simple deinterlacer.
|
||||||
|
Might not look better than -vf tfields=1,
|
||||||
|
but it's the only deinterlacer for xvmc (default: nobobdeint).
|
||||||
.IPs (no)queue
|
.IPs (no)queue
|
||||||
Queue frames for display to allow more parallel work of the video hardware.
|
Queue frames for display to allow more parallel work of the video hardware.
|
||||||
May add a small (not noticeable) constant A/V desync (default: noqueue).
|
May add a small (not noticeable) constant A/V desync (default: noqueue).
|
||||||
|
@ -51,6 +51,8 @@ static int use_sleep;
|
|||||||
static int first_frame;//draw colorkey on first frame
|
static int first_frame;//draw colorkey on first frame
|
||||||
static int use_queue;
|
static int use_queue;
|
||||||
static int xv_port_request = 0;
|
static int xv_port_request = 0;
|
||||||
|
static int bob_deinterlace;
|
||||||
|
static int top_field_first;
|
||||||
|
|
||||||
static int image_width,image_height;
|
static int image_width,image_height;
|
||||||
static uint32_t drwX,drwY;
|
static uint32_t drwX,drwY;
|
||||||
@ -345,6 +347,7 @@ xvmc_render_state_t * rndr;
|
|||||||
// the surface have passed vf system without been skiped, it will be displayed
|
// the surface have passed vf system without been skiped, it will be displayed
|
||||||
rndr->state |= MP_XVMC_STATE_DISPLAY_PENDING;
|
rndr->state |= MP_XVMC_STATE_DISPLAY_PENDING;
|
||||||
p_render_surface_to_show = rndr;
|
p_render_surface_to_show = rndr;
|
||||||
|
top_field_first = mpi->fields & MP_IMGFIELD_TOP_FIRST;
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,6 +366,7 @@ opt_t subopts [] =
|
|||||||
{ "benchmark", OPT_ARG_BOOL, &benchmark, NULL },
|
{ "benchmark", OPT_ARG_BOOL, &benchmark, NULL },
|
||||||
{ "sleep", OPT_ARG_BOOL, &use_sleep, NULL },
|
{ "sleep", OPT_ARG_BOOL, &use_sleep, NULL },
|
||||||
{ "queue", OPT_ARG_BOOL, &use_queue, NULL },
|
{ "queue", OPT_ARG_BOOL, &use_queue, NULL },
|
||||||
|
{ "bobdeint", OPT_ARG_BOOL, &bob_deinterlace, NULL },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -400,6 +404,7 @@ opt_t subopts [] =
|
|||||||
benchmark = 0; //disable PutImageto allow faster display than screen refresh
|
benchmark = 0; //disable PutImageto allow faster display than screen refresh
|
||||||
use_sleep = 0;
|
use_sleep = 0;
|
||||||
use_queue = 0;
|
use_queue = 0;
|
||||||
|
bob_deinterlace = 0;
|
||||||
|
|
||||||
/* parse suboptions */
|
/* parse suboptions */
|
||||||
if ( subopt_parse( arg, subopts ) != 0 )
|
if ( subopt_parse( arg, subopts ) != 0 )
|
||||||
@ -1014,6 +1019,7 @@ int status,rez;
|
|||||||
static void put_xvmc_image(xvmc_render_state_t * p_render_surface, int draw_ck){
|
static void put_xvmc_image(xvmc_render_state_t * p_render_surface, int draw_ck){
|
||||||
int rez;
|
int rez;
|
||||||
int clipX,clipY,clipW,clipH;
|
int clipX,clipY,clipW,clipH;
|
||||||
|
int i;
|
||||||
|
|
||||||
if(p_render_surface == NULL)
|
if(p_render_surface == NULL)
|
||||||
return;
|
return;
|
||||||
@ -1029,15 +1035,19 @@ int clipX,clipY,clipW,clipH;
|
|||||||
if(benchmark)
|
if(benchmark)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
for (i = 1; i <= bob_deinterlace + 1; i++) {
|
||||||
|
int field = top_field_first ? i : i ^ 3;
|
||||||
rez = XvMCPutSurface(mDisplay, p_render_surface->p_surface,
|
rez = XvMCPutSurface(mDisplay, p_render_surface->p_surface,
|
||||||
vo_window,
|
vo_window,
|
||||||
0, 0, image_width, image_height,
|
0, 0, image_width, image_height,
|
||||||
clipX, clipY, clipW, clipH,
|
clipX, clipY, clipW, clipH,
|
||||||
3);//p_render_surface_to_show->display_flags);
|
bob_deinterlace ? field : 3);
|
||||||
|
//p_render_surface_to_show->display_flags);
|
||||||
if(rez != Success){
|
if(rez != Success){
|
||||||
printf("vo_xvmc: PutSurface failer, critical error %d!\n",rez);
|
printf("vo_xvmc: PutSurface failer, critical error %d!\n",rez);
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
XFlush(mDisplay);
|
XFlush(mDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user