Mercurial > mplayer.hg
annotate libvo/vo_png.c @ 34021:fbb87f092560
Get rid of usage of deprecated palctrl which no longer works anyway.
Set up side data instead.
Note that for lavf demuxer we will use the merged side data anyway,
this is only for our own, e.g. AVI demuxer.
Fixes bug #1976.
author | reimar |
---|---|
date | Sat, 17 Sep 2011 16:48:40 +0000 |
parents | ddb45e9443ec |
children | f3d53cd55376 |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
1 /* |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
2 * Portable Network Graphics renderer |
527 | 3 * |
530 | 4 * Copyright 2001 by Felix Buenemann <atmosfear@users.sourceforge.net> |
527 | 5 * |
530 | 6 * Uses libpng (which uses zlib), so see according licenses. |
527 | 7 * |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
8 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
9 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
10 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
11 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
12 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
13 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
14 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
15 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
18 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
19 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
20 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
21 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28092
diff
changeset
|
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
527 | 23 */ |
24 | |
25 #include <stdio.h> | |
26 #include <stdlib.h> | |
27 #include <string.h> | |
612 | 28 #include <errno.h> |
27618 | 29 #include <sys/stat.h> |
30 #include <sys/types.h> | |
31 #include <unistd.h> | |
527 | 32 |
26203 | 33 #include "config.h" |
30427 | 34 #include "fmt-conversion.h" |
30516 | 35 #include "mp_core.h" |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
17932
diff
changeset
|
36 #include "mp_msg.h" |
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
17932
diff
changeset
|
37 #include "help_mp.h" |
527 | 38 #include "video_out.h" |
39 #include "video_out_internal.h" | |
14451
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
40 #include "subopt-helper.h" |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
41 #include "libavcodec/avcodec.h" |
527 | 42 |
27618 | 43 #define BUFLENGTH 512 |
44 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
45 static const vo_info_t info = |
527 | 46 { |
47 "PNG file", | |
48 "png", | |
49 "Felix Buenemann <atmosfear@users.sourceforge.net>", | |
50 "" | |
51 }; | |
52 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
53 const LIBVO_EXTERN (png) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
7926
diff
changeset
|
54 |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
55 static int z_compression; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
56 static char *png_outdir; |
32755 | 57 static char *png_outfile_prefix; |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
58 static int framenum; |
28092
77c7b422a49d
Add support for writing PNG files with alpha channel in -vo png
reimar
parents:
27873
diff
changeset
|
59 static int use_alpha; |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
60 static AVCodecContext *avctx; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
61 static uint8_t *outbuffer; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
62 int outbuffer_size; |
3950
e92653caf5d7
osd support, zlib range fix. by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents:
2732
diff
changeset
|
63 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
64 static void png_mkdir(char *buf, int verbose) { |
27618 | 65 struct stat stat_p; |
66 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
67 #ifndef __MINGW32__ |
27618 | 68 if ( mkdir(buf, 0755) < 0 ) { |
69 #else | |
70 if ( mkdir(buf) < 0 ) { | |
71 #endif | |
72 switch (errno) { /* use switch in case other errors need to be caught | |
73 and handled in the future */ | |
74 case EEXIST: | |
75 if ( stat(buf, &stat_p ) < 0 ) { | |
76 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", info.short_name, | |
77 MSGTR_VO_GenericError, strerror(errno) ); | |
78 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s %s\n", info.short_name, | |
79 MSGTR_VO_UnableToAccess,buf); | |
30516 | 80 exit_player(EXIT_ERROR); |
27618 | 81 } |
82 if ( !S_ISDIR(stat_p.st_mode) ) { | |
83 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s %s\n", info.short_name, | |
84 buf, MSGTR_VO_ExistsButNoDirectory); | |
30516 | 85 exit_player(EXIT_ERROR); |
27618 | 86 } |
87 if ( !(stat_p.st_mode & S_IWUSR) ) { | |
88 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s - %s\n", info.short_name, | |
89 buf, MSGTR_VO_DirExistsButNotWritable); | |
30516 | 90 exit_player(EXIT_ERROR); |
27618 | 91 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
92 |
27618 | 93 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s - %s\n", info.short_name, |
94 buf, MSGTR_VO_DirExistsAndIsWritable); | |
95 break; | |
96 | |
97 default: | |
98 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", info.short_name, | |
99 MSGTR_VO_GenericError, strerror(errno) ); | |
100 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s - %s\n", info.short_name, | |
101 buf, MSGTR_VO_CantCreateDirectory); | |
30516 | 102 exit_player(EXIT_ERROR); |
27618 | 103 } /* end switch */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
104 } else if ( verbose ) { |
27618 | 105 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s - %s\n", info.short_name, |
106 buf, MSGTR_VO_DirectoryCreateSuccess); | |
107 } /* end if */ | |
108 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
109 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
110 static int |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14451
diff
changeset
|
111 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) |
527 | 112 { |
27618 | 113 char buf[BUFLENGTH]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
114 |
527 | 115 if(z_compression == 0) { |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
17932
diff
changeset
|
116 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_PNG_Warning1); |
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
17932
diff
changeset
|
117 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_PNG_Warning2); |
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
17932
diff
changeset
|
118 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_PNG_Warning3); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
119 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
120 |
27618 | 121 snprintf(buf, BUFLENGTH, "%s", png_outdir); |
122 png_mkdir(buf, 1); | |
24671
fbcd9dcb0daf
Get rid of mp_msg_test in vo_png, only reason to use it is performance and
reimar
parents:
24670
diff
changeset
|
123 mp_msg(MSGT_VO,MSGL_DBG2, "PNG Compression level %i\n", z_compression); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
124 |
527 | 125 return 0; |
126 } | |
127 | |
128 | |
7693 | 129 static uint32_t draw_image(mp_image_t* mpi){ |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
130 AVFrame pic; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
131 int buffersize; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
132 int res; |
527 | 133 char buf[100]; |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
134 FILE *outfile; |
7693 | 135 |
136 // if -dr or -slices then do nothing: | |
137 if(mpi->flags&(MP_IMGFLAG_DIRECT|MP_IMGFLAG_DRAW_CALLBACK)) return VO_TRUE; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
138 |
32755 | 139 snprintf (buf, 100, "%s/%s%08d.png", png_outdir, png_outfile_prefix, ++framenum); |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
140 outfile = fopen(buf, "wb"); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
141 if (!outfile) { |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
142 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_PNG_ErrorOpeningForWriting, strerror(errno)); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
143 return 1; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
144 } |
527 | 145 |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
146 avctx->width = mpi->w; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
147 avctx->height = mpi->h; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
148 avctx->pix_fmt = imgfmt2pixfmt(mpi->imgfmt); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
149 pic.data[0] = mpi->planes[0]; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
150 pic.linesize[0] = mpi->stride[0]; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
151 buffersize = mpi->w * mpi->h * 8; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
152 if (outbuffer_size < buffersize) { |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
153 av_freep(&outbuffer); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
154 outbuffer = av_malloc(buffersize); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
155 outbuffer_size = buffersize; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
156 } |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
157 res = avcodec_encode_video(avctx, outbuffer, outbuffer_size, &pic); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
158 |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
159 if(res < 0){ |
18234
a107276371a8
Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents:
17932
diff
changeset
|
160 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_PNG_ErrorInCreatePng); |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
161 fclose(outfile); |
527 | 162 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28922
diff
changeset
|
163 } |
527 | 164 |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
165 fwrite(outbuffer, res, 1, outfile); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
166 fclose(outfile); |
527 | 167 |
7693 | 168 return VO_TRUE; |
527 | 169 } |
170 | |
7926
7d2542838d24
- removed YV12 support (builtin yv12->rgb conversion)
arpi
parents:
7694
diff
changeset
|
171 static void draw_osd(void){} |
1501
d40f2b686846
changes according to -utf8 option, draw_osd() function added
atlka
parents:
1078
diff
changeset
|
172 |
7926
7d2542838d24
- removed YV12 support (builtin yv12->rgb conversion)
arpi
parents:
7694
diff
changeset
|
173 static void flip_page (void){} |
527 | 174 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
175 static int draw_frame(uint8_t * src[]) |
7926
7d2542838d24
- removed YV12 support (builtin yv12->rgb conversion)
arpi
parents:
7694
diff
changeset
|
176 { |
7d2542838d24
- removed YV12 support (builtin yv12->rgb conversion)
arpi
parents:
7694
diff
changeset
|
177 return -1; |
527 | 178 } |
179 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
180 static int draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y ) |
527 | 181 { |
7926
7d2542838d24
- removed YV12 support (builtin yv12->rgb conversion)
arpi
parents:
7694
diff
changeset
|
182 return -1; |
527 | 183 } |
184 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
185 static int |
527 | 186 query_format(uint32_t format) |
187 { | |
28092
77c7b422a49d
Add support for writing PNG files with alpha channel in -vo png
reimar
parents:
27873
diff
changeset
|
188 const int supported_flags = VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_ACCEPT_STRIDE; |
527 | 189 switch(format){ |
27873
80a16d26acda
Use the proper IMGFMT_RGB24 and IMGFMT_BGR24 defines instead of
reimar
parents:
27655
diff
changeset
|
190 case IMGFMT_RGB24: |
28092
77c7b422a49d
Add support for writing PNG files with alpha channel in -vo png
reimar
parents:
27873
diff
changeset
|
191 return use_alpha ? 0 : supported_flags; |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
192 case IMGFMT_BGR32: |
28092
77c7b422a49d
Add support for writing PNG files with alpha channel in -vo png
reimar
parents:
27873
diff
changeset
|
193 return use_alpha ? supported_flags : 0; |
527 | 194 } |
195 return 0; | |
196 } | |
197 | |
27618 | 198 static void uninit(void){ |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
199 avcodec_close(avctx); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
200 av_freep(&avctx); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
201 av_freep(&outbuffer); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
202 outbuffer_size = 0; |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
30516
diff
changeset
|
203 free(png_outdir); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
30516
diff
changeset
|
204 png_outdir = NULL; |
32755 | 205 free(png_outfile_prefix); |
206 png_outfile_prefix = NULL; | |
27618 | 207 } |
527 | 208 |
7926
7d2542838d24
- removed YV12 support (builtin yv12->rgb conversion)
arpi
parents:
7694
diff
changeset
|
209 static void check_events(void){} |
4352 | 210 |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
211 static int int_zero_to_nine(void *value) |
14451
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
212 { |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
213 int *sh = value; |
30123
0f5f75b4a015
Simplify range-checking functions for subopt parsing.
reimar
parents:
30122
diff
changeset
|
214 return *sh >= 0 && *sh <= 9; |
14451
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
215 } |
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
216 |
28828
56eee6ffba9b
Make data related to suboption parsing const in libvo
reimar
parents:
28446
diff
changeset
|
217 static const opt_t subopts[] = { |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
218 {"alpha", OPT_ARG_BOOL, &use_alpha, NULL}, |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
29263
diff
changeset
|
219 {"z", OPT_ARG_INT, &z_compression, int_zero_to_nine}, |
28922
9dd905e52639
Remove obsolete extra elements from opt_t struct initialization.
diego
parents:
28828
diff
changeset
|
220 {"outdir", OPT_ARG_MSTRZ, &png_outdir, NULL}, |
32755 | 221 {"prefix", OPT_ARG_MSTRZ, &png_outfile_prefix, NULL }, |
14451
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
222 {NULL} |
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
223 }; |
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
224 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15212
diff
changeset
|
225 static int preinit(const char *arg) |
4352 | 226 { |
14451
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
227 z_compression = 0; |
27618 | 228 png_outdir = strdup("."); |
32755 | 229 png_outfile_prefix = strdup(""); |
28092
77c7b422a49d
Add support for writing PNG files with alpha channel in -vo png
reimar
parents:
27873
diff
changeset
|
230 use_alpha = 0; |
14451
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
231 if (subopt_parse(arg, subopts) != 0) { |
4a6f25e88dbb
Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents:
12857
diff
changeset
|
232 return -1; |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
233 } |
30144
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
234 avcodec_register_all(); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
235 avctx = avcodec_alloc_context(); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
236 if (avcodec_open(avctx, avcodec_find_encoder(CODEC_ID_PNG)) < 0) { |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
237 uninit(); |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
238 return -1; |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
239 } |
0a92a14ced38
Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents:
30123
diff
changeset
|
240 avctx->compression_level = z_compression; |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4596
diff
changeset
|
241 return 0; |
4352 | 242 } |
243 | |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
32755
diff
changeset
|
244 static int control(uint32_t request, void *data) |
4352 | 245 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
246 switch (request) { |
7693 | 247 case VOCTRL_DRAW_IMAGE: |
248 return draw_image(data); | |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
249 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
250 return query_format(*((uint32_t*)data)); |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
251 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
252 return VO_NOTIMPL; |
4352 | 253 } |