annotate libmpcodecs/vf_zrmjpeg.c @ 27985:1c77b86d355d

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