Mercurial > mplayer.hg
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 |
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 | 46 uint8_t huff_size_dc_luminance[12]; |
47 uint16_t huff_code_dc_luminance[12]; | |
48 uint8_t huff_size_dc_chrominance[12]; | |
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 | 51 uint8_t huff_size_ac_luminance[256]; |
52 uint16_t huff_code_ac_luminance[256]; | |
53 uint8_t huff_size_ac_chrominance[256]; | |
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 | 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 | 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 | 80 int i; |
9573 | 81 if (s->dsp.fdct == ff_jpeg_fdct_islow) { |
7157 | 82 for (i = 0; i < 64; i++) { |
9573 | 83 const int j = s->dsp.idct_permutation[i]; |
7157 | 84 /* 16 <= qscale * quant_matrix[i] <= 7905 |
85 * 19952 <= aanscales[i] * \ | |
86 * qscale * quant_matrix[i] <= 205026 | |
87 * (1<<36)/19952 >= (1<<36)/(aanscales[i] * \ | |
88 * qscale * quant_matrix[i]) >= (1<<36)/249205025 | |
89 * 3444240 >= (1<<36)/(aanscales[i] * | |
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 | 92 (qscale * quant_matrix[j])); |
93 } | |
9573 | 94 } else if (s->dsp.fdct == fdct_ifast) { |
5864 | 95 for(i=0;i<64;i++) { |
9573 | 96 const int j = s->dsp.idct_permutation[i]; |
5864 | 97 /* 16 <= qscale * quant_matrix[i] <= 7905 */ |
98 /* 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 */ | |
99 /* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */ | |
100 /* 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ | |
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 | 103 (aanscales[i] * qscale * quant_matrix[j])); |
104 } | |
105 } else { | |
106 for(i=0;i<64;i++) { | |
9573 | 107 const int j = s->dsp.idct_permutation[i]; |
5864 | 108 /* We can safely suppose that 16 <= quant_matrix[i] <= 255 |
109 So 16 <= qscale * quant_matrix[i] <= 7905 | |
110 so (1<<19) / 16 >= (1<<19) / (qscale * quant_matrix[i]) >= (1<<19) / 7905 | |
111 so 32768 >= (1<<19) / (qscale * quant_matrix[i]) >= 67 | |
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 | 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 | 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 | 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 | 155 uint8_t *huff_size_ac; |
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 | 213 static inline void clip_coeffs(MpegEncContext *s, DCTELEM *block, int last_index) |
214 { | |
215 int i; | |
216 const int maxlevel= s->max_qcoeff; | |
217 const int minlevel= s->min_qcoeff; | |
218 | |
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 | 221 int level = block[j]; |
222 | |
223 if (level>maxlevel) level=maxlevel; | |
224 else if(level<minlevel) level=minlevel; | |
225 block[j]= level; | |
226 } | |
227 } | |
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 | 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 | 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 | 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 | 343 av_free(j->s); |
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 | 357 av_free(j->s); |
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 | 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 | 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 | 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 | 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 | 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 | 463 j->s->dct_quantize(j->s, j->s->block[0], |
5864 | 464 0, 8, &overflow); |
465 if (overflow) clip_coeffs(j->s, j->s->block[0], | |
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 | 468 j->s->dct_quantize(j->s, j->s->block[1], |
5864 | 469 1, 8, &overflow); |
470 if (overflow) clip_coeffs(j->s, j->s->block[1], | |
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 | 475 j->s->dct_quantize(j->s, j->s->block[2], |
5864 | 476 4, 8, &overflow); |
477 if (overflow) clip_coeffs(j->s, j->s->block[2], | |
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 | 480 j->s->dct_quantize(j->s, j->s->block[3], |
5864 | 481 5, 8, &overflow); |
482 if (overflow) clip_coeffs(j->s, j->s->block[3], | |
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 | 501 av_free(j->s); |
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 | 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 |