annotate libvo/jpeg_enc.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents 531116b7693d
children 788499fc2ae7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
1 /* Straightforward (to be) optimized JPEG encoder for the YUV422 format
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
2 * based on mjpeg code from ffmpeg.
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
3 *
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
4 * Copyright (c) 2002, Rik Snel
7902
c9d1054aa359 sync with libavcodec for unaccellerated dcts (sorry Felix, LIBAVCODEC_BUILD did not change, so also no backwards compatibility this time), and a long overdue copyright update
rik
parents: 7567
diff changeset
5 * Parts from ffmpeg Copyright (c) 2000-2002 Fabrice Bellard
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
6 *
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
10 * (at your option) any later version.
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
11 *
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
15 * GNU General Public License for more details.
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
16 *
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
21977
cea0eb833758 Fix FSF address and otherwise broken license headers.
diego
parents: 21724
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
20 *
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
21 * For an excellent introduction to the JPEG format, see:
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
22 * http://www.ece.purdue.edu/~bouman/grad-labs/lab8/pdf/lab.pdf
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
23 */
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
24
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
25
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
26
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
27 #include <sys/types.h>
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
28 #include <stdio.h>
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
29 #include <stdlib.h>
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
30 #include "config.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11961
diff changeset
31 #include "mp_msg.h"
4683
fba4289cdb41 we are now able to use the new bitwriter code in libavcodec
rik
parents: 4651
diff changeset
32 /* We need this #define because we need ../libavcodec/common.h to #define
fba4289cdb41 we are now able to use the new bitwriter code in libavcodec
rik
parents: 4651
diff changeset
33 * be2me_32, otherwise the linker will complain that it doesn't exist */
fba4289cdb41 we are now able to use the new bitwriter code in libavcodec
rik
parents: 4651
diff changeset
34 #define HAVE_AV_CONFIG_H
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11961
diff changeset
35 #include "libavcodec/avcodec.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11961
diff changeset
36 #include "libavcodec/dsputil.h"
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11961
diff changeset
37 #include "libavcodec/mpegvideo.h"
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
38
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
39 #include "jpeg_enc.h"
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
40
5391
7a4ea9beebc0 use avcodec_inited instead of av_fdct to see if avcodec was initialized by another part of mplayer
rik
parents: 4683
diff changeset
41 extern int avcodec_inited;
7a4ea9beebc0 use avcodec_inited instead of av_fdct to see if avcodec was initialized by another part of mplayer
rik
parents: 4683
diff changeset
42
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
43 /* zr_mjpeg_encode_mb needs access to these tables for the black & white
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
44 * option */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
45 typedef struct MJpegContext {
9438
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
46 uint8_t huff_size_dc_luminance[12];
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
47 uint16_t huff_code_dc_luminance[12];
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
48 uint8_t huff_size_dc_chrominance[12];
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
49 uint16_t huff_code_dc_chrominance[12];
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
50
9438
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
51 uint8_t huff_size_ac_luminance[256];
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
52 uint16_t huff_code_ac_luminance[256];
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
53 uint8_t huff_size_ac_chrominance[256];
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
54 uint16_t huff_code_ac_chrominance[256];
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
55 } MJpegContext;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
56
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
57
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
58 /* Begin excessive code duplication ************************************/
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
59 /* Code coming from mpegvideo.c and mjpeg.c in ../libavcodec ***********/
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
60
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
61 static const unsigned short aanscales[64] = {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
62 /* precomputed values scaled up by 14 bits */
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
63 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
64 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
65 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
66 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
67 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
68 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
69 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
70 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
71 };
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
72
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
73 static void convert_matrix(MpegEncContext *s, int (*qmat)[64],
11258
9627feb8c6fb ffmpeg sync patch by Alex (thank you), I changed qmin and qmax to be 1 and 31 in the caller
rik
parents: 11211
diff changeset
74 uint16_t (*qmat16)[2][64], const uint16_t *quant_matrix,
9627feb8c6fb ffmpeg sync patch by Alex (thank you), I changed qmin and qmax to be 1 and 31 in the caller
rik
parents: 11211
diff changeset
75 int bias, int qmin, int qmax)
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
76 {
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
77 int qscale;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
78
11345
97f11e488141 function convert_matrix() is fixed (off-by-one error) and it is now called with the optimal arguments so that it doesn't do unneeded work, the change was inspired by a comment from Alex
rik
parents: 11258
diff changeset
79 for(qscale=qmin; qscale<=qmax; qscale++){
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
80 int i;
9573
665974fce630 libavcodec sync
rik
parents: 9438
diff changeset
81 if (s->dsp.fdct == ff_jpeg_fdct_islow) {
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
82 for (i = 0; i < 64; i++) {
9573
665974fce630 libavcodec sync
rik
parents: 9438
diff changeset
83 const int j = s->dsp.idct_permutation[i];
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
84 /* 16 <= qscale * quant_matrix[i] <= 7905
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
85 * 19952 <= aanscales[i] * \
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
86 * qscale * quant_matrix[i] <= 205026
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
87 * (1<<36)/19952 >= (1<<36)/(aanscales[i] * \
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
88 * qscale * quant_matrix[i]) >= (1<<36)/249205025
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
89 * 3444240 >= (1<<36)/(aanscales[i] *
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
90 * qscale * quant_matrix[i]) >= 275 */
7902
c9d1054aa359 sync with libavcodec for unaccellerated dcts (sorry Felix, LIBAVCODEC_BUILD did not change, so also no backwards compatibility this time), and a long overdue copyright update
rik
parents: 7567
diff changeset
91 qmat[qscale][i] = (int)((UINT64_C(1) << (QMAT_SHIFT-3))/
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
92 (qscale * quant_matrix[j]));
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
93 }
9573
665974fce630 libavcodec sync
rik
parents: 9438
diff changeset
94 } else if (s->dsp.fdct == fdct_ifast) {
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
95 for(i=0;i<64;i++) {
9573
665974fce630 libavcodec sync
rik
parents: 9438
diff changeset
96 const int j = s->dsp.idct_permutation[i];
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
97 /* 16 <= qscale * quant_matrix[i] <= 7905 */
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
98 /* 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 */
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
99 /* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
100 /* 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
101
7902
c9d1054aa359 sync with libavcodec for unaccellerated dcts (sorry Felix, LIBAVCODEC_BUILD did not change, so also no backwards compatibility this time), and a long overdue copyright update
rik
parents: 7567
diff changeset
102 qmat[qscale][i] = (int)((UINT64_C(1) << (QMAT_SHIFT + 11)) /
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
103 (aanscales[i] * qscale * quant_matrix[j]));
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
104 }
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
105 } else {
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
106 for(i=0;i<64;i++) {
9573
665974fce630 libavcodec sync
rik
parents: 9438
diff changeset
107 const int j = s->dsp.idct_permutation[i];
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
108 /* We can safely suppose that 16 <= quant_matrix[i] <= 255
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
109 So 16 <= qscale * quant_matrix[i] <= 7905
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
110 so (1<<19) / 16 >= (1<<19) / (qscale * quant_matrix[i]) >= (1<<19) / 7905
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
111 so 32768 >= (1<<19) / (qscale * quant_matrix[i]) >= 67
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
112 */
21724
019171a44e19 compilation fixes: define always_inline and don't use uint64_t_C
rik
parents: 19619
diff changeset
113 qmat [qscale][i] = (int)((UINT64_C(1) << QMAT_SHIFT_MMX) / (qscale * quant_matrix[j]));
11258
9627feb8c6fb ffmpeg sync patch by Alex (thank you), I changed qmin and qmax to be 1 and 31 in the caller
rik
parents: 11211
diff changeset
114 qmat16[qscale][0][i] = (1 << QMAT_SHIFT_MMX) / (qscale * quant_matrix[j]);
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
115
11258
9627feb8c6fb ffmpeg sync patch by Alex (thank you), I changed qmin and qmax to be 1 and 31 in the caller
rik
parents: 11211
diff changeset
116 if(qmat16[qscale][0][i]==0 || qmat16[qscale][0][i]==128*256) qmat16[qscale][0][i]=128*256-1;
9627feb8c6fb ffmpeg sync patch by Alex (thank you), I changed qmin and qmax to be 1 and 31 in the caller
rik
parents: 11211
diff changeset
117 qmat16[qscale][1][i]= ROUNDED_DIV(bias<<(16-QUANT_BIAS_SHIFT), qmat16[qscale][0][i]);
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
118 }
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
119 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
120 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
121 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
122
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
123 static inline void encode_dc(MpegEncContext *s, int val,
9438
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
124 uint8_t *huff_size, uint16_t *huff_code)
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
125 {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
126 int mant, nbits;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
127
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
128 if (val == 0) {
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
129 put_bits(&s->pb, huff_size[0], huff_code[0]);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
130 } else {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
131 mant = val;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
132 if (val < 0) {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
133 val = -val;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
134 mant--;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
135 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
136
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
137 /* compute the log (XXX: optimize) */
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
138 nbits = 0;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
139 while (val != 0) {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
140 val = val >> 1;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
141 nbits++;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
142 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
143
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
144 put_bits(&s->pb, huff_size[nbits], huff_code[nbits]);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
145
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
146 put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1));
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
147 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
148 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
149
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
150 static void encode_block(MpegEncContext *s, DCTELEM *block, int n)
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
151 {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
152 int mant, nbits, code, i, j;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
153 int component, dc, run, last_index, val;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
154 MJpegContext *m = s->mjpeg_ctx;
9438
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
155 uint8_t *huff_size_ac;
f7044ec26382 UINTX -> uintx_t (following libavcodec)
rik
parents: 9186
diff changeset
156 uint16_t *huff_code_ac;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
157
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
158 /* DC coef */
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
159 component = (n <= 3 ? 0 : n - 4 + 1);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
160 dc = block[0]; /* overflow is impossible */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
161 val = dc - s->last_dc[component];
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
162 if (n < 4) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
163 encode_dc(s, val, m->huff_size_dc_luminance, m->huff_code_dc_luminance);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
164 huff_size_ac = m->huff_size_ac_luminance;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
165 huff_code_ac = m->huff_code_ac_luminance;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
166 } else {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
167 encode_dc(s, val, m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
168 huff_size_ac = m->huff_size_ac_chrominance;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
169 huff_code_ac = m->huff_code_ac_chrominance;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
170 }
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
171 s->last_dc[component] = dc;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
172
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
173 /* AC coefs */
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
174
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
175 run = 0;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
176 last_index = s->block_last_index[n];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
177 for(i=1;i<=last_index;i++) {
7567
85e9956a6727 libavcodec sync; zigzag_direct and block_permute_op replaced by non-globals in MpegEncContext
rik
parents: 7157
diff changeset
178 j = s->intra_scantable.permutated[i];
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
179 val = block[j];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
180 if (val == 0) {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
181 run++;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
182 } else {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
183 while (run >= 16) {
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
184 put_bits(&s->pb, huff_size_ac[0xf0], huff_code_ac[0xf0]);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
185 run -= 16;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
186 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
187 mant = val;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
188 if (val < 0) {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
189 val = -val;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
190 mant--;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
191 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
192
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
193 /* compute the log (XXX: optimize) */
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
194 nbits = 0;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
195 while (val != 0) {
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
196 val = val >> 1;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
197 nbits++;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
198 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
199 code = (run << 4) | nbits;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
200
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
201 put_bits(&s->pb, huff_size_ac[code], huff_code_ac[code]);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
202
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
203 put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1));
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
204 run = 0;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
205 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
206 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
207
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
208 /* output EOB only if not already 64 values */
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
209 if (last_index < 63 || run != 0)
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
210 put_bits(&s->pb, huff_size_ac[0], huff_code_ac[0]);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
211 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
212
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
213 static inline void clip_coeffs(MpegEncContext *s, DCTELEM *block, int last_index)
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
214 {
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
215 int i;
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
216 const int maxlevel= s->max_qcoeff;
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
217 const int minlevel= s->min_qcoeff;
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
218
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
219 for(i=0; i<=last_index; i++){
7567
85e9956a6727 libavcodec sync; zigzag_direct and block_permute_op replaced by non-globals in MpegEncContext
rik
parents: 7157
diff changeset
220 const int j = s->intra_scantable.permutated[i];
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
221 int level = block[j];
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
222
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
223 if (level>maxlevel) level=maxlevel;
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
224 else if(level<minlevel) level=minlevel;
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
225 block[j]= level;
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
226 }
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
227 }
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
228
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
229 /* End excessive code duplication **************************************/
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
230
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
231 /* this function is a reproduction of the one in mjpeg, it includes two
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
232 * changes, it allows for black&white encoding (it skips the U and V
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
233 * macroblocks and it outputs the huffman code for 'no change' (dc) and
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
234 * 'all zero' (ac)) and it takes 4 macroblocks (422) instead of 6 (420) */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
235 static void zr_mjpeg_encode_mb(jpeg_enc_t *j) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
236
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
237 MJpegContext *m = j->s->mjpeg_ctx;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
238
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
239 encode_block(j->s, j->s->block[0], 0);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
240 encode_block(j->s, j->s->block[1], 1);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
241 if (j->bw) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
242 /* U */
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
243 put_bits(&j->s->pb, m->huff_size_dc_chrominance[0],
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
244 m->huff_code_dc_chrominance[0]);
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
245 put_bits(&j->s->pb, m->huff_size_ac_chrominance[0],
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
246 m->huff_code_ac_chrominance[0]);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
247 /* V */
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
248 put_bits(&j->s->pb, m->huff_size_dc_chrominance[0],
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
249 m->huff_code_dc_chrominance[0]);
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
250 put_bits(&j->s->pb, m->huff_size_ac_chrominance[0],
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
251 m->huff_code_ac_chrominance[0]);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
252 } else {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
253 /* we trick encode_block here so that it uses
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
254 * chrominance huffman tables instead of luminance ones
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
255 * (see the effect of second argument of encode_block) */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
256 encode_block(j->s, j->s->block[2], 4);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
257 encode_block(j->s, j->s->block[3], 5);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
258 }
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
259 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
260
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
261 /* this function can take all kinds of YUV colorspaces
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
262 * YV12, YVYU, UYVY. The necesary parameters must be set up by the caller
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
263 * y_ps means "y pixel size", y_rs means "y row size".
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
264 * For YUYV, for example, is u_buf = y_buf + 1, v_buf = y_buf + 3,
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
265 * y_ps = 2, u_ps = 4, v_ps = 4, y_rs = u_rs = v_rs.
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
266 *
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
267 * The actual buffers must be passed with mjpeg_encode_frame, this is
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
268 * to make it possible to call encode on the buffer provided by the
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
269 * codec in draw_frame.
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
270 *
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
271 * The data is straightened out at the moment it is put in DCT
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
272 * blocks, there are therefore no spurious memcopies involved */
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
273 /* Notice that w must be a multiple of 16 and h must be a multiple of 8 */
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
274 /* We produce YUV422 jpegs, the colors must be subsampled horizontally,
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
275 * if the colors are also subsampled vertically, then this function
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
276 * performs cheap upsampling (better solution will be: a DCT that is
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
277 * optimized in the case that every two rows are the same) */
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
278 /* cu = 0 means 'No cheap upsampling'
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
279 * cu = 1 means 'perform cheap upsampling' */
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
280 /* The encoder doesn't know anything about interlacing, the halve height
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
281 * needs to be passed and the double rowstride. Which field gets encoded
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
282 * is decided by what buffers are passed to mjpeg_encode_frame */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
283 jpeg_enc_t *jpeg_enc_init(int w, int h, int y_psize, int y_rsize,
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
284 int u_psize, int u_rsize, int v_psize, int v_rsize,
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
285 int cu, int q, int b) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
286 jpeg_enc_t *j;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
287 int i = 0;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
288 mp_msg(MSGT_VO, MSGL_V, "JPEnc init: %dx%d %d %d %d %d %d %d\n",
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
289 w, h, y_psize, y_rsize, u_psize,
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
290 u_rsize, v_psize, v_rsize);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
291
9186
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
292 j = av_malloc(sizeof(jpeg_enc_t));
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
293 if (j == NULL) return NULL;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
294
9186
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
295 j->s = av_malloc(sizeof(MpegEncContext));
9976
5843993013a8 fixes to the zr driver (uninit->reinit) by Stephan Bain <sjbain@akamail.com>
rik
parents: 9573
diff changeset
296 memset(j->s,0x00,sizeof(MpegEncContext));
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
297 if (j->s == NULL) {
9186
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
298 av_free(j);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
299 return NULL;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
300 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
301
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
302 /* info on how to access the pixels */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
303 j->y_ps = y_psize;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
304 j->u_ps = u_psize;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
305 j->v_ps = v_psize;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
306 j->y_rs = y_rsize;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
307 j->u_rs = u_rsize;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
308 j->v_rs = v_rsize;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
309
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
310 j->s->width = w;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
311 j->s->height = h;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
312 j->s->qscale = q;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
313
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
314 j->s->out_format = FMT_MJPEG;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
315 j->s->intra_only = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
316 j->s->encoding = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
317 j->s->pict_type = I_TYPE;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
318 j->s->y_dc_scale = 8;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
319 j->s->c_dc_scale = 8;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
320
23369
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
321 //FIXME j->s->mjpeg_write_tables = 1;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
322 j->s->mjpeg_vsample[0] = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
323 j->s->mjpeg_vsample[1] = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
324 j->s->mjpeg_vsample[2] = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
325 j->s->mjpeg_hsample[0] = 2;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
326 j->s->mjpeg_hsample[1] = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
327 j->s->mjpeg_hsample[2] = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
328
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
329 j->cheap_upsample = cu;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
330 j->bw = b;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
331
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
332 /* if libavcodec is used by the decoder then we must not
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
333 * initialize again, but if it is not initialized then we must
5391
7a4ea9beebc0 use avcodec_inited instead of av_fdct to see if avcodec was initialized by another part of mplayer
rik
parents: 4683
diff changeset
334 * initialize it here. */
7a4ea9beebc0 use avcodec_inited instead of av_fdct to see if avcodec was initialized by another part of mplayer
rik
parents: 4683
diff changeset
335 if (!avcodec_inited) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
336 /* we need to initialize libavcodec */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
337 avcodec_init();
5391
7a4ea9beebc0 use avcodec_inited instead of av_fdct to see if avcodec was initialized by another part of mplayer
rik
parents: 4683
diff changeset
338 avcodec_register_all();
7a4ea9beebc0 use avcodec_inited instead of av_fdct to see if avcodec was initialized by another part of mplayer
rik
parents: 4683
diff changeset
339 avcodec_inited=1;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
340 }
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
341
23369
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
342 if (ff_mjpeg_encode_init(j->s) < 0) {
9186
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
343 av_free(j->s);
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
344 av_free(j);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
345 return NULL;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
346 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
347
7136
122efc309784 fixes a segfault which was introduced in this file by the new ratecontrol code
rik
parents: 6703
diff changeset
348 /* alloc bogus avctx to keep MPV_common_init from segfaulting */
122efc309784 fixes a segfault which was introduced in this file by the new ratecontrol code
rik
parents: 6703
diff changeset
349 j->s->avctx = calloc(sizeof(*j->s->avctx), 1);
19619
a83e5b8d2e63 Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents: 15310
diff changeset
350 /* Set up to encode mjpeg */
a83e5b8d2e63 Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents: 15310
diff changeset
351 j->s->avctx->codec_id = CODEC_ID_MJPEG;
7136
122efc309784 fixes a segfault which was introduced in this file by the new ratecontrol code
rik
parents: 6703
diff changeset
352
11961
487d1638d161 fixing segfault: libavcodec doesn't allocate some buffers if avctx->thread_count == 0
rik
parents: 11926
diff changeset
353 /* make MPV_common_init allocate important buffers, like s->block */
487d1638d161 fixing segfault: libavcodec doesn't allocate some buffers if avctx->thread_count == 0
rik
parents: 11926
diff changeset
354 j->s->avctx->thread_count = 1;
487d1638d161 fixing segfault: libavcodec doesn't allocate some buffers if avctx->thread_count == 0
rik
parents: 11926
diff changeset
355
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
356 if (MPV_common_init(j->s) < 0) {
9186
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
357 av_free(j->s);
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
358 av_free(j);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
359 return NULL;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
360 }
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
361
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
362 /* correct the value for sc->mb_height */
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
363 j->s->mb_height = j->s->height/8;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
364 j->s->mb_intra = 1;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
365
6703
feeaffcce1fa adapting to the 'adding fff prefix to avoid global name conflicts' changes in libavcodec
rik
parents: 6328
diff changeset
366 j->s->intra_matrix[0] = ff_mpeg1_default_intra_matrix[0];
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
367 for (i = 1; i < 64; i++)
22339
2387057d3e14 compilation fix clip_uint8 -> av_clip_uint8
rik
parents: 21977
diff changeset
368 j->s->intra_matrix[i] = av_clip_uint8(
7567
85e9956a6727 libavcodec sync; zigzag_direct and block_permute_op replaced by non-globals in MpegEncContext
rik
parents: 7157
diff changeset
369 (ff_mpeg1_default_intra_matrix[i]*j->s->qscale) >> 3);
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
370 convert_matrix(j->s, j->s->q_intra_matrix, j->s->q_intra_matrix16,
11345
97f11e488141 function convert_matrix() is fixed (off-by-one error) and it is now called with the optimal arguments so that it doesn't do unneeded work, the change was inspired by a comment from Alex
rik
parents: 11258
diff changeset
371 j->s->intra_matrix, j->s->intra_quant_bias, 8, 8);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
372 return j;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
373 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
374
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
375 int jpeg_enc_frame(jpeg_enc_t *j, unsigned char *y_data,
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
376 unsigned char *u_data, unsigned char *v_data, char *bufr) {
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
377 int i, k, mb_x, mb_y, overflow;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
378 short int *dest;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
379 unsigned char *source;
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
380 /* initialize the buffer */
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
381
11211
e0b5cd99f82e adapting to init_put_bits prototype change
rik
parents: 9976
diff changeset
382 init_put_bits(&j->s->pb, bufr, 1024*256);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
383
23369
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
384 ff_mjpeg_encode_picture_header(j->s);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
385
11926
243767239228 get_bit_count -> put_bits_count
rik
parents: 11345
diff changeset
386 j->s->header_bits = put_bits_count(&j->s->pb);
8117
dda027d5a845 libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents: 7902
diff changeset
387
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
388 j->s->last_dc[0] = 128;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
389 j->s->last_dc[1] = 128;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
390 j->s->last_dc[2] = 128;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
391
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
392 for (mb_y = 0; mb_y < j->s->mb_height; mb_y++) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
393 for (mb_x = 0; mb_x < j->s->mb_width; mb_x++) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
394 /* conversion 8 to 16 bit and filling of blocks
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
395 * must be mmx optimized */
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
396 /* fill 2 Y macroblocks and one U and one V */
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
397 source = mb_y * 8 * j->y_rs +
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
398 16 * j->y_ps * mb_x + y_data;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
399 dest = j->s->block[0];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
400 for (i = 0; i < 8; i++) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
401 for (k = 0; k < 8; k++) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
402 dest[k] = source[k*j->y_ps];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
403 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
404 dest += 8;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
405 source += j->y_rs;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
406 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
407 source = mb_y * 8 * j->y_rs +
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
408 (16*mb_x + 8)*j->y_ps + y_data;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
409 dest = j->s->block[1];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
410 for (i = 0; i < 8; i++) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
411 for (k = 0; k < 8; k++) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
412 dest[k] = source[k*j->y_ps];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
413 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
414 dest += 8;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
415 source += j->y_rs;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
416 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
417 if (!j->bw && j->cheap_upsample) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
418 source = mb_y*4*j->u_rs +
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
419 8*mb_x*j->u_ps + u_data;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
420 dest = j->s->block[2];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
421 for (i = 0; i < 4; i++) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
422 for (k = 0; k < 8; k++) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
423 dest[k] = source[k*j->u_ps];
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
424 dest[k+8] = source[k*j->u_ps];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
425 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
426 dest += 16;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
427 source += j->u_rs;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
428 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
429 source = mb_y*4*j->v_rs +
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
430 8*mb_x*j->v_ps + v_data;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
431 dest = j->s->block[3];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
432 for (i = 0; i < 4; i++) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
433 for (k = 0; k < 8; k++) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
434 dest[k] = source[k*j->v_ps];
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
435 dest[k+8] = source[k*j->v_ps];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
436 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
437 dest += 16;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
438 source += j->u_rs;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
439 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
440 } else if (!j->bw && !j->cheap_upsample) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
441 source = mb_y*8*j->u_rs +
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
442 8*mb_x*j->u_ps + u_data;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
443 dest = j->s->block[2];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
444 for (i = 0; i < 8; i++) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
445 for (k = 0; k < 8; k++)
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
446 dest[k] = source[k*j->u_ps];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
447 dest += 8;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
448 source += j->u_rs;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
449 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
450 source = mb_y*8*j->v_rs +
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
451 8*mb_x*j->v_ps + v_data;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
452 dest = j->s->block[3];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
453 for (i = 0; i < 8; i++) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
454 for (k = 0; k < 8; k++)
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
455 dest[k] = source[k*j->v_ps];
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
456 dest += 8;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
457 source += j->u_rs;
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
458 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
459 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
460 emms_c(); /* is this really needed? */
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
461
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
462 j->s->block_last_index[0] =
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
463 j->s->dct_quantize(j->s, j->s->block[0],
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
464 0, 8, &overflow);
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
465 if (overflow) clip_coeffs(j->s, j->s->block[0],
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
466 j->s->block_last_index[0]);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
467 j->s->block_last_index[1] =
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
468 j->s->dct_quantize(j->s, j->s->block[1],
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
469 1, 8, &overflow);
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
470 if (overflow) clip_coeffs(j->s, j->s->block[1],
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
471 j->s->block_last_index[1]);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
472
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
473 if (!j->bw) {
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
474 j->s->block_last_index[4] =
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
475 j->s->dct_quantize(j->s, j->s->block[2],
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
476 4, 8, &overflow);
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
477 if (overflow) clip_coeffs(j->s, j->s->block[2],
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
478 j->s->block_last_index[2]);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
479 j->s->block_last_index[5] =
7157
48b3a6f15540 libavcodec sync
rik
parents: 7136
diff changeset
480 j->s->dct_quantize(j->s, j->s->block[3],
5864
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
481 5, 8, &overflow);
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
482 if (overflow) clip_coeffs(j->s, j->s->block[3],
34b27da59eaf update: we use the new quantizer in libavcodec
rik
parents: 5391
diff changeset
483 j->s->block_last_index[3]);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
484 }
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
485 zr_mjpeg_encode_mb(j);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
486 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
487 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
488 emms_c();
23369
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
489 ff_mjpeg_encode_picture_trailer(j->s);
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
490 flush_put_bits(&j->s->pb);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
491
23369
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
492 //FIXME
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
493 //if (j->s->mjpeg_write_tables == 1)
700408f4cb51 compilation fix: ff_ _encode added and temporarily disabled mjpeg_write_tables
rik
parents: 22339
diff changeset
494 // j->s->mjpeg_write_tables = 0;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
495
4683
fba4289cdb41 we are now able to use the new bitwriter code in libavcodec
rik
parents: 4651
diff changeset
496 return pbBufPtr(&(j->s->pb)) - j->s->pb.buf;
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
497 }
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
498
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
499 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
500 ff_mjpeg_encode_close(j->s);
9186
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
501 av_free(j->s);
f745791c3030 {malloc,free} -> av_{malloc,free}
rik
parents: 8117
diff changeset
502 av_free(j);
4347
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
503 }
d036a9992baf fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff changeset
504
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
505 #if 0
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
506
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
507 #define W 32
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
508 #define H 32
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
509
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
510 int quant_store[MBR+1][MBC+1];
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
511 unsigned char buf[W*H*3/2];
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
512 char code[256*1024];
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
513
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
514
25100
531116b7693d main() --> main(void)
diego
parents: 23376
diff changeset
515 main(void) {
4651
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
516 int i, size;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
517 FILE *fp;
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
518
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
519 memset(buf, 0, W*H);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
520 memset(buf+W*H, 255, W*H/4);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
521 memset(buf+5*W*H/4, 0, W*H/4);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
522 mjpeg_encoder_init(W, H, 1, W, 1, W/2, 1, W/2, 1, 1, 0);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
523
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
524 size = mjpeg_encode_frame(buf, buf+W*H, buf+5*W*H/4, code);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
525 fp = fopen("test.jpg", "w");
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
526 fwrite(code, 1, size, fp);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
527 fclose(fp);
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
528 }
49f2bc22f880 mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 4347
diff changeset
529 #endif