[Mplayer-cvslog] CVS: main/libvo vo_fbdev.c,1.81,1.82
Richard Felker CVS
rfelker at mplayerhq.hu
Tue Aug 12 10:24:56 CEST 2003
Update of /cvsroot/mplayer/main/libvo
In directory mail:/var/tmp.root/cvs-serv12617/libvo
Modified Files:
vo_fbdev.c
Log Message:
10000l, the old code was slow as hell, copying stuff extra times and
actually broken -- blanking the whole screen at each 'page flip' with
-dr enabled. benchmarks:
before:
56% cpu for decode
56% cpu for vo with no -dr
25% cpu for vo with -dr
after:
56% cpu for decode
25% cpu for vo without -dr
0% cpu for vo with -dr
if vo_fbdev is going to do pageflip, it needs to do it for REAL, using
vertical scroll registers (like g2), not copying a temp buffer (which
will shear anyway and is super-slow).
Index: vo_fbdev.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_fbdev.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- vo_fbdev.c 12 Aug 2003 06:57:19 -0000 1.81
+++ vo_fbdev.c 12 Aug 2003 08:24:24 -0000 1.82
@@ -559,7 +559,6 @@
unsigned char *srca, int stride, unsigned char *dst,
int dstride);
-static uint8_t *next_frame;
static int in_width;
static int in_height;
static int out_width;
@@ -950,7 +949,6 @@
fb_line_len = fb_finfo.line_length;
fb_size = fb_finfo.smem_len;
frame_buffer = NULL;
- next_frame = NULL;
#ifdef CONFIG_VIDIX
if(vidix_name)
{
@@ -1002,10 +1000,6 @@
mp_msg(MSGT_VO, MSGL_DBG2, "center @ %p\n", center);
mp_msg(MSGT_VO, MSGL_V, "pixel per line: %d\n", fb_line_len / fb_pixel_size);
- if (!(next_frame = (uint8_t *) malloc(in_width * in_height * fb_pixel_size))) {
- mp_msg(MSGT_VO, MSGL_ERR, "Can't malloc next_frame: %s\n", strerror(errno));
- return 1;
- }
if (fs || vm)
memset(frame_buffer, '\0', fb_line_len * fb_yres);
}
@@ -1045,12 +1039,10 @@
unsigned char *srca, int stride)
{
unsigned char *dst;
- int dstride;
- dst = next_frame + (in_width * y0 + x0) * fb_pixel_size;
- dstride = in_width * fb_pixel_size;
+ dst = center + (fb_line_len * y0 + x0) * fb_pixel_size;
- (*draw_alpha_p)(w, h, src, srca, stride, dst, dstride);
+ (*draw_alpha_p)(w, h, src, srca, stride, dst, fb_line_len);
}
static uint32_t draw_frame(uint8_t *src[]) { return 1; }
@@ -1060,15 +1052,13 @@
{
uint8_t *d;
uint8_t *s;
- int next;
- d = next_frame + (in_width * y + x) * fb_pixel_size;
- next = in_width * fb_pixel_size;
+ d = center + (fb_line_len * y + x) * fb_pixel_size;
s = src[0];
while (h) {
memcpy(d, s, w * fb_pixel_size);
- d += next;
+ d += fb_line_len;
s += stride[0];
h--;
}
@@ -1082,14 +1072,6 @@
static void flip_page(void)
{
- int i, out_offset = 0, in_offset = 0;
-
- for (i = 0; i < in_height; i++) {
- memcpy(center + out_offset, next_frame + in_offset,
- in_width * fb_pixel_size);
- out_offset += fb_line_len;
- in_offset += in_width * fb_pixel_size;
- }
}
static void draw_osd(void)
@@ -1104,7 +1086,6 @@
mp_msg(MSGT_VO, MSGL_WARN, "Can't restore original cmap\n");
fb_cmap_changed = 0;
}
- if(next_frame) free(next_frame);
if (ioctl(fb_dev_fd, FBIOGET_VSCREENINFO, &fb_vinfo))
mp_msg(MSGT_VO, MSGL_WARN, "ioctl FBIOGET_VSCREENINFO: %s\n", strerror(errno));
fb_orig_vinfo.xoffset = fb_vinfo.xoffset;
@@ -1120,7 +1101,7 @@
close(fb_tty_fd);
close(fb_dev_fd);
if(frame_buffer) munmap(frame_buffer, fb_size);
- frame_buffer = next_frame = NULL;
+ frame_buffer = NULL;
#ifdef CONFIG_VIDIX
if(vidix_name) vidix_term();
#endif
More information about the MPlayer-cvslog
mailing list