[FFmpeg-devel] [PATCH] JPEG2000 encoding with variable codeblock size

Francesco, Cuzzocrea francesco at bltitalia.com
Fri Aug 4 11:21:51 EEST 2017


The standard ISO/IEC FCD15444-1 specify limits for the exponent values 
and their sum. That is codeblock

size xcb and ycb are defined as:

xcb = 2^(xvalue+2)  and ycb = 2^(yvalue+2)

with values that ranges from a minimum of 2 and a maximum of 10. Moreover

the sum should be less or equal to 12 ( xvalue + yvalue <=12). So 64x128 
are allowed because

xvalue = 4 and yvalue = 5.



On 03/08/2017 19.24, Aaron Boxer wrote:
> On Aug 3, 2017 9:58 AM, <francesco at bltitalia.com> wrote:
>
> From: Francesco Cuzzocrea <francesco at bltitalia.com>
>
> Hi to all
> I've made some simple changes tha allow encoding with variable codeblock
> size.  Default value are the same as previous (16X16) but now setting them
> to 64x128 make generated codestream compatible with Analog Devices ADV212
> video codec.
>
>
> Interesting - as far as I  aware, part 1 of standard only allows codeblock
> of max size 4096, so 64x128 would not be legal.
>
>
>
> ---
>   libavcodec/j2kenc.c | 22 +++++++++++++---------
>   1 file changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> index c8d3861..1bd4fbd 100644
> --- a/libavcodec/j2kenc.c
> +++ b/libavcodec/j2kenc.c
> @@ -1178,17 +1178,21 @@ static int j2kenc_destroy(AVCodecContext *avctx)
>   // taken from the libopenjpeg wraper so it matches
>
>   #define OFFSET(x) offsetof(Jpeg2000EncoderContext, x)
> +#define OFFSET1(x) offsetof(Jpeg2000CodingStyle, x)
> +
> +
>   #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
>   static const AVOption options[] = {
> -    { "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"        },
> -
> +    { "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"        },
> +    { "log2_cblk_width",   "Codeblock Width",
>   (OFFSET(codsty)+OFFSET1(log2_cblk_width)),    AV_OPT_TYPE_INT,   { .i64 =
> 4           }, 1,     1<<30,           VE, },
> +    { "log2_cblk_height",  "Codeblock Height",
> (OFFSET(codsty)+OFFSET1(log2_cblk_height)),   AV_OPT_TYPE_INT,   { .i64 =
> 4           }, 1,     1<<30,           VE, },
>       { NULL }
>   };
>
> --
> 2.1.4
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

-- 
/*******************************************************************\
*    Ing. Francesco  Cuzzocrea
*    company:    BLT Italia srl        web:  http://www.blt.it
*    address:    via Rosselli, 91     city:  Lido di CAMAIORE
*    country:    ITALY                 zip:  55043-i
*      Tel. :    +39 0584 904788       Fax:  +39 0584 904789
*     e-mail:   francesco at bltitalia.com
\*******************************************************************/
-- BLT will be at IBC (15~19 September 2017) - Hall 8, Stand 8.A69 --



More information about the ffmpeg-devel mailing list