[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