Mercurial > mplayer.hg
annotate libvo/vo_pgm.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 |
rev | line source |
---|---|
1 | 1 /* |
2 * video_out_pgm.c, pgm interface | |
3 * | |
4 * | |
5 * Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. | |
6 * | |
7 * Hacked into mpeg2dec by | |
8 * | |
9 * Aaron Holtzman <aholtzma@ess.engr.uvic.ca> | |
10 * | |
11 * 15 & 16 bpp support added by Franck Sicard <Franck.Sicard@solsoft.fr> | |
12 * | |
13 * Xv image suuport by Gerd Knorr <kraxel@goldbach.in-berlin.de> | |
14 */ | |
15 | |
16 #include <stdio.h> | |
17 #include <stdlib.h> | |
18 #include <string.h> | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
19 #include <errno.h> |
1 | 20 |
21 #include "config.h" | |
22 #include "video_out.h" | |
23 #include "video_out_internal.h" | |
24 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7124
diff
changeset
|
25 static vo_info_t info = |
1 | 26 { |
27 "PGM file", | |
28 "pgm", | |
29 "walken", | |
30 "" | |
31 }; | |
32 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7124
diff
changeset
|
33 LIBVO_EXTERN (pgm) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7124
diff
changeset
|
34 |
1 | 35 static int image_width; |
36 static int image_height; | |
37 static char header[1024]; | |
491 | 38 static int framenum = 0; |
39 | |
40 static uint8_t *image=NULL; | |
41 | |
42 char vo_pgm_filename[24]; | |
1 | 43 |
44 static uint32_t | |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
4737
diff
changeset
|
45 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) |
1 | 46 { |
47 image_height = height; | |
48 image_width = width; | |
491 | 49 image=malloc(width*height*3/2); |
1 | 50 |
1094 | 51 snprintf (header, 1024, "P5\n\n%d %d\n255\n", width, height*3/2); |
1 | 52 |
53 return 0; | |
54 } | |
55 | |
1502 | 56 static void draw_osd(void) |
57 { | |
58 } | |
59 | |
1 | 60 static void flip_page (void) |
61 { | |
62 FILE * f; | |
63 | |
1094 | 64 snprintf (vo_pgm_filename, 24, "%08d.pgm", framenum++); |
491 | 65 |
66 f = fopen (vo_pgm_filename, "wb"); if (f == NULL) return; | |
1 | 67 fwrite (header, strlen (header), 1, f); |
491 | 68 fwrite (image, image_width, image_height*3/2, f); |
1 | 69 fclose (f); |
70 | |
491 | 71 return; |
72 } | |
73 | |
74 static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x,int y) | |
75 { | |
76 int i; | |
77 // copy Y: | |
78 uint8_t *dst=image+image_width*y+x; | |
79 uint8_t *src=srcimg[0]; | |
80 for(i=0;i<h;i++){ | |
81 memcpy(dst,src,w); | |
82 src+=stride[0]; | |
83 dst+=image_width; | |
84 } | |
85 { | |
86 // copy U+V: | |
87 uint8_t *src1=srcimg[1]; | |
88 uint8_t *src2=srcimg[2]; | |
89 uint8_t *dst=image+image_width*image_height+image_width*(y/2)+(x/2); | |
90 for(i=0;i<h/2;i++){ | |
91 memcpy(dst,src1,w/2); | |
92 memcpy(dst+image_width/2,src2,w/2); | |
93 src1+=stride[1]; | |
94 src2+=stride[2]; | |
95 dst+=image_width; | |
96 } | |
97 | |
98 } | |
99 | |
1 | 100 return 0; |
101 } | |
102 | |
491 | 103 |
1 | 104 static uint32_t draw_frame(uint8_t * src[]) |
105 { | |
491 | 106 return 0; |
1 | 107 } |
108 | |
109 static uint32_t | |
110 query_format(uint32_t format) | |
111 { | |
491 | 112 if(format==IMGFMT_YV12) return 1; |
15 | 113 // switch(format){ |
114 // case IMGFMT_YV12: | |
1 | 115 // case IMGFMT_RGB|24: |
116 // case IMGFMT_BGR|24: | |
15 | 117 // return 1; |
118 // } | |
1 | 119 return 0; |
120 } | |
121 | |
122 static void | |
123 uninit(void) | |
124 { | |
491 | 125 if(image){ free(image);image=NULL;} |
1 | 126 } |
127 | |
128 | |
31 | 129 static void check_events(void) |
130 { | |
131 } | |
1 | 132 |
4352 | 133 static uint32_t preinit(const char *arg) |
134 { | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
135 if(arg) |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
136 { |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
137 printf("vo_pgm: Unknown subdevice: %s\n",arg); |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
138 return ENOSYS; |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
139 } |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
140 return 0; |
4352 | 141 } |
31 | 142 |
4596 | 143 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 144 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
145 switch (request) { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
146 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
147 return query_format(*((uint32_t*)data)); |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
148 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
149 return VO_NOTIMPL; |
4352 | 150 } |