summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-02-16 02:39:58 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-02-16 02:39:58 +0200
commit0bf2bd91ec69dfd908d78557a17f38e0904a52e7 (patch)
treebf9e5e145ff802e7b5ff7b9ab387bfc3ba0331d7 /libvo
parent738f66b1bc98073d74af7031c4454322157a15ec (diff)
parenteacf4421f4fe16674aefe8b628321188c4912521 (diff)
downloadmpv-0bf2bd91ec69dfd908d78557a17f38e0904a52e7.tar.bz2
mpv-0bf2bd91ec69dfd908d78557a17f38e0904a52e7.tar.xz
Merge svn changes up to r28610
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vo_xvmc.c230
1 files changed, 111 insertions, 119 deletions
diff --git a/libvo/vo_xvmc.c b/libvo/vo_xvmc.c
index 93e2957bca..709967fb41 100644
--- a/libvo/vo_xvmc.c
+++ b/libvo/vo_xvmc.c
@@ -42,23 +42,20 @@
#include <X11/extensions/XvMClib.h>
#include "x11_common.h"
-#include "xvmc_render.h"
+#include "libavcodec/xvmc.h"
#include "sub.h"
#include "aspect.h"
#include "subopt-helper.h"
-
-#ifdef CONFIG_GUI
#include "gui/interface.h"
-#endif
#include "libavutil/common.h"
//no chance for xinerama to be supported in the near future
#undef CONFIG_XINERAMA
-#undef NDEBUG
+#undef NDEBUG
#include <assert.h>
@@ -75,7 +72,7 @@ static int use_sleep;
static int first_frame;//draw colorkey on first frame
static int use_queue;
static int xv_port_request = 0;
-static int xv_adaptor = -1;
+static int xv_adaptor = -1;
static int bob_deinterlace;
static int top_field_first;
@@ -101,13 +98,13 @@ static XvMCMacroBlockArray mv_blocks;
#define MAX_SURFACES 8
static int number_of_surfaces=0;
static XvMCSurface surface_array[MAX_SURFACES];
-static struct xvmc_render_state * surface_render;
+static struct xvmc_pix_fmt *surface_render;
-static struct xvmc_render_state * p_render_surface_to_show=NULL;
-static struct xvmc_render_state * p_render_surface_visible=NULL;
+static struct xvmc_pix_fmt *p_render_surface_to_show = NULL;
+static struct xvmc_pix_fmt *p_render_surface_visible = NULL;
//display queue, kinda render ahead
-static struct xvmc_render_state * show_queue[MAX_SURFACES];
+static struct xvmc_pix_fmt *show_queue[MAX_SURFACES];
static int free_element;
@@ -135,7 +132,7 @@ static const struct{
static void xvmc_free(void);
static void xvmc_clean_surfaces(void);
static int count_free_surfaces(void);
-static struct xvmc_render_state * find_free_surface(void);
+static struct xvmc_pix_fmt *find_free_surface(void);
static const vo_info_t info = {
"XVideo Motion Compensation",
@@ -169,7 +166,7 @@ static void allocate_xvimage(int xvimage_width,int xvimage_height,int xv_format)
}
if ( Shmem_Flag )
{
- xvimage = (XvImage *) XvShmCreateImage(mDisplay, xv_port, xv_format,
+ xvimage = (XvImage *) XvShmCreateImage(mDisplay, xv_port, xv_format,
NULL, xvimage_width, xvimage_height, &Shminfo);
Shminfo.shmid = shmget(IPC_PRIVATE, xvimage->data_size, IPC_CREAT | 0777);
@@ -213,16 +210,16 @@ static void deallocate_xvimage(void)
//end of vo_xv shm/xvimage code
static int xvmc_check_surface_format(uint32_t format, XvMCSurfaceInfo * surf_info){
- if ( format == IMGFMT_XVMC_IDCT_MPEG2 ){
+ if ( format == IMGFMT_XVMC_IDCT_MPEG2 ){
if( surf_info->mc_type != (XVMC_IDCT|XVMC_MPEG_2) ) return -1;
if( surf_info->chroma_format != XVMC_CHROMA_FORMAT_420 ) return -1;
return 0;
- }
- if ( format == IMGFMT_XVMC_MOCO_MPEG2 ){
+ }
+ if ( format == IMGFMT_XVMC_MOCO_MPEG2 ){
if(surf_info->mc_type != XVMC_MPEG_2) return -1;
if(surf_info->chroma_format != XVMC_CHROMA_FORMAT_420) return -1;
return 0;
- }
+ }
return -1;//fail
}
@@ -230,7 +227,7 @@ return -1;//fail
static void print_xvimage_format_values(XvImageFormatValues *xifv){
int i;
printf("Format_ID = 0x%X\n",xifv->id);
-
+
printf(" type = ");
if(xifv->type == XvRGB) printf("RGB\n");
else if(xifv->type == XvYUV) printf("YUV\n");
@@ -270,7 +267,7 @@ int i;
printf(" component_order = ");
for(i=0;i<32;i++)
- if(xifv->component_order[i]>=32)
+ if(xifv->component_order[i]>=32)
printf("%c",xifv->component_order[i]);
printf("\n");
@@ -309,13 +306,13 @@ XvMCSurfaceInfo * mc_surf_list;
{
if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
printf("vo_xvmc: probing port #%ld\n",p); }
- mc_surf_list = XvMCListSurfaceTypes(mDisplay,p,&mc_surf_num);
- if( mc_surf_list == NULL || mc_surf_num == 0){
- if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
+ mc_surf_list = XvMCListSurfaceTypes(mDisplay,p,&mc_surf_num);
+ if( mc_surf_list == NULL || mc_surf_num == 0){
+ if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
printf("vo_xvmc: No XvMC supported. \n"); }
- continue;
- }
- if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
+ continue;
+ }
+ if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
printf("vo_xvmc: XvMC list have %d surfaces\n",mc_surf_num); }
//we have XvMC list!
for(s=0; s<mc_surf_num; s++)
@@ -332,18 +329,18 @@ XvMCSurfaceInfo * mc_surf_list;
if(!query){
rez = XvGrabPort(mDisplay,p,CurrentTime);
- if(rez != Success){
- if ( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
+ if(rez != Success){
+ if ( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
printf("vo_xvmc: Fail to grab port %ld\n",p); }
- continue;
- }
- printf("vo_xvmc: Using Xv Adaptor #%d (%s)\n", i, ai[i].name);
- printf("vo_xvmc: Port %ld grabed\n",p);
- xv_port = p;
- }
- goto surface_found;
- }//for mc surf
- XFree(mc_surf_list);//if mc_surf_num==0 is list==NULL ?
+ continue;
+ }
+ printf("vo_xvmc: Using Xv Adaptor #%d (%s)\n", i, ai[i].name);
+ printf("vo_xvmc: Port %ld grabed\n",p);
+ xv_port = p;
+ }
+ goto surface_found;
+ }//for mc surf
+ XFree(mc_surf_list);//if mc_surf_num==0 is list==NULL ?
}//for ports
}//for adaptors
XvFreeAdaptorInfo(ai);
@@ -363,19 +360,19 @@ surface_found:
}
static uint32_t xvmc_draw_image(mp_image_t *mpi){
- struct xvmc_render_state * rndr;
+ struct xvmc_pix_fmt *rndr;
assert(mpi!=NULL);
assert(mpi->flags &MP_IMGFLAG_DIRECT);
// assert(mpi->flags &MP_IMGFLAGS_DRAWBACK);
- rndr = (struct xvmc_render_state*)mpi->priv;//there is copy in plane[2]
+ rndr = (struct xvmc_pix_fmt*)mpi->priv; //there is copy in plane[2]
assert( rndr != NULL );
- assert( rndr->magic == MP_XVMC_RENDER_MAGIC );
+ assert( rndr->xvmc_id == AV_XVMC_ID );
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
printf("vo_xvmc: draw_image(show rndr=%p)\n",rndr);
// the surface have passed vf system without been skiped, it will be displayed
- rndr->state |= MP_XVMC_STATE_DISPLAY_PENDING;
+ rndr->state |= AV_XVMC_STATE_DISPLAY_PENDING;
p_render_surface_to_show = rndr;
top_field_first = mpi->fields & MP_IMGFIELD_TOP_FIRST;
return VO_TRUE;
@@ -388,7 +385,7 @@ int mc_ver,mc_rev;
strarg_t ck_src_arg = { 0, NULL };
strarg_t ck_method_arg = { 0, NULL };
opt_t subopts [] =
-{
+{
/* name arg type arg var test */
{ "port", OPT_ARG_INT, &xv_port_request, (opt_test_f)int_pos },
{ "adaptor", OPT_ARG_INT, &xv_adaptor, (opt_test_f)int_non_neg },
@@ -406,22 +403,22 @@ opt_t subopts [] =
//XvMC is subdivision of XVideo
if (Success != XvQueryExtension(mDisplay,&xv_version,&xv_release,&xv_request_base,
- &xv_event_base,&xv_error_base) ){
+ &xv_event_base,&xv_error_base) ){
mp_msg(MSGT_VO,MSGL_ERR,"Sorry, Xv(MC) not supported by this X11 version/driver\n");
mp_msg(MSGT_VO,MSGL_ERR,"********** Try with -vo x11 or -vo sdl ***********\n");
return -1;
}
printf("vo_xvmc: X-Video extension %d.%d\n",xv_version,xv_release);
- if( True != XvMCQueryExtension(mDisplay,&mc_eventBase,&mc_errorBase) ){
+ if( True != XvMCQueryExtension(mDisplay,&mc_eventBase,&mc_errorBase) ){
printf("vo_xvmc: No X-Video MotionCompensation Extension on %s\n",
- XDisplayName(NULL));
+ XDisplayName(NULL));
return -1;
}
if(Success == XvMCQueryVersion(mDisplay, &mc_ver, &mc_rev) ){
printf("vo_xvmc: X-Video MotionCompensation Extension version %i.%i\n",
- mc_ver,mc_rev);
+ mc_ver,mc_rev);
}
else{
printf("vo_xvmc: Error querying version info!\n");
@@ -431,7 +428,7 @@ opt_t subopts [] =
xv_port = 0;
number_of_surfaces = 0;
subpicture_alloc = 0;
-
+
benchmark = 0; //disable PutImageto allow faster display than screen refresh
use_sleep = 0;
use_queue = 0;
@@ -449,8 +446,8 @@ opt_t subopts [] =
}
static int config(uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height,
- uint32_t flags, char *title, uint32_t format){
+ uint32_t d_width, uint32_t d_height,
+ uint32_t flags, char *title, uint32_t format){
int i,mode_id,rez;
int numblocks,blocks_per_macroblock;//bpmb we have 6,8,12
@@ -521,21 +518,19 @@ int vm = flags & VOFLAG_MODESWITCHING;
printf("vo_xvmc: mv_blocks allocated\n");
if(surface_render==NULL)
- surface_render=malloc(MAX_SURFACES*sizeof(struct xvmc_render_state));//easy mem debug
- memset(surface_render,0,MAX_SURFACES*sizeof(struct xvmc_render_state));
+ surface_render = malloc(MAX_SURFACES * sizeof(struct xvmc_pix_fmt)); //easy mem debug
+ memset(surface_render, 0, MAX_SURFACES * sizeof(struct xvmc_pix_fmt));
for(i=0; i<MAX_SURFACES; i++){
rez=XvMCCreateSurface(mDisplay,&ctx,&surface_array[i]);
if( rez != Success )
- break;
- surface_render[i].magic = MP_XVMC_RENDER_MAGIC;
+ break;
+ surface_render[i].xvmc_id = AV_XVMC_ID;
surface_render[i].data_blocks = data_blocks.blocks;
surface_render[i].mv_blocks = mv_blocks.macro_blocks;
- surface_render[i].total_number_of_mv_blocks = numblocks;
- surface_render[i].total_number_of_data_blocks = numblocks*blocks_per_macroblock;;
- surface_render[i].mc_type = surface_info.mc_type & (~XVMC_IDCT);
+ surface_render[i].allocated_mv_blocks = numblocks;
+ surface_render[i].allocated_data_blocks = numblocks*blocks_per_macroblock;;
surface_render[i].idct = (surface_info.mc_type & XVMC_IDCT) == XVMC_IDCT;
- surface_render[i].chroma_format = surface_info.chroma_format;
surface_render[i].unsigned_intra = (surface_info.flags & XVMC_INTRA_UNSIGNED) == XVMC_INTRA_UNSIGNED;
surface_render[i].p_surface = &surface_array[i];
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
@@ -553,7 +548,7 @@ int vm = flags & VOFLAG_MODESWITCHING;
//debug
printf("vo_xvmc: idct=%d unsigned_intra=%d\n",
(surface_info.mc_type & XVMC_IDCT) == XVMC_IDCT,
- (surface_info.flags & XVMC_INTRA_UNSIGNED) == XVMC_INTRA_UNSIGNED);
+ (surface_info.flags & XVMC_INTRA_UNSIGNED) == XVMC_INTRA_UNSIGNED);
// Find way to display OSD & subtitle
printf("vo_xvmc: looking for OSD support\n");
@@ -561,7 +556,7 @@ int vm = flags & VOFLAG_MODESWITCHING;
if(surface_info.flags & XVMC_OVERLAID_SURFACE)
subpicture_mode = OVERLAY_SUBPICTURE;
- if(surface_info.subpicture_max_width != 0 &&
+ if(surface_info.subpicture_max_width != 0 &&
surface_info.subpicture_max_height != 0 ){
int s,k,num_subpic;
@@ -578,7 +573,7 @@ int vm = flags & VOFLAG_MODESWITCHING;
for(s=0;s<num_subpic;s++){
for(k=0;osd_render[k].draw_func_ptr!=NULL;k++){
if(xvfmv[s].id == osd_render[k].id)
- {
+ {
init_osd_fnc = osd_render[k].init_func_ptr;
draw_osd_fnc = osd_render[k].draw_func_ptr;
clear_osd_fnc = osd_render[k].clear_func_ptr;
@@ -591,7 +586,7 @@ int vm = flags & VOFLAG_MODESWITCHING;
}
}
found_subpic:
- XFree(xvfmv);
+ XFree(xvfmv);
}
//Blend2 supicture is always possible, blend1 only at backend
if( (subpicture_mode == BLEND_SUBPICTURE) &&
@@ -642,7 +637,7 @@ skip_surface_allocation:
#ifdef CONFIG_XF86VM
if ( vm )
{
- vo_vm_switch();
+ vo_vm_switch();
}
else
#endif
@@ -685,9 +680,8 @@ skip_surface_allocation:
free_element = 0;
first_frame = 1;
- vo_directrendering = 1;//ugly hack, coz xvmc works only with direct rendering
image_format=format;
- return 0;
+ return 0;
}
static int draw_frame(uint8_t *srcp[]){
@@ -719,7 +713,7 @@ static void init_osd_yuv_pal(void) {
switch(subpicture.component_order[j]){
case 'U': palette[i*seb+j] = U; break;
case 'V': palette[i*seb+j] = V; break;
- case 'Y':
+ case 'Y':
default:
palette[i*seb+j] = Y; break;
}
@@ -766,7 +760,7 @@ int rez;
osd_width = surface_info.subpicture_max_width;
if(osd_height > surface_info.subpicture_max_height)
osd_height = surface_info.subpicture_max_height;
- if(osd_width == 0 || osd_height == 0)
+ if(osd_width == 0 || osd_height == 0)
return;//if called before window size is known
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
@@ -795,7 +789,7 @@ int rez;
printf("%c", subpicture.component_order[i]);
printf("\"\n");
}
-
+
//call init for the surface type
init_osd_fnc();//init palete,clear color etc ...
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
@@ -846,7 +840,7 @@ int rez;
}
static void draw_osd(void){
-struct xvmc_render_state * osd_rndr;
+struct xvmc_pix_fmt *osd_rndr;
int osd_has_changed;
int have_osd_to_draw;
int rez;
@@ -855,17 +849,17 @@ int rez;
printf("vo_xvmc: draw_osd ,OSD_mode=%d, surface_to_show=%p\n",
subpicture_mode,p_render_surface_to_show);
- if(subpicture_mode == BLEND_SUBPICTURE ||
+ if(subpicture_mode == BLEND_SUBPICTURE ||
subpicture_mode == BACKEND_SUBPICTURE ){
if(!subpicture_alloc) //allocate subpicture when dimensions are known
OSD_init();
- if(!subpicture_alloc)
+ if(!subpicture_alloc)
return;//dimensions still unknown.
osd_has_changed = vo_update_osd(subpicture.width, subpicture.height);
- have_osd_to_draw = vo_osd_check_range_update(0, 0, subpicture.width,
- subpicture.height);
+ have_osd_to_draw = vo_osd_check_range_update(0, 0, subpicture.width,
+ subpicture.height);
if(!have_osd_to_draw)
return;//nothing to draw,no subpic, no blend
@@ -879,7 +873,7 @@ int rez;
if(subpicture_mode == BLEND_SUBPICTURE){
osd_rndr = find_free_surface();
- if(osd_rndr == NULL)
+ if(osd_rndr == NULL)
return;// no free surface to draw OSD in
rez = XvMCBlendSubpicture2(mDisplay,
@@ -896,15 +890,14 @@ int rez;
//When replaceing the surface with osd one, save the flags too!
osd_rndr->picture_structure = p_render_surface_to_show->picture_structure;
- osd_rndr->display_flags = p_render_surface_to_show->display_flags;
//add more if needed osd_rndr-> = p_render_surface_to_show->;
- p_render_surface_to_show->state &= ~MP_XVMC_STATE_DISPLAY_PENDING;
- p_render_surface_to_show->state |= MP_XVMC_STATE_OSD_SOURCE;
+ p_render_surface_to_show->state &= ~AV_XVMC_STATE_DISPLAY_PENDING;
+ p_render_surface_to_show->state |= AV_XVMC_STATE_OSD_SOURCE;
p_render_surface_to_show->p_osd_target_surface_render = osd_rndr;
p_render_surface_to_show = osd_rndr;
- p_render_surface_to_show->state = MP_XVMC_STATE_DISPLAY_PENDING;
+ p_render_surface_to_show->state = AV_XVMC_STATE_DISPLAY_PENDING;
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
printf("vo_xvmc:draw_osd: surface_to_show changed to %p\n",osd_rndr);
@@ -917,7 +910,7 @@ int rez;
0, 0, image_width, image_height);
}
-
+
}//if(BLEND||BACKEND)
}
@@ -936,13 +929,13 @@ int status,rez;
XvMCGetSurfaceStatus(mDisplay,srf,&status);
} while (status & XVMC_RENDERING);
return;//done
- }
+ }
XvMCSyncSurface(mDisplay, srf);
}
-static void put_xvmc_image(struct xvmc_render_state * p_render_surface,
- int draw_ck){
+static void put_xvmc_image(struct xvmc_pix_fmt *p_render_surface,
+ int draw_ck){
int rez;
struct vo_rect src_rect, dst_rect;
int i;
@@ -951,7 +944,7 @@ int i;
return;
calc_src_dst_rects(image_width, image_height, &src_rect, &dst_rect, NULL);
-
+
if(draw_ck)
vo_xv_draw_colorkey(dst_rect.left, dst_rect.top, dst_rect.width, dst_rect.height);
@@ -960,12 +953,11 @@ int i;
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,
src_rect.left, src_rect.top, src_rect.width, src_rect.height,
dst_rect.left, dst_rect.top, dst_rect.width, dst_rect.height,
bob_deinterlace ? field : 3);
- //p_render_surface_to_show->display_flags);
if(rez != Success){
printf("vo_xvmc: PutSurface failer, critical error %d!\n",rez);
assert(0);
@@ -982,7 +974,7 @@ int i,cfs;
printf("vo_xvmc: flip_page show(rndr=%p)\n\n",p_render_surface_to_show);
if(p_render_surface_to_show == NULL) return;
- assert( p_render_surface_to_show->magic == MP_XVMC_RENDER_MAGIC );
+ assert( p_render_surface_to_show->xvmc_id == AV_XVMC_ID );
//fixme assert( p_render_surface_to_show != p_render_surface_visible);
if(use_queue){
@@ -993,7 +985,7 @@ int i,cfs;
if(cfs > 3){//well have 3 free surfaces after add queue
if(free_element > 1)//a little voodoo magic
xvmc_sync_surface(show_queue[0]->p_surface);
- return;
+ return;
}
p_render_surface_to_show=show_queue[0];
if( mp_msg_test(MSGT_VO,MSGL_DBG5) )
@@ -1010,9 +1002,9 @@ int i,cfs;
//the visible surface won't be displayed anymore, mark it as free
if(p_render_surface_visible != NULL)
- p_render_surface_visible->state &= ~MP_XVMC_STATE_DISPLAY_PENDING;
+ p_render_surface_visible->state &= ~AV_XVMC_STATE_DISPLAY_PENDING;
-//!!fixme assert(p_render_surface_to_show->state & MP_XVMC_STATE_DISPLAY_PENDING);
+//!!fixme assert(p_render_surface_to_show->state & AV_XVMC_STATE_DISPLAY_PENDING);
//show it, displaying is always vsynced, so skip it for benchmark
put_xvmc_image(p_render_surface_to_show,first_frame);
@@ -1057,13 +1049,13 @@ int i;
XvMCHideSurface(mDisplay,&surface_array[i]);//it doesn't hurt, I hope
XvMCDestroySurface(mDisplay,&surface_array[i]);
- if( (surface_render[i].state != 0) &&
+ if( (surface_render[i].state != 0) &&
(p_render_surface_visible != &surface_render[i]) )
printf("vo_xvmc::uninit surface_render[%d].status=%d\n",i,
- surface_render[i].state);
+ surface_render[i].state);
}
- memset(surface_render,0,MAX_SURFACES*sizeof(struct xvmc_render_state));//for debuging
+ memset(surface_render, 0, MAX_SURFACES * sizeof(struct xvmc_pix_fmt)); //for debugging
free(surface_render);surface_render=NULL;
XvMCDestroyContext(mDisplay,&ctx);
@@ -1108,7 +1100,7 @@ int mode_id;
flags = VFCAP_CSP_SUPPORTED |
VFCAP_CSP_SUPPORTED_BY_HW |
- VFCAP_ACCEPT_STRIDE;
+ VFCAP_ACCEPT_STRIDE;
if( (qsurface_info.subpicture_max_width != 0) &&
(qsurface_info.subpicture_max_height != 0) )
@@ -1118,19 +1110,19 @@ int mode_id;
static int draw_slice(uint8_t *image[], int stride[],
- int w, int h, int x, int y){
-struct xvmc_render_state * rndr;
+ int w, int h, int x, int y){
+struct xvmc_pix_fmt *rndr;
int rez;
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
printf("vo_xvmc: draw_slice y=%d\n",y);
- rndr = (struct xvmc_render_state*)image[2];//this is copy of priv-ate
+ rndr = (struct xvmc_pix_fmt*)image[2]; //this is copy of priv-ate
assert( rndr != NULL );
- assert( rndr->magic == MP_XVMC_RENDER_MAGIC );
+ assert( rndr->xvmc_id == AV_XVMC_ID );
rez = XvMCRenderSurface(mDisplay,&ctx,rndr->picture_structure,
- rndr->p_surface,
+ rndr->p_surface,
rndr->p_past_surface,
rndr->p_future_surface,
rndr->flags,
@@ -1152,14 +1144,14 @@ int rez;
XvMCMacroBlock* testblock;
testblock = &mv_blocks.macro_blocks[i];
- printf("vo_xvmc::slice: mv_block - x=%d,y=%d,mb_type=0x%x,mv_type=0x%x,mv_field_select=%d\n",
- testblock->x,testblock->y,testblock->macroblock_type,
- testblock->motion_type,testblock->motion_vertical_field_select);
+ printf("vo_xvmc::slice: mv_block - x=%d,y=%d,mb_type=0x%x,mv_type=0x%x,mv_field_select=%d\n",
+ testblock->x,testblock->y,testblock->macroblock_type,
+ testblock->motion_type,testblock->motion_vertical_field_select);
printf("vo_xvmc::slice: dct_type=%d,data_index=0x%x,cbp=%d,pad0=%d\n",
- testblock->dct_type,testblock->index,testblock->coded_block_pattern,
- testblock->pad0);
+ testblock->dct_type,testblock->index,testblock->coded_block_pattern,
+ testblock->pad0);
printf("vo_xvmc::slice: PMV[0][0][0/1]=(%d,%d)\n",
- testblock->PMV[0][0][0],testblock->PMV[0][0][1]);
+ testblock->PMV[0][0][0],testblock->PMV[0][0][1]);
}
}
#endif
@@ -1179,17 +1171,17 @@ int rez;
//XvMCHide hides the surface on next retrace, so
//check if the surface is not still displaying
-static void check_osd_source(struct xvmc_render_state * src_rndr){
-struct xvmc_render_state * osd_rndr;
+static void check_osd_source(struct xvmc_pix_fmt *src_rndr) {
+struct xvmc_pix_fmt *osd_rndr;
int stat;
//If this is source surface, check does the OSD rendering is compleate
- if(src_rndr->state & MP_XVMC_STATE_OSD_SOURCE){
+ if(src_rndr->state & AV_XVMC_STATE_OSD_SOURCE){
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
printf("vo_xvmc: OSD surface=%p quering\n",src_rndr);
osd_rndr = src_rndr->p_osd_target_surface_render;
XvMCGetSurfaceStatus(mDisplay, osd_rndr->p_surface, &stat);
if(!(stat & XVMC_RENDERING))
- src_rndr->state &= ~MP_XVMC_STATE_OSD_SOURCE;
+ src_rndr->state &= ~AV_XVMC_STATE_OSD_SOURCE;
}
}
static int count_free_surfaces(void) {
@@ -1203,10 +1195,10 @@ int i,num;
return num;
}
-static struct xvmc_render_state * find_free_surface(void) {
+static struct xvmc_pix_fmt *find_free_surface(void) {
int i,t;
int stat;
-struct xvmc_render_state * visible_rndr;
+struct xvmc_pix_fmt *visible_rndr;
visible_rndr = NULL;
for(i=0; i<number_of_surfaces; i++){
@@ -1214,7 +1206,7 @@ struct xvmc_render_state * visible_rndr;
check_osd_source(&surface_render[i]);
if( surface_render[i].state == 0){
XvMCGetSurfaceStatus(mDisplay, surface_render[i].p_surface,&stat);
- if( (stat & XVMC_DISPLAYING) == 0 )
+ if( (stat & XVMC_DISPLAYING) == 0 )
return &surface_render[i];
visible_rndr = &surface_render[i];// remember it, use as last resort
}
@@ -1222,12 +1214,12 @@ struct xvmc_render_state * visible_rndr;
//all surfaces are busy, but there is one that will be free
//on next monitor retrace, we just have to wait
- if(visible_rndr != NULL){
+ if(visible_rndr != NULL){
printf("vo_xvmc: waiting retrace\n");
- for(t=0;t<1000;t++){
+ for(t=0;t<1000;t++){
usec_sleep(1000);//1ms
XvMCGetSurfaceStatus(mDisplay, visible_rndr->p_surface,&stat);
- if( (stat & XVMC_DISPLAYING) == 0 )
+ if( (stat & XVMC_DISPLAYING) == 0 )
return visible_rndr;
}
}
@@ -1243,8 +1235,8 @@ int i;
for(i=0; i<number_of_surfaces; i++){
- surface_render[i].state&=!( MP_XVMC_STATE_DISPLAY_PENDING |
- MP_XVMC_STATE_OSD_SOURCE |
+ surface_render[i].state&=!( AV_XVMC_STATE_DISPLAY_PENDING |
+ AV_XVMC_STATE_OSD_SOURCE |
0);
surface_render[i].p_osd_target_surface_render=NULL;
if(surface_render[i].state != 0){
@@ -1256,7 +1248,7 @@ int i;
}
static uint32_t get_image(mp_image_t *mpi){
- struct xvmc_render_state * rndr;
+ struct xvmc_pix_fmt *rndr;
rndr = find_free_surface();
@@ -1277,7 +1269,7 @@ assert(rndr->next_free_data_block_num == 0);
// these are shared!! so watch out
// do call RenderSurface before overwriting
- mpi->planes[0] = (char*)data_blocks.blocks;
+ mpi->planes[0] = (char*)data_blocks.blocks;
mpi->planes[1] = (char*)mv_blocks.macro_blocks;
mpi->priv =
mpi->planes[2] = (char*)rndr;
@@ -1292,7 +1284,7 @@ assert(rndr->next_free_data_block_num == 0);
if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
printf("vo_xvmc: get_image: rndr=%p (surface=%p) \n",
rndr,rndr->p_surface);
-return VO_TRUE;
+return VO_TRUE;
}
static int control(uint32_t request, void *data)
@@ -1309,13 +1301,13 @@ static int control(uint32_t request, void *data)
case VOCTRL_DRAW_IMAGE:
return xvmc_draw_image((mp_image_t *)data);
case VOCTRL_GET_IMAGE:
- return get_image((mp_image_t *)data);
+ return get_image((mp_image_t *)data);
//vo_xv
case VOCTRL_GUISUPPORT:
return VO_TRUE;
case VOCTRL_ONTOP:
vo_x11_ontop();
- return VO_TRUE;
+ return VO_TRUE;
case VOCTRL_FULLSCREEN:
vo_x11_fullscreen();
// indended, fallthrough to update panscan on fullscreen/windowed switch
@@ -1327,7 +1319,7 @@ static int control(uint32_t request, void *data)
if(old_y != vo_panscan_y)
{
- //this also draws the colorkey
+ //this also draws the colorkey
put_xvmc_image(p_render_surface_visible,1);
}
}