FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
j2kenc.c File Reference

JPEG2000 image encoder. More...

#include <float.h>
#include "avcodec.h"
#include "internal.h"
#include "bytestream.h"
#include "jpeg2000.h"
#include "libavutil/common.h"
#include "libavutil/pixdesc.h"
#include "libavutil/opt.h"
#include "libavutil/intreadwrite.h"

Go to the source code of this file.

Data Structures

struct  Jpeg2000Tile
 
struct  Jpeg2000EncoderContext
 

Macros

#define NMSEDEC_BITS   7
 
#define NMSEDEC_FRACBITS   (NMSEDEC_BITS-1)
 
#define WMSEDEC_SHIFT   13
 must be >= 13 More...
 
#define LAMBDA_SCALE   (100000000LL << (WMSEDEC_SHIFT - 13))
 
#define CODEC_JP2   1
 
#define CODEC_J2K   0
 
#define OFFSET(x)   offsetof(Jpeg2000EncoderContext, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static void put_bits (Jpeg2000EncoderContext *s, int val, int n)
 put n times val bit More...
 
static void put_num (Jpeg2000EncoderContext *s, int num, int n)
 put n least significant bits of a number num More...
 
static void j2k_flush (Jpeg2000EncoderContext *s)
 flush the bitstream More...
 
static void tag_tree_code (Jpeg2000EncoderContext *s, Jpeg2000TgtNode *node, int threshold)
 code the value stored in node More...
 
static void tag_tree_update (Jpeg2000TgtNode *node)
 update the value in node More...
 
static int put_siz (Jpeg2000EncoderContext *s)
 
static int put_cod (Jpeg2000EncoderContext *s)
 
static int put_qcd (Jpeg2000EncoderContext *s, int compno)
 
static int put_com (Jpeg2000EncoderContext *s, int compno)
 
static uint8_tput_sot (Jpeg2000EncoderContext *s, int tileno)
 
static int init_tiles (Jpeg2000EncoderContext *s)
 compute the sizes of tiles, resolution levels, bands, etc. More...
 
static void copy_frame (Jpeg2000EncoderContext *s)
 
static void init_quantization (Jpeg2000EncoderContext *s)
 
static void init_luts (void)
 
static int getnmsedec_sig (int x, int bpno)
 
static int getnmsedec_ref (int x, int bpno)
 
static void encode_sigpass (Jpeg2000T1Context *t1, int width, int height, int bandno, int *nmsedec, int bpno)
 
static void encode_refpass (Jpeg2000T1Context *t1, int width, int height, int *nmsedec, int bpno)
 
static void encode_clnpass (Jpeg2000T1Context *t1, int width, int height, int bandno, int *nmsedec, int bpno)
 
static void encode_cblk (Jpeg2000EncoderContext *s, Jpeg2000T1Context *t1, Jpeg2000Cblk *cblk, Jpeg2000Tile *tile, int width, int height, int bandpos, int lev)
 
static void putnumpasses (Jpeg2000EncoderContext *s, int n)
 
static int encode_packet (Jpeg2000EncoderContext *s, Jpeg2000ResLevel *rlevel, int precno, uint8_t *expn, int numgbits)
 
static int encode_packets (Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int tileno)
 
static int getcut (Jpeg2000Cblk *cblk, int64_t lambda, int dwt_norm)
 
static void truncpasses (Jpeg2000EncoderContext *s, Jpeg2000Tile *tile)
 
static int encode_tile (Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int tileno)
 
static void cleanup (Jpeg2000EncoderContext *s)
 
static void reinit (Jpeg2000EncoderContext *s)
 
static void update_size (uint8_t *size, const uint8_t *end)
 
static int encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
 
static av_cold int j2kenc_init (AVCodecContext *avctx)
 
static int j2kenc_destroy (AVCodecContext *avctx)
 

Variables

static int lut_nmsedec_ref [1<< NMSEDEC_BITS]
 
static int lut_nmsedec_ref0 [1<< NMSEDEC_BITS]
 
static int lut_nmsedec_sig [1<< NMSEDEC_BITS]
 
static int lut_nmsedec_sig0 [1<< NMSEDEC_BITS]
 
static const int dwt_norms [2][4][10]
 
static const AVOption options []
 
static const AVClass j2k_class
 
AVCodec ff_jpeg2000_encoder
 

Detailed Description

JPEG2000 image encoder.

Author
Kamil Nowosad

