annotate libvo/vo_png.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 664152973dbc
children 8517826b0dbd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
3 *
530
670d47b4ce10 changed copyroght message to correct stuff :)
atmosfear
parents: 527
diff changeset
4 * Copyright 2001 by Felix Buenemann <atmosfear@users.sourceforge.net>
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
5 *
530
670d47b4ce10 changed copyroght message to correct stuff :)
atmosfear
parents: 527
diff changeset
6 * Uses libpng (which uses zlib), so see according licenses.
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
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
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
23 */
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
24
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
25 #include <stdio.h>
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
26 #include <stdlib.h>
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
27 #include <string.h>
612
77e0094f0cce some warnings killed
szabii
parents: 530
diff changeset
28 #include <errno.h>
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
29 #include <sys/stat.h>
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
30 #include <sys/types.h>
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
31 #include <unistd.h>
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
32
26203
0d255d03016f #include config.h before all other headers.
diego
parents: 25220
diff changeset
33 #include "config.h"
30427
946629f9b239 Add missing #include, fixes the warning:
diego
parents: 30144
diff changeset
34 #include "fmt-conversion.h"
30516
f4e017b6921a Fix exit_player() usage throughout the codebase.
diego
parents: 30427
diff changeset
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
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
38 #include "video_out.h"
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
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
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
42
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
43 #define BUFLENGTH 512
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
44
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
45 static const vo_info_t info =
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
46 {
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
47 "PNG file",
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
48 "png",
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
49 "Felix Buenemann <atmosfear@users.sourceforge.net>",
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
50 ""
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
51 };
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
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
f03a237a8d26 Add prefix filename option for PNG video output.
cboesch
parents: 32537
diff changeset
57 static char *png_outfile_prefix;
34635
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
58 static uint32_t png_format;
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
59 static int framenum;
28092
77c7b422a49d Add support for writing PNG files with alpha channel in -vo png
reimar
parents: 27873
diff changeset
60 static int use_alpha;
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
61 static AVCodecContext *avctx;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
62 static uint8_t *outbuffer;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
63 int outbuffer_size;
3950
e92653caf5d7 osd support, zlib range fix. by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2732
diff changeset
64
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
65 static void png_mkdir(char *buf, int verbose) {
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
66 struct stat stat_p;
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
67
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
68 #ifndef __MINGW32__
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
69 if ( mkdir(buf, 0755) < 0 ) {
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
70 #else
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
71 if ( mkdir(buf) < 0 ) {
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
72 #endif
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
73 switch (errno) { /* use switch in case other errors need to be caught
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
74 and handled in the future */
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
75 case EEXIST:
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
76 if ( stat(buf, &stat_p ) < 0 ) {
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
77 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
78 MSGTR_VO_GenericError, strerror(errno) );
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
79 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
80 MSGTR_VO_UnableToAccess,buf);
30516
f4e017b6921a Fix exit_player() usage throughout the codebase.
diego
parents: 30427
diff changeset
81 exit_player(EXIT_ERROR);
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
82 }
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
83 if ( !S_ISDIR(stat_p.st_mode) ) {
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
84 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
85 buf, MSGTR_VO_ExistsButNoDirectory);
30516
f4e017b6921a Fix exit_player() usage throughout the codebase.
diego
parents: 30427
diff changeset
86 exit_player(EXIT_ERROR);
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
87 }
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
88 if ( !(stat_p.st_mode & S_IWUSR) ) {
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
89 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s - %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
90 buf, MSGTR_VO_DirExistsButNotWritable);
30516
f4e017b6921a Fix exit_player() usage throughout the codebase.
diego
parents: 30427
diff changeset
91 exit_player(EXIT_ERROR);
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
92 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
93
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
94 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s - %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
95 buf, MSGTR_VO_DirExistsAndIsWritable);
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
96 break;
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
97
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
98 default:
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
99 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s: %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
100 MSGTR_VO_GenericError, strerror(errno) );
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
101 mp_msg(MSGT_VO, MSGL_ERR, "%s: %s - %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
102 buf, MSGTR_VO_CantCreateDirectory);
30516
f4e017b6921a Fix exit_player() usage throughout the codebase.
diego
parents: 30427
diff changeset
103 exit_player(EXIT_ERROR);
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
104 } /* end switch */
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
105 } else if ( verbose ) {
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
106 mp_msg(MSGT_VO, MSGL_INFO, "%s: %s - %s\n", info.short_name,
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
107 buf, MSGTR_VO_DirectoryCreateSuccess);
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
108 } /* end if */
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
109 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
110
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
111 static int
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14451
diff changeset
112 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
113 {
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
114 char buf[BUFLENGTH];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
115
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
116 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
117 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
118 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
119 mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_PNG_Warning3);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
120 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
121
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
122 snprintf(buf, BUFLENGTH, "%s", png_outdir);
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
123 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
124 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
125
34635
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
126
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
127 if (avctx && png_format != format) {
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
128 avcodec_close(avctx);
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
129 av_freep(&avctx);
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
130 }
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
131
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
132 if (!avctx) {
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
133 avctx = avcodec_alloc_context3(NULL);
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
134 avctx->compression_level = z_compression;
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
135 avctx->pix_fmt = imgfmt2pixfmt(format);
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
136 if (avcodec_open2(avctx, avcodec_find_encoder(CODEC_ID_PNG), NULL) < 0) {
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
137 uninit();
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
138 return -1;
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
139 }
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
140 png_format = format;
7e0f50b4921c Fix vo_png after FFmpeg merge.
iive
parents: 34566
diff changeset
141 }
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
142 return 0;
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
143 }
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
144
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
145
7693
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
146 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
147 AVFrame pic;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
148 int buffersize;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
149 int res;
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
150 char buf[100];
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
151 FILE *outfile;
7693
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
152
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
153 // if -dr or -slices then do nothing:
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
154 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
155
32755
f03a237a8d26 Add prefix filename option for PNG video output.
cboesch
parents: 32537
diff changeset
156 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
157 outfile = fopen(buf, "wb");
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
158 if (!outfile) {
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
159 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
160 return 1;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
161 }
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
162
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
163 avctx->width = mpi->w;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
164 avctx->height = mpi->h;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
165 pic.data[0] = mpi->planes[0];
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
166 pic.linesize[0] = mpi->stride[0];
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
167 buffersize = mpi->w * mpi->h * 8;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
168 if (outbuffer_size < buffersize) {
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
169 av_freep(&outbuffer);
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
170 outbuffer = av_malloc(buffersize);
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
171 outbuffer_size = buffersize;
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
172 }
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
173 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
174
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
175 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
176 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
177 fclose(outfile);
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
178 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
179 }
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
180
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
181 fwrite(outbuffer, res, 1, outfile);
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
182 fclose(outfile);
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
183
7693
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
184 return VO_TRUE;
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
185 }
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
186
7926
7d2542838d24 - removed YV12 support (builtin yv12->rgb conversion)
arpi
parents: 7694
diff changeset
187 static void draw_osd(void){}
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1078
diff changeset
188
7926
7d2542838d24 - removed YV12 support (builtin yv12->rgb conversion)
arpi
parents: 7694
diff changeset
189 static void flip_page (void){}
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
190
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
191 static int draw_frame(uint8_t * src[])
7926
7d2542838d24 - removed YV12 support (builtin yv12->rgb conversion)
arpi
parents: 7694
diff changeset
192 {
7d2542838d24 - removed YV12 support (builtin yv12->rgb conversion)
arpi
parents: 7694
diff changeset
193 return -1;
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
194 }
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
195
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
196 static int draw_slice( uint8_t *src[],int stride[],int w,int h,int x,int y )
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
197 {
7926
7d2542838d24 - removed YV12 support (builtin yv12->rgb conversion)
arpi
parents: 7694
diff changeset
198 return -1;
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
199 }
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
200
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
201 static int
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
202 query_format(uint32_t format)
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
203 {
28092
77c7b422a49d Add support for writing PNG files with alpha channel in -vo png
reimar
parents: 27873
diff changeset
204 const int supported_flags = VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_ACCEPT_STRIDE;
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
205 switch(format){
27873
80a16d26acda Use the proper IMGFMT_RGB24 and IMGFMT_BGR24 defines instead of
reimar
parents: 27655
diff changeset
206 case IMGFMT_RGB24:
28092
77c7b422a49d Add support for writing PNG files with alpha channel in -vo png
reimar
parents: 27873
diff changeset
207 return use_alpha ? 0 : supported_flags;
34804
664152973dbc Fix -vo png:alpha with newer FFmpeg.
cehoyos
parents: 34635
diff changeset
208 case IMGFMT_RGBA:
28092
77c7b422a49d Add support for writing PNG files with alpha channel in -vo png
reimar
parents: 27873
diff changeset
209 return use_alpha ? supported_flags : 0;
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
210 }
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
211 return 0;
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
212 }
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
213
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
214 static void uninit(void){
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
215 avcodec_close(avctx);
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
216 av_freep(&avctx);
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
217 av_freep(&outbuffer);
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
218 outbuffer_size = 0;
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 30516
diff changeset
219 free(png_outdir);
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 30516
diff changeset
220 png_outdir = NULL;
32755
f03a237a8d26 Add prefix filename option for PNG video output.
cboesch
parents: 32537
diff changeset
221 free(png_outfile_prefix);
f03a237a8d26 Add prefix filename option for PNG video output.
cboesch
parents: 32537
diff changeset
222 png_outfile_prefix = NULL;
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
223 }
527
a38decaa04ec png video out renderer initial release
atmosfear
parents:
diff changeset
224
7926
7d2542838d24 - removed YV12 support (builtin yv12->rgb conversion)
arpi
parents: 7694
diff changeset
225 static void check_events(void){}
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
226
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
227 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
228 {
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
229 int *sh = value;
30123
0f5f75b4a015 Simplify range-checking functions for subopt parsing.
reimar
parents: 30122
diff changeset
230 return *sh >= 0 && *sh <= 9;
14451
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
231 }
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
232
28828
56eee6ffba9b Make data related to suboption parsing const in libvo
reimar
parents: 28446
diff changeset
233 static const opt_t subopts[] = {
28922
9dd905e52639 Remove obsolete extra elements from opt_t struct initialization.
diego
parents: 28828
diff changeset
234 {"alpha", OPT_ARG_BOOL, &use_alpha, NULL},
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
235 {"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
236 {"outdir", OPT_ARG_MSTRZ, &png_outdir, NULL},
32755
f03a237a8d26 Add prefix filename option for PNG video output.
cboesch
parents: 32537
diff changeset
237 {"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
238 {NULL}
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
239 };
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
240
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
241 static int preinit(const char *arg)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
242 {
14451
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
243 z_compression = 0;
27618
9badbf52f33c add outdir sub-option to vo png
ben
parents: 26203
diff changeset
244 png_outdir = strdup(".");
32755
f03a237a8d26 Add prefix filename option for PNG video output.
cboesch
parents: 32537
diff changeset
245 png_outfile_prefix = strdup("");
28092
77c7b422a49d Add support for writing PNG files with alpha channel in -vo png
reimar
parents: 27873
diff changeset
246 use_alpha = 0;
14451
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
247 if (subopt_parse(arg, subopts) != 0) {
4a6f25e88dbb Implementation of vo_png suboption parser with subopt-helper and removal
ivo
parents: 12857
diff changeset
248 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
249 }
30144
0a92a14ced38 Change vo_png to use FFmpeg's png encoder instead of libpng.
reimar
parents: 30123
diff changeset
250 avcodec_register_all();
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4596
diff changeset
251 return 0;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
252 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
253
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 32755
diff changeset
254 static int control(uint32_t request, void *data)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
255 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
256 switch (request) {
7693
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
257 case VOCTRL_DRAW_IMAGE:
3f218f3172f3 draw_image()
arpi
parents: 7472
diff changeset
258 return draw_image(data);
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
259 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
260 return query_format(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
261 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4433
diff changeset
262 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
263 }