40 const uint8_t *bits_table,
const uint8_t *value_table)
47 for (
int i = 1;
i <= 16;
i++) {
52 for (
int i = 0;
i < n;
i++)
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)
69 int matrix_count = 1 + matrices_differ;
74 put_bits(p, 16, 2 + matrix_count * (1 + 64));
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]);
82 if (matrix_count > 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]);
138 size_t *max_pkt_size)
144 if (!sd || !sd->
size)
149 "profile: too large for JPEG\n",
155 new_pkt_size = *max_pkt_size + nb_chunks * (UINT16_MAX + 2 );
156 if (new_pkt_size < *max_pkt_size)
158 *max_pkt_size = new_pkt_size;
172 if (sar.
num > 65535 || sar.
den > 65535) {
175 "Cannot store exact aspect ratio %d:%d\n",
197 if (sd && sd->
size) {
200 size_t remaining = sd->
size;
204 for (
int i = 0;
i < nb_chunks;
i++) {
244 size = strlen(
"CS=ITU601")+3;
255 vsample[0] = hsample[0] =
256 vsample[1] = hsample[1] =
257 vsample[2] = hsample[2] =
258 vsample[3] = hsample[3] = 1;
260 vsample[0] = vsample[1] = vsample[2] = 2;
261 hsample[0] = hsample[1] = hsample[2] = 1;
263 int chroma_h_shift, chroma_v_shift;
267 vsample[1] = 2 >> chroma_v_shift;
268 vsample[2] = 2 >> chroma_v_shift;
270 hsample[1] = 2 >> chroma_h_shift;
271 hsample[2] = 2 >> chroma_h_shift;
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],
282 const int lossless = !m;
283 int hsample[4], vsample[4];
297 chroma_matrix = !lossless && !!memcmp(luma_intra_matrix,
299 sizeof(luma_intra_matrix[0]) * 64);
301 luma_intra_matrix, chroma_intra_matrix, hsample,
302 use_slices, chroma_matrix);
307 default:
av_unreachable(
"ff_mjpeg_encode_picture_header only called by "
308 "AMV, LJPEG, MJPEG and the former has been ruled out");
311 put_bits(pb, 16, 8 + 3 * components);
332 put_bits(pb, 8, lossless ? 0 : chroma_matrix);
338 put_bits(pb, 8, lossless ? 0 : chroma_matrix);
340 if (components == 4) {
367 if (components == 4) {
389 uint8_t *buf = pb->
buf + start;
390 int align= (-(size_t)(buf))&3;
401 if(buf[
i]==0xFF) ff_count++;
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;
421 if(buf[
i]==0xFF) ff_count++;
424 if(ff_count==0)
return;
428 for(
i=
size-1; ff_count;
i--){
442 const uint8_t *bits_table,
443 const uint8_t *val_table)
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++];
454 huff_code[sym] =
code;
469 const uint8_t huff_size[],
const uint16_t huff_code[])
474 put_bits(pb, huff_size[0], huff_code[0]);
484 put_bits(pb, huff_size[nbits], huff_code[nbits]);
499 "Non full-range YUV is non-standard, set strict_std_compliance "
500 "to at most unofficial to use it.\n");
static double val(void *priv, double ch)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_unreachable(msg)
Asserts that are used as compiler optimization hints depending upon ASSERT_LEVEL and NBDEBUG.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
void ff_put_string(PutBitContext *pb, const char *string, int terminate_string)
Put the string string in the bitstream.
static const uint8_t *BS_FUNC align(BSCTX *bc)
Skip bits to a byte boundary.
#define i(width, name, range_min, range_max)
#define EOI
End Of Image marker.
#define FF_COMPLIANCE_UNOFFICIAL
Allow unofficial extensions.
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
FF_VISIBILITY_PUSH_HIDDEN const uint8_t ff_mjpeg_bits_dc_luminance[]
const uint8_t ff_mjpeg_val_ac_chrominance[]
const uint8_t ff_mjpeg_bits_ac_luminance[]
const uint8_t ff_mjpeg_bits_dc_chrominance[]
const uint8_t ff_mjpeg_bits_ac_chrominance[]
const uint8_t ff_mjpeg_val_dc[]
const uint8_t ff_mjpeg_val_ac_luminance[]
Libavcodec version macros.
#define MKTAG(a, b, c, d)
MJPEG encoder and decoder.
@ HUFFMAN_TABLE_OPTIMAL
Compute and use optimal Huffman tables.
static void put_marker(PutBitContext *p, enum JpegMarker code)
void ff_mjpeg_encode_dc(PutBitContext *pb, int val, const uint8_t huff_size[], const uint16_t huff_code[])
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)
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.
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
@ AVCOL_RANGE_JPEG
Full range content.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_BGR0
packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
static void put_sbits(PutBitContext *pb, int n, int32_t value)
static int put_bits_count(PutBitContext *s)
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static int put_bytes_output(const PutBitContext *s)
static void skip_put_bytes(PutBitContext *s, int n)
Skip the given number of bytes.
static const float pred[4]
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
enum AVColorRange color_range
MPEG vs JPEG YUV range.
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
int flags
AV_CODEC_FLAG_*.
Structure to hold side data for an AVFrame.
This structure describes decoded (raw) audio or video data.
Rational number (pair of numerator and denominator).
Holds JPEG frame data and Huffman table data.
int force_duplicated_matrix
uint8_t bits_dc_luminance[17]
DC luminance Huffman bits.
uint8_t bits_ac_luminance[17]
AC luminance Huffman bits.
uint8_t val_ac_luminance[256]
AC luminance Huffman values.
uint8_t val_ac_chrominance[256]
AC chrominance Huffman values.
uint8_t bits_dc_chrominance[17]
DC chrominance Huffman bits.
uint8_t val_dc_luminance[12]
DC luminance Huffman values.
uint8_t bits_ac_chrominance[17]
AC chrominance Huffman bits.
uint8_t val_dc_chrominance[12]
DC chrominance Huffman values.