Mercurial > mplayer.hg
annotate libmpcodecs/vf_zrmjpeg.c @ 27985:1c77b86d355d
Remove a ColorFill that is not necessary since the surface it is used
on has exactly the same size as the video image and the video will
be copied into it before it is used the first time.
author | reimar |
---|---|
date | Mon, 24 Nov 2008 09:46:23 +0000 |
parents | 3c4576565183 |
children | 8aeebf532e48 |
rev | line source |
---|---|
27509
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
1 /* |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
2 * This files includes a straightforward (to be) optimized JPEG encoder for |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
3 * the YUV422 format, based on mjpeg code from ffmpeg. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
4 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
5 * For an excellent introduction to the JPEG format, see: |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
6 * http://www.ece.purdue.edu/~bouman/grad-labs/lab8/pdf/lab.pdf |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
7 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
8 * Copyright (C) 2005 Rik Snel <rsnel@cube.dyndns.org> |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
9 * - based on vd_lavc.c by A'rpi (C) 2002-2003 |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
10 * - parts from ffmpeg Copyright (c) 2000-2003 Fabrice Bellard |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
11 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
12 * This file is part of MPlayer. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
13 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
14 * MPlayer is free software; you can redistribute it and/or modify |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
15 * it under the terms of the GNU General Public License as published by |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
16 * the Free Software Foundation; either version 2 of the License, or |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
17 * (at your option) any later version. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
18 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
19 * MPlayer is distributed in the hope that it will be useful, |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
22 * GNU General Public License for more details. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
23 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
24 * You should have received a copy of the GNU General Public License along |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
25 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
26 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
27 */ |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
28 |
19951 | 29 /** |
30 * \file vf_zrmjpeg.c | |
31 * | |
32 * \brief Does mjpeg encoding as required by the zrmjpeg filter as well | |
33 * as by the zr video driver. | |
34 */ | |
27509
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
26291
diff
changeset
|
35 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
36 #include <stdio.h> |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
37 #include <stdlib.h> |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
38 #include <string.h> |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
39 #include <inttypes.h> |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
40 |
17012 | 41 #include "config.h" |
42 #include "mp_msg.h" | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
43 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
44 #include "img_format.h" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
45 #include "mp_image.h" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
46 #include "vf.h" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
47 |
19951 | 48 /* We need this #define because we need ../libavcodec/common.h to #define |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
49 * be2me_32, otherwise the linker will complain that it doesn't exist */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
50 #define HAVE_AV_CONFIG_H |
17012 | 51 #include "libavcodec/avcodec.h" |
27735
3c4576565183
#include necessary libavcodec header and remove duplicated struct declaration.
diego
parents:
27733
diff
changeset
|
52 #include "libavcodec/mjpegenc.h" |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
53 //#include "jpeg_enc.h" /* this file is not present yet */ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
54 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
55 #undef malloc |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
56 #undef free |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
57 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
58 /* some convenient #define's, is this portable enough? */ |
19951 | 59 /// Printout with vf_zrmjpeg: prefix at VERBOSE level |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
60 #define VERBOSE(...) mp_msg(MSGT_DECVIDEO, MSGL_V, "vf_zrmjpeg: " __VA_ARGS__) |
19951 | 61 /// Printout with vf_zrmjpeg: prefix at ERROR level |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
62 #define ERROR(...) mp_msg(MSGT_DECVIDEO, MSGL_ERR, "vf_zrmjpeg: " __VA_ARGS__) |
19951 | 63 /// Printout with vf_zrmjpeg: prefix at WARNING level |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
64 #define WARNING(...) mp_msg(MSGT_DECVIDEO, MSGL_WARN, \ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
65 "vf_zrmjpeg: " __VA_ARGS__) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
66 |
19951 | 67 // "local" flag in vd_ffmpeg.c. If not set, avcodec_init() et. al. need to be called |
68 // set when init is done, so that initialization is not done twice. | |
25962 | 69 extern int avcodec_initialized; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
70 |
19951 | 71 /// The get_pixels() routine to use. The real routine comes from dsputil |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
72 static void (*get_pixels)(DCTELEM *restrict block, const uint8_t *pixels, int line_size); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
73 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
74 /* Begin excessive code duplication ************************************/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
75 /* Code coming from mpegvideo.c and mjpeg.c in ../libavcodec ***********/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
76 |
19951 | 77 /// copy of the table in mpegvideo.c |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
78 static const unsigned short aanscales[64] = { |
19951 | 79 /**< precomputed values scaled up by 14 bits */ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
80 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
81 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
82 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
83 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
84 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
85 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
86 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
87 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
88 }; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
89 |
19951 | 90 /// Precompute DCT quantizing matrix |
91 /** | |
92 * This routine will precompute the combined DCT matrix with qscale | |
93 * and DCT renorm needed by the MPEG encoder here. It is basically the | |
94 * same as the routine with the same name in mpegvideo.c, except for | |
95 * some coefficient changes. The matrix will be computed in two variations, | |
96 * depending on the DCT version used. The second used by the MMX version of DCT. | |
97 * | |
98 * \param s MpegEncContext pointer | |
99 * \param qmat[OUT] pointer to where the matrix is stored | |
100 * \param qmat16[OUT] pointer to where matrix for MMX is stored. | |
101 * This matrix is not permutated | |
102 * and second 64 entries are bias | |
103 * \param quant_matrix[IN] the quantizion matrix to use | |
104 * \param bias bias for the quantizer | |
105 * \param qmin minimum qscale value to set up for | |
106 * \param qmax maximum qscale value to set up for | |
107 * | |
108 * Only rows between qmin and qmax will be populated in the matrix. | |
109 * In this MJPEG encoder, only the value 8 for qscale is used. | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
110 */ |
19951 | 111 static void convert_matrix(MpegEncContext *s, int (*qmat)[64], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
112 uint16_t (*qmat16)[2][64], const uint16_t *quant_matrix, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
113 int bias, int qmin, int qmax) { |
19951 | 114 int qscale; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
115 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
116 for(qscale = qmin; qscale <= qmax; qscale++) { |
19951 | 117 int i; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
118 if (s->dsp.fdct == ff_jpeg_fdct_islow) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
119 for (i = 0; i < 64; i++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
120 const int j = s->dsp.idct_permutation[i]; |
19951 | 121 /* 16 <= qscale * quant_matrix[i] <= 7905 |
122 * 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 | |
123 * (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
124 * >= (1<<36)/249205026 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
125 * 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ |
19951 | 126 qmat[qscale][i] = (int)((UINT64_C(1) << |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
127 (QMAT_SHIFT-3))/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
128 (qscale*quant_matrix[j])); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
129 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
130 } else if (s->dsp.fdct == fdct_ifast) { |
19951 | 131 for (i = 0; i < 64; i++) { |
132 const int j = s->dsp.idct_permutation[i]; | |
133 /* 16 <= qscale * quant_matrix[i] <= 7905 | |
134 * 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 | |
135 * (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
136 * >= (1<<36)/249205026 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
137 * 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ |
19951 | 138 qmat[qscale][i] = (int)((UINT64_C(1) << |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
139 (QMAT_SHIFT + 11))/(aanscales[i] |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
140 *qscale * quant_matrix[j])); |
19951 | 141 } |
142 } else { | |
143 for (i = 0; i < 64; i++) { | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
144 const int j = s->dsp.idct_permutation[i]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
145 /* We can safely assume that 16 <= quant_matrix[i] <= 255 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
146 * So 16 <= qscale * quant_matrix[i] <= 7905 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
147 * so (1<<19) / 16 >= (1<<19) / (qscale * quant_matrix[i]) >= (1<<19) / 7905 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
148 * so 32768 >= (1<<19) / (qscale * quant_matrix[i]) >= 67 */ |
21724
019171a44e19
compilation fixes: define always_inline and don't use uint64_t_C
rik
parents:
19951
diff
changeset
|
149 qmat[qscale][i] = (int)((UINT64_C(1) << |
19951 | 150 QMAT_SHIFT_MMX) / (qscale |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
151 *quant_matrix[j])); |
19951 | 152 qmat16[qscale][0][i] = (1 << QMAT_SHIFT_MMX) |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
153 /(qscale * quant_matrix[j]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
154 |
19951 | 155 if (qmat16[qscale][0][i] == 0 || |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
156 qmat16[qscale][0][i] == 128*256) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
157 qmat16[qscale][0][i]=128*256-1; |
19951 | 158 qmat16[qscale][1][i]=ROUNDED_DIV(bias |
159 <<(16-QUANT_BIAS_SHIFT), | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
160 qmat16[qscale][0][i]); |
19951 | 161 } |
162 } | |
163 } | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
164 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
165 |
19951 | 166 /// Emit the DC value into a MJPEG code sream |
167 /** | |
168 * This routine is only intended to be used from encode_block | |
169 * | |
170 * \param s pointer to MpegEncContext structure | |
171 * \param val the DC value to emit | |
172 * \param huff_size pointer to huffman code size array | |
173 * \param huff_code pointer to the code array corresponding to \a huff_size | |
174 * | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
175 * This routine is a clone of mjpeg_encode_dc |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
176 */ |
19951 | 177 static inline void encode_dc(MpegEncContext *s, int val, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
178 uint8_t *huff_size, uint16_t *huff_code) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
179 int mant, nbits; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
180 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
181 if (val == 0) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
182 put_bits(&s->pb, huff_size[0], huff_code[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
183 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
184 mant = val; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
185 if (val < 0) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
186 val = -val; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
187 mant--; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
188 } |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
189 nbits= av_log2_16bit(val) + 1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
190 put_bits(&s->pb, huff_size[nbits], huff_code[nbits]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
191 put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1)); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
192 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
193 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
194 |
19951 | 195 /// Huffman encode and emit one DCT block into the MJPEG code stream |
196 /** | |
197 * \param s pointer to MpegEncContext structure | |
198 * \param block pointer to the DCT block to emit | |
199 * \param n | |
200 * | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
201 * This routine is a duplicate of encode_block in mjpeg.c |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
202 */ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
203 static void encode_block(MpegEncContext *s, DCTELEM *block, int n) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
204 int mant, nbits, code, i, j; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
205 int component, dc, run, last_index, val; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
206 MJpegContext *m = s->mjpeg_ctx; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
207 uint8_t *huff_size_ac; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
208 uint16_t *huff_code_ac; |
19951 | 209 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
210 /* DC coef */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
211 component = (n <= 3 ? 0 : n - 4 + 1); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
212 dc = block[0]; /* overflow is impossible */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
213 val = dc - s->last_dc[component]; |
19951 | 214 if (n < 4) { |
215 encode_dc(s, val, m->huff_size_dc_luminance, | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
216 m->huff_code_dc_luminance); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
217 huff_size_ac = m->huff_size_ac_luminance; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
218 huff_code_ac = m->huff_code_ac_luminance; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
219 } else { |
19951 | 220 encode_dc(s, val, m->huff_size_dc_chrominance, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
221 m->huff_code_dc_chrominance); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
222 huff_size_ac = m->huff_size_ac_chrominance; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
223 huff_code_ac = m->huff_code_ac_chrominance; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
224 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
225 s->last_dc[component] = dc; |
19951 | 226 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
227 /* AC coefs */ |
19951 | 228 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
229 run = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
230 last_index = s->block_last_index[n]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
231 for (i = 1; i <= last_index; i++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
232 j = s->intra_scantable.permutated[i]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
233 val = block[j]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
234 if (val == 0) run++; |
19951 | 235 else { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
236 while (run >= 16) { |
19951 | 237 put_bits(&s->pb, huff_size_ac[0xf0], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
238 huff_code_ac[0xf0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
239 run -= 16; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
240 } |
19951 | 241 mant = val; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
242 if (val < 0) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
243 val = -val; |
19951 | 244 mant--; |
245 } | |
246 | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
247 nbits= av_log2_16bit(val) + 1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
248 code = (run << 4) | nbits; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
249 |
19951 | 250 put_bits(&s->pb, huff_size_ac[code], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
251 huff_code_ac[code]); |
19951 | 252 put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1)); |
253 run = 0; | |
254 } | |
255 } | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
256 |
19951 | 257 /* output EOB only if not already 64 values */ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
258 if (last_index < 63 || run != 0) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
259 put_bits(&s->pb, huff_size_ac[0], huff_code_ac[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
260 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
261 |
19951 | 262 /// clip overflowing DCT coefficients |
263 /** | |
264 * If the computed DCT coefficients in a block overflow, this routine | |
265 * will go through them and clip them to be in the valid range. | |
266 * | |
267 * \param s pointer to MpegEncContext | |
268 * \param block pointer to DCT block to process | |
269 * \param last_index index of the last non-zero coefficient in block | |
270 * | |
271 * The max and min level, which are clipped to, are stored in | |
272 * s->min_qcoeff and s->max_qcoeff respectively. | |
273 */ | |
274 static inline void clip_coeffs(MpegEncContext *s, DCTELEM *block, | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
275 int last_index) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
276 int i; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
277 const int maxlevel= s->max_qcoeff; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
278 const int minlevel= s->min_qcoeff; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
279 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
280 for (i = 0; i <= last_index; i++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
281 const int j = s->intra_scantable.permutated[i]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
282 int level = block[j]; |
19951 | 283 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
284 if (level > maxlevel) level=maxlevel; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
285 else if(level < minlevel) level=minlevel; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
286 block[j]= level; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
287 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
288 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
289 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
290 /* End excessive code duplication **************************************/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
291 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
292 typedef struct { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
293 struct MpegEncContext *s; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
294 int cheap_upsample; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
295 int bw; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
296 int y_rs; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
297 int u_rs; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
298 int v_rs; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
299 } jpeg_enc_t; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
300 |
19951 | 301 // Huffman encode and emit one MCU of MJPEG code |
302 /** | |
303 * \param j pointer to jpeg_enc_t structure | |
304 * | |
305 * This function huffman encodes one MCU, and emits the | |
306 * resulting bitstream into the MJPEG code that is currently worked on. | |
307 * | |
308 * this function is a reproduction of the one in mjpeg, it includes two | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
309 * changes, it allows for black&white encoding (it skips the U and V |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
310 * macroblocks and it outputs the huffman code for 'no change' (dc) and |
19951 | 311 * 'all zero' (ac)) and it takes 4 macroblocks (422) instead of 6 (420) |
312 */ | |
21730 | 313 static av_always_inline void zr_mjpeg_encode_mb(jpeg_enc_t *j) { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
314 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
315 MJpegContext *m = j->s->mjpeg_ctx; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
316 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
317 encode_block(j->s, j->s->block[0], 0); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
318 encode_block(j->s, j->s->block[1], 1); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
319 if (j->bw) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
320 /* U */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
321 put_bits(&j->s->pb, m->huff_size_dc_chrominance[0], |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
322 m->huff_code_dc_chrominance[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
323 put_bits(&j->s->pb, m->huff_size_ac_chrominance[0], |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
324 m->huff_code_ac_chrominance[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
325 /* V */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
326 put_bits(&j->s->pb, m->huff_size_dc_chrominance[0], |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
327 m->huff_code_dc_chrominance[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
328 put_bits(&j->s->pb, m->huff_size_ac_chrominance[0], |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
329 m->huff_code_ac_chrominance[0]); |
19951 | 330 } else { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
331 /* we trick encode_block here so that it uses |
19951 | 332 * chrominance huffman tables instead of luminance ones |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
333 * (see the effect of second argument of encode_block) */ |
19951 | 334 encode_block(j->s, j->s->block[2], 4); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
335 encode_block(j->s, j->s->block[3], 5); |
19951 | 336 } |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
337 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
338 |
19951 | 339 /// Fill one DCT MCU from planar storage |
340 /** | |
341 * This routine will convert one MCU from YUYV planar storage into 4 | |
342 * DCT macro blocks, converting from 8-bit format in the planar | |
343 * storage to 16-bit format used in the DCT. | |
344 * | |
345 * \param j pointer to jpeg_enc structure, and also storage for DCT macro blocks | |
346 * \param x pixel x-coordinate for the first pixel | |
347 * \param y pixel y-coordinate for the first pixel | |
348 * \param y_data pointer to the Y plane | |
349 * \param u_data pointer to the U plane | |
350 * \param v_data pointer to the V plane | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
351 */ |
21730 | 352 static av_always_inline void fill_block(jpeg_enc_t *j, int x, int y, |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
353 unsigned char *y_data, unsigned char *u_data, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
354 unsigned char *v_data) |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
355 { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
356 int i, k; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
357 short int *dest; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
358 unsigned char *source; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
359 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
360 // The first Y, Y0 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
361 get_pixels(j->s->block[0], y*8*j->y_rs + 16*x + y_data, j->y_rs); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
362 // The second Y, Y1 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
363 get_pixels(j->s->block[1], y*8*j->y_rs + 16*x + 8 + y_data, j->y_rs); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
364 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
365 if (!j->bw && j->cheap_upsample) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
366 source = y * 4 * j->u_rs + 8*x + u_data; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
367 dest = j->s->block[2]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
368 for (i = 0; i < 4; i++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
369 for (k = 0; k < 8; k++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
370 dest[k] = source[k]; // First row |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
371 dest[k+8] = source[k]; // Duplicate to next row |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
372 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
373 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
374 dest += 16; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
375 source += j->u_rs; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
376 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
377 source = y * 4 * j->v_rs + 8*x + v_data; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
378 dest = j->s->block[3]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
379 for (i = 0; i < 4; i++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
380 for (k = 0; k < 8; k++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
381 dest[k] = source[k]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
382 dest[k+8] = source[k]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
383 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
384 dest += 16; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
385 source += j->u_rs; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
386 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
387 } else if (!j->bw && !j->cheap_upsample) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
388 // U |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
389 get_pixels(j->s->block[2], y*8*j->u_rs + 8*x + u_data, j->u_rs); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
390 // V |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
391 get_pixels(j->s->block[3], y*8*j->v_rs + 8*x + v_data, j->v_rs); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
392 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
393 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
394 |
19951 | 395 /** |
396 * \brief initialize mjpeg encoder | |
397 * | |
398 * This routine is to set up the parameters and initialize the mjpeg encoder. | |
399 * It does all the initializations needed of lower level routines. | |
400 * The formats accepted by this encoder is YUV422P and YUV420 | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
401 * |
19951 | 402 * \param w width in pixels of the image to encode, must be a multiple of 16 |
403 * \param h height in pixels of the image to encode, must be a multiple of 8 | |
404 * \param y_rsize size of each plane row Y component | |
405 * \param y_rsize size of each plane row U component | |
406 * \param v_rsize size of each plane row V component | |
407 * \param cu "cheap upsample". Set to 0 for YUV422 format, 1 for YUV420 format | |
408 * when set to 1, the encoder will assume that there is only half th | |
409 * number of rows of chroma information, and every chroma row is | |
410 * duplicated. | |
411 * \param q quality parameter for the mjpeg encode. Between 1 and 20 where 1 | |
412 * is best quality and 20 is the worst quality. | |
413 * \param b monochrome flag. When set to 1, the mjpeg output is monochrome. | |
414 * In that case, the colour information is omitted, and actually the | |
415 * colour planes are not touched. | |
416 * | |
417 * \returns an appropriately set up jpeg_enc_t structure | |
418 * | |
419 * The actual plane buffer addreses are passed by jpeg_enc_frame(). | |
420 * | |
421 * The encoder doesn't know anything about interlacing, the halve height | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
422 * needs to be passed and the double rowstride. Which field gets encoded |
19951 | 423 * is decided by what buffers are passed to mjpeg_encode_frame() |
424 */ | |
425 static jpeg_enc_t *jpeg_enc_init(int w, int h, int y_rsize, | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
426 int u_rsize, int v_rsize, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
427 int cu, int q, int b) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
428 jpeg_enc_t *j; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
429 int i = 0; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
430 VERBOSE("JPEG encoder init: %dx%d %d %d %d cu=%d q=%d bw=%d\n", |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
431 w, h, y_rsize, u_rsize, v_rsize, cu, q, b); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
432 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
433 j = av_mallocz(sizeof(jpeg_enc_t)); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
434 if (j == NULL) return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
435 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
436 j->s = av_mallocz(sizeof(MpegEncContext)); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
437 if (j->s == NULL) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
438 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
439 return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
440 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
441 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
442 /* info on how to access the pixels */ |
19951 | 443 j->y_rs = y_rsize; |
444 j->u_rs = u_rsize; | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
445 j->v_rs = v_rsize; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
446 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
447 j->s->width = w; // image width and height |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
448 j->s->height = h; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
449 j->s->qscale = q; // Encoding quality |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
450 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
451 j->s->out_format = FMT_MJPEG; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
452 j->s->intra_only = 1; // Generate only intra pictures for jpeg |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
453 j->s->encoding = 1; // Set mode to encode |
26291 | 454 j->s->pict_type = FF_I_TYPE; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
455 j->s->y_dc_scale = 8; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
456 j->s->c_dc_scale = 8; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
457 |
19951 | 458 /* |
459 * This sets up the MCU (Minimal Code Unit) number | |
460 * of appearances of the various component | |
461 * for the SOF0 table in the generated MJPEG. | |
462 * The values are not used for anything else. | |
463 * The current setup is simply YUV422, with two horizontal Y components | |
464 * for every UV component. | |
465 */ | |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
466 //FIXME j->s->mjpeg_write_tables = 1; // setup to write tables |
19951 | 467 j->s->mjpeg_vsample[0] = 1; // 1 appearance of Y vertically |
468 j->s->mjpeg_vsample[1] = 1; // 1 appearance of U vertically | |
469 j->s->mjpeg_vsample[2] = 1; // 1 appearance of V vertically | |
470 j->s->mjpeg_hsample[0] = 2; // 2 appearances of Y horizontally | |
471 j->s->mjpeg_hsample[1] = 1; // 1 appearance of U horizontally | |
472 j->s->mjpeg_hsample[2] = 1; // 1 appearance of V horizontally | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
473 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
474 j->cheap_upsample = cu; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
475 j->bw = b; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
476 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
477 // Is this needed? |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
478 /* if libavcodec is used by the decoder then we must not |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
479 * initialize again, but if it is not initialized then we must |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
480 * initialize it here. */ |
25962 | 481 if (!avcodec_initialized) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
482 avcodec_init(); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
483 avcodec_register_all(); |
25962 | 484 avcodec_initialized=1; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
485 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
486 |
19951 | 487 // Build mjpeg huffman code tables, setting up j->s->mjpeg_ctx |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
488 if (ff_mjpeg_encode_init(j->s) < 0) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
489 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
490 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
491 return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
492 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
493 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
494 /* alloc bogus avctx to keep MPV_common_init from segfaulting */ |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
495 j->s->avctx = avcodec_alloc_context(); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
496 if (j->s->avctx == NULL) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
497 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
498 av_free(j); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
499 return NULL; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
500 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
501 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
502 // Set some a minimum amount of default values that are needed |
19951 | 503 // Indicates that we should generated normal MJPEG |
19619
a83e5b8d2e63
Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
17906
diff
changeset
|
504 j->s->avctx->codec_id = CODEC_ID_MJPEG; |
19951 | 505 // Which DCT method to use. AUTO will select the fastest one |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
506 j->s->avctx->dct_algo = FF_DCT_AUTO; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
507 j->s->intra_quant_bias= 1<<(QUANT_BIAS_SHIFT-1); //(a + x/2)/x |
19951 | 508 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
509 j->s->avctx->thread_count = 1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
510 |
19951 | 511 /* make MPV_common_init allocate important buffers, like s->block |
512 * Also initializes dsputil */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
513 if (MPV_common_init(j->s) < 0) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
514 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
515 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
516 return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
517 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
518 |
19951 | 519 /* correct the value for sc->mb_height. MPV_common_init put other |
520 * values there */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
521 j->s->mb_height = j->s->height/8; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
522 j->s->mb_intra = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
523 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
524 // Init q matrix |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
525 j->s->intra_matrix[0] = ff_mpeg1_default_intra_matrix[0]; |
19951 | 526 for (i = 1; i < 64; i++) |
22339 | 527 j->s->intra_matrix[i] = av_clip_uint8( |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
528 (ff_mpeg1_default_intra_matrix[i]*j->s->qscale) >> 3); |
19951 | 529 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
530 // precompute matrix |
19951 | 531 convert_matrix(j->s, j->s->q_intra_matrix, j->s->q_intra_matrix16, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
532 j->s->intra_matrix, j->s->intra_quant_bias, 8, 8); |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
533 |
19951 | 534 /* Pick up the selection of the optimal get_pixels() routine |
535 * to use, which was done in MPV_common_init() */ | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
536 get_pixels = j->s->dsp.get_pixels; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
537 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
538 return j; |
19951 | 539 } |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
540 |
19951 | 541 /** |
542 * \brief mjpeg encode an image | |
543 * | |
544 * This routine will take a 3-plane YUV422 image and encoded it with MJPEG | |
545 * base line format, as suitable as input for the Zoran hardare MJPEG chips. | |
546 * | |
547 * It requires that the \a j parameter points the structure set up by the | |
548 * jpeg_enc_init() routine. | |
549 * | |
550 * \param j pointer to jpeg_enc_t structure as created by jpeg_enc_init() | |
551 * \param y_data pointer to Y component plane, packed one byte/pixel | |
552 * \param u_data pointer to U component plane, packed one byte per every | |
553 * other pixel | |
554 * \param v_data pointer to V component plane, packed one byte per every | |
555 * other pixel | |
556 * \param bufr pointer to the buffer where the mjpeg encoded code is stored | |
557 * | |
558 * \returns the number of bytes stored into \a bufr | |
559 * | |
560 * If \a j->s->mjpeg_write_tables is set, it will also emit the mjpeg tables, | |
561 * otherwise it will just emit the data. The \a j->s->mjpeg_write_tables | |
562 * variable will be reset to 0 by the routine. | |
563 */ | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
564 static int jpeg_enc_frame(jpeg_enc_t *j, uint8_t *y_data, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
565 uint8_t *u_data, uint8_t *v_data, uint8_t *bufr) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
566 int mb_x, mb_y, overflow; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
567 /* initialize the buffer */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
568 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
569 init_put_bits(&j->s->pb, bufr, 1024*256); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
570 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
571 // Emit the mjpeg header blocks |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
572 ff_mjpeg_encode_picture_header(j->s); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
573 |
11926 | 574 j->s->header_bits = put_bits_count(&j->s->pb); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
575 |
19951 | 576 j->s->last_dc[0] = 128; |
577 j->s->last_dc[1] = 128; | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
578 j->s->last_dc[2] = 128; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
579 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
580 for (mb_y = 0; mb_y < j->s->mb_height; mb_y++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
581 for (mb_x = 0; mb_x < j->s->mb_width; mb_x++) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
582 /* |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
583 * Fill one DCT block (8x8 pixels) from |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
584 * 2 Y macroblocks and one U and one V |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
585 */ |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
586 fill_block(j, mb_x, mb_y, y_data, u_data, v_data); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
587 emms_c(); /* is this really needed? */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
588 |
19951 | 589 j->s->block_last_index[0] = |
590 j->s->dct_quantize(j->s, j->s->block[0], | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
591 0, 8, &overflow); |
19951 | 592 if (overflow) clip_coeffs(j->s, j->s->block[0], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
593 j->s->block_last_index[0]); |
19951 | 594 j->s->block_last_index[1] = |
595 j->s->dct_quantize(j->s, j->s->block[1], | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
596 1, 8, &overflow); |
19951 | 597 if (overflow) clip_coeffs(j->s, j->s->block[1], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
598 j->s->block_last_index[1]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
599 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
600 if (!j->bw) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
601 j->s->block_last_index[4] = |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
602 j->s->dct_quantize(j->s, j->s->block[2], |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
603 4, 8, &overflow); |
19951 | 604 if (overflow) clip_coeffs(j->s, j->s->block[2], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
605 j->s->block_last_index[2]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
606 j->s->block_last_index[5] = |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
607 j->s->dct_quantize(j->s, j->s->block[3], |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
608 5, 8, &overflow); |
19951 | 609 if (overflow) clip_coeffs(j->s, j->s->block[3], |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
610 j->s->block_last_index[3]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
611 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
612 zr_mjpeg_encode_mb(j); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
613 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
614 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
615 emms_c(); |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
616 ff_mjpeg_encode_picture_trailer(j->s); |
19951 | 617 flush_put_bits(&j->s->pb); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
618 |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
619 //FIXME |
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
620 //if (j->s->mjpeg_write_tables == 1) |
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
621 // j->s->mjpeg_write_tables = 0; |
19951 | 622 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
623 return pbBufPtr(&(j->s->pb)) - j->s->pb.buf; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
624 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
625 |
19951 | 626 /// the real uninit routine |
627 /** | |
628 * This is the real routine that does the uninit of the ZRMJPEG filter | |
629 * | |
630 * \param j pointer to jpeg_enc structure | |
631 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
632 static void jpeg_enc_uninit(jpeg_enc_t *j) { |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
633 ff_mjpeg_encode_close(j->s); |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
634 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
635 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
636 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
637 |
19951 | 638 /// Private structure for ZRMJPEG filter |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
639 struct vf_priv_s { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
640 jpeg_enc_t *j; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
641 unsigned char buf[256*1024]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
642 int bw, fd, hdec, vdec; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
643 int fields; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
644 int y_stride; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
645 int c_stride; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
646 int quality; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
647 int maxwidth; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
648 int maxheight; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
649 }; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
650 |
19951 | 651 /// vf CONFIGURE entry point for the ZRMJPEG filter |
652 /** | |
653 * \param vf video filter instance pointer | |
654 * \param width image source width in pixels | |
655 * \param height image source height in pixels | |
656 * \param d_width width of requested window, just a hint | |
657 * \param d_height height of requested window, just a hint | |
658 * \param flags vf filter flags | |
659 * \param outfmt | |
660 * | |
661 * \returns returns 0 on error | |
662 * | |
663 * This routine will make the necessary hardware-related decisions for | |
664 * the ZRMJPEG filter, do the initialization of the MJPEG encoder, and | |
665 * then select one of the ZRJMJPEGIT or ZRMJPEGNI filters and then | |
666 * arrange to dispatch to the config() entry pointer for the one | |
667 * selected. | |
668 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
669 static int config(struct vf_instance_s* vf, int width, int height, int d_width, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
670 int d_height, unsigned int flags, unsigned int outfmt){ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
671 struct vf_priv_s *priv = vf->priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
672 float aspect_decision; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
673 int stretchx, stretchy, err = 0, maxstretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
674 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
675 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
676 VERBOSE("config() called\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
677 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
678 if (priv->j) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
679 VERBOSE("re-configuring, resetting JPEG encoder\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
680 jpeg_enc_uninit(priv->j); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
681 priv->j = NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
682 } |
19951 | 683 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
684 aspect_decision = ((float)d_width/(float)d_height)/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
685 ((float)width/(float)height); |
19951 | 686 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
687 if (aspect_decision > 1.8 && aspect_decision < 2.2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
688 VERBOSE("should correct aspect by stretching x times 2, %d %d\n", 2*width, priv->maxwidth); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
689 if (2*width <= priv->maxwidth) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
690 d_width = 2*width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
691 d_height = height; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
692 maxstretchx = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
693 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
694 WARNING("unable to correct aspect by stretching, because resulting X will be too large, aspect correction by decimating y not yet implemented\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
695 d_width = width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
696 d_height = height; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
697 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
698 /* prestretch movie */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
699 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
700 /* uncorrecting output for now */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
701 d_width = width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
702 d_height = height; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
703 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
704 /* make the scaling decision |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
705 * we are capable of stretching the image in the horizontal |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
706 * direction by factors 1, 2 and 4 |
19951 | 707 * we can stretch the image in the vertical direction by a |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
708 * factor of 1 and 2 AND we must decide about interlacing */ |
19951 | 709 if (d_width > priv->maxwidth/2 || height > priv->maxheight/2 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
710 || maxstretchx == 1) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
711 stretchx = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
712 stretchy = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
713 priv->fields = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
714 if (priv->vdec == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
715 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
716 } else if (priv->vdec == 4) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
717 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
718 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
719 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
720 if (priv->hdec > maxstretchx) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
721 if (priv->fd) { |
19951 | 722 WARNING("horizontal decimation too high, " |
723 "changing to %d (use fd to keep" | |
724 " hdec=%d)\n", | |
725 maxstretchx, priv->hdec); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
726 priv->hdec = maxstretchx; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
727 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
728 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
729 stretchx = priv->hdec; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
730 } else if (d_width > priv->maxwidth/4 || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
731 height > priv->maxheight/4 || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
732 maxstretchx == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
733 stretchx = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
734 stretchy = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
735 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
736 if (priv->vdec == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
737 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
738 } else if (priv->vdec == 4) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
739 if (!priv->fd) { |
19951 | 740 WARNING("vertical decimation too high, " |
741 "changing to 2 (use fd to keep " | |
742 "vdec=4)\n"); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
743 priv->vdec = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
744 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
745 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
746 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
747 if (priv->hdec == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
748 stretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
749 } else if (priv->hdec == 4) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
750 if (priv->fd) { |
19951 | 751 WARNING("horizontal decimation too high, " |
752 "changing to 2 (use fd to keep " | |
753 "hdec=4)\n"); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
754 priv->hdec = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
755 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
756 stretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
757 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
758 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
759 /* output image is maximally stretched */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
760 stretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
761 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
762 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
763 if (priv->vdec != 1 && !priv->fd) { |
19951 | 764 WARNING("vertical decimation too high, changing to 1 " |
765 "(use fd to keep vdec=%d)\n", | |
766 priv->vdec); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
767 priv->vdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
768 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
769 if (priv->hdec != 1 && !priv->fd) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
770 WARNING("horizontal decimation too high, changing to 1 (use fd to keep hdec=%d)\n", priv->hdec); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
771 priv->hdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
772 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
773 } |
19951 | 774 |
775 VERBOSE("generated JPEG's %dx%s%d%s, stretched to %dx%d\n", | |
776 width/priv->hdec, (priv->fields == 2) ? "(" : "", | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
777 height/(priv->vdec*priv->fields), |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
778 (priv->fields == 2) ? "x2)" : "", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
779 (width/priv->hdec)*stretchx, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
780 (height/(priv->vdec*priv->fields))* |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
781 stretchy*priv->fields); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
782 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
783 |
19951 | 784 if ((width/priv->hdec)*stretchx > priv->maxwidth || |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
785 (height/(priv->vdec*priv->fields))* |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
786 stretchy*priv->fields > priv->maxheight) { |
19951 | 787 ERROR("output dimensions too large (%dx%d), max (%dx%d) " |
788 "insert crop to fix\n", | |
789 (width/priv->hdec)*stretchx, | |
790 (height/(priv->vdec*priv->fields))* | |
791 stretchy*priv->fields, | |
792 priv->maxwidth, priv->maxheight); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
793 err = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
794 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
795 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
796 if (width%(16*priv->hdec) != 0) { |
19951 | 797 ERROR("width must be a multiple of 16*hdec (%d), use expand\n", |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
798 priv->hdec*16); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
799 err = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
800 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
801 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
802 if (height%(8*priv->fields*priv->vdec) != 0) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
803 ERROR("height must be a multiple of 8*fields*vdec (%d)," |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
804 " use expand\n", priv->vdec*priv->fields*8); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
805 err = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
806 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
807 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
808 if (err) return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
809 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
810 priv->y_stride = width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
811 priv->c_stride = width/2; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
812 priv->j = jpeg_enc_init(width, height/priv->fields, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
813 priv->fields*priv->y_stride, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
814 priv->fields*priv->c_stride, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
815 priv->fields*priv->c_stride, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
816 1, priv->quality, priv->bw); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
817 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
818 if (!priv->j) return 0; |
19951 | 819 return vf_next_config(vf, width, height, d_width, d_height, flags, |
820 (priv->fields == 2) ? IMGFMT_ZRMJPEGIT : IMGFMT_ZRMJPEGNI); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
821 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
822 |
19951 | 823 /// put_image entrypoint for the ZRMJPEG vf filter |
824 /*** | |
825 * \param vf pointer to vf_instance | |
826 * \param mpi pointer to mp_image_t structure | |
827 * \param pts | |
828 */ | |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17012
diff
changeset
|
829 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
830 struct vf_priv_s *priv = vf->priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
831 int size = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
832 int i; |
19951 | 833 mp_image_t* dmpi; |
834 for (i = 0; i < priv->fields; i++) | |
835 size += jpeg_enc_frame(priv->j, | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
836 mpi->planes[0] + i*priv->y_stride, |
19951 | 837 mpi->planes[1] + i*priv->c_stride, |
838 mpi->planes[2] + i*priv->c_stride, | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
839 priv->buf + size); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
840 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
841 dmpi = vf_get_image(vf->next, IMGFMT_ZRMJPEGNI, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
842 MP_IMGTYPE_EXPORT, 0, mpi->w, mpi->h); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
843 dmpi->planes[0] = (uint8_t*)priv->buf; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
844 dmpi->planes[1] = (uint8_t*)size; |
19951 | 845 return vf_next_put_image(vf,dmpi, pts); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
846 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
847 |
19951 | 848 /// query_format entrypoint for the ZRMJPEG vf filter |
849 /*** | |
850 * \param vf pointer to vf_instance | |
851 * \param fmt image format to query for | |
852 * | |
853 * \returns 0 if image format in fmt is not supported | |
854 * | |
855 * Given the image format specified by \a fmt, this routine is called | |
856 * to ask if the format is supported or not. | |
857 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
858 static int query_format(struct vf_instance_s* vf, unsigned int fmt){ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
859 VERBOSE("query_format() called\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
860 |
19951 | 861 switch (fmt) { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
862 case IMGFMT_YV12: |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
863 case IMGFMT_YUY2: |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
864 /* strictly speaking the output format of |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
865 * this filter will be known after config(), |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
866 * but everything that supports IMGFMT_ZRMJPEGNI |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
867 * should also support all other IMGFMT_ZRMJPEG* */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
868 return vf_next_query_format(vf, IMGFMT_ZRMJPEGNI); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
869 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
870 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
871 return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
872 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
873 |
19951 | 874 /// vf UNINIT entry point for the ZRMJPEG filter |
875 /** | |
876 * \param vf pointer to the vf instance structure | |
877 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
878 static void uninit(vf_instance_t *vf) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
879 struct vf_priv_s *priv = vf->priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
880 VERBOSE("uninit() called\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
881 if (priv->j) jpeg_enc_uninit(priv->j); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
882 free(priv); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
883 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
884 |
19951 | 885 /// vf OPEN entry point for the ZRMJPEG filter |
886 /** | |
887 * \param vf pointer to the vf instance structure | |
888 * \param args the argument list string for the -vf zrmjpeg command | |
889 * | |
890 * \returns 0 for error, 1 for success | |
891 * | |
892 * This routine will do some basic initialization of local structures etc., | |
893 * and then parse the command line arguments specific for the ZRMJPEG filter. | |
894 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
895 static int open(vf_instance_t *vf, char* args){ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
896 struct vf_priv_s *priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
897 VERBOSE("open() called: args=\"%s\"\n", args); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
898 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
899 vf->config = config; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
900 vf->put_image = put_image; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
901 vf->query_format = query_format; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
902 vf->uninit = uninit; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
903 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
904 priv = vf->priv = calloc(sizeof(*priv), 1); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
905 if (!vf->priv) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
906 ERROR("out of memory error\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
907 return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
908 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
909 |
19951 | 910 /* maximum displayable size by zoran card, these defaults |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
911 * are for my own zoran card in PAL mode, these can be changed |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
912 * by filter options. But... in an ideal world these values would |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
913 * be queried from the vo device itself... */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
914 priv->maxwidth = 768; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
915 priv->maxheight = 576; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
916 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
917 priv->quality = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
918 priv->hdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
919 priv->vdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
920 |
19951 | 921 /* if libavcodec is already initialized, we must not initialize it |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
922 * again, but if it is not initialized then we mustinitialize it now. */ |
25962 | 923 if (!avcodec_initialized) { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
924 /* we need to initialize libavcodec */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
925 avcodec_init(); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
926 avcodec_register_all(); |
25962 | 927 avcodec_initialized=1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
928 } |
19951 | 929 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
930 if (args) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
931 char *arg, *tmp, *ptr, junk; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
932 int last = 0, input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
933 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
934 /* save arguments, to be able to safely modify them */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
935 arg = strdup(args); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
936 if (!arg) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
937 ERROR("out of memory, this is bad\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
938 return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
939 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
940 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
941 tmp = ptr = arg; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
942 do { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
943 while (*tmp != ':' && *tmp) tmp++; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
944 if (*tmp == ':') *tmp++ = '\0'; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
945 else last = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
946 VERBOSE("processing filter option \"%s\"\n", ptr); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
947 /* These options deal with the maximum output |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
948 * resolution of the zoran card. These should |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
949 * be queried from the vo device, but it is currently |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
950 * too difficult, so the user should tell the filter */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
951 if (!strncmp("maxheight=", ptr, 10)) { |
19951 | 952 if (sscanf(ptr+10, "%d%c", &input, &junk) != 1) |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
953 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
954 "error parsing parameter to \"maxheight=\", \"%s\", ignoring\n" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
955 , ptr + 10); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
956 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
957 priv->maxheight = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
958 VERBOSE("setting maxheight to %d\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
959 priv->maxheight); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
960 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
961 } else if (!strncmp("quality=", ptr, 8)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
962 if (sscanf(ptr+8, "%d%c", &input, &junk) != 1) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
963 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
964 "error parsing parameter to \"quality=\", \"%s\", ignoring\n" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
965 , ptr + 8); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
966 else if (input < 1 || input > 20) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
967 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
968 "parameter to \"quality=\" out of range (1..20), %d\n", input); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
969 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
970 priv->quality = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
971 VERBOSE("setting JPEG quality to %d\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
972 priv->quality); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
973 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
974 } else if (!strncmp("maxwidth=", ptr, 9)) { |
19951 | 975 if (sscanf(ptr+9, "%d%c", &input, &junk) != 1) |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
976 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
977 "error parsing parameter to \"maxwidth=\", \"%s\", ignoring\n" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
978 , ptr + 9); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
979 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
980 priv->maxwidth = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
981 VERBOSE("setting maxwidth to %d\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
982 priv->maxwidth); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
983 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
984 } else if (!strncmp("hdec=", ptr, 5)) { |
19951 | 985 if (sscanf(ptr+5, "%d%c", &input, &junk) != 1) |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
986 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
987 "error parsing parameter to \"hdec=\", \"%s\", ignoring\n" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
988 , ptr + 9); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
989 else if (input != 1 && input != 2 && input != 4) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
990 ERROR( |
19951 | 991 "illegal parameter to \"hdec=\", %d, should be 1, 2 or 4", |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
992 input); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
993 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
994 priv->hdec = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
995 VERBOSE( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
996 "setting horizontal decimation to %d\n", priv->maxwidth); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
997 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
998 } else if (!strncmp("vdec=", ptr, 5)) { |
19951 | 999 if (sscanf(ptr+5, "%d%c", &input, &junk) != 1) |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1000 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1001 "error parsing parameter to \"vdec=\", \"%s\", ignoring\n" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1002 , ptr + 9); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1003 else if (input != 1 && input != 2 && input != 4) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1004 ERROR( |
19951 | 1005 "illegal parameter to \"vdec=\", %d, should be 1, 2 or 4", |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1006 input); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1007 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1008 priv->vdec = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1009 VERBOSE( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1010 "setting vertical decimation to %d\n", priv->maxwidth); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1011 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1012 } else if (!strcasecmp("dc10+-PAL", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1013 !strcasecmp("dc10-PAL", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1014 priv->maxwidth = 768; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1015 priv->maxheight = 576; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1016 VERBOSE("setting DC10(+) PAL profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1017 } else if (!strcasecmp("fd", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1018 priv->fd = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1019 VERBOSE("forcing decimation\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1020 } else if (!strcasecmp("nofd", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1021 priv->fd = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1022 VERBOSE("decimate only if beautiful\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1023 } else if (!strcasecmp("bw", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1024 priv->bw = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1025 VERBOSE("setting black and white encoding\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1026 } else if (!strcasecmp("color", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1027 priv->bw = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1028 VERBOSE("setting color encoding\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1029 } else if (!strcasecmp("dc10+-NTSC", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1030 !strcasecmp("dc10-NTSC", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1031 priv->maxwidth = 640; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1032 priv->maxheight = 480; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1033 VERBOSE("setting DC10(+) NTSC profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1034 } else if (!strcasecmp("buz-PAL", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1035 !strcasecmp("lml33-PAL", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1036 priv->maxwidth = 720; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1037 priv->maxheight = 576; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1038 VERBOSE("setting buz/lml33 PAL profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1039 } else if (!strcasecmp("buz-NTSC", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1040 !strcasecmp("lml33-NTSC", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1041 priv->maxwidth = 720; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1042 priv->maxheight = 480; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1043 VERBOSE("setting buz/lml33 NTSC profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1044 } else { |
19951 | 1045 WARNING("ignoring unknown filter option " |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1046 "\"%s\", or missing argument\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1047 ptr); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1048 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1049 ptr = tmp; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1050 } while (!last); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1051 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1052 free(arg); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1053 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1054 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1055 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1056 return 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1057 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1058 |
25221 | 1059 const vf_info_t vf_info_zrmjpeg = { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1060 "realtime zoran MJPEG encoding", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1061 "zrmjpeg", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1062 "Rik Snel", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1063 "", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1064 open, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1065 NULL |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1066 }; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1067 |