搞了好多天终于把mplayer在开发屏幕中任意位置的定位进行播放。参考一下文档,在加上mplayer移植文档(在博客中mplyer移植文档)终于成功了。
(仅供参考)
通过对vo_fbdev.c里面的:
static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x,
int y)
{
uint8_t *d;
uint8_t *s;
d = center + fb_line_len * y + fb_pixel_size * x;
s = src[0];
while (h) {
fast_memcpy(d, s, w * fb_pixel_size);
d += fb_line_len;
s += stride[0];
h--;
}
return 0;
}
的分析,可以看出,x,y为缓存图像坐标的起始点
只要改d = center + fb_line_len * y + fb_pixel_size * x;为d = center + fb_line_len * (y+15) + fb_pixel_size * x;后保存重新编译就可以了。
然而编译后全屏播放也一样会偏移15pix,即标题栏没有覆盖!
引发出能否自己添加外部命令参数,通过对geometry.c,vo_s3fb.c,vo_fbdev.c进行分析,可以利用geometry的x y参数赋值。因为-geometry本来只对x11 xmga xv xvmc xvidix gl gl2 directx和tdfxfb有效,现在我们添加上对fbdev也有效!
其他均不变!
在vo_fbdev.c开头添加库文件
#include "geometry.h"
定义四个变量
static uint32_t fbwidth, fbheight, fbx, fby;
在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)的末尾添加参数获取命令:
geometry(&fbx, &fby, &fbwidth, &fbheight, 240, 320);//注意,后面的为screenwidth和screenheight.不能为0,0
mp_msg(MSGT_VO, MSGL_INFO, "fbdev: output is at %dx%d +%dx%d\n", fbx, fby, fbwidth, fbheight);
在将d = center + fb_line_len * y + fb_pixel_size * x改为d = center + fb_line_len * (y + fby) + fb_pixel_size * (x + fbx);
重新编译后得到Mplyaer文件即可
执行./mplayer_cxy /root/Documents/videos/panda.mpg -vo fbdev -geometry +0+15