FFmpeg
Loading...
Searching...
No Matches
mjpegenc_common.c
Go to the documentation of this file.
1/*
2 * lossless JPEG shared bits
3 * Copyright (c) 2000, 2001 Fabrice Bellard
4 * Copyright (c) 2003 Alex Beregszaszi
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23#include <stdint.h>
24#include <string.h>
25
26#include "libavutil/pixdesc.h"
27#include "libavutil/pixfmt.h"
28
29#include "avcodec.h"
30#include "idctdsp.h"
31#include "jpegtables.h"
32#include "put_bits.h"
33#include "mjpegenc.h"
34#include "mjpegenc_common.h"
35#include "mjpeg.h"
36#include "version.h"
37
38/* table_class: 0 = DC coef, 1 = AC coefs */
39static int put_huffman_table(PutBitContext *p, int table_class, int table_id,
40 const uint8_t *bits_table, const uint8_t *value_table)
41{
42 int n = 0;
43
44 put_bits(p, 4, table_class);
45 put_bits(p, 4, table_id);
46
47 for (int i = 1; i <= 16; i++) {
48 n += bits_table[i];
49 put_bits(p, 8, bits_table[i]);
50 }
51
52 for (int i = 0; i < n; i++)
53 put_bits(p, 8, value_table[i]);
54
55 return n + 17;
56}
57
59 const MJpegContext *m,
60 const uint8_t intra_matrix_permutation[64],
61 const uint16_t luma_intra_matrix[64],
62 const uint16_t chroma_intra_matrix[64],
63 int hsample[3], int use_slices, int matrices_differ)
64{
65 int size;
66 uint8_t *ptr;
67
68 if (m) {
69 int matrix_count = 1 + matrices_differ;
71 matrix_count = 2;
72 /* quant matrixes */
73 put_marker(p, DQT);
74 put_bits(p, 16, 2 + matrix_count * (1 + 64));
75 put_bits(p, 4, 0); /* 8 bit precision */
76 put_bits(p, 4, 0); /* table 0 */
77 for (int i = 0; i < 64; i++) {
78 uint8_t j = intra_matrix_permutation[i];
79 put_bits(p, 8, luma_intra_matrix[j]);
80 }
81
82 if (matrix_count > 1) {
83 put_bits(p, 4, 0); /* 8 bit precision */
84 put_bits(p, 4, 1); /* table 1 */
85 for (int i = 0; i < 64; i++) {
86 uint8_t j = intra_matrix_permutation[i];
87 put_bits(p, 8, chroma_intra_matrix[j]);
88 }
89 }
90 }
91
92 if (use_slices) {
93 put_marker(p, DRI);
94 put_bits(p, 16, 4);
95 put_bits(p, 16, (avctx->width-1)/(8*hsample[0]) + 1);
96 }
97
98 /* huffman table */
99 put_marker(p, DHT);
101 ptr = put_bits_ptr(p);
102 put_bits(p, 16, 0); /* patched later */
103 size = 2;
104
105 // Only MJPEG can have a variable Huffman variable. All other
106 // formats use the default Huffman table.
107 if (m && m->huffman == HUFFMAN_TABLE_OPTIMAL) {
112
117 } else {
122
127 }
128 AV_WB16(ptr, size);
129}
130
131enum {
132 ICC_HDR_SIZE = 16, /* ICC_PROFILE\0 tag + 4 bytes */
134 ICC_MAX_CHUNKS = UINT8_MAX,
135};
136
138 size_t *max_pkt_size)
139{
140 const AVFrameSideData *sd;
141 size_t new_pkt_size;
142 int nb_chunks;
144 if (!sd || !sd->size)
145 return 0;
146
147 if (sd->size > ICC_MAX_CHUNKS * ICC_CHUNK_SIZE) {
148 av_log(avctx, AV_LOG_ERROR, "Cannot store %zu byte ICC "
149 "profile: too large for JPEG\n",
150 sd->size);
151 return AVERROR_INVALIDDATA;
152 }
153
154 nb_chunks = (sd->size + ICC_CHUNK_SIZE - 1) / ICC_CHUNK_SIZE;
155 new_pkt_size = *max_pkt_size + nb_chunks * (UINT16_MAX + 2 /* APP2 marker */);
156 if (new_pkt_size < *max_pkt_size) /* overflow */
157 return AVERROR_INVALIDDATA;
158 *max_pkt_size = new_pkt_size;
159 return 0;
160}
161
163 const AVFrame *frame)
164{
165 const AVFrameSideData *sd = NULL;
166 int size;
167 uint8_t *ptr;
168
169 if (avctx->sample_aspect_ratio.num > 0 && avctx->sample_aspect_ratio.den > 0) {
170 AVRational sar = avctx->sample_aspect_ratio;
171
172 if (sar.num > 65535 || sar.den > 65535) {
173 if (!av_reduce(&sar.num, &sar.den, avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 65535))
174 av_log(avctx, AV_LOG_WARNING,
175 "Cannot store exact aspect ratio %d:%d\n",
177 avctx->sample_aspect_ratio.den);
178 }
179
180 /* JFIF header */
181 put_marker(p, APP0);
182 put_bits(p, 16, 16);
183 ff_put_string(p, "JFIF", 1); /* this puts the trailing zero-byte too */
184 /* The most significant byte is used for major revisions, the least
185 * significant byte for minor revisions. Version 1.02 is the current
186 * released revision. */
187 put_bits(p, 16, 0x0102);
188 put_bits(p, 8, 0); /* units type: 0 - aspect ratio */
189 put_bits(p, 16, sar.num);
190 put_bits(p, 16, sar.den);
191 put_bits(p, 8, 0); /* thumbnail width */
192 put_bits(p, 8, 0); /* thumbnail height */
193 }
194
195 /* ICC profile */
197 if (sd && sd->size) {
198 const int nb_chunks = (sd->size + ICC_CHUNK_SIZE - 1) / ICC_CHUNK_SIZE;
199 const uint8_t *data = sd->data;
200 size_t remaining = sd->size;
201 /* must already be checked by the packat allocation code */
204 for (int i = 0; i < nb_chunks; i++) {
205 size = FFMIN(remaining, ICC_CHUNK_SIZE);
206 av_assert1(size > 0);
207 ptr = put_bits_ptr(p);
208 ptr[0] = 0xff; /* chunk marker, not part of ICC_HDR_SIZE */
209 ptr[1] = APP2;
210 AV_WB16(ptr+2, size + ICC_HDR_SIZE);
211 AV_WL32(ptr+4, MKTAG('I','C','C','_'));
212 AV_WL32(ptr+8, MKTAG('P','R','O','F'));
213 AV_WL32(ptr+12, MKTAG('I','L','E','\0'));
214 ptr[16] = i+1;
215 ptr[17] = nb_chunks;
216 memcpy(&ptr[18], data, size);
218 remaining -= size;
219 data += size;
220 }
221 av_assert1(!remaining);
222 }
223
224 /* comment */
225 if (!(avctx->flags & AV_CODEC_FLAG_BITEXACT)) {
226 put_marker(p, COM);
228 ptr = put_bits_ptr(p);
229 put_bits(p, 16, 0); /* patched later */
231 size = strlen(LIBAVCODEC_IDENT)+3;
232 AV_WB16(ptr, size);
233 }
234
235 if (((avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
236 avctx->pix_fmt == AV_PIX_FMT_YUV422P ||
238 || avctx->color_range == AVCOL_RANGE_MPEG) {
239 put_marker(p, COM);
241 ptr = put_bits_ptr(p);
242 put_bits(p, 16, 0); /* patched later */
243 ff_put_string(p, "CS=ITU601", 1);
244 size = strlen("CS=ITU601")+3;
245 AV_WB16(ptr, size);
246 }
247}
248
249void ff_mjpeg_init_hvsample(const AVCodecContext *avctx, int hsample[4], int vsample[4])
250{
251 if (avctx->codec_id == AV_CODEC_ID_LJPEG &&
252 ( avctx->pix_fmt == AV_PIX_FMT_BGR0
253 || avctx->pix_fmt == AV_PIX_FMT_BGRA
254 || avctx->pix_fmt == AV_PIX_FMT_BGR24)) {
255 vsample[0] = hsample[0] =
256 vsample[1] = hsample[1] =
257 vsample[2] = hsample[2] =
258 vsample[3] = hsample[3] = 1;
259 } else if (avctx->pix_fmt == AV_PIX_FMT_YUV444P || avctx->pix_fmt == AV_PIX_FMT_YUVJ444P) {
260 vsample[0] = vsample[1] = vsample[2] = 2;
261 hsample[0] = hsample[1] = hsample[2] = 1;
262 } else {
263 int chroma_h_shift, chroma_v_shift;
264 av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift,
265 &chroma_v_shift);
266 vsample[0] = 2;
267 vsample[1] = 2 >> chroma_v_shift;
268 vsample[2] = 2 >> chroma_v_shift;
269 hsample[0] = 2;
270 hsample[1] = 2 >> chroma_h_shift;
271 hsample[2] = 2 >> chroma_h_shift;
272 }
273}
274
276 const AVFrame *frame, const struct MJpegContext *m,
277 const uint8_t intra_matrix_permutation[64], int pred,
278 const uint16_t luma_intra_matrix[64],
279 const uint16_t chroma_intra_matrix[64],
280 int use_slices)
281{
282 const int lossless = !m;
283 int hsample[4], vsample[4];
284 int components = 3 + (avctx->pix_fmt == AV_PIX_FMT_BGRA);
285 int chroma_matrix;
286
287 ff_mjpeg_init_hvsample(avctx, hsample, vsample);
288
289 put_marker(pb, SOI);
290
291 // hack for AMV mjpeg format
292 if (avctx->codec_id == AV_CODEC_ID_AMV)
293 return;
294
295 jpeg_put_comments(avctx, pb, frame);
296
297 chroma_matrix = !lossless && !!memcmp(luma_intra_matrix,
298 chroma_intra_matrix,
299 sizeof(luma_intra_matrix[0]) * 64);
300 jpeg_table_header(avctx, pb, m, intra_matrix_permutation,
301 luma_intra_matrix, chroma_intra_matrix, hsample,
302 use_slices, chroma_matrix);
303
304 switch (avctx->codec_id) {
305 case AV_CODEC_ID_MJPEG: put_marker(pb, SOF0 ); break;
306 case AV_CODEC_ID_LJPEG: put_marker(pb, SOF3 ); break;
307 default: av_unreachable("ff_mjpeg_encode_picture_header only called by "
308 "AMV, LJPEG, MJPEG and the former has been ruled out");
309 }
310
311 put_bits(pb, 16, 8 + 3 * components);
312 if (lossless && ( avctx->pix_fmt == AV_PIX_FMT_BGR0
313 || avctx->pix_fmt == AV_PIX_FMT_BGRA
314 || avctx->pix_fmt == AV_PIX_FMT_BGR24))
315 put_bits(pb, 8, 9); /* 9 bits/component RCT */
316 else
317 put_bits(pb, 8, 8); /* 8 bits/component */
318 put_bits(pb, 16, avctx->height);
319 put_bits(pb, 16, avctx->width);
320 put_bits(pb, 8, components); /* 3 or 4 components */
321
322 /* Y component */
323 put_bits(pb, 8, 1); /* component number */
324 put_bits(pb, 4, hsample[0]); /* H factor */
325 put_bits(pb, 4, vsample[0]); /* V factor */
326 put_bits(pb, 8, 0); /* select matrix */
327
328 /* Cb component */
329 put_bits(pb, 8, 2); /* component number */
330 put_bits(pb, 4, hsample[1]); /* H factor */
331 put_bits(pb, 4, vsample[1]); /* V factor */
332 put_bits(pb, 8, lossless ? 0 : chroma_matrix); /* select matrix */
333
334 /* Cr component */
335 put_bits(pb, 8, 3); /* component number */
336 put_bits(pb, 4, hsample[2]); /* H factor */
337 put_bits(pb, 4, vsample[2]); /* V factor */
338 put_bits(pb, 8, lossless ? 0 : chroma_matrix); /* select matrix */
339
340 if (components == 4) {
341 put_bits(pb, 8, 4); /* component number */
342 put_bits(pb, 4, hsample[3]); /* H factor */
343 put_bits(pb, 4, vsample[3]); /* V factor */
344 put_bits(pb, 8, 0); /* select matrix */
345 }
346
347 /* scan header */
348 put_marker(pb, SOS);
349 put_bits(pb, 16, 6 + 2*components); /* length */
350 put_bits(pb, 8, components); /* 3 components */
351
352 /* Y component */
353 put_bits(pb, 8, 1); /* index */
354 put_bits(pb, 4, 0); /* DC huffman table index */
355 put_bits(pb, 4, 0); /* AC huffman table index */
356
357 /* Cb component */
358 put_bits(pb, 8, 2); /* index */
359 put_bits(pb, 4, 1); /* DC huffman table index */
360 put_bits(pb, 4, lossless ? 0 : 1); /* AC huffman table index */
361
362 /* Cr component */
363 put_bits(pb, 8, 3); /* index */
364 put_bits(pb, 4, 1); /* DC huffman table index */
365 put_bits(pb, 4, lossless ? 0 : 1); /* AC huffman table index */
366
367 if (components == 4) {
368 /* Alpha component */
369 put_bits(pb, 8, 4); /* index */
370 put_bits(pb, 4, 0); /* DC huffman table index */
371 put_bits(pb, 4, 0); /* AC huffman table index */
372 }
373
374 put_bits(pb, 8, pred); /* Ss (not used); pred only nonzero for LJPEG */
375
376 switch (avctx->codec_id) {
377 case AV_CODEC_ID_MJPEG: put_bits(pb, 8, 63); break; /* Se (not used) */
378 case AV_CODEC_ID_LJPEG: put_bits(pb, 8, 0); break; /* not used */
379 default: av_unreachable("Only LJPEG, MJPEG possible here");
380 }
381
382 put_bits(pb, 8, 0); /* Ah/Al (not used) */
383}
384
386{
387 int size;
388 int i, ff_count;
389 uint8_t *buf = pb->buf + start;
390 int align= (-(size_t)(buf))&3;
391 int pad = (-put_bits_count(pb))&7;
392
393 if (pad)
394 put_bits(pb, pad, (1<<pad)-1);
395
396 flush_put_bits(pb);
397 size = put_bytes_output(pb) - start;
398
399 ff_count=0;
400 for(i=0; i<size && i<align; i++){
401 if(buf[i]==0xFF) ff_count++;
402 }
403 for(; i<size-15; i+=16){
404 int acc, v;
405
406 v= *(uint32_t*)(&buf[i]);
407 acc= (((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
408 v= *(uint32_t*)(&buf[i+4]);
409 acc+=(((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
410 v= *(uint32_t*)(&buf[i+8]);
411 acc+=(((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
412 v= *(uint32_t*)(&buf[i+12]);
413 acc+=(((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
414
415 acc>>=4;
416 acc+= (acc>>16);
417 acc+= (acc>>8);
418 ff_count+= acc&0xFF;
419 }
420 for(; i<size; i++){
421 if(buf[i]==0xFF) ff_count++;
422 }
423
424 if(ff_count==0) return;
425
426 skip_put_bytes(pb, ff_count);
427
428 for(i=size-1; ff_count; i--){
429 int v= buf[i];
430
431 if(v==0xFF){
432 buf[i+ff_count]= 0;
433 ff_count--;
434 }
435
436 buf[i+ff_count]= v;
437 }
438}
439
440/* isn't this function nicer than the one in the libjpeg ? */
441void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code,
442 const uint8_t *bits_table,
443 const uint8_t *val_table)
444{
445 int k, code;
446
447 k = 0;
448 code = 0;
449 for (int i = 1; i <= 16; i++) {
450 int nb = bits_table[i];
451 for (int j = 0; j < nb; j++) {
452 int sym = val_table[k++];
453 huff_size[sym] = i;
454 huff_code[sym] = code;
455 code++;
456 }
457 code <<= 1;
458 }
459}
460
462{
463 av_assert1((header_bits & 7) == 0);
464
465 put_marker(pb, EOI);
466}
467
469 const uint8_t huff_size[], const uint16_t huff_code[])
470{
471 int mant, nbits;
472
473 if (val == 0) {
474 put_bits(pb, huff_size[0], huff_code[0]);
475 } else {
476 mant = val;
477 if (val < 0) {
478 val = -val;
479 mant--;
480 }
481
482 nbits= av_log2_16bit(val) + 1;
483
484 put_bits(pb, huff_size[nbits], huff_code[nbits]);
485
486 put_sbits(pb, nbits, mant);
487 }
488}
489
491{
493 avctx->color_range != AVCOL_RANGE_JPEG &&
494 (avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
495 avctx->pix_fmt == AV_PIX_FMT_YUV422P ||
496 avctx->pix_fmt == AV_PIX_FMT_YUV444P ||
497 avctx->color_range == AVCOL_RANGE_MPEG)) {
498 av_log(avctx, AV_LOG_ERROR,
499 "Non full-range YUV is non-standard, set strict_std_compliance "
500 "to at most unofficial to use it.\n");
501 return AVERROR(EINVAL);
502 }
503 return 0;
504}
static double val(void *priv, double ch)
Definition aeval.c:77
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition avassert.h:58
#define av_unreachable(msg)
Asserts that are used as compiler optimization hints depending upon ASSERT_LEVEL and NBDEBUG.
Definition avassert.h:109
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
void ff_put_string(PutBitContext *pb, const char *string, int terminate_string)
Put the string string in the bitstream.
Definition bitstream.c:39
static const uint8_t *BS_FUNC align(BSCTX *bc)
Skip bits to a byte boundary.
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define NULL
Definition coverity.c:32
#define EOI
End Of Image marker.
Definition cpia.c:43
#define FF_COMPLIANCE_UNOFFICIAL
Allow unofficial extensions.
Definition defs.h:61
static AVFrame * frame
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
Definition avcodec.h:322
@ AV_CODEC_ID_LJPEG
Definition codec_id.h:59
@ AV_CODEC_ID_MJPEG
Definition codec_id.h:57
@ AV_CODEC_ID_AMV
Definition codec_id.h:157
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AVERROR(e)
Definition error.h:45
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition frame.c:659
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
Definition frame.h:144
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition rational.c:35
#define av_log2_16bit
Definition intmath.h:85
#define AV_WL32(p, v)
#define AV_WB16(p, v)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
Definition j2kenc.c:154
FF_VISIBILITY_PUSH_HIDDEN const uint8_t ff_mjpeg_bits_dc_luminance[]
Definition jpegtabs.h:32
const uint8_t ff_mjpeg_val_ac_chrominance[]
Definition jpegtabs.h:69
const uint8_t ff_mjpeg_bits_ac_luminance[]
Definition jpegtabs.h:40
const uint8_t ff_mjpeg_bits_dc_chrominance[]
Definition jpegtabs.h:37
const uint8_t ff_mjpeg_bits_ac_chrominance[]
Definition jpegtabs.h:66
const uint8_t ff_mjpeg_val_dc[]
Definition jpegtabs.h:34
const uint8_t ff_mjpeg_val_ac_luminance[]
Definition jpegtabs.h:42
Libavcodec version macros.
#define LIBAVCODEC_IDENT
Definition version.h:43
#define FFMIN(a, b)
Definition macros.h:49
#define MKTAG(a, b, c, d)
Definition macros.h:55
MJPEG encoder and decoder.
@ DQT
Definition mjpeg.h:73
@ DRI
Definition mjpeg.h:75
@ DHT
Definition mjpeg.h:56
@ APP2
Definition mjpeg.h:81
@ SOS
Definition mjpeg.h:72
@ APP0
Definition mjpeg.h:79
@ SOI
Definition mjpeg.h:70
@ COM
Definition mjpeg.h:111
@ SOF3
Definition mjpeg.h:42
@ SOF0
Definition mjpeg.h:39
MJPEG encoder.
@ HUFFMAN_TABLE_OPTIMAL
Compute and use optimal Huffman tables.
Definition mjpegenc.h:85
static void put_marker(PutBitContext *p, enum JpegMarker code)
Definition mjpegenc.h:89
void ff_mjpeg_encode_dc(PutBitContext *pb, int val, const uint8_t huff_size[], const uint16_t huff_code[])
@ ICC_CHUNK_SIZE
@ ICC_MAX_CHUNKS
@ ICC_HDR_SIZE
void ff_mjpeg_init_hvsample(const AVCodecContext *avctx, int hsample[4], int vsample[4])
void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, const AVFrame *frame, const struct MJpegContext *m, const uint8_t intra_matrix_permutation[64], int pred, const uint16_t luma_intra_matrix[64], const uint16_t chroma_intra_matrix[64], int use_slices)
int ff_mjpeg_add_icc_profile_size(AVCodecContext *avctx, const AVFrame *frame, size_t *max_pkt_size)
int ff_mjpeg_encode_check_pix_fmt(AVCodecContext *avctx)
void ff_mjpeg_escape_FF(PutBitContext *pb, int start)
void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code, const uint8_t *bits_table, const uint8_t *val_table)
static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p, const AVFrame *frame)
static int put_huffman_table(PutBitContext *p, int table_class, int table_id, const uint8_t *bits_table, const uint8_t *value_table)
static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p, const MJpegContext *m, const uint8_t intra_matrix_permutation[64], const uint16_t luma_intra_matrix[64], const uint16_t chroma_intra_matrix[64], int hsample[3], int use_slices, int matrices_differ)
void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits)
const char data[16]
Definition mxf.c:149
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
Definition pixdesc.c:3488
pixel format definitions
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition pixfmt.h:766
@ AVCOL_RANGE_JPEG
Full range content.
Definition pixfmt.h:783
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition pixfmt.h:73
@ AV_PIX_FMT_BGR0
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
Definition pixfmt.h:265
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition pixfmt.h:77
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
Definition pixfmt.h:102
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition pixfmt.h:78
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition pixfmt.h:76
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition pixfmt.h:87
bitstream writer API
static void put_sbits(PutBitContext *pb, int n, int32_t value)
Definition put_bits.h:291
static int put_bits_count(PutBitContext *s)
Definition put_bits.h:90
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
Definition put_bits.h:402
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition put_bits.h:153
static int put_bytes_output(const PutBitContext *s)
Definition put_bits.h:99
static void skip_put_bytes(PutBitContext *s, int n)
Skip the given number of bytes.
Definition put_bits.h:411
static const float pred[4]
Definition siprdata.h:259
const uint8_t * code
Definition spdifenc.c:433
main external API structure.
Definition avcodec.h:443
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition avcodec.h:643
int width
picture width / height.
Definition avcodec.h:604
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition avcodec.h:681
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition avcodec.h:1375
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition avcodec.h:628
int flags
AV_CODEC_FLAG_*.
Definition avcodec.h:500
enum AVCodecID codec_id
Definition avcodec.h:453
Structure to hold side data for an AVFrame.
Definition frame.h:327
size_t size
Definition frame.h:330
uint8_t * data
Definition frame.h:329
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
Holds JPEG frame data and Huffman table data.
Definition mjpegenc.h:44
int force_duplicated_matrix
Definition mjpegenc.h:47
uint8_t bits_dc_luminance[17]
DC luminance Huffman bits.
Definition mjpegenc.h:65
uint8_t bits_ac_luminance[17]
AC luminance Huffman bits.
Definition mjpegenc.h:71
uint8_t val_ac_luminance[256]
AC luminance Huffman values.
Definition mjpegenc.h:72
uint8_t val_ac_chrominance[256]
AC chrominance Huffman values.
Definition mjpegenc.h:74
uint8_t bits_dc_chrominance[17]
DC chrominance Huffman bits.
Definition mjpegenc.h:67
uint8_t val_dc_luminance[12]
DC luminance Huffman values.
Definition mjpegenc.h:66
uint8_t bits_ac_chrominance[17]
AC chrominance Huffman bits.
Definition mjpegenc.h:73
uint8_t val_dc_chrominance[12]
DC chrominance Huffman values.
Definition mjpegenc.h:68
uint8_t * buf
Definition put_bits.h:53
#define av_log(a,...)
int size