Definition in file j2kenc.c.

Macro Definition Documentation

#define NMSEDEC_BITS   7

Definition at line 76 of file j2kenc.c.

Referenced by getnmsedec_ref(), getnmsedec_sig(), and init_luts().

#define NMSEDEC_FRACBITS   (NMSEDEC_BITS-1)
#define WMSEDEC_SHIFT   13

must be >= 13

Definition at line 78 of file j2kenc.c.

Referenced by getcut().

#define LAMBDA_SCALE   (100000000LL << (WMSEDEC_SHIFT - 13))

Definition at line 79 of file j2kenc.c.

Referenced by encode_frame().

#define CODEC_JP2   1

Definition at line 81 of file j2kenc.c.

Referenced by encode_frame(), and j2kenc_init().

#define CODEC_J2K   0

Definition at line 82 of file j2kenc.c.

#define OFFSET (   x)    offsetof(Jpeg2000EncoderContext, x)

Definition at line 1222 of file j2kenc.c.

Definition at line 1223 of file j2kenc.c.

Function Documentation

static void put_bits ( Jpeg2000EncoderContext s,
int  val,
int  n 
)
static

put n times val bit

Definition at line 208 of file j2kenc.c.

Referenced by aac_adtstoasc_filter(), aac_encode_frame(), ac3_output_frame_header(), adpcm_encode_frame(), adts_decode_extradata(), adts_write_frame_header(), asv1_encode_block(), asv1_put_level(), asv2_encode_block(), asv2_put_bits(), asv2_put_level(), avpriv_align_put_bits(), avpriv_copy_bits(), avpriv_dca_convert_bitstream(), avpriv_put_string(), binary_export(), bit_copy(), cbs_av1_write_increment(), cbs_av1_write_ns(), cbs_av1_write_su(), cbs_av1_write_uvlc(), cbs_h264_write_nal_unit(), cbs_h265_write_nal_unit(), cbs_jpeg_write_scan(), cbs_mpeg2_write_slice(), cbs_vp9_write_increment(), cbs_vp9_write_le(), cbs_vp9_write_s(), cbs_write_se_golomb(), cbs_write_ue_golomb(), codebook_trellis_rate(), convert_input(), copy_bits(), dnxhd_encode_block(), dnxhd_encode_dc(), dnxhd_encode_thread(), dv_encode_ac(), dv_encode_video_segment(), encode_422_bitstream(), encode_ac_coeffs(), encode_aspect_ratio(), encode_bitstream(), encode_block(), encode_clean_area(), encode_codeword(), encode_color_spec(), encode_dc(), encode_exp_vlc(), encode_ext_header(), encode_flush(), encode_frame(), encode_frame_rate(), encode_frame_size(), encode_hq_slice(), encode_individual_channel(), encode_line_TMPL(), encode_mb_skip_run(), encode_ms_info(), encode_packet(), encode_parse_info(), encode_picture_ls(), encode_pulses(), encode_quant_matrix(), encode_sample_fmt(), encode_scalar(), encode_scale_factors(), encode_scan_format(), encode_signal_range(), encode_slice(), encode_subband(), encode_superframe(), encode_table(), encode_vlc_codeword(), encode_window_bands_info(), ff_aac_encode_ltp_info(), ff_aac_encode_main_pred(), ff_aac_encode_tns_info(), ff_cbs_write_unsigned(), ff_dca_vlc_enc_alloc(), ff_dca_vlc_enc_quant(), ff_eac3_output_frame_header(), ff_flv2_encode_ac_esc(), ff_flv_encode_picture_header(), ff_h261_encode_mb(), ff_h261_encode_picture_header(), ff_h263_encode_gob_header(), ff_h263_encode_mb(), ff_h263_encode_mba(), ff_h263_encode_motion(), ff_h263_encode_picture_header(), ff_hevc_encode_nal_vps(), ff_isom_write_av1c(), ff_mjpeg_encode_dc(), ff_mjpeg_encode_picture_frame(), ff_mjpeg_encode_picture_header(), ff_mjpeg_escape_FF(), ff_mjpeg_find_marker(), ff_mpeg1_encode_picture_header(), ff_mpeg1_encode_slice_header(), ff_mpeg4_encode_mb(), ff_mpeg4_encode_picture_header(), ff_mpeg4_encode_video_packet_header(), ff_mpeg4_merge_partitions(), ff_mpeg4_stuffing(), ff_mpv_encode_picture(), ff_msmpeg4_code012(), ff_msmpeg4_encode_block(), ff_msmpeg4_encode_ext_header(), ff_msmpeg4_encode_mb(), ff_msmpeg4_encode_motion(), ff_msmpeg4_encode_picture_header(), ff_pce_copy_bits(), ff_rv10_encode_picture_header(), ff_rv20_encode_picture_header(), ff_wmv2_encode_mb(), ff_wmv2_encode_picture_header(), ff_write_quant_matrix(), floor_encode(), flv_write_codec_header(), gif_image_write_image(), h261_encode_block(), h261_encode_gob_header(), h261_encode_motion(), h263_encode_block(), h263p_encode_umotion(), jpeg_put_comments(), jpeg_table_header(), latm_write_frame_header(), latm_write_packet(), ls_encode_run(), ls_store_lse(), main(), mov_write_ac3_tag(), mov_write_dvc1_structs(), mov_write_eac3_tag(), mpeg1_encode_block(), mpeg1_encode_mb_internal(), mpeg1_encode_motion(), mpeg1_encode_sequence_header(), mpeg4_encode_block(), mpeg4_encode_dc(), mpeg4_encode_gop_header(), mpeg4_encode_visual_object_header(), mpeg4_encode_vol_header(), msmpeg4_encode_dc(), msmpeg4v2_encode_motion(), output_audio_block(), pack_bitstream(), pack_float_sample(), pnm_decode_frame(), put_alpha_diff(), put_alpha_run(), put_audio_specific_config(), put_bitstream_info(), put_cabac_bit(), put_cabac_terminate(), put_codebook_header(), put_codeword(), put_floor_header(), put_frame_header(), put_header(), put_huffman_table(), put_ics_info(), put_main_header(), put_marker(), put_mb_modes(), put_num(), put_pack_header(), put_pce(), put_primary_audio_header(), put_qscale(), put_residue_header(), put_subframe(), put_subframe_samples(), put_swf_line_edge(), put_swf_matrix(), put_swf_rect(), put_system_header(), put_vc2_ue_uint(), put_xsub_rle(), quantize_and_encode_band_cost_template(), ra144_encode_frame(), ra144_encode_subblock(), s302m_encode2_frame(), save_bits(), sbc_pack_frame(), send_mode_a(), send_mode_b(), set_te_golomb(), set_ue_golomb(), set_ue_golomb_long(), set_ur_golomb(), set_ur_golomb_jpegls(), svq1_encode_frame(), svq1_encode_plane(), svq1_write_header(), swf_write_header(), tag_tree_code(), tta_encode_frame(), vorbis_encode_frame(), vp9_raw_reorder_make_output(), wavpack_encode_sample(), write_block_data(), write_decoding_params(), write_element(), write_element_header(), write_filter_params(), write_frame(), write_frame_footer(), write_frame_header(), write_header(), write_huff_codes(), write_major_sync(), write_matrix_params(), write_ptl(), write_ptl_layer(), write_restart_header(), write_streaminfo(), write_subframes(), write_substrs(), and write_utf8().

