Mercurial > mplayer.hg
annotate libvo/vo_jpeg.c @ 35418:cedb0ba2b5c6
Move the code to set guiInfo's Track, Chapter and Angle start values.
Set them before checking whether there is any media opened, because
with no media opened we clear the counters.
author | ib |
---|---|
date | Thu, 29 Nov 2012 14:11:03 +0000 |
parents | bdddbf265c6e |
children | cd83754e4f3a |
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" | |
30516 | 47 #include "mp_core.h" |
13158 | 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 |
33711 | 108 static void jpeg_mkdir(const 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); |
30516 | 124 exit_player(EXIT_ERROR); |
13217 | 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); |
30516 | 129 exit_player(EXIT_ERROR); |
13217 | 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); |
30516 | 134 exit_player(EXIT_ERROR); |
13217 | 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); |
30516 | 146 exit_player(EXIT_ERROR); |
13217 | 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 |
33711 | 180 static uint32_t jpeg_write(const char * name, uint8_t * buffer) |
13217 | 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) ); |
30516 | 195 exit_player(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 { | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
31287
diff
changeset
|
312 free(jpeg_subdirs); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
31287
diff
changeset
|
313 jpeg_subdirs = NULL; |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
31287
diff
changeset
|
314 free(jpeg_outdir); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
31287
diff
changeset
|
315 jpeg_outdir = NULL; |
5648 | 316 } |
317 | |
13217 | 318 /* ------------------------------------------------------------------------- */ |
319 | |
5648 | 320 static void check_events(void) |
321 { | |
322 } | |
323 | |
13217 | 324 /* ------------------------------------------------------------------------- */ |
325 | |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
326 /** \brief Validation function for values [0-100] |
13316 | 327 */ |
328 | |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
329 static int int_zero_hundred(void *valp) |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
330 { |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
331 int *val = valp; |
30123
0f5f75b4a015
Simplify range-checking functions for subopt parsing.
reimar
parents:
30122
diff
changeset
|
332 return *val >= 0 && *val <= 100; |
13316 | 333 } |
334 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
335 static int preinit(const char *arg) |
5648 | 336 { |
28828
56eee6ffba9b
Make data related to suboption parsing const in libvo
reimar
parents:
26739
diff
changeset
|
337 const opt_t subopts[] = { |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
338 {"progressive", OPT_ARG_BOOL, &jpeg_progressive_mode, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
339 {"baseline", OPT_ARG_BOOL, &jpeg_baseline, NULL}, |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
340 {"optimize", OPT_ARG_INT, &jpeg_optimize, |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
341 int_zero_hundred}, |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
342 {"smooth", OPT_ARG_INT, &jpeg_smooth, |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
343 int_zero_hundred}, |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
344 {"quality", OPT_ARG_INT, &jpeg_quality, |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
345 int_zero_hundred}, |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
346 {"dpi", OPT_ARG_INT, &jpeg_dpi, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
347 {"outdir", OPT_ARG_MSTRZ, &jpeg_outdir, NULL}, |
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
348 {"subdirs", OPT_ARG_MSTRZ, &jpeg_subdirs, NULL}, |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
349 {"maxfiles", OPT_ARG_INT, &jpeg_maxfiles, int_pos}, |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
350 {NULL, 0, NULL, NULL} |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
351 }; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
352 const char *info_message = NULL; |
13247 | 353 |
31287
168e89b341b1
Reduce verbosity about suboption parsing in vo drivers.
diego
parents:
30633
diff
changeset
|
354 mp_msg(MSGT_VO, MSGL_V, "%s: %s\n", info.short_name, |
168e89b341b1
Reduce verbosity about suboption parsing in vo drivers.
diego
parents:
30633
diff
changeset
|
355 "Parsing suboptions."); |
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 jpeg_progressive_mode = 0; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
358 jpeg_baseline = 1; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
359 jpeg_optimize = 100; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
360 jpeg_smooth = 0; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
361 jpeg_quality = 75; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
362 jpeg_maxfiles = 1000; |
14538
00c3c4111017
New suboption type: malloc'ed, zero terminated string
reimar
parents:
14508
diff
changeset
|
363 jpeg_outdir = strdup("."); |
00c3c4111017
New suboption type: malloc'ed, zero terminated string
reimar
parents:
14508
diff
changeset
|
364 jpeg_subdirs = NULL; |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
365 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
366 if (subopt_parse(arg, subopts) != 0) { |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
367 return -1; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
368 } |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
369 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
370 if (jpeg_progressive_mode) info_message = MSGTR_VO_JPEG_ProgressiveJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
371 else info_message = MSGTR_VO_JPEG_NoProgressiveJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
372 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
|
373 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
374 if (jpeg_baseline) info_message = MSGTR_VO_JPEG_BaselineJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
375 else info_message = MSGTR_VO_JPEG_NoBaselineJPEG; |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
376 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
|
377 |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
378 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
|
379 jpeg_optimize); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
380 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
|
381 jpeg_smooth); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
382 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
|
383 jpeg_quality); |
17436
2ab8452b8ce4
Added DPI (Print-Resolution) and Pixel-Aspect awareness to vo_jpeg.
atmos4
parents:
16171
diff
changeset
|
384 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
|
385 jpeg_dpi); |
14508
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
386 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
|
387 jpeg_outdir); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
388 if (jpeg_subdirs) { |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
389 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
|
390 jpeg_subdirs); |
3673ad04ebfb
Replaced suboption parser by call to suboption helper.
ivo
parents:
13347
diff
changeset
|
391 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
|
392 jpeg_maxfiles); |
13316 | 393 } |
394 | |
31287
168e89b341b1
Reduce verbosity about suboption parsing in vo drivers.
diego
parents:
30633
diff
changeset
|
395 mp_msg(MSGT_VO, MSGL_V, "%s: %s\n", info.short_name, |
168e89b341b1
Reduce verbosity about suboption parsing in vo drivers.
diego
parents:
30633
diff
changeset
|
396 "Suboptions parsed OK."); |
13217 | 397 return 0; |
5648 | 398 } |
399 | |
13217 | 400 /* ------------------------------------------------------------------------- */ |
401 | |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
32537
diff
changeset
|
402 static int control(uint32_t request, void *data) |
5648 | 403 { |
13217 | 404 switch (request) { |
405 case VOCTRL_QUERY_FORMAT: | |
406 return query_format(*((uint32_t*)data)); | |
407 } | |
408 return VO_NOTIMPL; | |
5648 | 409 } |
13158 | 410 |
13217 | 411 /* ------------------------------------------------------------------------- */ |
412 | |
13158 | 413 #undef BUFLENGTH |
414 | |
13217 | 415 /* ------------------------------------------------------------------------- */ |