[FFmpeg-devel] [PATCH] libopenjpegenc: make dci compliant j2c
Paul B Mahol
onemda at gmail.com
Fri Feb 1 17:12:19 CET 2013
On 2/1/13, Jean First <jeanfirst at gmail.com> wrote:
> From: Michael Cinquin <mc at michaelcinquin.com>
>
> Signed-off-by: Jean First <jeanfirst at gmail.com>
> ---
>
> I just fixed the trailing white spaces
>
> libavcodec/libopenjpegenc.c | 43
> ++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 38 insertions(+), 5 deletions(-)
>
> diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c
> index 13e8ef9..70e608a 100644
> --- a/libavcodec/libopenjpegenc.c
> +++ b/libavcodec/libopenjpegenc.c
> @@ -55,6 +55,7 @@ typedef struct {
> int disto_alloc;
> int fixed_alloc;
> int fixed_quality;
> + int shr;
> } LibOpenJPEGContext;
>
> static void error_callback(const char *msg, void *data)
> @@ -74,6 +75,7 @@ static void info_callback(const char *msg, void *data)
>
> static opj_image_t *mj2_create_image(AVCodecContext *avctx,
> opj_cparameters_t *parameters)
> {
> + LibOpenJPEGContext *ctx = avctx->priv_data;
> const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
> opj_image_cmptparm_t *cmptparm;
> opj_image_t *img;
> @@ -150,8 +152,8 @@ static opj_image_t *mj2_create_image(AVCodecContext
> *avctx, opj_cparameters_t *p
> return NULL;
> }
> for (i = 0; i < numcomps; i++) {
> - cmptparm[i].prec = desc->comp[i].depth_minus1 + 1;
> - cmptparm[i].bpp = desc->comp[i].depth_minus1 + 1;
> + cmptparm[i].prec = desc->comp[i].depth_minus1 + 1 - ctx->shr;
> + cmptparm[i].bpp = desc->comp[i].depth_minus1 + 1 - ctx->shr;
> cmptparm[i].sgnd = 0;
> cmptparm[i].dx = sub_dx[i];
> cmptparm[i].dy = sub_dy[i];
> @@ -182,6 +184,36 @@ static av_cold int
> libopenjpeg_encode_init(AVCodecContext *avctx)
> ctx->enc_params.tcp_numlayers = ctx->numlayers;
> ctx->enc_params.tcp_rates[0] = FFMAX(avctx->compression_level, 0) * 2;
>
> + if(ctx->cinema_mode > 0){
> + ctx->enc_params.irreversible = 1;
> + ctx->enc_params.tcp_mct = 1;
> + ctx->enc_params.tile_size_on = 0;
> + /* no subsampling */
> + ctx->enc_params.cp_tdx=1;
> + ctx->enc_params.cp_tdy=1;
> + ctx->enc_params.subsampling_dx = 1;
> + ctx->enc_params.subsampling_dy = 1;
> + /* Tile and Image shall be at (0,0) */
> + ctx->enc_params.cp_tx0 = 0;
> + ctx->enc_params.cp_ty0 = 0;
> + ctx->enc_params.image_offset_x0 = 0;
> + ctx->enc_params.image_offset_y0 = 0;
> + /* Codeblock size= 32*32 */
> + ctx->enc_params.cblockw_init = 32;
> + ctx->enc_params.cblockh_init = 32;
> + ctx->enc_params.csty |= 0x01;
> + /* No ROI */
> + ctx->enc_params.roi_compno = -1;
> +
> + if(ctx->enc_params.prog_order != CPRL){
> + av_log(avctx, AV_LOG_ERROR, "Prog_order forced to CPRL\n");
> + ctx->enc_params.prog_order = CPRL;
> + }
> + ctx->enc_params.tp_flag = 'C';
> + ctx->enc_params.tp_on = 1;
> + }
> +
> +
> ctx->compress = opj_create_compress(ctx->format);
> if (!ctx->compress) {
> av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n");
> @@ -245,7 +277,7 @@ static int libopenjpeg_copy_packed8(AVCodecContext
> *avctx, const AVFrame *frame,
> return 1;
> }
>
> -static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const AVFrame
> *frame, opj_image_t *image)
> +static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const AVFrame
> *frame, opj_image_t *image, int shr)
> {
> int compno;
> int x;
> @@ -267,7 +299,7 @@ static int libopenjpeg_copy_packed16(AVCodecContext
> *avctx, const AVFrame *frame
> image_index = y * avctx->width;
> frame_index = y * (frame->linesize[0] / 2) + compno;
> for (x = 0; x < avctx->width; ++x) {
> - image->comps[compno].data[image_index++] =
> frame_ptr[frame_index];
> + image->comps[compno].data[image_index++] =
> frame_ptr[frame_index] >> shr;
> frame_index += numcomps;
> }
> }
> @@ -367,7 +399,7 @@ static int libopenjpeg_encode_frame(AVCodecContext
> *avctx, AVPacket *pkt,
> break;
> case AV_PIX_FMT_RGB48:
> case AV_PIX_FMT_RGBA64:
> - cpyresult = libopenjpeg_copy_packed16(avctx, frame, image);
> + cpyresult = libopenjpeg_copy_packed16(avctx, frame, image,
> ctx->shr);
> break;
> case AV_PIX_FMT_GRAY8:
> case AV_PIX_FMT_YUV410P:
> @@ -484,6 +516,7 @@ static const AVOption options[] = {
> { "disto_alloc", NULL, OFFSET(disto_alloc),
> AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE
> },
> { "fixed_alloc", NULL, OFFSET(fixed_alloc),
> AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE
> },
> { "fixed_quality", NULL, OFFSET(fixed_quality),
> AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE
> },
> + { "shr", NULL, OFFSET(shr),
> AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 7, VE
> },
> { NULL },
> };
>
> --
> 1.7.10.2 (Apple Git-33)
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
shr shift thing is nonsense. I do not really see why people still insist on it.
Can for next thing we merge libswscale in libavcodec please?
More information about the ffmpeg-devel
mailing list