Mercurial > mplayer.hg
annotate libvo/vo_jpeg.c @ 29269:4d9de809b174
Add a hack to detect when we are writing into a Windows pipe since the fseek
incorrectly does not fail like it should.
This ensures we will not incorrectly append the file header at the end.
Based on patch by Zhou Zongyi [zhouzongyi at pset.suntec.net]
author | reimar |
---|---|
date | Sat, 16 May 2009 13:59:53 +0000 |
parents | 0f1b5b68af32 |
children | 1772a5171ac7 |
rev | line source |
---|---|
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
1 /* |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
2 * JPEG Renderer for MPlayer |
5648 | 3 * |
25174 | 4 * Copyright (C) 2002 by Pontscho <pontscho@makacs.poliod.hu> |
5 * Copyright (C) 2003 by Alex | |
6 * Copyright (C) 2004, 2005 by Ivo van Poorten <ivop@euronet.nl> | |
7 * | |
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
8 * This file is part of MPlayer. |
25174 | 9 * |
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
10 * MPlayer is free software; you can redistribute it and/or modify |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
11 * it under the terms of the GNU General Public License as published by |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
12 * the Free Software Foundation; either version 2 of the License, or |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
13 * (at your option) any later version. |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
14 * |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
15 * MPlayer is distributed in the hope that it will be useful, |
25174 | 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
26739
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
20 * You should have received a copy of the GNU General Public License along |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
21 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
2a34d9fa52ab
Use standard license headers with standard formatting.
diego
parents:
25220
diff
changeset
|
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
5648 | 23 */ |
24 | |
13217 | 25 /* ------------------------------------------------------------------------- */ |
26 | |
27 /* Global Includes */ | |
28 | |
5648 | 29 #include <stdio.h> |
30 #include <stdlib.h> | |
31 #include <string.h> | |
32 #include <errno.h> | |
13217 | 33 #include <jpeglib.h> |
34 #include <sys/stat.h> | |
35 #include <sys/types.h> | |
36 #include <unistd.h> | |
5648 | 37 |
13217 | 38 /* ------------------------------------------------------------------------- */ |
39 | |
40 /* Local Includes */ | |
5648 | 41 |
42 #include "config.h" | |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
43 #include "subopt-helper.h" |
13158 | 44 #include "mp_msg.h" |
5648 | 45 #include "video_out.h" |
46 #include "video_out_internal.h" | |
13158 | 47 #include "mplayer.h" /* for exit_player() */ |
48 #include "help_mp.h" | |
49 | |
13217 | 50 /* ------------------------------------------------------------------------- */ |
51 | |
52 /* Defines */ | |
13158 | 53 |
54 /* Used for temporary buffers to store file- and pathnames */ | |
55 #define BUFLENGTH 512 | |
5648 | 56 |
13217 | 57 /* ------------------------------------------------------------------------- */ |
58 | |
59 /* Info */ | |
60 | |
25216 | 61 static const vo_info_t info= |
5648 | 62 { |
63 "JPEG file", | |
64 "jpeg", | |
65 "Zoltan Ponekker (pontscho@makacs.poliod.hu)", | |
66 "" | |
67 }; | |
68 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
69 const LIBVO_EXTERN (jpeg) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7487
diff
changeset
|
70 |
13217 | 71 /* ------------------------------------------------------------------------- */ |
72 | |
73 /* Global Variables */ | |
74 | |
5648 | 75 static int image_width; |
76 static int image_height; | |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
77 static int image_d_width; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
78 static int image_d_height; |
5648 | 79 |
80 int jpeg_baseline = 1; | |
81 int jpeg_progressive_mode = 0; | |
82 int jpeg_optimize = 100; | |
83 int jpeg_smooth = 0; | |
84 int jpeg_quality = 75; | |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
85 int jpeg_dpi = 72; /** Screen resolution = 72 dpi */ |
13316 | 86 char *jpeg_outdir = NULL; |
13217 | 87 char *jpeg_subdirs = NULL; |
88 int jpeg_maxfiles = 1000; | |
5648 | 89 |
13217 | 90 static int framenum = 0; |
91 | |
92 /* ------------------------------------------------------------------------- */ | |
5648 | 93 |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
94 /** \brief Create a directory. |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
95 * |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
96 * This function creates a directory. If it already exists, it tests if |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
97 * it's a directory and not something else, and if it is, it tests whether |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
98 * the directory is writable or not. |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
99 * |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
100 * \param buf Pointer to directory name. |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
101 * \param verbose Verbose on success. If verbose is non-zero, it will print |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
102 * a message if it was successful in creating the directory. |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
103 * |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
104 * \return nothing In case anything fails, the player will exit. If it |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
105 * returns, everything went well. |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
106 */ |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
107 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
108 static void jpeg_mkdir(char *buf, int verbose) { |
13217 | 109 struct stat stat_p; |
13158 | 110 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
111 #ifndef __MINGW32__ |
13217 | 112 if ( mkdir(buf, 0755) < 0 ) { |
13347 | 113 #else |
114 if ( mkdir(buf) < 0 ) { | |
115 #endif | |
13217 | 116 switch (errno) { /* use switch in case other errors need to be caught |
117 and handled in the future */ | |
118 case EEXIST: | |
119 if ( stat(buf, &stat_p ) < 0 ) { | |
120 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", info.short_name, | |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
121 MSGTR_VO_GenericError, strerror(errno) ); |
13217 | 122 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
123 MSGTR_VO_UnableToAccess,buf); |
13217 | 124 exit_player(MSGTR_Exit_error); |
125 } | |
126 if ( !S_ISDIR(stat_p.st_mode) ) { | |
127 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s %s\n", info.short_name, | |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
128 buf, MSGTR_VO_ExistsButNoDirectory); |
13217 | 129 exit_player(MSGTR_Exit_error); |
130 } | |
131 if ( !(stat_p.st_mode & S_IWUSR) ) { | |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
132 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s - %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
133 buf, MSGTR_VO_DirExistsButNotWritable); |
13217 | 134 exit_player(MSGTR_Exit_error); |
135 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
136 |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
137 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s - %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
138 buf, MSGTR_VO_DirExistsAndIsWritable); |
13217 | 139 break; |
13158 | 140 |
13217 | 141 default: |
142 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", info.short_name, | |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
143 MSGTR_VO_GenericError, strerror(errno) ); |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
144 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s - %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
145 buf, MSGTR_VO_CantCreateDirectory); |
13217 | 146 exit_player(MSGTR_Exit_error); |
147 } /* end switch */ | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
148 } else if ( verbose ) { |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
149 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s - %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
150 buf, MSGTR_VO_DirectoryCreateSuccess); |
13217 | 151 } /* end if */ |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
152 } |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
153 |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
154 /* ------------------------------------------------------------------------- */ |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
155 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
156 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14850
diff
changeset
|
157 uint32_t d_height, uint32_t flags, char *title, |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
158 uint32_t format) |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
159 { |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
160 char buf[BUFLENGTH]; |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
161 |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
162 /* Create outdir. */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
163 |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
164 snprintf(buf, BUFLENGTH, "%s", jpeg_outdir); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
165 |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
166 jpeg_mkdir(buf, 1); /* This function only returns if creation was |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
167 successful. If not, the player will exit. */ |
13158 | 168 |
13217 | 169 image_height = height; |
170 image_width = width; | |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
171 /* Save for JFIF-Header PAR */ |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
172 image_d_width = d_width; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
173 image_d_height = d_height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
174 |
13217 | 175 return 0; |
5648 | 176 } |
177 | |
13217 | 178 /* ------------------------------------------------------------------------- */ |
5648 | 179 |
13217 | 180 static uint32_t jpeg_write(uint8_t * name, uint8_t * buffer) |
181 { | |
182 FILE *outfile; | |
183 struct jpeg_compress_struct cinfo; | |
184 struct jpeg_error_mgr jerr; | |
185 JSAMPROW row_pointer[1]; | |
186 int row_stride; | |
5648 | 187 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
188 if ( !buffer ) return 1; |
13217 | 189 if ( (outfile = fopen(name, "wb") ) == NULL ) { |
13252 | 190 mp_msg(MSGT_VO, MSGL_ERR, "\n%s: %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
191 MSGTR_VO_CantCreateFile); |
13252 | 192 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
193 info.short_name, MSGTR_VO_GenericError, |
13252 | 194 strerror(errno) ); |
195 exit_player(MSGTR_Exit_error); | |
13217 | 196 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
197 |
13217 | 198 cinfo.err = jpeg_std_error(&jerr); |
199 jpeg_create_compress(&cinfo); | |
200 jpeg_stdio_dest(&cinfo, outfile); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
201 |
13217 | 202 cinfo.image_width = image_width; |
203 cinfo.image_height = image_height; | |
204 cinfo.input_components = 3; | |
205 cinfo.in_color_space = JCS_RGB; | |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
206 |
13217 | 207 jpeg_set_defaults(&cinfo); |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
208 /* Important: Header info must be set AFTER jpeg_set_defaults() */ |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
209 cinfo.write_JFIF_header = TRUE; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
210 cinfo.JFIF_major_version = 1; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
211 cinfo.JFIF_minor_version = 2; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
212 cinfo.density_unit = 1; /* 0=unknown, 1=dpi, 2=dpcm */ |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
213 /* Image DPI is determined by Y_density, so we leave that at |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
214 jpeg_dpi if possible and crunch X_density instead (PAR > 1) */ |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
215 cinfo.X_density = jpeg_dpi*image_width/image_d_width; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
216 cinfo.Y_density = jpeg_dpi*image_height/image_d_height; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
217 cinfo.write_Adobe_marker = TRUE; |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
218 |
13217 | 219 jpeg_set_quality(&cinfo,jpeg_quality, jpeg_baseline); |
220 cinfo.optimize_coding = jpeg_optimize; | |
221 cinfo.smoothing_factor = jpeg_smooth; | |
5648 | 222 |
13217 | 223 if ( jpeg_progressive_mode ) { |
224 jpeg_simple_progression(&cinfo); | |
225 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
226 |
13217 | 227 jpeg_start_compress(&cinfo, TRUE); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
228 |
13217 | 229 row_stride = image_width * 3; |
230 while (cinfo.next_scanline < cinfo.image_height) { | |
231 row_pointer[0] = &buffer[cinfo.next_scanline * row_stride]; | |
232 (void)jpeg_write_scanlines(&cinfo, row_pointer,1); | |
233 } | |
5648 | 234 |
13217 | 235 jpeg_finish_compress(&cinfo); |
236 fclose(outfile); | |
237 jpeg_destroy_compress(&cinfo); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
238 |
13217 | 239 return 0; |
5648 | 240 } |
241 | |
13217 | 242 /* ------------------------------------------------------------------------- */ |
243 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
244 static int draw_frame(uint8_t *src[]) |
5648 | 245 { |
14850 | 246 static int framecounter = 0, subdircounter = 0; |
13217 | 247 char buf[BUFLENGTH]; |
248 static char subdirname[BUFLENGTH] = ""; | |
13158 | 249 |
13217 | 250 /* Start writing to new subdirectory after a certain amount of frames */ |
251 if ( framecounter == jpeg_maxfiles ) { | |
252 framecounter = 0; | |
253 } | |
13158 | 254 |
13217 | 255 /* If framecounter is zero (or reset to zero), increment subdirectory |
256 * number and create the subdirectory. | |
257 * If jpeg_subdirs is not set, do nothing and resort to old behaviour. */ | |
258 if ( !framecounter && jpeg_subdirs ) { | |
13300
47dd02fb02df
Removed unused variable (leftover of having two instances of directory creation
ivo
parents:
13284
diff
changeset
|
259 subdircounter++; |
47dd02fb02df
Removed unused variable (leftover of having two instances of directory creation
ivo
parents:
13284
diff
changeset
|
260 snprintf(subdirname, BUFLENGTH, "%s%08d", jpeg_subdirs, subdircounter); |
13217 | 261 snprintf(buf, BUFLENGTH, "%s/%s", jpeg_outdir, subdirname); |
13283
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
262 jpeg_mkdir(buf, 0); /* This function only returns if creation was |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
263 successful. If not, the player will exit. */ |
858b7e04718c
This patch moves the directory creation code to a separate function. I have
ivo
parents:
13252
diff
changeset
|
264 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
265 |
13217 | 266 framenum++; |
13158 | 267 |
13217 | 268 /* snprintf the full pathname of the outputfile */ |
269 snprintf(buf, BUFLENGTH, "%s/%s/%08d.jpg", jpeg_outdir, subdirname, | |
270 framenum); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
271 |
13217 | 272 framecounter++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
273 |
13217 | 274 return jpeg_write(buf, src[0]); |
275 } | |
13158 | 276 |
13217 | 277 /* ------------------------------------------------------------------------- */ |
5648 | 278 |
279 static void draw_osd(void) | |
280 { | |
281 } | |
282 | |
13217 | 283 /* ------------------------------------------------------------------------- */ |
284 | |
5648 | 285 static void flip_page (void) |
286 { | |
287 } | |
288 | |
13217 | 289 /* ------------------------------------------------------------------------- */ |
290 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
291 static int draw_slice(uint8_t *src[], int stride[], int w, int h, |
13217 | 292 int x, int y) |
5648 | 293 { |
13217 | 294 return 0; |
5648 | 295 } |
296 | |
13217 | 297 /* ------------------------------------------------------------------------- */ |
298 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
299 static int query_format(uint32_t format) |
5648 | 300 { |
13217 | 301 if (format == IMGFMT_RGB24) { |
302 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW; | |
303 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
304 |
9989
98791b90215a
Spring cleanup: supporting only RGB24 as input (native jpeg lib supports only that, maybe we could later add nativ YCbCr (YUV) support, but not swscale ones)
alex
parents:
9019
diff
changeset
|
305 return 0; |
5648 | 306 } |
307 | |
13217 | 308 /* ------------------------------------------------------------------------- */ |
309 | |
5648 | 310 static void uninit(void) |
311 { | |
13316 | 312 if (jpeg_subdirs) { |
313 free(jpeg_subdirs); | |
314 jpeg_subdirs = NULL; | |
315 } | |
316 if (jpeg_outdir) { | |
317 free(jpeg_outdir); | |
318 jpeg_outdir = NULL; | |
319 } | |
5648 | 320 } |
321 | |
13217 | 322 /* ------------------------------------------------------------------------- */ |
323 | |
5648 | 324 static void check_events(void) |
325 { | |
326 } | |
327 | |
13217 | 328 /* ------------------------------------------------------------------------- */ |
329 | |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
330 /** \brief Validation function for values [0-100] |
13316 | 331 */ |
332 | |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
333 static int int_zero_hundred(int *val) |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
334 { |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
335 if ( (*val >=0) && (*val<=100) ) |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
336 return 1; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
337 return 0; |
13316 | 338 } |
339 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
340 static int preinit(const char *arg) |
5648 | 341 { |
28828
56eee6ffba9b
Make data related to suboption parsing const in libvo
reimar
parents:
26739
diff
changeset
|
342 const opt_t subopts[] = { |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
343 {"progressive", OPT_ARG_BOOL, &jpeg_progressive_mode, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
344 {"baseline", OPT_ARG_BOOL, &jpeg_baseline, NULL}, |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
345 {"optimize", OPT_ARG_INT, &jpeg_optimize, |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
346 (opt_test_f)int_zero_hundred}, |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
347 {"smooth", OPT_ARG_INT, &jpeg_smooth, |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
348 (opt_test_f)int_zero_hundred}, |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
349 {"quality", OPT_ARG_INT, &jpeg_quality, |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
350 (opt_test_f)int_zero_hundred}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
351 {"dpi", OPT_ARG_INT, &jpeg_dpi, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
352 {"outdir", OPT_ARG_MSTRZ, &jpeg_outdir, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
353 {"subdirs", OPT_ARG_MSTRZ, &jpeg_subdirs, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
354 {"maxfiles", OPT_ARG_INT, &jpeg_maxfiles, (opt_test_f)int_pos}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
355 {NULL, 0, NULL, NULL} |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
356 }; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
357 const char *info_message = NULL; |
13247 | 358 |
359 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s\n", info.short_name, | |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
360 MSGTR_VO_ParsingSuboptions); |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
361 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
362 jpeg_progressive_mode = 0; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
363 jpeg_baseline = 1; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
364 jpeg_optimize = 100; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
365 jpeg_smooth = 0; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
366 jpeg_quality = 75; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
367 jpeg_maxfiles = 1000; |
14538
00c3c4111017
New suboption type: malloc'ed, zero terminated string
reimar
parents:
14508
diff
changeset
|
368 jpeg_outdir = strdup("."); |
00c3c4111017
New suboption type: malloc'ed, zero terminated string
reimar
parents:
14508
diff
changeset
|
369 jpeg_subdirs = NULL; |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
370 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
371 if (subopt_parse(arg, subopts) != 0) { |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
372 return -1; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
373 } |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
374 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
375 if (jpeg_progressive_mode) info_message = MSGTR_VO_JPEG_ProgressiveJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
376 else info_message = MSGTR_VO_JPEG_NoProgressiveJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
377 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s\n", info.short_name, info_message); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
378 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
379 if (jpeg_baseline) info_message = MSGTR_VO_JPEG_BaselineJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
380 else info_message = MSGTR_VO_JPEG_NoBaselineJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
381 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s\n", info.short_name, info_message); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
382 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
383 mp_msg(MSGT_VO, MSGL_V, "%s: optimize --> %d\n", info.short_name, |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
384 jpeg_optimize); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
385 mp_msg(MSGT_VO, MSGL_V, "%s: smooth --> %d\n", info.short_name, |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
386 jpeg_smooth); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
387 mp_msg(MSGT_VO, MSGL_V, "%s: quality --> %d\n", info.short_name, |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
388 jpeg_quality); |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
389 mp_msg(MSGT_VO, MSGL_V, "%s: dpi --> %d\n", info.short_name, |
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
390 jpeg_dpi); |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
391 mp_msg(MSGT_VO, MSGL_V, "%s: outdir --> %s\n", info.short_name, |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
392 jpeg_outdir); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
393 if (jpeg_subdirs) { |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
394 mp_msg(MSGT_VO, MSGL_V, "%s: subdirs --> %s\n", info.short_name, |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
395 jpeg_subdirs); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
396 mp_msg(MSGT_VO, MSGL_V, "%s: maxfiles --> %d\n", info.short_name, |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
397 jpeg_maxfiles); |
13316 | 398 } |
399 | |
13247 | 400 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s\n", info.short_name, |
13284
6370626e902b
Renamed some MSGTR_VO_JPEG_* messages to MSGTR_VO_* messages, so they can
ivo
parents:
13283
diff
changeset
|
401 MSGTR_VO_SuboptionsParsedOK); |
13217 | 402 return 0; |
5648 | 403 } |
404 | |
13217 | 405 /* ------------------------------------------------------------------------- */ |
406 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
407 static int control(uint32_t request, void *data, ...) |
5648 | 408 { |
13217 | 409 switch (request) { |
410 case VOCTRL_QUERY_FORMAT: | |
411 return query_format(*((uint32_t*)data)); | |
412 } | |
413 return VO_NOTIMPL; | |
5648 | 414 } |
13158 | 415 |
13217 | 416 /* ------------------------------------------------------------------------- */ |
417 | |
13158 | 418 #undef BUFLENGTH |
419 | |
13217 | 420 /* ------------------------------------------------------------------------- */ |
421 |