Mercurial > mplayer.hg
annotate libvo/jpeg_enc.c @ 21656:32c50eb3ff18
in STREAM_WRITE mode open the stream with O_RDWR|O_CREAT, S_IRUSR|S_IWUSR and disable seek_forward for pipes
author | nicodvb |
---|---|
date | Mon, 18 Dec 2006 20:53:40 +0000 |
parents | a83e5b8d2e63 |
children | 019171a44e19 |
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 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
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" |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
31 #ifdef USE_FASTMEMCPY |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
32 #include "fastmemcpy.h" |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
33 #endif |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11961
diff
changeset
|
34 #include "mp_msg.h" |
4683
fba4289cdb41
we are now able to use the new bitwriter code in libavcodec
rik
parents:
4651
diff
changeset
|
35 /* 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
|
36 * 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
|
37 #define HAVE_AV_CONFIG_H |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11961
diff
changeset
|
38 #include "libavcodec/avcodec.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11961
diff
changeset
|
39 #include "libavcodec/dsputil.h" |
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11961
diff
changeset
|
40 #include "libavcodec/mpegvideo.h" |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
41 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
42 #include "jpeg_enc.h" |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
43 |
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
|
44 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
|
45 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
46 /* 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
|
47 * option */ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
48 typedef struct MJpegContext { |
9438 | 49 uint8_t huff_size_dc_luminance[12]; |
50 uint16_t huff_code_dc_luminance[12]; | |
51 uint8_t huff_size_dc_chrominance[12]; | |
52 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
|
53 |
9438 | 54 uint8_t huff_size_ac_luminance[256]; |
55 uint16_t huff_code_ac_luminance[256]; | |
56 uint8_t huff_size_ac_chrominance[256]; | |
57 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
|
58 } MJpegContext; |
4347
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
59 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
60 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
61 /* Begin excessive code duplication ************************************/ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
62 /* 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
|
63 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
64 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
|
65 /* 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 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
|
74 }; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
75 |
7157 | 76 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
|
77 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
|
78 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
|
79 { |
5864 | 80 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
|
81 |
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
|
82 for(qscale=qmin; qscale<=qmax; qscale++){ |
5864 | 83 int i; |
9573 | 84 if (s->dsp.fdct == ff_jpeg_fdct_islow) { |
7157 | 85 for (i = 0; i < 64; i++) { |
9573 | 86 const int j = s->dsp.idct_permutation[i]; |
7157 | 87 /* 16 <= qscale * quant_matrix[i] <= 7905 |
88 * 19952 <= aanscales[i] * \ | |
89 * qscale * quant_matrix[i] <= 205026 | |
90 * (1<<36)/19952 >= (1<<36)/(aanscales[i] * \ | |
91 * qscale * quant_matrix[i]) >= (1<<36)/249205025 | |
92 * 3444240 >= (1<<36)/(aanscales[i] * | |
93 * 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
|
94 qmat[qscale][i] = (int)((UINT64_C(1) << (QMAT_SHIFT-3))/ |
7157 | 95 (qscale * quant_matrix[j])); |
96 } | |
9573 | 97 } else if (s->dsp.fdct == fdct_ifast) { |
5864 | 98 for(i=0;i<64;i++) { |
9573 | 99 const int j = s->dsp.idct_permutation[i]; |
5864 | 100 /* 16 <= qscale * quant_matrix[i] <= 7905 */ |
101 /* 19952 <= aanscales[i] * qscale * quant_matrix[i] <= 249205026 */ | |
102 /* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */ | |
103 /* 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ | |
104 | |
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
|
105 qmat[qscale][i] = (int)((UINT64_C(1) << (QMAT_SHIFT + 11)) / |
5864 | 106 (aanscales[i] * qscale * quant_matrix[j])); |
107 } | |
108 } else { | |
109 for(i=0;i<64;i++) { | |
9573 | 110 const int j = s->dsp.idct_permutation[i]; |
5864 | 111 /* We can safely suppose that 16 <= quant_matrix[i] <= 255 |
112 So 16 <= qscale * quant_matrix[i] <= 7905 | |
113 so (1<<19) / 16 >= (1<<19) / (qscale * quant_matrix[i]) >= (1<<19) / 7905 | |
114 so 32768 >= (1<<19) / (qscale * quant_matrix[i]) >= 67 | |
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 qmat [qscale][i] = (int)((uint64_t_C(1) << QMAT_SHIFT_MMX) / (qscale * quant_matrix[j])); |
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][0][i] = (1 << QMAT_SHIFT_MMX) / (qscale * quant_matrix[j]); |
5864 | 118 |
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
|
119 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
|
120 qmat16[qscale][1][i]= ROUNDED_DIV(bias<<(16-QUANT_BIAS_SHIFT), qmat16[qscale][0][i]); |
5864 | 121 } |
4347
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
122 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
123 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
124 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
125 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
126 static inline void encode_dc(MpegEncContext *s, int val, |
9438 | 127 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
|
128 { |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
129 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
|
130 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
131 if (val == 0) { |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
132 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
|
133 } else { |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
134 mant = val; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
135 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
|
136 val = -val; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
137 mant--; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
138 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
139 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
140 /* 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
|
141 nbits = 0; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
142 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
|
143 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
|
144 nbits++; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
145 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
146 |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
147 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
|
148 |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
149 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
|
150 } |
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 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
153 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
|
154 { |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
155 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
|
156 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
|
157 MJpegContext *m = s->mjpeg_ctx; |
9438 | 158 uint8_t *huff_size_ac; |
159 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
|
160 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
161 /* DC coef */ |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
162 component = (n <= 3 ? 0 : n - 4 + 1); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
163 dc = block[0]; /* overflow is impossible */ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
164 val = dc - s->last_dc[component]; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
165 if (n < 4) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
166 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
|
167 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
|
168 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
|
169 } else { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
170 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
|
171 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
|
172 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
|
173 } |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
174 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
|
175 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
176 /* AC coefs */ |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
177 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
178 run = 0; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
179 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
|
180 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
|
181 j = s->intra_scantable.permutated[i]; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
182 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
|
183 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
|
184 run++; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
185 } else { |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
186 while (run >= 16) { |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
187 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
|
188 run -= 16; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
189 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
190 mant = val; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
191 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
|
192 val = -val; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
193 mant--; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
194 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
195 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
196 /* 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
|
197 nbits = 0; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
198 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
|
199 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
|
200 nbits++; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
201 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
202 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
|
203 |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
204 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
|
205 |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
206 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
|
207 run = 0; |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
208 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
209 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
210 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
211 /* 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
|
212 if (last_index < 63 || run != 0) |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
213 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
|
214 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
215 |
5864 | 216 static inline void clip_coeffs(MpegEncContext *s, DCTELEM *block, int last_index) |
217 { | |
218 int i; | |
219 const int maxlevel= s->max_qcoeff; | |
220 const int minlevel= s->min_qcoeff; | |
221 | |
222 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
|
223 const int j = s->intra_scantable.permutated[i]; |
5864 | 224 int level = block[j]; |
225 | |
226 if (level>maxlevel) level=maxlevel; | |
227 else if(level<minlevel) level=minlevel; | |
228 block[j]= level; | |
229 } | |
230 } | |
231 | |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
232 /* End excessive code duplication **************************************/ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
233 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
234 /* 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
|
235 * 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
|
236 * 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
|
237 * '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
|
238 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
|
239 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
240 MJpegContext *m = j->s->mjpeg_ctx; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
241 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
242 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
|
243 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
|
244 if (j->bw) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
245 /* U */ |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
246 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
|
247 m->huff_code_dc_chrominance[0]); |
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_ac_chrominance[0], |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
249 m->huff_code_ac_chrominance[0]); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
250 /* V */ |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
251 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
|
252 m->huff_code_dc_chrominance[0]); |
8117
dda027d5a845
libavcodec sync (no LIBAVCODEC_BUILD change; no backwards compatibility)
rik
parents:
7902
diff
changeset
|
253 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
|
254 m->huff_code_ac_chrominance[0]); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
255 } else { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
256 /* 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
|
257 * chrominance huffman tables instead of luminance ones |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
258 * (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
|
259 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
|
260 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
|
261 } |
4347
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
262 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
263 |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
264 /* 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
|
265 * 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
|
266 * 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
|
267 * 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
|
268 * 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
|
269 * |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
270 * 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
|
271 * 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
|
272 * 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
|
273 * |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
274 * 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
|
275 * 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
|
276 /* 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
|
277 /* 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
|
278 * 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
|
279 * 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
|
280 * 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
|
281 /* 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
|
282 * cu = 1 means 'perform cheap upsampling' */ |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
283 /* 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
|
284 * 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
|
285 * 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
|
286 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
|
287 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
|
288 int cu, int q, int b) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
289 jpeg_enc_t *j; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
290 int i = 0; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
291 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
|
292 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
|
293 u_rsize, v_psize, v_rsize); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
294 |
9186 | 295 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
|
296 if (j == NULL) return NULL; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
297 |
9186 | 298 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
|
299 memset(j->s,0x00,sizeof(MpegEncContext)); |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
300 if (j->s == NULL) { |
9186 | 301 av_free(j); |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
302 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
|
303 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
304 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
305 /* info on how to access the pixels */ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
306 j->y_ps = y_psize; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
307 j->u_ps = u_psize; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
308 j->v_ps = v_psize; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
309 j->y_rs = y_rsize; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
310 j->u_rs = u_rsize; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
311 j->v_rs = v_rsize; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
312 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
313 j->s->width = w; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
314 j->s->height = h; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
315 j->s->qscale = q; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
316 |
9976
5843993013a8
fixes to the zr driver (uninit->reinit) by Stephan Bain <sjbain@akamail.com>
rik
parents:
9573
diff
changeset
|
317 j->s->mjpeg_data_only_frames = 0; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
318 j->s->out_format = FMT_MJPEG; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
319 j->s->intra_only = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
320 j->s->encoding = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
321 j->s->pict_type = I_TYPE; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
322 j->s->y_dc_scale = 8; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
323 j->s->c_dc_scale = 8; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
324 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
325 j->s->mjpeg_write_tables = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
326 j->s->mjpeg_vsample[0] = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
327 j->s->mjpeg_vsample[1] = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
328 j->s->mjpeg_vsample[2] = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
329 j->s->mjpeg_hsample[0] = 2; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
330 j->s->mjpeg_hsample[1] = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
331 j->s->mjpeg_hsample[2] = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
332 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
333 j->cheap_upsample = cu; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
334 j->bw = b; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
335 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
336 /* 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
|
337 * 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
|
338 * 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
|
339 if (!avcodec_inited) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
340 /* we need to initialize libavcodec */ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
341 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
|
342 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
|
343 avcodec_inited=1; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
344 } |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
345 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
346 if (mjpeg_init(j->s) < 0) { |
9186 | 347 av_free(j->s); |
348 av_free(j); | |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
349 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
|
350 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
351 |
7136
122efc309784
fixes a segfault which was introduced in this file by the new ratecontrol code
rik
parents:
6703
diff
changeset
|
352 /* 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
|
353 j->s->avctx = calloc(sizeof(*j->s->avctx), 1); |
19619
a83e5b8d2e63
Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
15310
diff
changeset
|
354 /* Set up to encode mjpeg */ |
a83e5b8d2e63
Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
rik
parents:
15310
diff
changeset
|
355 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
|
356 |
11961
487d1638d161
fixing segfault: libavcodec doesn't allocate some buffers if avctx->thread_count == 0
rik
parents:
11926
diff
changeset
|
357 /* 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
|
358 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
|
359 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
360 if (MPV_common_init(j->s) < 0) { |
9186 | 361 av_free(j->s); |
362 av_free(j); | |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
363 return NULL; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
364 } |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
365 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
366 /* correct the value for sc->mb_height */ |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
367 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
|
368 j->s->mb_intra = 1; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
369 |
6703
feeaffcce1fa
adapting to the 'adding fff prefix to avoid global name conflicts' changes in libavcodec
rik
parents:
6328
diff
changeset
|
370 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
|
371 for (i = 1; i < 64; i++) |
15310 | 372 j->s->intra_matrix[i] = clip_uint8( |
7567
85e9956a6727
libavcodec sync; zigzag_direct and block_permute_op replaced by non-globals in MpegEncContext
rik
parents:
7157
diff
changeset
|
373 (ff_mpeg1_default_intra_matrix[i]*j->s->qscale) >> 3); |
7157 | 374 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
|
375 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
|
376 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
|
377 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
378 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
379 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
|
380 unsigned char *u_data, unsigned char *v_data, char *bufr) { |
5864 | 381 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
|
382 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
|
383 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
|
384 /* initialize the buffer */ |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
385 |
11211 | 386 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
|
387 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
388 mjpeg_picture_header(j->s); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
389 |
11926 | 390 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
|
391 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
392 j->s->last_dc[0] = 128; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
393 j->s->last_dc[1] = 128; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
394 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
|
395 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
396 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
|
397 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
|
398 /* 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
|
399 * 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
|
400 /* 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
|
401 source = mb_y * 8 * j->y_rs + |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
402 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
|
403 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
|
404 for (i = 0; i < 8; i++) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
405 for (k = 0; k < 8; k++) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
406 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
|
407 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
408 dest += 8; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
409 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
|
410 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
411 source = mb_y * 8 * j->y_rs + |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
412 (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
|
413 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
|
414 for (i = 0; i < 8; i++) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
415 for (k = 0; k < 8; k++) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
416 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
|
417 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
418 dest += 8; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
419 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
|
420 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
421 if (!j->bw && j->cheap_upsample) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
422 source = mb_y*4*j->u_rs + |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
423 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
|
424 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
|
425 for (i = 0; i < 4; i++) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
426 for (k = 0; k < 8; k++) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
427 dest[k] = source[k*j->u_ps]; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
428 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
|
429 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
430 dest += 16; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
431 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
|
432 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
433 source = mb_y*4*j->v_rs + |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
434 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
|
435 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
|
436 for (i = 0; i < 4; i++) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
437 for (k = 0; k < 8; k++) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
438 dest[k] = source[k*j->v_ps]; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
439 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
|
440 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
441 dest += 16; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
442 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
|
443 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
444 } else if (!j->bw && !j->cheap_upsample) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
445 source = mb_y*8*j->u_rs + |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
446 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
|
447 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
|
448 for (i = 0; i < 8; i++) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
449 for (k = 0; k < 8; k++) |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
450 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
|
451 dest += 8; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
452 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
|
453 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
454 source = mb_y*8*j->v_rs + |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
455 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
|
456 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
|
457 for (i = 0; i < 8; i++) { |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
458 for (k = 0; k < 8; k++) |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
459 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
|
460 dest += 8; |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
461 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
|
462 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
463 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
464 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
|
465 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
466 j->s->block_last_index[0] = |
7157 | 467 j->s->dct_quantize(j->s, j->s->block[0], |
5864 | 468 0, 8, &overflow); |
469 if (overflow) clip_coeffs(j->s, j->s->block[0], | |
470 j->s->block_last_index[0]); | |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
471 j->s->block_last_index[1] = |
7157 | 472 j->s->dct_quantize(j->s, j->s->block[1], |
5864 | 473 1, 8, &overflow); |
474 if (overflow) clip_coeffs(j->s, j->s->block[1], | |
475 j->s->block_last_index[1]); | |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
476 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
477 if (!j->bw) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
478 j->s->block_last_index[4] = |
7157 | 479 j->s->dct_quantize(j->s, j->s->block[2], |
5864 | 480 4, 8, &overflow); |
481 if (overflow) clip_coeffs(j->s, j->s->block[2], | |
482 j->s->block_last_index[2]); | |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
483 j->s->block_last_index[5] = |
7157 | 484 j->s->dct_quantize(j->s, j->s->block[3], |
5864 | 485 5, 8, &overflow); |
486 if (overflow) clip_coeffs(j->s, j->s->block[3], | |
487 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
|
488 } |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
489 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
|
490 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
491 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
492 emms_c(); |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
493 mjpeg_picture_trailer(j->s); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
494 flush_put_bits(&j->s->pb); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
495 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
496 if (j->s->mjpeg_write_tables == 1) |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
497 j->s->mjpeg_write_tables = 0; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
498 |
4683
fba4289cdb41
we are now able to use the new bitwriter code in libavcodec
rik
parents:
4651
diff
changeset
|
499 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
|
500 } |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
501 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
502 void jpeg_enc_uninit(jpeg_enc_t *j) { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
503 mjpeg_close(j->s); |
9186 | 504 av_free(j->s); |
505 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
|
506 } |
d036a9992baf
fast 4:2:2 jpeg encoder, based on libavcodec. - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
diff
changeset
|
507 |
4651
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
508 #if 0 |
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 #define W 32 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
511 #define H 32 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
512 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
513 int quant_store[MBR+1][MBC+1]; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
514 unsigned char buf[W*H*3/2]; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
515 char code[256*1024]; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
516 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
517 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
518 main() { |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
519 int i, size; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
520 FILE *fp; |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
521 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
522 memset(buf, 0, W*H); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
523 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
|
524 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
|
525 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
|
526 |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
527 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
|
528 fp = fopen("test.jpg", "w"); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
529 fwrite(code, 1, size, fp); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
530 fclose(fp); |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
531 } |
49f2bc22f880
mjpeg encoder cleanup - patch by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents:
4347
diff
changeset
|
532 #endif |