[Mplayer-cvslog] CVS: main/libvo vo_fbdev.c,1.28,1.29
Szabolcs Berecz
szabii at users.sourceforge.net
Thu Apr 19 03:18:07 CEST 2001
Update of /cvsroot/mplayer/main/libvo
In directory usw-pr-cvs1:/tmp/cvs-serv13012
Modified Files:
vo_fbdev.c
Log Message:
changed query_format return; lots of fixes/changes
Index: vo_fbdev.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_fbdev.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -r1.28 -r1.29
*** vo_fbdev.c 2001/04/18 10:59:12 1.28
--- vo_fbdev.c 2001/04/19 01:18:05 1.29
***************
*** 352,356 ****
static float dcf(fb_mode_t *m) //driving clock frequency
{
! return 1000000.0f / m->pixclock;
}
--- 352,356 ----
static float dcf(fb_mode_t *m) //driving clock frequency
{
! return 1e12f / m->pixclock;
}
***************
*** 386,409 ****
int i;
fb_mode_t *best = fb_modes;
! fb_mode_t *curr = fb_modes + 1;
! for (i = nr_modes - 1; i; i--, curr++) {
! if (curr->xres >= xres && curr->yres >= yres) {
if (curr->xres < best->xres && curr->yres < best->yres) {
! if (!in_range(hfreq, hsf(curr)))
! continue;
! if (!in_range(vfreq, vsf(curr)))
! continue;
! if (!in_range(dotclock, dcf(curr)))
! continue;
best = curr;
! }
! }
}
- if ((best->xres < xres || best->yres < yres) ||
- !in_range(hfreq, hsf(best)) ||
- !in_range(vfreq, vsf(best)) ||
- !in_range(dotclock, dcf(curr)))
- return NULL;
return best;
}
--- 386,438 ----
int i;
fb_mode_t *best = fb_modes;
! fb_mode_t *curr;
! /* find first working mode */
! for (i = nr_modes - 1; i; i--, best++) {
! if (in_range(hfreq, hsf(best)) && in_range(vfreq, vsf(best)) &&
! in_range(dotclock, dcf(best)))
! break;
! if (verbose > 1)
! printf(FBDEV "can't set %dx%d\n", best->xres, best->yres);
! }
!
! if (!i)
! return NULL;
! if (i == 1)
! return best;
!
! for (curr = best + 1; i; i--, curr++) {
! if (!in_range(hfreq, hsf(curr)))
! continue;
! if (!in_range(vfreq, vsf(curr)))
! continue;
! if (!in_range(dotclock, dcf(curr)))
! continue;
! if (verbose > 1)
! printf(FBDEV "%dx%d ", curr->xres, curr->yres);
! if ((best->xres < xres || best->yres < yres) &&
! (curr->xres > best->xres ||
! curr->yres > best->yres)) {
! if (verbose > 1)
! printf("better than %dx%d\n", best->xres,
! best->yres);
! best = curr;
! } else if (curr->xres >= xres && curr->yres >= yres) {
if (curr->xres < best->xres && curr->yres < best->yres) {
! if (verbose > 1)
! printf("smaller than %dx%d\n",
! best->xres, best->yres);
best = curr;
! } else if (curr->xres == best->xres &&
! curr->yres == best->yres &&
! (vsf(curr) > vsf(best))) {
! if (verbose > 1)
! printf("faster screen refresh\n");
! best = curr;
! } else if (verbose > 1)
! printf("\n");
! } else if (verbose > 1)
! printf("is too small\n");
}
return best;
}
***************
*** 539,542 ****
--- 568,572 ----
static size_t fb_size;
static uint8_t *frame_buffer;
+ static uint8_t *L123123875; /* thx to .so */
static struct fb_fix_screeninfo fb_finfo;
static struct fb_var_screeninfo fb_orig_vinfo;
***************
*** 551,555 ****
static fb_mode_t *fb_mode = NULL;
- static void (*put_frame)(void);
static int left_band_width;
static int right_band_width;
--- 581,584 ----
***************
*** 674,680 ****
}
! static void put_frame_without_bands(void);
! static void put_frame_with_bands(void);
static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width,
uint32_t d_height, uint32_t fullscreen, char *title,
--- 703,714 ----
}
! static void clear_bg(void)
! {
! int i, offset = 0;
+ for (i = 0; i < out_height; i++, offset += fb_screen_width)
+ memset(frame_buffer + offset, 0x0, out_width * fb_pixel_size);
+ }
+
static uint32_t init(uint32_t width, uint32_t height, uint32_t d_width,
uint32_t d_height, uint32_t fullscreen, char *title,
***************
*** 741,744 ****
--- 775,780 ----
return 1;
}
+ printf(FBDEV "using mode %dx%d @ %.1fHz\n", fb_mode->xres,
+ fb_mode->yres, vsf(fb_mode));
fb_mode2fb_vinfo(fb_mode, &fb_vinfo);
}
***************
*** 759,770 ****
if (verbose > 0) {
printf(FBDEV "var info:\n");
! printf(FBDEV "xres: %ul\n", fb_vinfo.xres);
! printf(FBDEV "yres: %ul\n", fb_vinfo.yres);
! printf(FBDEV "xres_virtual: %ul\n", fb_vinfo.xres_virtual);
! printf(FBDEV "yres_virtual: %ul\n", fb_vinfo.yres_virtual);
! printf(FBDEV "xoffset: %ul\n", fb_vinfo.xoffset);
! printf(FBDEV "yoffset: %ul\n", fb_vinfo.yoffset);
! printf(FBDEV "bits_per_pixel: %ul\n", fb_vinfo.bits_per_pixel);
! printf(FBDEV "grayscale: %ul\n", fb_vinfo.grayscale);
printf(FBDEV "red: %lu %lu %lu\n",
(unsigned long) fb_vinfo.red.offset,
--- 795,806 ----
if (verbose > 0) {
printf(FBDEV "var info:\n");
! printf(FBDEV "xres: %u\n", fb_vinfo.xres);
! printf(FBDEV "yres: %u\n", fb_vinfo.yres);
! printf(FBDEV "xres_virtual: %u\n", fb_vinfo.xres_virtual);
! printf(FBDEV "yres_virtual: %u\n", fb_vinfo.yres_virtual);
! printf(FBDEV "xoffset: %u\n", fb_vinfo.xoffset);
! printf(FBDEV "yoffset: %u\n", fb_vinfo.yoffset);
! printf(FBDEV "bits_per_pixel: %u\n", fb_vinfo.bits_per_pixel);
! printf(FBDEV "grayscale: %u\n", fb_vinfo.grayscale);
printf(FBDEV "red: %lu %lu %lu\n",
(unsigned long) fb_vinfo.red.offset,
***************
*** 783,802 ****
(unsigned long) fb_vinfo.transp.length,
(unsigned long) fb_vinfo.transp.msb_right);
! printf(FBDEV "nonstd: %ul\n", fb_vinfo.nonstd);
if (verbose > 1) {
! printf(FBDEV "activate: %ul\n", fb_vinfo.activate);
! printf(FBDEV "height: %ul\n", fb_vinfo.height);
! printf(FBDEV "width: %ul\n", fb_vinfo.width);
! printf(FBDEV "accel_flags: %ul\n", fb_vinfo.accel_flags);
printf(FBDEV "timing:\n");
! printf(FBDEV "pixclock: %ul\n", fb_vinfo.pixclock);
! printf(FBDEV "left_margin: %ul\n", fb_vinfo.left_margin);
! printf(FBDEV "right_margin: %ul\n", fb_vinfo.right_margin);
! printf(FBDEV "upper_margin: %ul\n", fb_vinfo.upper_margin);
! printf(FBDEV "lower_margin: %ul\n", fb_vinfo.lower_margin);
! printf(FBDEV "hsync_len: %ul\n", fb_vinfo.hsync_len);
! printf(FBDEV "vsync_len: %ul\n", fb_vinfo.vsync_len);
! printf(FBDEV "sync: %ul\n", fb_vinfo.sync);
! printf(FBDEV "vmode: %ul\n", fb_vinfo.vmode);
}
}
--- 819,838 ----
(unsigned long) fb_vinfo.transp.length,
(unsigned long) fb_vinfo.transp.msb_right);
! printf(FBDEV "nonstd: %u\n", fb_vinfo.nonstd);
if (verbose > 1) {
! printf(FBDEV "activate: %u\n", fb_vinfo.activate);
! printf(FBDEV "height: %u\n", fb_vinfo.height);
! printf(FBDEV "width: %u\n", fb_vinfo.width);
! printf(FBDEV "accel_flags: %u\n", fb_vinfo.accel_flags);
printf(FBDEV "timing:\n");
! printf(FBDEV "pixclock: %u\n", fb_vinfo.pixclock);
! printf(FBDEV "left_margin: %u\n", fb_vinfo.left_margin);
! printf(FBDEV "right_margin: %u\n", fb_vinfo.right_margin);
! printf(FBDEV "upper_margin: %u\n", fb_vinfo.upper_margin);
! printf(FBDEV "lower_margin: %u\n", fb_vinfo.lower_margin);
! printf(FBDEV "hsync_len: %u\n", fb_vinfo.hsync_len);
! printf(FBDEV "vsync_len: %u\n", fb_vinfo.vsync_len);
! printf(FBDEV "sync: %u\n", fb_vinfo.sync);
! printf(FBDEV "vmode: %u\n", fb_vinfo.vmode);
}
}
***************
*** 811,815 ****
printf(FBDEV "smem_start: %p\n", (void *) fb_finfo.smem_start);
}
! printf(FBDEV "framebuffer size: %d bytes\n", fb_size);
printf(FBDEV "type: %lu\n", (unsigned long) fb_finfo.type);
printf(FBDEV "type_aux: %lu\n", (unsigned long) fb_finfo.type_aux);
--- 847,851 ----
printf(FBDEV "smem_start: %p\n", (void *) fb_finfo.smem_start);
}
! printf(FBDEV "framebuffer size: %d bytes\n", fb_finfo.smem_len);
printf(FBDEV "type: %lu\n", (unsigned long) fb_finfo.type);
printf(FBDEV "type_aux: %lu\n", (unsigned long) fb_finfo.type_aux);
***************
*** 823,828 ****
if (verbose > 1) {
printf(FBDEV "mmio_start: %p\n", (void *) fb_finfo.mmio_start);
! printf(FBDEV "mmio_len: %ul bytes\n", fb_finfo.mmio_len);
! printf(FBDEV "accel: %ul\n", fb_finfo.accel);
}
}
--- 859,864 ----
if (verbose > 1) {
printf(FBDEV "mmio_start: %p\n", (void *) fb_finfo.mmio_start);
! printf(FBDEV "mmio_len: %u bytes\n", fb_finfo.mmio_len);
! printf(FBDEV "accel: %u\n", fb_finfo.accel);
}
}
***************
*** 892,904 ****
return 1;
}
- left_band_width = (out_width - in_width) / 2;
- right_band_width = (out_width - in_width + 1) / 2;
- upper_band_height = (out_height - in_height) / 2;
- lower_band_height = (out_height - in_height + 1) / 2;
- if (left_band_width || right_band_width || upper_band_height ||
- lower_band_height)
- put_frame = put_frame_with_bands;
- else
- put_frame = put_frame_without_bands;
fb_pixel_size = fb_vinfo.bits_per_pixel / 8;
--- 928,931 ----
***************
*** 916,924 ****
return 1;
}
if (verbose > 0) {
printf(FBDEV "other:\n");
! if (verbose > 1)
printf(FBDEV "frame_buffer @ %p\n", frame_buffer);
printf(FBDEV "fb_bpp: %d\n", fb_bpp);
printf(FBDEV "fb_real_bpp: %d\n", fb_real_bpp);
--- 943,955 ----
return 1;
}
+ L123123875 = frame_buffer + (out_width - in_width) * fb_pixel_size /
+ 2 + (out_height - in_height) * fb_screen_width / 2;
if (verbose > 0) {
printf(FBDEV "other:\n");
! if (verbose > 1) {
printf(FBDEV "frame_buffer @ %p\n", frame_buffer);
+ printf(FBDEV "L123123875 @ %p\n", L123123875);
+ }
printf(FBDEV "fb_bpp: %d\n", fb_bpp);
printf(FBDEV "fb_real_bpp: %d\n", fb_real_bpp);
***************
*** 934,937 ****
--- 965,969 ----
if (format == IMGFMT_YV12)
yuv2rgb_init(fb_bpp, MODE_RGB);
+ clear_bg();
return 0;
}
***************
*** 939,942 ****
--- 971,976 ----
static uint32_t query_format(uint32_t format)
{
+ int ret = 0x4; /* osd/sub supported on all bpp */
+
if (!fb_preinit_done)
if (fb_preinit())
***************
*** 945,962 ****
return 0;
- if (verbose > 0)
- printf(FBDEV "query_format(%#lx(%.4s))\n",(unsigned long) format,
- (char *) &format);
if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) {
int bpp = format & 0xff;
if (bpp == fb_bpp)
! return 1;
else if (bpp == 15 && fb_bpp == 16)
! return 1;
else if (bpp == 24 && fb_bpp == 32)
! return 1;
}
if (format == IMGFMT_YV12)
! return 1;
return 0;
}
--- 979,994 ----
return 0;
if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) {
int bpp = format & 0xff;
+
if (bpp == fb_bpp)
! return ret|0x2;
else if (bpp == 15 && fb_bpp == 16)
! return ret|0x1;
else if (bpp == 24 && fb_bpp == 32)
! return ret|0x1;
}
if (format == IMGFMT_YV12)
! return ret|0x2;
return 0;
}
***************
*** 986,990 ****
int dstride = in_width * fb_pixel_size;
! switch (fb_real_bpp) {
case 24:
vo_draw_alpha_rgb24(w, h, src, srca, stride, dst, dstride);
--- 1018,1022 ----
int dstride = in_width * fb_pixel_size;
! switch (fb_bpp) {
case 24:
vo_draw_alpha_rgb24(w, h, src, srca, stride, dst, dstride);
***************
*** 1047,1056 ****
}
! static void put_frame_without_bands(void)
{
int i, out_offset = 0, in_offset = 0;
for (i = 0; i < in_height; i++) {
! memcpy(frame_buffer + out_offset, next_frame + in_offset,
in_width * fb_pixel_size);
out_offset += fb_screen_width;
--- 1079,1088 ----
}
! static void put_frame(void)
{
int i, out_offset = 0, in_offset = 0;
for (i = 0; i < in_height; i++) {
! memcpy(L123123875 + out_offset, next_frame + in_offset,
in_width * fb_pixel_size);
out_offset += fb_screen_width;
***************
*** 1059,1096 ****
}
- static void put_frame_with_bands(void)
- {
- int i, out_offset = 0, in_offset = 0, w, bw, tmp;
-
- if (upper_band_height) {
- out_offset = upper_band_height * out_width * fb_pixel_size;
- memset(frame_buffer, 0x00, out_offset);
- }
- if (left_band_width) {
- tmp = left_band_width * fb_pixel_size;
- memset(frame_buffer + out_offset, 0x00, tmp);
- out_offset += tmp;
- }
- w = in_width * fb_pixel_size;
- bw = (left_band_width + right_band_width) * fb_pixel_size;
- for (i = 0; i < in_height - 1; i++) {
- memcpy(frame_buffer + out_offset, next_frame + in_offset, w);
- if (bw)
- memset(frame_buffer + out_offset + w, 0x00, bw);
- out_offset += fb_screen_width;
- in_offset += w;
- }
- memcpy(frame_buffer + out_offset, next_frame + in_offset, w);
- out_offset += w;
- if (right_band_width) {
- tmp = right_band_width * fb_pixel_size;
- memset(frame_buffer + out_offset, 0x00, tmp);
- out_offset += tmp;
- }
- if (lower_band_height)
- memset(frame_buffer + out_offset, 0x00, lower_band_height *
- out_width * fb_pixel_size);
- }
-
extern void vo_draw_text(int dxs, int dys, void (*draw_alpha)(int x0, int y0,
int w, int h, unsigned char *src, unsigned char *srca,
--- 1091,1094 ----
***************
*** 1101,1105 ****
vo_draw_text(in_width, in_height, draw_alpha);
check_events();
! (*put_frame)();
}
--- 1099,1103 ----
vo_draw_text(in_width, in_height, draw_alpha);
check_events();
! put_frame();
}
***************
*** 1113,1118 ****
fb_cmap_changed = 0;
}
- // memset(next_frame, '\0', in_height * in_width * fb_pixel_size);
- // put_frame();
free(next_frame);
if (ioctl(fb_dev_fd, FBIOGET_VSCREENINFO, &fb_vinfo))
--- 1111,1114 ----
_______________________________________________
Mplayer-cvslog mailing list
Mplayer-cvslog at lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog
More information about the MPlayer-cvslog
mailing list