static void put_num ( Jpeg2000EncoderContext s,
int  num,
int  n 
)
static

put n least significant bits of a number num

Definition at line 221 of file j2kenc.c.

Referenced by encode_packet(), and putnumpasses().

static void j2k_flush ( Jpeg2000EncoderContext s)
static

flush the bitstream

Definition at line 228 of file j2kenc.c.

Referenced by encode_packet().

static void tag_tree_code ( Jpeg2000EncoderContext s,
Jpeg2000TgtNode node,
int  threshold 
)
static

code the value stored in node

Definition at line 239 of file j2kenc.c.

Referenced by encode_packet().

static void tag_tree_update ( Jpeg2000TgtNode node)
static

update the value in node

Definition at line 267 of file j2kenc.c.

Referenced by encode_packet().

static int put_siz ( Jpeg2000EncoderContext s)
static

Definition at line 279 of file j2kenc.c.

Referenced by encode_frame().

static int put_cod ( Jpeg2000EncoderContext s)
static

Definition at line 308 of file j2kenc.c.

Referenced by encode_frame().

static int put_qcd ( Jpeg2000EncoderContext s,
int  compno 
)
static

Definition at line 335 of file j2kenc.c.

Referenced by encode_frame().

static int put_com ( Jpeg2000EncoderContext s,
int  compno 
)
static

