Mercurial > mplayer.hg
annotate libmpcodecs/vf_zrmjpeg.c @ 33243:c33f32258d33
Improve cache size spin button.
Set the value shown (start value) to the current cache size, set page
increment to 32 (kBytes) and set page size (which is irrelevant) to zero.
author | ib |
---|---|
date | Mon, 25 Apr 2011 12:38:55 +0000 |
parents | e613306a8556 |
children | 22855f9368b4 |
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" |
32092
e613306a8556
Add missing #include for vd_ffmpeg.h; fixes the warning:
diego
parents:
31959
diff
changeset
|
46 #include "vd_ffmpeg.h" |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
47 #include "vf.h" |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
48 |
19951 | 49 /* 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
|
50 * 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
|
51 #define HAVE_AV_CONFIG_H |
17012 | 52 #include "libavcodec/avcodec.h" |
27735
3c4576565183
#include necessary libavcodec header and remove duplicated struct declaration.
diego
parents:
27733
diff
changeset
|
53 #include "libavcodec/mjpegenc.h" |
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 /// 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
|
68 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
|
69 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
70 /* Begin excessive code duplication ************************************/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
71 /* 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
|
72 |
19951 | 73 /// 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
|
74 static const unsigned short aanscales[64] = { |
19951 | 75 /**< 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
|
76 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
|
77 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
|
78 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
|
79 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
|
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 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
|
82 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
|
83 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
|
84 }; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
85 |
19951 | 86 /// Precompute DCT quantizing matrix |
87 /** | |
88 * This routine will precompute the combined DCT matrix with qscale | |
89 * and DCT renorm needed by the MPEG encoder here. It is basically the | |
90 * same as the routine with the same name in mpegvideo.c, except for | |
91 * some coefficient changes. The matrix will be computed in two variations, | |
92 * depending on the DCT version used. The second used by the MMX version of DCT. | |
93 * | |
94 * \param s MpegEncContext pointer | |
95 * \param qmat[OUT] pointer to where the matrix is stored | |
96 * \param qmat16[OUT] pointer to where matrix for MMX is stored. | |
97 * This matrix is not permutated | |
98 * and second 64 entries are bias | |
99 * \param quant_matrix[IN] the quantizion matrix to use | |
100 * \param bias bias for the quantizer | |
101 * \param qmin minimum qscale value to set up for | |
102 * \param qmax maximum qscale value to set up for | |
103 * | |
104 * Only rows between qmin and qmax will be populated in the matrix. | |
105 * 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
|
106 */ |
19951 | 107 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
|
108 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
|
109 int bias, int qmin, int qmax) { |
19951 | 110 int qscale; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
111 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
112 for(qscale = qmin; qscale <= qmax; qscale++) { |
19951 | 113 int i; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
114 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
|
115 for (i = 0; i < 64; i++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
116 const int j = s->dsp.idct_permutation[i]; |
19951 | 117 /* 16 <= qscale * quant_matrix[i] <= 7905 |
118 * 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 | |
119 * (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
|
120 * >= (1<<36)/249205026 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
121 * 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ |
19951 | 122 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
|
123 (QMAT_SHIFT-3))/ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
124 (qscale*quant_matrix[j])); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
125 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
126 } else if (s->dsp.fdct == fdct_ifast) { |
19951 | 127 for (i = 0; i < 64; i++) { |
128 const int j = s->dsp.idct_permutation[i]; | |
129 /* 16 <= qscale * quant_matrix[i] <= 7905 | |
130 * 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 | |
131 * (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
|
132 * >= (1<<36)/249205026 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
133 * 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ |
19951 | 134 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
|
135 (QMAT_SHIFT + 11))/(aanscales[i] |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
136 *qscale * quant_matrix[j])); |
19951 | 137 } |
138 } else { | |
139 for (i = 0; i < 64; i++) { | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
140 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
|
141 /* 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
|
142 * So 16 <= qscale * quant_matrix[i] <= 7905 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
143 * 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
|
144 * 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
|
145 qmat[qscale][i] = (int)((UINT64_C(1) << |
19951 | 146 QMAT_SHIFT_MMX) / (qscale |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
147 *quant_matrix[j])); |
19951 | 148 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
|
149 /(qscale * quant_matrix[j]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
150 |
19951 | 151 if (qmat16[qscale][0][i] == 0 || |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
152 qmat16[qscale][0][i] == 128*256) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
153 qmat16[qscale][0][i]=128*256-1; |
19951 | 154 qmat16[qscale][1][i]=ROUNDED_DIV(bias |
155 <<(16-QUANT_BIAS_SHIFT), | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
156 qmat16[qscale][0][i]); |
19951 | 157 } |
158 } | |
159 } | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
160 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
161 |
19951 | 162 /// Emit the DC value into a MJPEG code sream |
163 /** | |
164 * This routine is only intended to be used from encode_block | |
165 * | |
166 * \param s pointer to MpegEncContext structure | |
167 * \param val the DC value to emit | |
168 * \param huff_size pointer to huffman code size array | |
169 * \param huff_code pointer to the code array corresponding to \a huff_size | |
170 * | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
171 * This routine is a clone of mjpeg_encode_dc |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
172 */ |
19951 | 173 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
|
174 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
|
175 int mant, nbits; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
176 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
177 if (val == 0) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
178 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
|
179 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
180 mant = val; |
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 val = -val; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
183 mant--; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
184 } |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
185 nbits= av_log2_16bit(val) + 1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
186 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
|
187 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
|
188 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
189 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
190 |
19951 | 191 /// Huffman encode and emit one DCT block into the MJPEG code stream |
192 /** | |
193 * \param s pointer to MpegEncContext structure | |
194 * \param block pointer to the DCT block to emit | |
195 * \param n | |
196 * | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
197 * 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
|
198 */ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
199 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
|
200 int mant, nbits, code, i, j; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
201 int component, dc, run, last_index, val; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
202 MJpegContext *m = s->mjpeg_ctx; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
203 uint8_t *huff_size_ac; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
204 uint16_t *huff_code_ac; |
19951 | 205 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
206 /* DC coef */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
207 component = (n <= 3 ? 0 : n - 4 + 1); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
208 dc = block[0]; /* overflow is impossible */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
209 val = dc - s->last_dc[component]; |
19951 | 210 if (n < 4) { |
211 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
|
212 m->huff_code_dc_luminance); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
213 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
|
214 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
|
215 } else { |
19951 | 216 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
|
217 m->huff_code_dc_chrominance); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
218 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
|
219 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
|
220 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
221 s->last_dc[component] = dc; |
19951 | 222 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
223 /* AC coefs */ |
19951 | 224 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
225 run = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
226 last_index = s->block_last_index[n]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
227 for (i = 1; i <= last_index; i++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
228 j = s->intra_scantable.permutated[i]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
229 val = block[j]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
230 if (val == 0) run++; |
19951 | 231 else { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
232 while (run >= 16) { |
19951 | 233 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
|
234 huff_code_ac[0xf0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
235 run -= 16; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
236 } |
19951 | 237 mant = val; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
238 if (val < 0) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
239 val = -val; |
19951 | 240 mant--; |
241 } | |
242 | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
243 nbits= av_log2_16bit(val) + 1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
244 code = (run << 4) | nbits; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
245 |
19951 | 246 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
|
247 huff_code_ac[code]); |
19951 | 248 put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1)); |
249 run = 0; | |
250 } | |
251 } | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
252 |
19951 | 253 /* 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
|
254 if (last_index < 63 || run != 0) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
255 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
|
256 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
257 |
19951 | 258 /// clip overflowing DCT coefficients |
259 /** | |
260 * If the computed DCT coefficients in a block overflow, this routine | |
261 * will go through them and clip them to be in the valid range. | |
262 * | |
263 * \param s pointer to MpegEncContext | |
264 * \param block pointer to DCT block to process | |
265 * \param last_index index of the last non-zero coefficient in block | |
266 * | |
267 * The max and min level, which are clipped to, are stored in | |
268 * s->min_qcoeff and s->max_qcoeff respectively. | |
269 */ | |
270 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
|
271 int last_index) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
272 int i; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
273 const int maxlevel= s->max_qcoeff; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
274 const int minlevel= s->min_qcoeff; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
275 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
276 for (i = 0; i <= last_index; i++) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
277 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
|
278 int level = block[j]; |
19951 | 279 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
280 if (level > maxlevel) level=maxlevel; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
281 else if(level < minlevel) level=minlevel; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
282 block[j]= level; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
283 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
284 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
285 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
286 /* End excessive code duplication **************************************/ |
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 typedef struct { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
289 struct MpegEncContext *s; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
290 int cheap_upsample; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
291 int bw; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
292 int y_rs; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
293 int u_rs; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
294 int v_rs; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
295 } jpeg_enc_t; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
296 |
19951 | 297 // Huffman encode and emit one MCU of MJPEG code |
298 /** | |
299 * \param j pointer to jpeg_enc_t structure | |
300 * | |
301 * This function huffman encodes one MCU, and emits the | |
302 * resulting bitstream into the MJPEG code that is currently worked on. | |
303 * | |
304 * 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
|
305 * 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
|
306 * macroblocks and it outputs the huffman code for 'no change' (dc) and |
19951 | 307 * 'all zero' (ac)) and it takes 4 macroblocks (422) instead of 6 (420) |
308 */ | |
21730 | 309 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
|
310 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
311 MJpegContext *m = j->s->mjpeg_ctx; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
312 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
313 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
|
314 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
|
315 if (j->bw) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
316 /* U */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
317 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
|
318 m->huff_code_dc_chrominance[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
319 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
|
320 m->huff_code_ac_chrominance[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
321 /* V */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
322 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
|
323 m->huff_code_dc_chrominance[0]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
324 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
|
325 m->huff_code_ac_chrominance[0]); |
19951 | 326 } else { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
327 /* we trick encode_block here so that it uses |
19951 | 328 * 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
|
329 * (see the effect of second argument of encode_block) */ |
19951 | 330 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
|
331 encode_block(j->s, j->s->block[3], 5); |
19951 | 332 } |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
333 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
334 |
19951 | 335 /// Fill one DCT MCU from planar storage |
336 /** | |
337 * This routine will convert one MCU from YUYV planar storage into 4 | |
338 * DCT macro blocks, converting from 8-bit format in the planar | |
339 * storage to 16-bit format used in the DCT. | |
340 * | |
341 * \param j pointer to jpeg_enc structure, and also storage for DCT macro blocks | |
342 * \param x pixel x-coordinate for the first pixel | |
343 * \param y pixel y-coordinate for the first pixel | |
344 * \param y_data pointer to the Y plane | |
345 * \param u_data pointer to the U plane | |
346 * \param v_data pointer to the V plane | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
347 */ |
21730 | 348 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
|
349 unsigned char *y_data, unsigned char *u_data, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
350 unsigned char *v_data) |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
351 { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
352 int i, k; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
353 short int *dest; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
354 unsigned char *source; |
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 // The first Y, Y0 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
357 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
|
358 // The second Y, Y1 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
359 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
|
360 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
361 if (!j->bw && j->cheap_upsample) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
362 source = y * 4 * j->u_rs + 8*x + u_data; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
363 dest = j->s->block[2]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
364 for (i = 0; i < 4; i++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
365 for (k = 0; k < 8; k++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
366 dest[k] = source[k]; // First row |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
367 dest[k+8] = source[k]; // Duplicate to next row |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
368 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
369 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
370 dest += 16; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
371 source += j->u_rs; |
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 source = y * 4 * j->v_rs + 8*x + v_data; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
374 dest = j->s->block[3]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
375 for (i = 0; i < 4; i++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
376 for (k = 0; k < 8; k++) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
377 dest[k] = source[k]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
378 dest[k+8] = source[k]; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
379 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
380 dest += 16; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
381 source += j->u_rs; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
382 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
383 } else if (!j->bw && !j->cheap_upsample) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
384 // U |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
385 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
|
386 // V |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
387 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
|
388 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
389 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
390 |
19951 | 391 /** |
392 * \brief initialize mjpeg encoder | |
393 * | |
394 * This routine is to set up the parameters and initialize the mjpeg encoder. | |
395 * It does all the initializations needed of lower level routines. | |
396 * 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
|
397 * |
19951 | 398 * \param w width in pixels of the image to encode, must be a multiple of 16 |
399 * \param h height in pixels of the image to encode, must be a multiple of 8 | |
400 * \param y_rsize size of each plane row Y component | |
401 * \param y_rsize size of each plane row U component | |
402 * \param v_rsize size of each plane row V component | |
403 * \param cu "cheap upsample". Set to 0 for YUV422 format, 1 for YUV420 format | |
404 * when set to 1, the encoder will assume that there is only half th | |
405 * number of rows of chroma information, and every chroma row is | |
406 * duplicated. | |
407 * \param q quality parameter for the mjpeg encode. Between 1 and 20 where 1 | |
408 * is best quality and 20 is the worst quality. | |
409 * \param b monochrome flag. When set to 1, the mjpeg output is monochrome. | |
410 * In that case, the colour information is omitted, and actually the | |
411 * colour planes are not touched. | |
412 * | |
413 * \returns an appropriately set up jpeg_enc_t structure | |
414 * | |
415 * The actual plane buffer addreses are passed by jpeg_enc_frame(). | |
416 * | |
417 * 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
|
418 * needs to be passed and the double rowstride. Which field gets encoded |
19951 | 419 * is decided by what buffers are passed to mjpeg_encode_frame() |
420 */ | |
421 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
|
422 int u_rsize, int v_rsize, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
423 int cu, int q, int b) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
424 jpeg_enc_t *j; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
425 int i = 0; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
426 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
|
427 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
|
428 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
429 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
|
430 if (j == NULL) return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
431 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
432 j->s = av_mallocz(sizeof(MpegEncContext)); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
433 if (j->s == NULL) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
434 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
435 return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
436 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
437 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
438 /* info on how to access the pixels */ |
19951 | 439 j->y_rs = y_rsize; |
440 j->u_rs = u_rsize; | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
441 j->v_rs = v_rsize; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
442 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
443 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
|
444 j->s->height = h; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
445 j->s->qscale = q; // Encoding quality |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
446 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
447 j->s->out_format = FMT_MJPEG; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
448 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
|
449 j->s->encoding = 1; // Set mode to encode |
26291 | 450 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
|
451 j->s->y_dc_scale = 8; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
452 j->s->c_dc_scale = 8; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
453 |
19951 | 454 /* |
455 * This sets up the MCU (Minimal Code Unit) number | |
456 * of appearances of the various component | |
457 * for the SOF0 table in the generated MJPEG. | |
458 * The values are not used for anything else. | |
459 * The current setup is simply YUV422, with two horizontal Y components | |
460 * for every UV component. | |
461 */ | |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
462 //FIXME j->s->mjpeg_write_tables = 1; // setup to write tables |
19951 | 463 j->s->mjpeg_vsample[0] = 1; // 1 appearance of Y vertically |
464 j->s->mjpeg_vsample[1] = 1; // 1 appearance of U vertically | |
465 j->s->mjpeg_vsample[2] = 1; // 1 appearance of V vertically | |
466 j->s->mjpeg_hsample[0] = 2; // 2 appearances of Y horizontally | |
467 j->s->mjpeg_hsample[1] = 1; // 1 appearance of U horizontally | |
468 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
|
469 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
470 j->cheap_upsample = cu; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
471 j->bw = b; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
472 |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
30642
diff
changeset
|
473 init_avcodec(); |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
474 |
19951 | 475 // 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
|
476 if (ff_mjpeg_encode_init(j->s) < 0) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
477 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
478 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
479 return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
480 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
481 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
482 /* 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
|
483 j->s->avctx = avcodec_alloc_context(); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
484 if (j->s->avctx == NULL) { |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
485 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
486 av_free(j); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
487 return NULL; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
488 } |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
489 |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
490 // Set some a minimum amount of default values that are needed |
19951 | 491 // Indicates that we should generated normal MJPEG |
19619
a83e5b8d2e63
Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
17906
diff
changeset
|
492 j->s->avctx->codec_id = CODEC_ID_MJPEG; |
19951 | 493 // 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
|
494 j->s->avctx->dct_algo = FF_DCT_AUTO; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
495 j->s->intra_quant_bias= 1<<(QUANT_BIAS_SHIFT-1); //(a + x/2)/x |
29244
70803f88fba8
MPV_common_init balks if s->avctx->pix_fmt == PIX_FMT_NONE, so we set it correctly
rik
parents:
29138
diff
changeset
|
496 // indicate we 'decode' to jpeg 4:2:2 |
70803f88fba8
MPV_common_init balks if s->avctx->pix_fmt == PIX_FMT_NONE, so we set it correctly
rik
parents:
29138
diff
changeset
|
497 j->s->avctx->pix_fmt = PIX_FMT_YUVJ422P; |
19951 | 498 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
499 j->s->avctx->thread_count = 1; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
500 |
19951 | 501 /* make MPV_common_init allocate important buffers, like s->block |
502 * Also initializes dsputil */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
503 if (MPV_common_init(j->s) < 0) { |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
504 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
505 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
506 return NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
507 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
508 |
19951 | 509 /* correct the value for sc->mb_height. MPV_common_init put other |
510 * values there */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
511 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
|
512 j->s->mb_intra = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
513 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
514 // Init q matrix |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
515 j->s->intra_matrix[0] = ff_mpeg1_default_intra_matrix[0]; |
19951 | 516 for (i = 1; i < 64; i++) |
22339 | 517 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
|
518 (ff_mpeg1_default_intra_matrix[i]*j->s->qscale) >> 3); |
19951 | 519 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
520 // precompute matrix |
19951 | 521 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
|
522 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
|
523 |
19951 | 524 /* Pick up the selection of the optimal get_pixels() routine |
525 * to use, which was done in MPV_common_init() */ | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
526 get_pixels = j->s->dsp.get_pixels; |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
527 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
528 return j; |
19951 | 529 } |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
530 |
19951 | 531 /** |
532 * \brief mjpeg encode an image | |
533 * | |
534 * This routine will take a 3-plane YUV422 image and encoded it with MJPEG | |
535 * base line format, as suitable as input for the Zoran hardare MJPEG chips. | |
536 * | |
537 * It requires that the \a j parameter points the structure set up by the | |
538 * jpeg_enc_init() routine. | |
539 * | |
540 * \param j pointer to jpeg_enc_t structure as created by jpeg_enc_init() | |
541 * \param y_data pointer to Y component plane, packed one byte/pixel | |
542 * \param u_data pointer to U component plane, packed one byte per every | |
543 * other pixel | |
544 * \param v_data pointer to V component plane, packed one byte per every | |
545 * other pixel | |
546 * \param bufr pointer to the buffer where the mjpeg encoded code is stored | |
547 * | |
548 * \returns the number of bytes stored into \a bufr | |
549 * | |
550 * If \a j->s->mjpeg_write_tables is set, it will also emit the mjpeg tables, | |
551 * otherwise it will just emit the data. The \a j->s->mjpeg_write_tables | |
552 * variable will be reset to 0 by the routine. | |
553 */ | |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
554 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
|
555 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
|
556 int mb_x, mb_y, overflow; |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
557 /* initialize the buffer */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
558 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
559 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
|
560 |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
561 // Emit the mjpeg header blocks |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
562 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
|
563 |
11926 | 564 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
|
565 |
19951 | 566 j->s->last_dc[0] = 128; |
567 j->s->last_dc[1] = 128; | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
568 j->s->last_dc[2] = 128; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
569 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
570 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
|
571 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
|
572 /* |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
573 * Fill one DCT block (8x8 pixels) from |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
574 * 2 Y macroblocks and one U and one V |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
575 */ |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
576 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
|
577 emms_c(); /* is this really needed? */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
578 |
19951 | 579 j->s->block_last_index[0] = |
580 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
|
581 0, 8, &overflow); |
19951 | 582 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
|
583 j->s->block_last_index[0]); |
19951 | 584 j->s->block_last_index[1] = |
585 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
|
586 1, 8, &overflow); |
19951 | 587 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
|
588 j->s->block_last_index[1]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
589 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
590 if (!j->bw) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
591 j->s->block_last_index[4] = |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
592 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
|
593 4, 8, &overflow); |
19951 | 594 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
|
595 j->s->block_last_index[2]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
596 j->s->block_last_index[5] = |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
597 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
|
598 5, 8, &overflow); |
19951 | 599 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
|
600 j->s->block_last_index[3]); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
601 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
602 zr_mjpeg_encode_mb(j); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
603 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
604 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
605 emms_c(); |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
606 ff_mjpeg_encode_picture_trailer(j->s); |
19951 | 607 flush_put_bits(&j->s->pb); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
608 |
23369
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
609 //FIXME |
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
610 //if (j->s->mjpeg_write_tables == 1) |
700408f4cb51
compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents:
22339
diff
changeset
|
611 // j->s->mjpeg_write_tables = 0; |
19951 | 612 |
29138
8aeebf532e48
follow renaming of pbBufPtr() to put_bits_ptr() by stefano
rik
parents:
27735
diff
changeset
|
613 return put_bits_ptr(&(j->s->pb)) - j->s->pb.buf; |
11662
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 |
19951 | 616 /// the real uninit routine |
617 /** | |
618 * This is the real routine that does the uninit of the ZRMJPEG filter | |
619 * | |
620 * \param j pointer to jpeg_enc structure | |
621 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
622 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
|
623 ff_mjpeg_encode_close(j->s); |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
624 av_free(j->s); |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
625 av_free(j); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
626 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
627 |
19951 | 628 /// Private structure for ZRMJPEG filter |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
629 struct vf_priv_s { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
630 jpeg_enc_t *j; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
631 unsigned char buf[256*1024]; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
632 int bw, fd, hdec, vdec; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
633 int fields; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
634 int y_stride; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
635 int c_stride; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
636 int quality; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
637 int maxwidth; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
638 int maxheight; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
639 }; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
640 |
19951 | 641 /// vf CONFIGURE entry point for the ZRMJPEG filter |
642 /** | |
643 * \param vf video filter instance pointer | |
644 * \param width image source width in pixels | |
645 * \param height image source height in pixels | |
646 * \param d_width width of requested window, just a hint | |
647 * \param d_height height of requested window, just a hint | |
648 * \param flags vf filter flags | |
649 * \param outfmt | |
650 * | |
651 * \returns returns 0 on error | |
652 * | |
653 * This routine will make the necessary hardware-related decisions for | |
654 * the ZRMJPEG filter, do the initialization of the MJPEG encoder, and | |
655 * then select one of the ZRJMJPEGIT or ZRMJPEGNI filters and then | |
656 * arrange to dispatch to the config() entry pointer for the one | |
657 * selected. | |
658 */ | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
659 static int config(struct vf_instance *vf, int width, int height, int d_width, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
660 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
|
661 struct vf_priv_s *priv = vf->priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
662 float aspect_decision; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
663 int stretchx, stretchy, err = 0, maxstretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
664 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
665 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
666 VERBOSE("config() called\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
667 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
668 if (priv->j) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
669 VERBOSE("re-configuring, resetting JPEG encoder\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
670 jpeg_enc_uninit(priv->j); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
671 priv->j = NULL; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
672 } |
19951 | 673 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
674 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
|
675 ((float)width/(float)height); |
19951 | 676 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
677 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
|
678 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
|
679 if (2*width <= priv->maxwidth) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
680 d_width = 2*width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
681 d_height = height; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
682 maxstretchx = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
683 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
684 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
|
685 d_width = width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
686 d_height = height; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
687 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
688 /* prestretch movie */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
689 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
690 /* uncorrecting output for now */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
691 d_width = width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
692 d_height = height; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
693 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
694 /* make the scaling decision |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
695 * 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
|
696 * direction by factors 1, 2 and 4 |
19951 | 697 * 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
|
698 * factor of 1 and 2 AND we must decide about interlacing */ |
19951 | 699 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
|
700 || maxstretchx == 1) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
701 stretchx = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
702 stretchy = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
703 priv->fields = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
704 if (priv->vdec == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
705 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
706 } else if (priv->vdec == 4) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
707 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
708 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
709 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
710 if (priv->hdec > maxstretchx) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
711 if (priv->fd) { |
19951 | 712 WARNING("horizontal decimation too high, " |
713 "changing to %d (use fd to keep" | |
714 " hdec=%d)\n", | |
715 maxstretchx, priv->hdec); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
716 priv->hdec = maxstretchx; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
717 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
718 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
719 stretchx = priv->hdec; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
720 } else if (d_width > priv->maxwidth/4 || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
721 height > priv->maxheight/4 || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
722 maxstretchx == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
723 stretchx = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
724 stretchy = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
725 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
726 if (priv->vdec == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
727 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
728 } else if (priv->vdec == 4) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
729 if (!priv->fd) { |
19951 | 730 WARNING("vertical decimation too high, " |
731 "changing to 2 (use fd to keep " | |
732 "vdec=4)\n"); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
733 priv->vdec = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
734 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
735 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
736 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
737 if (priv->hdec == 2) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
738 stretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
739 } else if (priv->hdec == 4) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
740 if (priv->fd) { |
19951 | 741 WARNING("horizontal decimation too high, " |
742 "changing to 2 (use fd to keep " | |
743 "hdec=4)\n"); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
744 priv->hdec = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
745 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
746 stretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
747 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
748 } else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
749 /* output image is maximally stretched */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
750 stretchx = 4; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
751 stretchy = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
752 priv->fields = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
753 if (priv->vdec != 1 && !priv->fd) { |
19951 | 754 WARNING("vertical decimation too high, changing to 1 " |
755 "(use fd to keep vdec=%d)\n", | |
756 priv->vdec); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
757 priv->vdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
758 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
759 if (priv->hdec != 1 && !priv->fd) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
760 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
|
761 priv->hdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
762 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
763 } |
19951 | 764 |
765 VERBOSE("generated JPEG's %dx%s%d%s, stretched to %dx%d\n", | |
766 width/priv->hdec, (priv->fields == 2) ? "(" : "", | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
767 height/(priv->vdec*priv->fields), |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
768 (priv->fields == 2) ? "x2)" : "", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
769 (width/priv->hdec)*stretchx, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
770 (height/(priv->vdec*priv->fields))* |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
771 stretchy*priv->fields); |
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 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
|
775 (height/(priv->vdec*priv->fields))* |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
776 stretchy*priv->fields > priv->maxheight) { |
19951 | 777 ERROR("output dimensions too large (%dx%d), max (%dx%d) " |
778 "insert crop to fix\n", | |
779 (width/priv->hdec)*stretchx, | |
780 (height/(priv->vdec*priv->fields))* | |
781 stretchy*priv->fields, | |
782 priv->maxwidth, priv->maxheight); | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
783 err = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
784 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
785 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
786 if (width%(16*priv->hdec) != 0) { |
19951 | 787 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
|
788 priv->hdec*16); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
789 err = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
790 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
791 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
792 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
|
793 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
|
794 " 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
|
795 err = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
796 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
797 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
798 if (err) return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
799 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
800 priv->y_stride = width; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
801 priv->c_stride = width/2; |
19950
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
802 priv->j = jpeg_enc_init(width, height/priv->fields, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
803 priv->fields*priv->y_stride, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
804 priv->fields*priv->c_stride, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
805 priv->fields*priv->c_stride, |
e99cd69dd08e
Patch by Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
19619
diff
changeset
|
806 1, priv->quality, priv->bw); |
11662
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 (!priv->j) return 0; |
19951 | 809 return vf_next_config(vf, width, height, d_width, d_height, flags, |
810 (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
|
811 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
812 |
19951 | 813 /// put_image entrypoint for the ZRMJPEG vf filter |
814 /*** | |
815 * \param vf pointer to vf_instance | |
816 * \param mpi pointer to mp_image_t structure | |
817 * \param pts | |
818 */ | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
819 static int put_image(struct vf_instance *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
|
820 struct vf_priv_s *priv = vf->priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
821 int size = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
822 int i; |
19951 | 823 mp_image_t* dmpi; |
824 for (i = 0; i < priv->fields; i++) | |
825 size += jpeg_enc_frame(priv->j, | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
826 mpi->planes[0] + i*priv->y_stride, |
19951 | 827 mpi->planes[1] + i*priv->c_stride, |
828 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
|
829 priv->buf + size); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
830 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
831 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
|
832 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
|
833 dmpi->planes[0] = (uint8_t*)priv->buf; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
834 dmpi->planes[1] = (uint8_t*)size; |
19951 | 835 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
|
836 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
837 |
19951 | 838 /// query_format entrypoint for the ZRMJPEG vf filter |
839 /*** | |
840 * \param vf pointer to vf_instance | |
841 * \param fmt image format to query for | |
842 * | |
843 * \returns 0 if image format in fmt is not supported | |
844 * | |
845 * Given the image format specified by \a fmt, this routine is called | |
846 * to ask if the format is supported or not. | |
847 */ | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
848 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
849 VERBOSE("query_format() called\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
850 |
19951 | 851 switch (fmt) { |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
852 case IMGFMT_YV12: |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
853 case IMGFMT_YUY2: |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
854 /* strictly speaking the output format of |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
855 * this filter will be known after config(), |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
856 * but everything that supports IMGFMT_ZRMJPEGNI |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
857 * should also support all other IMGFMT_ZRMJPEG* */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
858 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
|
859 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
860 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
861 return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
862 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
863 |
19951 | 864 /// vf UNINIT entry point for the ZRMJPEG filter |
865 /** | |
866 * \param vf pointer to the vf instance structure | |
867 */ | |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
868 static void uninit(vf_instance_t *vf) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
869 struct vf_priv_s *priv = vf->priv; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
870 VERBOSE("uninit() called\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
871 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
|
872 free(priv); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
873 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
874 |
19951 | 875 /// vf OPEN entry point for the ZRMJPEG filter |
876 /** | |
877 * \param vf pointer to the vf instance structure | |
878 * \param args the argument list string for the -vf zrmjpeg command | |
879 * | |
880 * \returns 0 for error, 1 for success | |
881 * | |
882 * This routine will do some basic initialization of local structures etc., | |
883 * and then parse the command line arguments specific for the ZRMJPEG filter. | |
884 */ | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30633
diff
changeset
|
885 static int vf_open(vf_instance_t *vf, char *args){ |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
886 struct vf_priv_s *priv; |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30633
diff
changeset
|
887 VERBOSE("vf_open() called: args=\"%s\"\n", args); |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
888 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
889 vf->config = config; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
890 vf->put_image = put_image; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
891 vf->query_format = query_format; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
892 vf->uninit = uninit; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
893 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
894 priv = vf->priv = calloc(sizeof(*priv), 1); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
895 if (!vf->priv) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
896 ERROR("out of memory error\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
897 return 0; |
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 |
19951 | 900 /* 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
|
901 * 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
|
902 * 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
|
903 * be queried from the vo device itself... */ |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
904 priv->maxwidth = 768; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
905 priv->maxheight = 576; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
906 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
907 priv->quality = 2; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
908 priv->hdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
909 priv->vdec = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
910 |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
30642
diff
changeset
|
911 init_avcodec(); |
19951 | 912 |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
913 if (args) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
914 char *arg, *tmp, *ptr, junk; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
915 int last = 0, input; |
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 /* 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
|
918 arg = strdup(args); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
919 if (!arg) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
920 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
|
921 return 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
922 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
923 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
924 tmp = ptr = arg; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
925 do { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
926 while (*tmp != ':' && *tmp) tmp++; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
927 if (*tmp == ':') *tmp++ = '\0'; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
928 else last = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
929 VERBOSE("processing filter option \"%s\"\n", ptr); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
930 /* These options deal with the maximum output |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
931 * resolution of the zoran card. These should |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
932 * 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
|
933 * 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
|
934 if (!strncmp("maxheight=", ptr, 10)) { |
19951 | 935 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
|
936 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
937 "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
|
938 , ptr + 10); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
939 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
940 priv->maxheight = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
941 VERBOSE("setting maxheight to %d\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
942 priv->maxheight); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
943 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
944 } else if (!strncmp("quality=", ptr, 8)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
945 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
|
946 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
947 "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
|
948 , ptr + 8); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
949 else if (input < 1 || input > 20) |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
950 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
951 "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
|
952 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
953 priv->quality = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
954 VERBOSE("setting JPEG quality to %d\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
955 priv->quality); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
956 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
957 } else if (!strncmp("maxwidth=", ptr, 9)) { |
19951 | 958 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
|
959 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
960 "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
|
961 , ptr + 9); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
962 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
963 priv->maxwidth = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
964 VERBOSE("setting maxwidth to %d\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
965 priv->maxwidth); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
966 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
967 } else if (!strncmp("hdec=", ptr, 5)) { |
19951 | 968 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
|
969 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
970 "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
|
971 , ptr + 9); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
972 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
|
973 ERROR( |
19951 | 974 "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
|
975 input); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
976 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
977 priv->hdec = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
978 VERBOSE( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
979 "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
|
980 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
981 } else if (!strncmp("vdec=", ptr, 5)) { |
19951 | 982 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
|
983 ERROR( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
984 "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
|
985 , ptr + 9); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
986 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
|
987 ERROR( |
19951 | 988 "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
|
989 input); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
990 else { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
991 priv->vdec = input; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
992 VERBOSE( |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
993 "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
|
994 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
995 } else if (!strcasecmp("dc10+-PAL", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
996 !strcasecmp("dc10-PAL", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
997 priv->maxwidth = 768; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
998 priv->maxheight = 576; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
999 VERBOSE("setting DC10(+) PAL profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1000 } else if (!strcasecmp("fd", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1001 priv->fd = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1002 VERBOSE("forcing decimation\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1003 } else if (!strcasecmp("nofd", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1004 priv->fd = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1005 VERBOSE("decimate only if beautiful\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1006 } else if (!strcasecmp("bw", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1007 priv->bw = 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1008 VERBOSE("setting black and white encoding\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1009 } else if (!strcasecmp("color", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1010 priv->bw = 0; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1011 VERBOSE("setting color encoding\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1012 } else if (!strcasecmp("dc10+-NTSC", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1013 !strcasecmp("dc10-NTSC", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1014 priv->maxwidth = 640; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1015 priv->maxheight = 480; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1016 VERBOSE("setting DC10(+) NTSC profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1017 } else if (!strcasecmp("buz-PAL", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1018 !strcasecmp("lml33-PAL", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1019 priv->maxwidth = 720; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1020 priv->maxheight = 576; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1021 VERBOSE("setting buz/lml33 PAL profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1022 } else if (!strcasecmp("buz-NTSC", ptr) || |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1023 !strcasecmp("lml33-NTSC", ptr)) { |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1024 priv->maxwidth = 720; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1025 priv->maxheight = 480; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1026 VERBOSE("setting buz/lml33 NTSC profile\n"); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1027 } else { |
19951 | 1028 WARNING("ignoring unknown filter option " |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1029 "\"%s\", or missing argument\n", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1030 ptr); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1031 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1032 ptr = tmp; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1033 } while (!last); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1034 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1035 free(arg); |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1036 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1037 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1038 |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1039 return 1; |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1040 } |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1041 |
25221 | 1042 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
|
1043 "realtime zoran MJPEG encoding", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1044 "zrmjpeg", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1045 "Rik Snel", |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1046 "", |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30633
diff
changeset
|
1047 vf_open, |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1048 NULL |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
diff
changeset
|
1049 }; |