annotate libvo/vo_pgm.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents a013b2124f05
children ccb1f3ddb29a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 * video_out_pgm.c, pgm interface
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 * Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 * Hacked into mpeg2dec by
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 * Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 * 15 & 16 bpp support added by Franck Sicard <Franck.Sicard@solsoft.fr>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 * Xv image suuport by Gerd Knorr <kraxel@goldbach.in-berlin.de>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 #include "config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 #include "video_out.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 #include "video_out_internal.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 LIBVO_EXTERN (pgm)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 static vo_info_t vo_info =
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
28 "PGM file",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 "pgm",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 "walken",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 ""
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 static int image_width;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 static int image_height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 static char header[1024];
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
37 static int framenum = 0;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
38
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
39 static uint8_t *image=NULL;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
40
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
41 char vo_pgm_filename[24];
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 static uint32_t
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 image_height = height;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 image_width = width;
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
48 image=malloc(width*height*3/2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49
1094
7a6be90408ea possible buffer overflows fixed
al3x
parents: 491
diff changeset
50 snprintf (header, 1024, "P5\n\n%d %d\n255\n", width, height*3/2);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 static const vo_info_t*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 get_info(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 return &vo_info;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 static void flip_page (void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 FILE * f;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64
1094
7a6be90408ea possible buffer overflows fixed
al3x
parents: 491
diff changeset
65 snprintf (vo_pgm_filename, 24, "%08d.pgm", framenum++);
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
66
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
67 f = fopen (vo_pgm_filename, "wb"); if (f == NULL) return;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 fwrite (header, strlen (header), 1, f);
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
69 fwrite (image, image_width, image_height*3/2, f);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 fclose (f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
72 return;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
73 }
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
74
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
75 static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x,int y)
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
76 {
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
77 int i;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
78 // copy Y:
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
79 uint8_t *dst=image+image_width*y+x;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
80 uint8_t *src=srcimg[0];
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
81 for(i=0;i<h;i++){
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
82 memcpy(dst,src,w);
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
83 src+=stride[0];
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
84 dst+=image_width;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
85 }
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
86 {
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
87 // copy U+V:
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
88 uint8_t *src1=srcimg[1];
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
89 uint8_t *src2=srcimg[2];
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
90 uint8_t *dst=image+image_width*image_height+image_width*(y/2)+(x/2);
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
91 for(i=0;i<h/2;i++){
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
92 memcpy(dst,src1,w/2);
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
93 memcpy(dst+image_width/2,src2,w/2);
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
94 src1+=stride[1];
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
95 src2+=stride[2];
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
96 dst+=image_width;
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
97 }
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
98
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
99 }
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
100
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
104
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 static uint32_t draw_frame(uint8_t * src[])
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 {
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
107 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 static uint32_t
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 query_format(uint32_t format)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 {
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
113 if(format==IMGFMT_YV12) return 1;
15
2184c8945d42 query libvo for YV12 too
arpi_esp
parents: 1
diff changeset
114 // switch(format){
2184c8945d42 query libvo for YV12 too
arpi_esp
parents: 1
diff changeset
115 // case IMGFMT_YV12:
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 // case IMGFMT_RGB|24:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 // case IMGFMT_BGR|24:
15
2184c8945d42 query libvo for YV12 too
arpi_esp
parents: 1
diff changeset
118 // return 1;
2184c8945d42 query libvo for YV12 too
arpi_esp
parents: 1
diff changeset
119 // }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 static void
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 uninit(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 {
491
2313c6ea006f YV12 is working again
arpi_esp
parents: 31
diff changeset
126 if(image){ free(image);image=NULL;}
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 15
diff changeset
130 static void check_events(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 15
diff changeset
131 {
1fc618eba830 added check_events() interface
arpi_esp
parents: 15
diff changeset
132 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 15
diff changeset
134
1fc618eba830 added check_events() interface
arpi_esp
parents: 15
diff changeset
135