Definition at line 361 of file j2kenc.c.

Referenced by encode_frame().

static uint8_t* put_sot ( Jpeg2000EncoderContext s,
int  tileno 
)
static

Definition at line 380 of file j2kenc.c.

Referenced by encode_frame().

static int init_tiles ( Jpeg2000EncoderContext s)
static

compute the sizes of tiles, resolution levels, bands, etc.

allocate memory for them divide the input image into tile-components

Definition at line 404 of file j2kenc.c.

Referenced by j2kenc_init().

static void copy_frame ( Jpeg2000EncoderContext s)
static

Definition at line 450 of file j2kenc.c.

Referenced by encode_frame().

static void init_quantization ( Jpeg2000EncoderContext s)
static

Definition at line 488 of file j2kenc.c.

Referenced by j2kenc_init().

static void init_luts ( void  )
static

Definition at line 518 of file j2kenc.c.

Referenced by j2kenc_init().

static int getnmsedec_sig ( int  x,
int  bpno 
)
static

Definition at line 536 of file j2kenc.c.

Referenced by encode_clnpass(), and encode_sigpass().

static int getnmsedec_ref ( int  x,
int  bpno 
)
static

Definition at line 543 of file j2kenc.c.

Referenced by encode_refpass().

static void encode_sigpass ( Jpeg2000T1Context t1,
int  width,
int  height,
int  bandno,
int nmsedec,
int  bpno 
)
static

Definition at line 550 of file j2kenc.c.

Referenced by encode_cblk().

static void encode_refpass ( Jpeg2000T1Context t1,
int  width,
int  height,
int nmsedec,
int  bpno 
)
static

Definition at line 572 of file j2kenc.c.

Referenced by encode_cblk().

static void encode_clnpass ( Jpeg2000T1Context t1,
int  width,
int  height,
int  bandno,
int nmsedec,
int  bpno 
)
static

Definition at line 586 of file j2kenc.c.

Referenced by encode_cblk().

static void encode_cblk ( Jpeg2000EncoderContext s,
Jpeg2000T1Context t1,
Jpeg2000Cblk cblk,
Jpeg2000Tile tile,
int  width,
int  height,
int  bandpos,
int  lev 
)
static

Definition at line 641 of file j2kenc.c.

Referenced by encode_tile().

static void putnumpasses ( Jpeg2000EncoderContext s,
int  n 
)
static

Definition at line 700 of file j2kenc.c.

Referenced by encode_packet().

static int encode_packet ( Jpeg2000EncoderContext s,
Jpeg2000ResLevel rlevel,
int  precno,
uint8_t expn,
int  numgbits 
)
static

Definition at line 715 of file j2kenc.c.

Referenced by encode_packets().

static int encode_packets ( Jpeg2000EncoderContext s,
Jpeg2000Tile tile,
int  tileno 
)
static

Definition at line 813 of file j2kenc.c.

Referenced by encode_tile().

static int getcut ( Jpeg2000Cblk cblk,
int64_t  lambda,
int  dwt_norm 
)
static

Definition at line 836 of file j2kenc.c.

Referenced by truncpasses().

static void truncpasses ( Jpeg2000EncoderContext s,
Jpeg2000Tile tile 
)
static

Definition at line 854 of file j2kenc.c.

Referenced by encode_tile().

static int encode_tile ( Jpeg2000EncoderContext s,
Jpeg2000Tile tile,
int  tileno 
)
static

Definition at line 883 of file j2kenc.c.

Referenced by encode_frame().

static void cleanup ( Jpeg2000EncoderContext s)
static

Definition at line 970 of file j2kenc.c.

Referenced by j2kenc_destroy().

static void reinit ( Jpeg2000EncoderContext s)
static

Definition at line 985 of file j2kenc.c.

Referenced by encode_frame(), and v4l2_handle_event().

static void update_size ( uint8_t size,
const uint8_t end 
)
static

Definition at line 995 of file j2kenc.c.

Referenced by encode_frame().

static int encode_frame ( AVCodecContext avctx,
AVPacket pkt,
const AVFrame pict,
int got_packet 
)
static

Definition at line 1000 of file j2kenc.c.

static av_cold int j2kenc_init ( AVCodecContext avctx)
static

Definition at line 1135 of file j2kenc.c.

static int j2kenc_destroy ( AVCodecContext avctx)
static

Definition at line 1212 of file j2kenc.c.

Variable Documentation

