Mercurial > mplayer.hg
annotate libvo/vo_pgm.c @ 9115:fc803aa85058
MPlayer crash when using -wid and -vo x11 parameters.
I don't understand very well why my fix works.
Jouni Tulkki <jitulkki@cc.hut.fi>
author | arpi |
---|---|
date | Sun, 26 Jan 2003 22:24:17 +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 } |