annotate libvo/vo_mga.c @ 8843:c70444c5b516

I have seen problems where DVD subtitles don't display at the right time and sometimes they don't appear at all. The problem stems from the fact that subtitle command packets are being applied as soon as they are read and assembled from the input stream. Sometimes, a fully assembled subtitle packet arrives at the spudec_assemble function before the previous subtitle appears onscreen and thus the viewer only sees the second subtitle. So I created a patch that queues assembled subtitle packets and applies them at the appropriate time within the heartbeat function. The reset function clears the packet queue when seeking through the video. Tomasz Farkas <tomasz_farkas@yahoo.co.uk>
author arpi
date Wed, 08 Jan 2003 18:36:36 +0000
parents 5b39e79af5fe
children 275766100443
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /*
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
2 * output through mga_vid kernel driver
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 #include <sys/ioctl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 #include <unistd.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #include <fcntl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 #include <sys/mman.h>
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
17 #include <linux/fb.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 #include "drivers/mga_vid.h"
616
41d6eec69b60 clean up
pontscho
parents: 614
diff changeset
20 #include "sub.h"
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
21 #include "aspect.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7680
diff changeset
23 static vo_info_t info =
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 {
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
25 "Matrox G200/G4x0/G550 overlay (/dev/mga_vid)",
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 "mga",
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
27 "A'rpi",
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
28 "Based on some code by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7680
diff changeset
31 LIBVO_EXTERN(mga)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 #include "mga_common.c"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
35 #define FBDEV "/dev/fb0"
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
36
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
37 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39
5433
d596cf3c54aa open(/dev/mga_vid) moved to preinit
arpi
parents: 5389
diff changeset
40 // if (f >= 0) mga_uninit();
4595
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
41 if(!vo_screenwidth || !vo_screenheight) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
42 int fd;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
43 struct fb_var_screeninfo fbinfo;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
44
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
45 if(-1 != (fd = open(FBDEV, O_RDONLY))) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
46 if(0 == ioctl(fd, FBIOGET_VSCREENINFO, &fbinfo)) {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
47 if(!vo_screenwidth) vo_screenwidth = fbinfo.xres;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
48 if(!vo_screenheight) vo_screenheight = fbinfo.yres;
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
49 } else {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
50 perror("FBIOGET_VSCREENINFO");
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
51 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
52 close(fd);
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
53 } else {
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
54 perror(FBDEV);
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
55 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
56 }
6f54ae46ac27 screensize from fbdev ioctl - patch by Jason Lunz <j@falooley.org>
arpi
parents: 4592
diff changeset
57
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
58 if(vo_screenwidth && vo_screenheight){
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
59 aspect_save_orig(width,height);
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
60 aspect_save_prescale(d_width,d_height);
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
61 aspect_save_screenres(vo_screenwidth,vo_screenheight);
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
62
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
63 if(fullscreen&0x01) { /* -fs */
2318
atmos4
parents: 2317
diff changeset
64 aspect(&d_width,&d_height,A_ZOOM);
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
65 vo_fs = VO_TRUE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
66 } else {
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
67 aspect(&d_width,&d_height,A_NOZOOM);
5987
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
68 vo_fs = VO_FALSE;
08c552788216 fullscreen toggle for vo_mga
rfelker
parents: 5433
diff changeset
69 }
2319
9c76ec4846b3 Add some info putput for aspect().
atmos4
parents: 2318
diff changeset
70 printf("vo_mga aspect(): resized to %dx%d\n",d_width,d_height);
2317
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
71 }
1f1880196a1c Aspect support for vo_mga, you need to use -screenw and -screenh to set your current screen res. Untested!
atmos4
parents: 1637
diff changeset
72
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 mga_vid_config.dest_width = d_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 mga_vid_config.dest_height= d_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 mga_vid_config.x_org= 0; // (720-mga_vid_config.dest_width)/2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 mga_vid_config.y_org= 0; // (576-mga_vid_config.dest_height)/2;
2351
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
77 if(vo_screenwidth && vo_screenheight){
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
78 mga_vid_config.x_org=(vo_screenwidth-d_width)/2;
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
79 mga_vid_config.y_org=(vo_screenheight-d_height)/2;
c53969b13353 Added image centering, now only screenblanking and hiding the cursor is missing.
atmos4
parents: 2319
diff changeset
80 }
56
cdb2e30be421 mga_vid fixes, code cleanup
arpi_esp
parents: 47
diff changeset
81
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
82 return mga_init(width,height,format);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
85 static void uninit(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 {
7679
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
87 printf("vo: uninit!\n");
e4e70b0e1786 some cleanup
arpi
parents: 7124
diff changeset
88 mga_uninit();
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
91 static void flip_page(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
92 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
93 vo_mga_flip_page();
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
94 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
96
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
97 static void check_events(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
98 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
99 }
1fc618eba830 added check_events() interface
arpi_esp
parents: 1
diff changeset
100