int lut_nmsedec_ref[1<< NMSEDEC_BITS]
static

Definition at line 84 of file j2kenc.c.

Referenced by getnmsedec_ref(), and init_luts().

int lut_nmsedec_ref0[1<< NMSEDEC_BITS]
static

Definition at line 84 of file j2kenc.c.

Referenced by getnmsedec_ref(), and init_luts().

int lut_nmsedec_sig[1<< NMSEDEC_BITS]
static

Definition at line 84 of file j2kenc.c.

Referenced by getnmsedec_sig(), and init_luts().

int lut_nmsedec_sig0[1<< NMSEDEC_BITS]
static

Definition at line 84 of file j2kenc.c.

Referenced by getnmsedec_sig(), and init_luts().

const int dwt_norms[2][4][10]
static
Initial value:
= {
{{10000, 19650, 41770, 84030, 169000, 338400, 676900, 1353000, 2706000, 5409000},
{20220, 39890, 83550, 170400, 342700, 686300, 1373000, 2746000, 5490000},
{20220, 39890, 83550, 170400, 342700, 686300, 1373000, 2746000, 5490000},
{20800, 38650, 83070, 171800, 347100, 695900, 1393000, 2786000, 5572000}},
{{10000, 15000, 27500, 53750, 106800, 213400, 426700, 853300, 1707000, 3413000},
{10380, 15920, 29190, 57030, 113300, 226400, 452500, 904800, 1809000},
{10380, 15920, 29190, 57030, 113300, 226400, 452500, 904800, 1809000},
{ 7186, 9218, 15860, 30430, 60190, 120100, 240000, 479700, 959300}}
}

Definition at line 89 of file j2kenc.c.

Referenced by init_quantization(), and truncpasses().

const AVOption options[]
static
Initial value:
= {
{ "format", "Codec Format", OFFSET(format), AV_OPT_TYPE_INT, { .i64 = CODEC_JP2 }, CODEC_J2K, CODEC_JP2, VE, "format" },
{ "j2k", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CODEC_J2K }, 0, 0, VE, "format" },
{ "jp2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CODEC_JP2 }, 0, 0, VE, "format" },
{ "tile_width", "Tile Width", OFFSET(tile_width), AV_OPT_TYPE_INT, { .i64 = 256 }, 1, 1<<30, VE, },
{ "tile_height", "Tile Height", OFFSET(tile_height), AV_OPT_TYPE_INT, { .i64 = 256 }, 1, 1<<30, VE, },
{ "pred", "DWT Type", OFFSET(pred), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE, "pred" },
{ "dwt97int", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "pred" },
{ "dwt53", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "pred" },
{ NULL }
}
#define NULL
Definition: coverity.c:32
static const char * format[]
Definition: af_aiir.c:330
#define OFFSET(x)
Definition: j2kenc.c:1222
#define CODEC_J2K
Definition: j2kenc.c:82
#define CODEC_JP2
Definition: j2kenc.c:81
static const float pred[4]
Definition: siprdata.h:259
#define VE
Definition: j2kenc.c:1223

Definition at line 1224 of file j2kenc.c.

const AVClass j2k_class
static
Initial value:
= {
.class_name = "jpeg 2000 encoder",
.item_name = av_default_item_name,
.option = options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static const AVOption options[]
Definition: j2kenc.c:1224

Definition at line 1237 of file j2kenc.c.

AVCodec ff_jpeg2000_encoder
Initial value:
= {
.name = "jpeg2000",
.long_name = NULL_IF_CONFIG_SMALL("JPEG 2000"),
.priv_data_size = sizeof(Jpeg2000EncoderContext),
.encode2 = encode_frame,
.close = j2kenc_destroy,
.pix_fmts = (const enum AVPixelFormat[]) {
},
.priv_class = &j2k_class,
}
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:71
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:68
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int j2kenc_init(AVCodecContext *avctx)
Definition: j2kenc.c:1135
8 bits with AV_PIX_FMT_RGB32 palette
Definition: pixfmt.h:77
static const AVClass j2k_class
Definition: j2kenc.c:1237
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
Definition: j2kenc.c:1000
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:70
static int j2kenc_destroy(AVCodecContext *avctx)
Definition: j2kenc.c:1212
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Definition: pixfmt.h:72
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
Y , 8bpp.
Definition: pixfmt.h:74
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
Definition: pixfmt.h:73
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64

Definition at line 1244 of file j2kenc.c.