static void draw_alpha_15(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride) { vo_draw_alpha_rgb15(w, h, src, srca, stride, ImageData + 2 * (y0 * image_width + x0), 2 * image_width); }
static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride) { char *d; unsigned int offset; int buffer_stride; offset = vo_dga_width * y0 + x0; buffer_stride = vo_dga_width; d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset; switch (HW_MODE.vdm_mplayer_depth) { case 32: vo_draw_alpha_rgb32(w, h, src, srca, stride, d + 4 * offset, 4 * buffer_stride); break; case 24: vo_draw_alpha_rgb24(w, h, src, srca, stride, d + 3 * offset, 3 * buffer_stride); break; case 15: vo_draw_alpha_rgb15(w, h, src, srca, stride, d + 2 * offset, 2 * buffer_stride); break; case 16: vo_draw_alpha_rgb16(w, h, src, srca, stride, d + 2 * offset, 2 * buffer_stride); break; } }
static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride) { uint32_t bespitch = /*(*/mga_vid_config.src_width;// + 15) & ~15; switch(mga_vid_config.format) { case IMGFMT_BGR15: case IMGFMT_RGB15: vo_draw_alpha_rgb15(w,h,src,srca,stride,lvo_mem+2*(y0*bespitch+x0),2*bespitch); break; case IMGFMT_BGR16: case IMGFMT_RGB16: vo_draw_alpha_rgb16(w,h,src,srca,stride,lvo_mem+2*(y0*bespitch+x0),2*bespitch); break; case IMGFMT_BGR24: case IMGFMT_RGB24: vo_draw_alpha_rgb24(w,h,src,srca,stride,lvo_mem+3*(y0*bespitch+x0),3*bespitch); break; case IMGFMT_BGR32: case IMGFMT_RGB32: vo_draw_alpha_rgb32(w,h,src,srca,stride,lvo_mem+4*(y0*bespitch+x0),4*bespitch); break; case IMGFMT_YV12: case IMGFMT_IYUV: case IMGFMT_I420: vo_draw_alpha_yv12(w,h,src,srca,stride,lvo_mem+bespitch*y0+x0,bespitch); break; case IMGFMT_YUY2: vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0),bespitch); break; case IMGFMT_UYVY: vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0)+1,bespitch); break; default: draw_alpha_null(x0,y0,w,h,src,srca,stride); } }
static void draw_func(void *ctx, int x0,int y0, int w,int h,unsigned char* src, unsigned char *srca, int stride){ unsigned char* dst; if(!vo_osd_changed_flag && vf->dmpi->planes[0]==vf->priv->fb_ptr){ // ok, enough to update the area inside the video, leave the black bands // untouched! if(x0<vf->priv->exp_x){ int tmp=vf->priv->exp_x-x0; w-=tmp; src+=tmp; srca+=tmp; x0+=tmp; } if(y0<vf->priv->exp_y){ int tmp=vf->priv->exp_y-y0; h-=tmp; src+=tmp*stride; srca+=tmp*stride; y0+=tmp; } if(x0+w>vf->priv->exp_x+orig_w){ w=vf->priv->exp_x+orig_w-x0; } if(y0+h>vf->priv->exp_y+orig_h){ h=vf->priv->exp_y+orig_h-y0; } } if(w<=0 || h<=0) return; // nothing to do... // printf("OSD redraw: %d;%d %dx%d \n",x0,y0,w,h); dst=vf->dmpi->planes[0]+ vf->dmpi->stride[0]*y0+ (vf->dmpi->bpp>>3)*x0; switch(vf->dmpi->imgfmt){ case IMGFMT_BGR15: case IMGFMT_RGB15: vo_draw_alpha_rgb15(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); break; case IMGFMT_BGR16: case IMGFMT_RGB16: vo_draw_alpha_rgb16(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); break; case IMGFMT_BGR24: case IMGFMT_RGB24: vo_draw_alpha_rgb24(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); break; case IMGFMT_BGR32: case IMGFMT_RGB32: vo_draw_alpha_rgb32(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); break; case IMGFMT_YV12: case IMGFMT_I420: case IMGFMT_IYUV: case IMGFMT_YVU9: case IMGFMT_IF09: case IMGFMT_Y800: case IMGFMT_Y8: vo_draw_alpha_yv12(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); break; case IMGFMT_YUY2: vo_draw_alpha_yuy2(w,h,src,srca,stride,dst,vf->dmpi->stride[0]); break; case IMGFMT_UYVY: vo_draw_alpha_yuy2(w,h,src,srca,stride,dst+1,vf->dmpi->stride[0]); break; } }
static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride) { uint32_t apitch,bespitch; char *lvo_mem; lvo_mem = vidix_mem + vidix_play.offsets[next_frame] + vidix_play.offset.y; apitch = vidix_play.dest.pitch.y-1; switch(vidix_play.fourcc) { case IMGFMT_NV12: case IMGFMT_YV12: case IMGFMT_IYUV: case IMGFMT_I420: case IMGFMT_YVU9: case IMGFMT_IF09: case IMGFMT_Y8: case IMGFMT_Y800: bespitch = (vidix_play.src.w + apitch) & (~apitch); vo_draw_alpha_yv12(w,h,src,srca,stride,lvo_mem+bespitch*y0+x0,bespitch); break; case IMGFMT_YUY2: bespitch = (vidix_play.src.w*2 + apitch) & (~apitch); vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+bespitch*y0+2*x0,bespitch); break; case IMGFMT_UYVY: bespitch = (vidix_play.src.w*2 + apitch) & (~apitch); vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+bespitch*y0+2*x0+1,bespitch); break; case IMGFMT_RGB32: case IMGFMT_BGR32: bespitch = (vidix_play.src.w*4 + apitch) & (~apitch); vo_draw_alpha_rgb32(w,h,src,srca,stride,lvo_mem+y0*bespitch+4*x0,bespitch); break; case IMGFMT_RGB24: case IMGFMT_BGR24: bespitch = (vidix_play.src.w*3 + apitch) & (~apitch); vo_draw_alpha_rgb24(w,h,src,srca,stride,lvo_mem+y0*bespitch+3*x0,bespitch); break; case IMGFMT_RGB16: case IMGFMT_BGR16: bespitch = (vidix_play.src.w*2 + apitch) & (~apitch); vo_draw_alpha_rgb16(w,h,src,srca,stride,lvo_mem+y0*bespitch+2*x0,bespitch); break; case IMGFMT_RGB15: case IMGFMT_BGR15: bespitch = (vidix_play.src.w*2 + apitch) & (~apitch); vo_draw_alpha_rgb15(w,h,src,srca,stride,lvo_mem+y0*bespitch+2*x0,bespitch); break; default: return; } }