Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants
@ 2023-03-30 23:14 Michael Niedermayer
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support Michael Niedermayer
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Michael Niedermayer @ 2023-03-30 23:14 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/j2kenc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
index 8475d140daf..97b0da1c976 100644
--- a/libavcodec/j2kenc.c
+++ b/libavcodec/j2kenc.c
@@ -1850,7 +1850,7 @@ const FFCodec ff_jpeg2000_encoder = {
         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV420P16,
         AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV422P16,
         AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV444P16,
-        AV_PIX_FMT_YUV440P,
+        AV_PIX_FMT_YUV440P,                      AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV440P12,
         AV_PIX_FMT_YUV411P,
         AV_PIX_FMT_YUV410P,
         AV_PIX_FMT_PAL8,
-- 
2.17.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support
  2023-03-30 23:14 [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer
@ 2023-03-30 23:14 ` Michael Niedermayer
  2023-04-02 21:34   ` Michael Niedermayer
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc Michael Niedermayer
  2023-04-02 21:24 ` [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer
  2 siblings, 1 reply; 14+ messages in thread
From: Michael Niedermayer @ 2023-03-30 23:14 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/j2kenc.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
index 97b0da1c976..b23fb73770a 100644
--- a/libavcodec/j2kenc.c
+++ b/libavcodec/j2kenc.c
@@ -320,8 +320,8 @@ static int put_siz(Jpeg2000EncoderContext *s)
 
     for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i, YRsiz_i
         bytestream_put_byte(&s->buf, s->cbps[i] - 1);
-        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[0]:1);
-        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[1]:1);
+        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[0]:1);
+        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[1]:1);
     }
     return 0;
 }
@@ -432,7 +432,7 @@ static void compute_rates(Jpeg2000EncoderContext* s)
             for (compno = 0; compno < s->ncomponents; compno++) {
                 int tilew = tile->comp[compno].coord[0][1] - tile->comp[compno].coord[0][0];
                 int tileh = tile->comp[compno].coord[1][1] - tile->comp[compno].coord[1][0];
-                int scale = (compno?1 << s->chroma_shift[0]:1) * (compno?1 << s->chroma_shift[1]:1);
+                int scale = ((compno%3)?1 << s->chroma_shift[0]:1) * ((compno%3)?1 << s->chroma_shift[1]:1);
                 for (layno = 0; layno < s->nlayers; layno++) {
                     if (s->layer_rates[layno] > 0) {
                         tile->layer_rates[layno] += (double)(tilew * tileh) * s->ncomponents * s->cbps[compno] /
@@ -484,7 +484,7 @@ static int init_tiles(Jpeg2000EncoderContext *s)
                 comp->coord[0][1] = comp->coord_o[0][1] = FFMIN((tilex+1)*s->tile_width, s->width);
                 comp->coord[1][0] = comp->coord_o[1][0] = tiley * s->tile_height;
                 comp->coord[1][1] = comp->coord_o[1][1] = FFMIN((tiley+1)*s->tile_height, s->height);
-                if (compno > 0)
+                if (compno % 3)
                     for (i = 0; i < 2; i++)
                         for (j = 0; j < 2; j++)
                             comp->coord[i][j] = comp->coord_o[i][j] = ff_jpeg2000_ceildivpow2(comp->coord[i][j], s->chroma_shift[i]);
@@ -493,8 +493,8 @@ static int init_tiles(Jpeg2000EncoderContext *s)
                                                 codsty,
                                                 qntsty,
                                                 s->cbps[compno],
-                                                compno?1<<s->chroma_shift[0]:1,
-                                                compno?1<<s->chroma_shift[1]:1,
+                                                (compno%3)?1<<s->chroma_shift[0]:1,
+                                                (compno%3)?1<<s->chroma_shift[1]:1,
                                                 s->avctx
                                                )) < 0)
                     return ret;
@@ -1009,7 +1009,7 @@ static int encode_packets(Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int til
                     Jpeg2000Component *comp     = tile->comp + compno;
                     uint8_t reducedresno = codsty->nreslevels - 1 -reslevelno; //  ==> N_L - r
                     Jpeg2000ResLevel *reslevel = comp->reslevel + reslevelno;
-                    int log_subsampling[2] = { compno?s->chroma_shift[0]:0, compno?s->chroma_shift[1]:0};
+                    int log_subsampling[2] = { (compno%3)?s->chroma_shift[0]:0, (compno%3)?s->chroma_shift[1]:0};
                     unsigned prcx, prcy;
                     int trx0, try0;
 
@@ -1070,7 +1070,7 @@ static int encode_packets(Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int til
             for (x = tile_coord[0][0]; x < tile_coord[0][1]; x = (x/step_x + 1)*step_x) {
                 for (compno = 0; compno < s->ncomponents; compno++) {
                     Jpeg2000Component *comp     = tile->comp + compno;
-                    int log_subsampling[2] = { compno?s->chroma_shift[0]:0, compno?s->chroma_shift[1]:0};
+                    int log_subsampling[2] = { (compno%3)?s->chroma_shift[0]:0, (compno%3)?s->chroma_shift[1]:0};
 
                     for (reslevelno = 0; reslevelno < codsty->nreslevels; reslevelno++) {
                         unsigned prcx, prcy;
@@ -1116,7 +1116,7 @@ static int encode_packets(Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int til
     case JPEG2000_PGOD_CPRL:
         for (compno = 0; compno < s->ncomponents; compno++) {
             Jpeg2000Component *comp     = tile->comp + compno;
-            int log_subsampling[2] = { compno?s->chroma_shift[0]:0, compno?s->chroma_shift[1]:0};
+            int log_subsampling[2] = { (compno%3)?s->chroma_shift[0]:0, (compno%3)?s->chroma_shift[1]:0};
             step_x = 32;
             step_y = 32;
 
@@ -1763,7 +1763,7 @@ static av_cold int j2kenc_init(AVCodecContext *avctx)
     s->height = avctx->height;
 
     s->ncomponents = desc->nb_components;
-    for (i = 0; i < 3; i++) {
+    for (i = 0; i < 4; i++) {
         s->cbps[i] = desc->comp[i].depth;
         s->comp_remap[i] = i; //default
     }
@@ -1853,6 +1853,14 @@ const FFCodec ff_jpeg2000_encoder = {
         AV_PIX_FMT_YUV440P,                      AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV440P12,
         AV_PIX_FMT_YUV411P,
         AV_PIX_FMT_YUV410P,
+        AV_PIX_FMT_YUVA420P,
+
+        AV_PIX_FMT_RGBA,                                          AV_PIX_FMT_RGBA64,
+        AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16,
+        AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA420P16,
+        AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA422P16,
+        AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P16,
+
         AV_PIX_FMT_PAL8,
         AV_PIX_FMT_NONE
     },
-- 
2.17.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc
  2023-03-30 23:14 [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support Michael Niedermayer
@ 2023-03-30 23:14 ` Michael Niedermayer
  2023-03-30 23:26   ` Pierre-Anthony Lemieux
                     ` (2 more replies)
  2023-04-02 21:24 ` [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer
  2 siblings, 3 replies; 14+ messages in thread
From: Michael Niedermayer @ 2023-03-30 23:14 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

FFmpeg has its own jpeg2000 encoder
This avoids a dependency

This is not ready yet as we still miss xyz / ya pixel formats, and some cinama stuff, but
it seems this should be the direction to aim at. And it seems there is not much missing

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 configure                   |   5 -
 doc/general_contents.texi   |   7 -
 libavcodec/Makefile         |   1 -
 libavcodec/allcodecs.c      |   1 -
 libavcodec/libopenjpegenc.c | 790 ------------------------------------
 5 files changed, 804 deletions(-)
 delete mode 100644 libavcodec/libopenjpegenc.c

diff --git a/configure b/configure
index aa72aaef6b0..2f01ee8a214 100755
--- a/configure
+++ b/configure
@@ -252,7 +252,6 @@ External library support:
   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
   --enable-libopencv       enable video filtering via libopencv [no]
   --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
-  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
   --enable-libopenmpt      enable decoding tracked files via libopenmpt [no]
   --enable-libopenvino     enable OpenVINO as a DNN module backend
                            for DNN based filters like dnn_processing [no]
@@ -1834,7 +1833,6 @@ EXTERNAL_LIBRARY_LIST="
     libmysofa
     libopencv
     libopenh264
-    libopenjpeg
     libopenmpt
     libopenvino
     libopus
@@ -3364,7 +3362,6 @@ libopencore_amrwb_decoder_deps="libopencore_amrwb"
 libopenh264_decoder_deps="libopenh264"
 libopenh264_decoder_select="h264_mp4toannexb_bsf"
 libopenh264_encoder_deps="libopenh264"
-libopenjpeg_encoder_deps="libopenjpeg"
 libopenmpt_demuxer_deps="libopenmpt"
 libopus_decoder_deps="libopus"
 libopus_encoder_deps="libopus"
@@ -6659,8 +6656,6 @@ enabled libopencv         && { check_headers opencv2/core/core_c.h &&
                                  require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
                                require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
 enabled libopenh264       && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
-enabled libopenjpeg       && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
-                               { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
 enabled libopenmpt        && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
 enabled libopenvino       && require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api
 enabled libopus           && {
diff --git a/doc/general_contents.texi b/doc/general_contents.texi
index 2eeebd847da..0d295d7bf91 100644
--- a/doc/general_contents.texi
+++ b/doc/general_contents.texi
@@ -252,13 +252,6 @@ constrained baseline profile and CABAC.) Using it is mostly useful for
 testing and for taking advantage of Cisco's patent portfolio license
 (@url{http://www.openh264.org/BINARY_LICENSE.txt}).
 
-@section OpenJPEG
-
-FFmpeg can use the OpenJPEG libraries for decoding/encoding J2K videos.  Go to
-@url{http://www.openjpeg.org/} to get the libraries and follow the installation
-instructions.  To enable using OpenJPEG in FFmpeg, pass @code{--enable-libopenjpeg} to
-@file{./configure}.
-
 @section rav1e
 
 FFmpeg can make use of rav1e (Rust AV1 Encoder) via its C bindings to encode videos.
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index b30747fdb99..26c695b77e6 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -1102,7 +1102,6 @@ OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER)  += libopencore-amr.o
 OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER)  += libopencore-amr.o
 OBJS-$(CONFIG_LIBOPENH264_DECODER)        += libopenh264dec.o libopenh264.o
 OBJS-$(CONFIG_LIBOPENH264_ENCODER)        += libopenh264enc.o libopenh264.o
-OBJS-$(CONFIG_LIBOPENJPEG_ENCODER)        += libopenjpegenc.o
 OBJS-$(CONFIG_LIBOPUS_DECODER)            += libopusdec.o libopus.o     \
                                              vorbis_data.o
 OBJS-$(CONFIG_LIBOPUS_ENCODER)            += libopusenc.o libopus.o     \
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index aabfa9be50f..e13614f786f 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -781,7 +781,6 @@ extern const FFCodec ff_libmp3lame_encoder;
 extern const FFCodec ff_libopencore_amrnb_encoder;
 extern const FFCodec ff_libopencore_amrnb_decoder;
 extern const FFCodec ff_libopencore_amrwb_decoder;
-extern const FFCodec ff_libopenjpeg_encoder;
 extern const FFCodec ff_libopus_encoder;
 extern const FFCodec ff_libopus_decoder;
 extern const FFCodec ff_librav1e_encoder;
diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c
deleted file mode 100644
index 009c7a43774..00000000000
--- a/libavcodec/libopenjpegenc.c
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- * JPEG 2000 encoding support via OpenJPEG
- * Copyright (c) 2011 Michael Bradshaw <mjbshaw gmail com>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * JPEG 2000 encoder using libopenjpeg
- */
-
-#include "libavutil/common.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/opt.h"
-#include "avcodec.h"
-#include "codec_internal.h"
-#include "encode.h"
-#include <openjpeg.h>
-
-typedef struct LibOpenJPEGContext {
-    AVClass *avclass;
-    opj_cparameters_t enc_params;
-    int format;
-    int profile;
-    int prog_order;
-    int cinema_mode;
-    int numresolution;
-    int irreversible;
-    int disto_alloc;
-    int fixed_quality;
-} LibOpenJPEGContext;
-
-static void error_callback(const char *msg, void *data)
-{
-    av_log(data, AV_LOG_ERROR, "%s\n", msg);
-}
-
-static void warning_callback(const char *msg, void *data)
-{
-    av_log(data, AV_LOG_WARNING, "%s\n", msg);
-}
-
-static void info_callback(const char *msg, void *data)
-{
-    av_log(data, AV_LOG_DEBUG, "%s\n", msg);
-}
-
-typedef struct PacketWriter {
-    int pos;
-    AVPacket *packet;
-} PacketWriter;
-
-static OPJ_SIZE_T stream_write(void *out_buffer, OPJ_SIZE_T nb_bytes, void *user_data)
-{
-    PacketWriter *writer = user_data;
-    AVPacket *packet = writer->packet;
-    int remaining = packet->size - writer->pos;
-    if (nb_bytes > remaining) {
-        OPJ_SIZE_T needed = nb_bytes - remaining;
-        int max_growth = INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - packet->size;
-        if (needed > max_growth) {
-            return (OPJ_SIZE_T)-1;
-        }
-        if (av_grow_packet(packet, (int)needed)) {
-            return (OPJ_SIZE_T)-1;
-        }
-    }
-    memcpy(packet->data + writer->pos, out_buffer, nb_bytes);
-    writer->pos += (int)nb_bytes;
-    return nb_bytes;
-}
-
-static OPJ_OFF_T stream_skip(OPJ_OFF_T nb_bytes, void *user_data)
-{
-    PacketWriter *writer = user_data;
-    AVPacket *packet = writer->packet;
-    if (nb_bytes < 0) {
-        if (writer->pos == 0) {
-            return (OPJ_SIZE_T)-1;
-        }
-        if (nb_bytes + writer->pos < 0) {
-            nb_bytes = -writer->pos;
-        }
-    } else {
-        int remaining = packet->size - writer->pos;
-        if (nb_bytes > remaining) {
-            OPJ_SIZE_T needed = nb_bytes - remaining;
-            int max_growth = INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - packet->size;
-            if (needed > max_growth) {
-                return (OPJ_SIZE_T)-1;
-            }
-            if (av_grow_packet(packet, (int)needed)) {
-                return (OPJ_SIZE_T)-1;
-            }
-        }
-    }
-    writer->pos += (int)nb_bytes;
-    return nb_bytes;
-}
-
-static OPJ_BOOL stream_seek(OPJ_OFF_T nb_bytes, void *user_data)
-{
-    PacketWriter *writer = user_data;
-    AVPacket *packet = writer->packet;
-    if (nb_bytes < 0) {
-        return OPJ_FALSE;
-    }
-    if (nb_bytes > packet->size) {
-        if (nb_bytes > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE ||
-            av_grow_packet(packet, (int)nb_bytes - packet->size)) {
-            return OPJ_FALSE;
-        }
-    }
-    writer->pos = (int)nb_bytes;
-    return OPJ_TRUE;
-}
-
-static void cinema_parameters(opj_cparameters_t *p)
-{
-    p->tile_size_on = 0;
-    p->cp_tdx = 1;
-    p->cp_tdy = 1;
-
-    /* Tile part */
-    p->tp_flag = 'C';
-    p->tp_on = 1;
-
-    /* Tile and Image shall be at (0, 0) */
-    p->cp_tx0 = 0;
-    p->cp_ty0 = 0;
-    p->image_offset_x0 = 0;
-    p->image_offset_y0 = 0;
-
-    /* Codeblock size= 32 * 32 */
-    p->cblockw_init = 32;
-    p->cblockh_init = 32;
-    p->csty |= 0x01;
-
-    /* The progression order shall be CPRL */
-    p->prog_order = OPJ_CPRL;
-
-    /* No ROI */
-    p->roi_compno = -1;
-
-    /* No subsampling */
-    p->subsampling_dx = 1;
-    p->subsampling_dy = 1;
-
-    /* 9-7 transform */
-    p->irreversible = 1;
-
-    p->tcp_mct = 1;
-}
-
-static opj_image_t *mj2_create_image(AVCodecContext *avctx, opj_cparameters_t *parameters)
-{
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
-    opj_image_cmptparm_t cmptparm[4] = {{0}};
-    opj_image_t *img;
-    int i;
-    int sub_dx[4];
-    int sub_dy[4];
-    int numcomps;
-    OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN;
-
-    sub_dx[0] = sub_dx[3] = 1;
-    sub_dy[0] = sub_dy[3] = 1;
-    sub_dx[1] = sub_dx[2] = 1 << desc->log2_chroma_w;
-    sub_dy[1] = sub_dy[2] = 1 << desc->log2_chroma_h;
-
-    numcomps = desc->nb_components;
-
-    switch (avctx->pix_fmt) {
-    case AV_PIX_FMT_GRAY8:
-    case AV_PIX_FMT_YA8:
-    case AV_PIX_FMT_GRAY10:
-    case AV_PIX_FMT_GRAY12:
-    case AV_PIX_FMT_GRAY14:
-    case AV_PIX_FMT_GRAY16:
-    case AV_PIX_FMT_YA16:
-        color_space = OPJ_CLRSPC_GRAY;
-        break;
-    case AV_PIX_FMT_RGB24:
-    case AV_PIX_FMT_RGBA:
-    case AV_PIX_FMT_RGB48:
-    case AV_PIX_FMT_RGBA64:
-    case AV_PIX_FMT_GBR24P:
-    case AV_PIX_FMT_GBRP9:
-    case AV_PIX_FMT_GBRP10:
-    case AV_PIX_FMT_GBRP12:
-    case AV_PIX_FMT_GBRP14:
-    case AV_PIX_FMT_GBRP16:
-    case AV_PIX_FMT_XYZ12:
-        color_space = OPJ_CLRSPC_SRGB;
-        break;
-    case AV_PIX_FMT_YUV410P:
-    case AV_PIX_FMT_YUV411P:
-    case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUV422P:
-    case AV_PIX_FMT_YUV440P:
-    case AV_PIX_FMT_YUV444P:
-    case AV_PIX_FMT_YUVA420P:
-    case AV_PIX_FMT_YUVA422P:
-    case AV_PIX_FMT_YUVA444P:
-    case AV_PIX_FMT_YUV420P9:
-    case AV_PIX_FMT_YUV422P9:
-    case AV_PIX_FMT_YUV444P9:
-    case AV_PIX_FMT_YUVA420P9:
-    case AV_PIX_FMT_YUVA422P9:
-    case AV_PIX_FMT_YUVA444P9:
-    case AV_PIX_FMT_YUV420P10:
-    case AV_PIX_FMT_YUV422P10:
-    case AV_PIX_FMT_YUV444P10:
-    case AV_PIX_FMT_YUVA420P10:
-    case AV_PIX_FMT_YUVA422P10:
-    case AV_PIX_FMT_YUVA444P10:
-    case AV_PIX_FMT_YUV420P12:
-    case AV_PIX_FMT_YUV422P12:
-    case AV_PIX_FMT_YUV444P12:
-    case AV_PIX_FMT_YUV420P14:
-    case AV_PIX_FMT_YUV422P14:
-    case AV_PIX_FMT_YUV444P14:
-    case AV_PIX_FMT_YUV420P16:
-    case AV_PIX_FMT_YUV422P16:
-    case AV_PIX_FMT_YUV444P16:
-    case AV_PIX_FMT_YUVA420P16:
-    case AV_PIX_FMT_YUVA422P16:
-    case AV_PIX_FMT_YUVA444P16:
-        color_space = OPJ_CLRSPC_SYCC;
-        break;
-    default:
-        av_log(avctx, AV_LOG_ERROR,
-               "The requested pixel format '%s' is not supported\n",
-               av_get_pix_fmt_name(avctx->pix_fmt));
-        return NULL;
-    }
-
-    for (i = 0; i < numcomps; i++) {
-        cmptparm[i].prec = desc->comp[i].depth;
-        cmptparm[i].bpp  = desc->comp[i].depth;
-        cmptparm[i].sgnd = 0;
-        cmptparm[i].dx = sub_dx[i];
-        cmptparm[i].dy = sub_dy[i];
-        cmptparm[i].w = (avctx->width + sub_dx[i] - 1) / sub_dx[i];
-        cmptparm[i].h = (avctx->height + sub_dy[i] - 1) / sub_dy[i];
-    }
-
-    img = opj_image_create(numcomps, cmptparm, color_space);
-
-    if (!img)
-        return NULL;
-
-    // x0, y0 is the top left corner of the image
-    // x1, y1 is the width, height of the reference grid
-    img->x0 = 0;
-    img->y0 = 0;
-    img->x1 = (avctx->width  - 1) * parameters->subsampling_dx + 1;
-    img->y1 = (avctx->height - 1) * parameters->subsampling_dy + 1;
-
-    return img;
-}
-
-static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx)
-{
-    LibOpenJPEGContext *ctx = avctx->priv_data;
-    int err = 0;
-
-    opj_set_default_encoder_parameters(&ctx->enc_params);
-
-    switch (ctx->cinema_mode) {
-    case OPJ_CINEMA2K_24:
-        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
-        ctx->enc_params.max_cs_size = OPJ_CINEMA_24_CS;
-        ctx->enc_params.max_comp_size = OPJ_CINEMA_24_COMP;
-        break;
-    case OPJ_CINEMA2K_48:
-        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
-        ctx->enc_params.max_cs_size = OPJ_CINEMA_48_CS;
-        ctx->enc_params.max_comp_size = OPJ_CINEMA_48_COMP;
-        break;
-    case OPJ_CINEMA4K_24:
-        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_4K;
-        ctx->enc_params.max_cs_size = OPJ_CINEMA_24_CS;
-        ctx->enc_params.max_comp_size = OPJ_CINEMA_24_COMP;
-        break;
-    }
-
-    switch (ctx->profile) {
-    case OPJ_CINEMA2K:
-        if (ctx->enc_params.rsiz == OPJ_PROFILE_CINEMA_4K) {
-            err = AVERROR(EINVAL);
-            break;
-        }
-        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
-        break;
-    case OPJ_CINEMA4K:
-        if (ctx->enc_params.rsiz == OPJ_PROFILE_CINEMA_2K) {
-            err = AVERROR(EINVAL);
-            break;
-        }
-        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_4K;
-        break;
-    }
-
-    if (err) {
-        av_log(avctx, AV_LOG_ERROR,
-               "Invalid parameter pairing: cinema_mode and profile conflict.\n");
-        return err;
-    }
-
-    if (!ctx->numresolution) {
-        ctx->numresolution = 6;
-        while (FFMIN(avctx->width, avctx->height) >> ctx->numresolution < 1)
-            ctx->numresolution --;
-    }
-
-    ctx->enc_params.prog_order = ctx->prog_order;
-    ctx->enc_params.numresolution = ctx->numresolution;
-    ctx->enc_params.irreversible = ctx->irreversible;
-    ctx->enc_params.cp_disto_alloc = ctx->disto_alloc;
-    ctx->enc_params.cp_fixed_quality = ctx->fixed_quality;
-    ctx->enc_params.tcp_numlayers = 1;
-    ctx->enc_params.tcp_rates[0] = FFMAX(avctx->compression_level, 0) * 2;
-
-    if (ctx->cinema_mode > 0) {
-        cinema_parameters(&ctx->enc_params);
-    }
-
-    return 0;
-}
-
-static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const uint8_t *src[4],
-                                    const int linesize[4], opj_image_t *image)
-{
-    int compno;
-    int x;
-    int y;
-    int *image_line;
-    int frame_index;
-    const int numcomps = image->numcomps;
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        if (image->comps[compno].w > linesize[0] / numcomps) {
-            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
-            return 0;
-        }
-    }
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        for (y = 0; y < avctx->height; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            frame_index = y * linesize[0] + compno;
-            for (x = 0; x < avctx->width; ++x) {
-                image_line[x] = src[0][frame_index];
-                frame_index += numcomps;
-            }
-            for (; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - 1];
-            }
-        }
-        for (; y < image->comps[compno].h; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            for (x = 0; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - (int)image->comps[compno].w];
-            }
-        }
-    }
-
-    return 1;
-}
-
-// for XYZ 12 bit
-static int libopenjpeg_copy_packed12(AVCodecContext *avctx, const uint8_t *src[4],
-                                    const int linesize[4], opj_image_t *image)
-{
-    int compno;
-    int x, y;
-    int *image_line;
-    int frame_index;
-    const int numcomps  = image->numcomps;
-    const uint16_t *frame_ptr = (const uint16_t *)src[0];
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        if (image->comps[compno].w > linesize[0] / numcomps) {
-            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
-            return 0;
-        }
-    }
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        for (y = 0; y < avctx->height; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            frame_index = y * (linesize[0] / 2) + compno;
-            for (x = 0; x < avctx->width; ++x) {
-                image_line[x] = frame_ptr[frame_index] >> 4;
-                frame_index += numcomps;
-            }
-            for (; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - 1];
-            }
-        }
-        for (; y < image->comps[compno].h; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            for (x = 0; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - (int)image->comps[compno].w];
-            }
-        }
-    }
-
-    return 1;
-}
-
-static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const uint8_t *src[4],
-                                    const int linesize[4], opj_image_t *image)
-{
-    int compno;
-    int x;
-    int y;
-    int *image_line;
-    int frame_index;
-    const int numcomps = image->numcomps;
-    const uint16_t *frame_ptr = (const uint16_t*)src[0];
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        if (image->comps[compno].w > linesize[0] / numcomps) {
-            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
-            return 0;
-        }
-    }
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        for (y = 0; y < avctx->height; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            frame_index = y * (linesize[0] / 2) + compno;
-            for (x = 0; x < avctx->width; ++x) {
-                image_line[x] = frame_ptr[frame_index];
-                frame_index += numcomps;
-            }
-            for (; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - 1];
-            }
-        }
-        for (; y < image->comps[compno].h; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            for (x = 0; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - (int)image->comps[compno].w];
-            }
-        }
-    }
-
-    return 1;
-}
-
-static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const uint8_t *src[4],
-                                    const int linesize[4], opj_image_t *image)
-{
-    int compno;
-    int x;
-    int y;
-    int width;
-    int height;
-    int *image_line;
-    int frame_index;
-    const int numcomps = image->numcomps;
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        if (image->comps[compno].w > linesize[compno]) {
-            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
-            return 0;
-        }
-    }
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        width  = (avctx->width + image->comps[compno].dx - 1) / image->comps[compno].dx;
-        height = (avctx->height + image->comps[compno].dy - 1) / image->comps[compno].dy;
-        for (y = 0; y < height; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            frame_index = y * linesize[compno];
-            for (x = 0; x < width; ++x)
-                image_line[x] = src[compno][frame_index++];
-            for (; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - 1];
-            }
-        }
-        for (; y < image->comps[compno].h; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            for (x = 0; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - (int)image->comps[compno].w];
-            }
-        }
-    }
-
-    return 1;
-}
-
-static int libopenjpeg_copy_unpacked16(AVCodecContext *avctx, const uint8_t *src[4],
-                                    const int linesize[4], opj_image_t *image)
-{
-    int compno;
-    int x;
-    int y;
-    int width;
-    int height;
-    int *image_line;
-    int frame_index;
-    const int numcomps = image->numcomps;
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        if (image->comps[compno].w > linesize[compno]) {
-            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
-            return 0;
-        }
-    }
-
-    for (compno = 0; compno < numcomps; ++compno) {
-        const uint16_t *frame_ptr = (const uint16_t *)src[compno];
-        width     = (avctx->width + image->comps[compno].dx - 1) / image->comps[compno].dx;
-        height    = (avctx->height + image->comps[compno].dy - 1) / image->comps[compno].dy;
-        for (y = 0; y < height; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            frame_index = y * (linesize[compno] / 2);
-            for (x = 0; x < width; ++x)
-                image_line[x] = frame_ptr[frame_index++];
-            for (; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - 1];
-            }
-        }
-        for (; y < image->comps[compno].h; ++y) {
-            image_line = image->comps[compno].data + y * image->comps[compno].w;
-            for (x = 0; x < image->comps[compno].w; ++x) {
-                image_line[x] = image_line[x - (int)image->comps[compno].w];
-            }
-        }
-    }
-
-    return 1;
-}
-
-static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
-                                    const AVFrame *frame, int *got_packet)
-{
-    LibOpenJPEGContext *ctx = avctx->priv_data;
-    int ret;
-    int cpyresult = 0;
-    PacketWriter writer     = { 0 };
-    opj_codec_t *compress   = NULL;
-    opj_stream_t *stream    = NULL;
-    opj_image_t *image      = mj2_create_image(avctx, &ctx->enc_params);
-    const uint8_t *data[4] = { frame->data[0], frame->data[1],
-                               frame->data[2], frame->data[3] };
-    int linesize[4]        = { frame->linesize[0], frame->linesize[1],
-                               frame->linesize[2], frame->linesize[3] };
-    if (!image) {
-        av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n");
-        ret = AVERROR(EINVAL);
-        goto done;
-    }
-
-    switch (avctx->pix_fmt) {
-    case AV_PIX_FMT_RGB24:
-    case AV_PIX_FMT_RGBA:
-    case AV_PIX_FMT_YA8:
-        cpyresult = libopenjpeg_copy_packed8(avctx, data, linesize, image);
-        break;
-    case AV_PIX_FMT_XYZ12:
-        cpyresult = libopenjpeg_copy_packed12(avctx, data, linesize, image);
-        break;
-    case AV_PIX_FMT_RGB48:
-    case AV_PIX_FMT_RGBA64:
-    case AV_PIX_FMT_YA16:
-        cpyresult = libopenjpeg_copy_packed16(avctx, data, linesize, image);
-        break;
-    case AV_PIX_FMT_GBR24P:
-    case AV_PIX_FMT_GBRP9:
-    case AV_PIX_FMT_GBRP10:
-    case AV_PIX_FMT_GBRP12:
-    case AV_PIX_FMT_GBRP14:
-    case AV_PIX_FMT_GBRP16:
-        data[0] = frame->data[2]; // swap to be rgb
-        data[1] = frame->data[0];
-        data[2] = frame->data[1];
-        linesize[0] = frame->linesize[2];
-        linesize[1] = frame->linesize[0];
-        linesize[2] = frame->linesize[1];
-        if (avctx->pix_fmt == AV_PIX_FMT_GBR24P) {
-            cpyresult = libopenjpeg_copy_unpacked8(avctx, data, linesize, image);
-        } else {
-            cpyresult = libopenjpeg_copy_unpacked16(avctx, data, linesize, image);
-        }
-        break;
-    case AV_PIX_FMT_GRAY8:
-    case AV_PIX_FMT_YUV410P:
-    case AV_PIX_FMT_YUV411P:
-    case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUV422P:
-    case AV_PIX_FMT_YUV440P:
-    case AV_PIX_FMT_YUV444P:
-    case AV_PIX_FMT_YUVA420P:
-    case AV_PIX_FMT_YUVA422P:
-    case AV_PIX_FMT_YUVA444P:
-        cpyresult = libopenjpeg_copy_unpacked8(avctx, data, linesize, image);
-        break;
-    case AV_PIX_FMT_GRAY10:
-    case AV_PIX_FMT_GRAY12:
-    case AV_PIX_FMT_GRAY14:
-    case AV_PIX_FMT_GRAY16:
-    case AV_PIX_FMT_YUV420P9:
-    case AV_PIX_FMT_YUV422P9:
-    case AV_PIX_FMT_YUV444P9:
-    case AV_PIX_FMT_YUVA420P9:
-    case AV_PIX_FMT_YUVA422P9:
-    case AV_PIX_FMT_YUVA444P9:
-    case AV_PIX_FMT_YUV444P10:
-    case AV_PIX_FMT_YUV422P10:
-    case AV_PIX_FMT_YUV420P10:
-    case AV_PIX_FMT_YUVA444P10:
-    case AV_PIX_FMT_YUVA422P10:
-    case AV_PIX_FMT_YUVA420P10:
-    case AV_PIX_FMT_YUV420P12:
-    case AV_PIX_FMT_YUV422P12:
-    case AV_PIX_FMT_YUV444P12:
-    case AV_PIX_FMT_YUV420P14:
-    case AV_PIX_FMT_YUV422P14:
-    case AV_PIX_FMT_YUV444P14:
-    case AV_PIX_FMT_YUV444P16:
-    case AV_PIX_FMT_YUV422P16:
-    case AV_PIX_FMT_YUV420P16:
-    case AV_PIX_FMT_YUVA444P16:
-    case AV_PIX_FMT_YUVA422P16:
-    case AV_PIX_FMT_YUVA420P16:
-        cpyresult = libopenjpeg_copy_unpacked16(avctx, data, linesize, image);
-        break;
-    default:
-        av_log(avctx, AV_LOG_ERROR,
-               "The frame's pixel format '%s' is not supported\n",
-               av_get_pix_fmt_name(avctx->pix_fmt));
-        ret = AVERROR(EINVAL);
-        goto done;
-        break;
-    }
-
-    if (!cpyresult) {
-        av_log(avctx, AV_LOG_ERROR,
-               "Could not copy the frame data to the internal image buffer\n");
-        ret = -1;
-        goto done;
-    }
-
-    if ((ret = ff_alloc_packet(avctx, pkt, 1024)) < 0)
-        goto done;
-
-    compress = opj_create_compress(ctx->format);
-    if (!compress) {
-        av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n");
-        ret = AVERROR(ENOMEM);
-        goto done;
-    }
-
-    if (!opj_set_error_handler(compress, error_callback, avctx) ||
-        !opj_set_warning_handler(compress, warning_callback, avctx) ||
-        !opj_set_info_handler(compress, info_callback, avctx)) {
-        av_log(avctx, AV_LOG_ERROR, "Error setting the compressor handlers\n");
-        ret = AVERROR_EXTERNAL;
-        goto done;
-    }
-
-    if (!opj_setup_encoder(compress, &ctx->enc_params, image)) {
-        av_log(avctx, AV_LOG_ERROR, "Error setting up the compressor\n");
-        ret = AVERROR_EXTERNAL;
-        goto done;
-    }
-    stream = opj_stream_default_create(OPJ_STREAM_WRITE);
-
-    if (!stream) {
-        av_log(avctx, AV_LOG_ERROR, "Error creating the cio stream\n");
-        ret = AVERROR(ENOMEM);
-        goto done;
-    }
-
-    writer.packet = pkt;
-    opj_stream_set_write_function(stream, stream_write);
-    opj_stream_set_skip_function(stream, stream_skip);
-    opj_stream_set_seek_function(stream, stream_seek);
-    opj_stream_set_user_data(stream, &writer, NULL);
-
-    if (!opj_start_compress(compress, image, stream) ||
-        !opj_encode(compress, stream) ||
-        !opj_end_compress(compress, stream)) {
-        av_log(avctx, AV_LOG_ERROR, "Error during the opj encode\n");
-        ret = AVERROR_EXTERNAL;
-        goto done;
-    }
-
-    av_shrink_packet(pkt, writer.pos);
-
-    *got_packet = 1;
-    ret = 0;
-
-done:
-    opj_stream_destroy(stream);
-    opj_destroy_codec(compress);
-    opj_image_destroy(image);
-    return ret;
-}
-
-#define OFFSET(x) offsetof(LibOpenJPEGContext, 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 = OPJ_CODEC_JP2   }, OPJ_CODEC_J2K, OPJ_CODEC_JP2,   VE, "format"      },
-    { "j2k",           NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CODEC_J2K   }, 0,         0,           VE, "format"      },
-    { "jp2",           NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CODEC_JP2   }, 0,         0,           VE, "format"      },
-    { "profile",       NULL,                OFFSET(profile),       AV_OPT_TYPE_INT,   { .i64 = OPJ_STD_RSIZ    }, OPJ_STD_RSIZ,  OPJ_CINEMA4K,    VE, "profile"     },
-    { "jpeg2000",      NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_STD_RSIZ    }, 0,         0,           VE, "profile"     },
-    { "cinema2k",      NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA2K    }, 0,         0,           VE, "profile"     },
-    { "cinema4k",      NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA4K    }, 0,         0,           VE, "profile"     },
-    { "cinema_mode",   "Digital Cinema",    OFFSET(cinema_mode),   AV_OPT_TYPE_INT,   { .i64 = OPJ_OFF         }, OPJ_OFF,       OPJ_CINEMA4K_24, VE, "cinema_mode" },
-    { "off",           NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_OFF         }, 0,         0,           VE, "cinema_mode" },
-    { "2k_24",         NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA2K_24 }, 0,         0,           VE, "cinema_mode" },
-    { "2k_48",         NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA2K_48 }, 0,         0,           VE, "cinema_mode" },
-    { "4k_24",         NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA4K_24 }, 0,         0,           VE, "cinema_mode" },
-    { "prog_order",    "Progression Order", OFFSET(prog_order),    AV_OPT_TYPE_INT,   { .i64 = OPJ_LRCP    }, OPJ_LRCP,  OPJ_CPRL,    VE, "prog_order"  },
-    { "lrcp",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_LRCP    }, 0,         0,           VE, "prog_order"  },
-    { "rlcp",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_RLCP    }, 0,         0,           VE, "prog_order"  },
-    { "rpcl",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_RPCL    }, 0,         0,           VE, "prog_order"  },
-    { "pcrl",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_PCRL    }, 0,         0,           VE, "prog_order"  },
-    { "cprl",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CPRL    }, 0,         0,           VE, "prog_order"  },
-    { "numresolution", NULL,                OFFSET(numresolution), AV_OPT_TYPE_INT,   { .i64 = 6            }, 0,         33,          VE                },
-    { "irreversible",  NULL,                OFFSET(irreversible),  AV_OPT_TYPE_INT,   { .i64 = 0            }, 0,         1,           VE                },
-    { "disto_alloc",   NULL,                OFFSET(disto_alloc),   AV_OPT_TYPE_INT,   { .i64 = 1            }, 0,         1,           VE                },
-    { "fixed_quality", NULL,                OFFSET(fixed_quality), AV_OPT_TYPE_INT,   { .i64 = 0            }, 0,         1,           VE                },
-    { NULL },
-};
-
-static const AVClass openjpeg_class = {
-    .class_name = "libopenjpeg",
-    .item_name  = av_default_item_name,
-    .option     = options,
-    .version    = LIBAVUTIL_VERSION_INT,
-};
-
-const FFCodec ff_libopenjpeg_encoder = {
-    .p.name         = "libopenjpeg",
-    CODEC_LONG_NAME("OpenJPEG JPEG 2000"),
-    .p.type         = AVMEDIA_TYPE_VIDEO,
-    .p.id           = AV_CODEC_ID_JPEG2000,
-    .caps_internal  = FF_CODEC_CAP_NOT_INIT_THREADSAFE,
-    .priv_data_size = sizeof(LibOpenJPEGContext),
-    .init           = libopenjpeg_encode_init,
-    FF_CODEC_ENCODE_CB(libopenjpeg_encode_frame),
-    .p.capabilities = AV_CODEC_CAP_FRAME_THREADS |
-                      AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
-    .p.pix_fmts     = (const enum AVPixelFormat[]) {
-        AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA, AV_PIX_FMT_RGB48,
-        AV_PIX_FMT_RGBA64, AV_PIX_FMT_GBR24P,
-        AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16,
-        AV_PIX_FMT_GRAY8, AV_PIX_FMT_YA8, AV_PIX_FMT_GRAY16, AV_PIX_FMT_YA16,
-        AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
-        AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P,
-        AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA422P,
-        AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUVA444P,
-        AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
-        AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
-        AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
-        AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA444P10,
-        AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12,
-        AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV444P14,
-        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-        AV_PIX_FMT_YUVA420P16, AV_PIX_FMT_YUVA422P16, AV_PIX_FMT_YUVA444P16,
-        AV_PIX_FMT_XYZ12,
-        AV_PIX_FMT_NONE
-    },
-    .p.priv_class   = &openjpeg_class,
-    .p.wrapper_name = "libopenjpeg",
-};
-- 
2.17.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc Michael Niedermayer
@ 2023-03-30 23:26   ` Pierre-Anthony Lemieux
  2023-03-30 23:31   ` Michael Bradshaw
  2023-04-05 12:55   ` Tomas Härdin
  2 siblings, 0 replies; 14+ messages in thread
From: Pierre-Anthony Lemieux @ 2023-03-30 23:26 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Thu, Mar 30, 2023 at 4:15 PM Michael Niedermayer
<michael@niedermayer.cc> wrote:
>
> FFmpeg has its own jpeg2000 encoder
> This avoids a dependency
>
> This is not ready yet as we still miss xyz / ya pixel formats, and some cinama stuff, but
> it seems this should be the direction to aim at. And it seems there is not much missing

Support for Part 15 is missing.

I plan to clean-up the outstanding patchsets as detailed at [1] and
submit for review no later than Sunday.

[1] http://ffmpeg.org/pipermail/ffmpeg-devel/2023-March/307614.html

>
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  configure                   |   5 -
>  doc/general_contents.texi   |   7 -
>  libavcodec/Makefile         |   1 -
>  libavcodec/allcodecs.c      |   1 -
>  libavcodec/libopenjpegenc.c | 790 ------------------------------------
>  5 files changed, 804 deletions(-)
>  delete mode 100644 libavcodec/libopenjpegenc.c
>
> diff --git a/configure b/configure
> index aa72aaef6b0..2f01ee8a214 100755
> --- a/configure
> +++ b/configure
> @@ -252,7 +252,6 @@ External library support:
>    --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
>    --enable-libopencv       enable video filtering via libopencv [no]
>    --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
> -  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
>    --enable-libopenmpt      enable decoding tracked files via libopenmpt [no]
>    --enable-libopenvino     enable OpenVINO as a DNN module backend
>                             for DNN based filters like dnn_processing [no]
> @@ -1834,7 +1833,6 @@ EXTERNAL_LIBRARY_LIST="
>      libmysofa
>      libopencv
>      libopenh264
> -    libopenjpeg
>      libopenmpt
>      libopenvino
>      libopus
> @@ -3364,7 +3362,6 @@ libopencore_amrwb_decoder_deps="libopencore_amrwb"
>  libopenh264_decoder_deps="libopenh264"
>  libopenh264_decoder_select="h264_mp4toannexb_bsf"
>  libopenh264_encoder_deps="libopenh264"
> -libopenjpeg_encoder_deps="libopenjpeg"
>  libopenmpt_demuxer_deps="libopenmpt"
>  libopus_decoder_deps="libopus"
>  libopus_encoder_deps="libopus"
> @@ -6659,8 +6656,6 @@ enabled libopencv         && { check_headers opencv2/core/core_c.h &&
>                                   require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
>                                 require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
>  enabled libopenh264       && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
> -enabled libopenjpeg       && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
> -                               { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
>  enabled libopenmpt        && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
>  enabled libopenvino       && require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api
>  enabled libopus           && {
> diff --git a/doc/general_contents.texi b/doc/general_contents.texi
> index 2eeebd847da..0d295d7bf91 100644
> --- a/doc/general_contents.texi
> +++ b/doc/general_contents.texi
> @@ -252,13 +252,6 @@ constrained baseline profile and CABAC.) Using it is mostly useful for
>  testing and for taking advantage of Cisco's patent portfolio license
>  (@url{http://www.openh264.org/BINARY_LICENSE.txt}).
>
> -@section OpenJPEG
> -
> -FFmpeg can use the OpenJPEG libraries for decoding/encoding J2K videos.  Go to
> -@url{http://www.openjpeg.org/} to get the libraries and follow the installation
> -instructions.  To enable using OpenJPEG in FFmpeg, pass @code{--enable-libopenjpeg} to
> -@file{./configure}.
> -
>  @section rav1e
>
>  FFmpeg can make use of rav1e (Rust AV1 Encoder) via its C bindings to encode videos.
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index b30747fdb99..26c695b77e6 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -1102,7 +1102,6 @@ OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER)  += libopencore-amr.o
>  OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER)  += libopencore-amr.o
>  OBJS-$(CONFIG_LIBOPENH264_DECODER)        += libopenh264dec.o libopenh264.o
>  OBJS-$(CONFIG_LIBOPENH264_ENCODER)        += libopenh264enc.o libopenh264.o
> -OBJS-$(CONFIG_LIBOPENJPEG_ENCODER)        += libopenjpegenc.o
>  OBJS-$(CONFIG_LIBOPUS_DECODER)            += libopusdec.o libopus.o     \
>                                               vorbis_data.o
>  OBJS-$(CONFIG_LIBOPUS_ENCODER)            += libopusenc.o libopus.o     \
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index aabfa9be50f..e13614f786f 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -781,7 +781,6 @@ extern const FFCodec ff_libmp3lame_encoder;
>  extern const FFCodec ff_libopencore_amrnb_encoder;
>  extern const FFCodec ff_libopencore_amrnb_decoder;
>  extern const FFCodec ff_libopencore_amrwb_decoder;
> -extern const FFCodec ff_libopenjpeg_encoder;
>  extern const FFCodec ff_libopus_encoder;
>  extern const FFCodec ff_libopus_decoder;
>  extern const FFCodec ff_librav1e_encoder;
> diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c
> deleted file mode 100644
> index 009c7a43774..00000000000
> --- a/libavcodec/libopenjpegenc.c
> +++ /dev/null
> @@ -1,790 +0,0 @@
> -/*
> - * JPEG 2000 encoding support via OpenJPEG
> - * Copyright (c) 2011 Michael Bradshaw <mjbshaw gmail com>
> - *
> - * This file is part of FFmpeg.
> - *
> - * FFmpeg is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * FFmpeg is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with FFmpeg; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> - */
> -
> -/**
> - * @file
> - * JPEG 2000 encoder using libopenjpeg
> - */
> -
> -#include "libavutil/common.h"
> -#include "libavutil/imgutils.h"
> -#include "libavutil/intreadwrite.h"
> -#include "libavutil/opt.h"
> -#include "avcodec.h"
> -#include "codec_internal.h"
> -#include "encode.h"
> -#include <openjpeg.h>
> -
> -typedef struct LibOpenJPEGContext {
> -    AVClass *avclass;
> -    opj_cparameters_t enc_params;
> -    int format;
> -    int profile;
> -    int prog_order;
> -    int cinema_mode;
> -    int numresolution;
> -    int irreversible;
> -    int disto_alloc;
> -    int fixed_quality;
> -} LibOpenJPEGContext;
> -
> -static void error_callback(const char *msg, void *data)
> -{
> -    av_log(data, AV_LOG_ERROR, "%s\n", msg);
> -}
> -
> -static void warning_callback(const char *msg, void *data)
> -{
> -    av_log(data, AV_LOG_WARNING, "%s\n", msg);
> -}
> -
> -static void info_callback(const char *msg, void *data)
> -{
> -    av_log(data, AV_LOG_DEBUG, "%s\n", msg);
> -}
> -
> -typedef struct PacketWriter {
> -    int pos;
> -    AVPacket *packet;
> -} PacketWriter;
> -
> -static OPJ_SIZE_T stream_write(void *out_buffer, OPJ_SIZE_T nb_bytes, void *user_data)
> -{
> -    PacketWriter *writer = user_data;
> -    AVPacket *packet = writer->packet;
> -    int remaining = packet->size - writer->pos;
> -    if (nb_bytes > remaining) {
> -        OPJ_SIZE_T needed = nb_bytes - remaining;
> -        int max_growth = INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - packet->size;
> -        if (needed > max_growth) {
> -            return (OPJ_SIZE_T)-1;
> -        }
> -        if (av_grow_packet(packet, (int)needed)) {
> -            return (OPJ_SIZE_T)-1;
> -        }
> -    }
> -    memcpy(packet->data + writer->pos, out_buffer, nb_bytes);
> -    writer->pos += (int)nb_bytes;
> -    return nb_bytes;
> -}
> -
> -static OPJ_OFF_T stream_skip(OPJ_OFF_T nb_bytes, void *user_data)
> -{
> -    PacketWriter *writer = user_data;
> -    AVPacket *packet = writer->packet;
> -    if (nb_bytes < 0) {
> -        if (writer->pos == 0) {
> -            return (OPJ_SIZE_T)-1;
> -        }
> -        if (nb_bytes + writer->pos < 0) {
> -            nb_bytes = -writer->pos;
> -        }
> -    } else {
> -        int remaining = packet->size - writer->pos;
> -        if (nb_bytes > remaining) {
> -            OPJ_SIZE_T needed = nb_bytes - remaining;
> -            int max_growth = INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - packet->size;
> -            if (needed > max_growth) {
> -                return (OPJ_SIZE_T)-1;
> -            }
> -            if (av_grow_packet(packet, (int)needed)) {
> -                return (OPJ_SIZE_T)-1;
> -            }
> -        }
> -    }
> -    writer->pos += (int)nb_bytes;
> -    return nb_bytes;
> -}
> -
> -static OPJ_BOOL stream_seek(OPJ_OFF_T nb_bytes, void *user_data)
> -{
> -    PacketWriter *writer = user_data;
> -    AVPacket *packet = writer->packet;
> -    if (nb_bytes < 0) {
> -        return OPJ_FALSE;
> -    }
> -    if (nb_bytes > packet->size) {
> -        if (nb_bytes > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE ||
> -            av_grow_packet(packet, (int)nb_bytes - packet->size)) {
> -            return OPJ_FALSE;
> -        }
> -    }
> -    writer->pos = (int)nb_bytes;
> -    return OPJ_TRUE;
> -}
> -
> -static void cinema_parameters(opj_cparameters_t *p)
> -{
> -    p->tile_size_on = 0;
> -    p->cp_tdx = 1;
> -    p->cp_tdy = 1;
> -
> -    /* Tile part */
> -    p->tp_flag = 'C';
> -    p->tp_on = 1;
> -
> -    /* Tile and Image shall be at (0, 0) */
> -    p->cp_tx0 = 0;
> -    p->cp_ty0 = 0;
> -    p->image_offset_x0 = 0;
> -    p->image_offset_y0 = 0;
> -
> -    /* Codeblock size= 32 * 32 */
> -    p->cblockw_init = 32;
> -    p->cblockh_init = 32;
> -    p->csty |= 0x01;
> -
> -    /* The progression order shall be CPRL */
> -    p->prog_order = OPJ_CPRL;
> -
> -    /* No ROI */
> -    p->roi_compno = -1;
> -
> -    /* No subsampling */
> -    p->subsampling_dx = 1;
> -    p->subsampling_dy = 1;
> -
> -    /* 9-7 transform */
> -    p->irreversible = 1;
> -
> -    p->tcp_mct = 1;
> -}
> -
> -static opj_image_t *mj2_create_image(AVCodecContext *avctx, opj_cparameters_t *parameters)
> -{
> -    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
> -    opj_image_cmptparm_t cmptparm[4] = {{0}};
> -    opj_image_t *img;
> -    int i;
> -    int sub_dx[4];
> -    int sub_dy[4];
> -    int numcomps;
> -    OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN;
> -
> -    sub_dx[0] = sub_dx[3] = 1;
> -    sub_dy[0] = sub_dy[3] = 1;
> -    sub_dx[1] = sub_dx[2] = 1 << desc->log2_chroma_w;
> -    sub_dy[1] = sub_dy[2] = 1 << desc->log2_chroma_h;
> -
> -    numcomps = desc->nb_components;
> -
> -    switch (avctx->pix_fmt) {
> -    case AV_PIX_FMT_GRAY8:
> -    case AV_PIX_FMT_YA8:
> -    case AV_PIX_FMT_GRAY10:
> -    case AV_PIX_FMT_GRAY12:
> -    case AV_PIX_FMT_GRAY14:
> -    case AV_PIX_FMT_GRAY16:
> -    case AV_PIX_FMT_YA16:
> -        color_space = OPJ_CLRSPC_GRAY;
> -        break;
> -    case AV_PIX_FMT_RGB24:
> -    case AV_PIX_FMT_RGBA:
> -    case AV_PIX_FMT_RGB48:
> -    case AV_PIX_FMT_RGBA64:
> -    case AV_PIX_FMT_GBR24P:
> -    case AV_PIX_FMT_GBRP9:
> -    case AV_PIX_FMT_GBRP10:
> -    case AV_PIX_FMT_GBRP12:
> -    case AV_PIX_FMT_GBRP14:
> -    case AV_PIX_FMT_GBRP16:
> -    case AV_PIX_FMT_XYZ12:
> -        color_space = OPJ_CLRSPC_SRGB;
> -        break;
> -    case AV_PIX_FMT_YUV410P:
> -    case AV_PIX_FMT_YUV411P:
> -    case AV_PIX_FMT_YUV420P:
> -    case AV_PIX_FMT_YUV422P:
> -    case AV_PIX_FMT_YUV440P:
> -    case AV_PIX_FMT_YUV444P:
> -    case AV_PIX_FMT_YUVA420P:
> -    case AV_PIX_FMT_YUVA422P:
> -    case AV_PIX_FMT_YUVA444P:
> -    case AV_PIX_FMT_YUV420P9:
> -    case AV_PIX_FMT_YUV422P9:
> -    case AV_PIX_FMT_YUV444P9:
> -    case AV_PIX_FMT_YUVA420P9:
> -    case AV_PIX_FMT_YUVA422P9:
> -    case AV_PIX_FMT_YUVA444P9:
> -    case AV_PIX_FMT_YUV420P10:
> -    case AV_PIX_FMT_YUV422P10:
> -    case AV_PIX_FMT_YUV444P10:
> -    case AV_PIX_FMT_YUVA420P10:
> -    case AV_PIX_FMT_YUVA422P10:
> -    case AV_PIX_FMT_YUVA444P10:
> -    case AV_PIX_FMT_YUV420P12:
> -    case AV_PIX_FMT_YUV422P12:
> -    case AV_PIX_FMT_YUV444P12:
> -    case AV_PIX_FMT_YUV420P14:
> -    case AV_PIX_FMT_YUV422P14:
> -    case AV_PIX_FMT_YUV444P14:
> -    case AV_PIX_FMT_YUV420P16:
> -    case AV_PIX_FMT_YUV422P16:
> -    case AV_PIX_FMT_YUV444P16:
> -    case AV_PIX_FMT_YUVA420P16:
> -    case AV_PIX_FMT_YUVA422P16:
> -    case AV_PIX_FMT_YUVA444P16:
> -        color_space = OPJ_CLRSPC_SYCC;
> -        break;
> -    default:
> -        av_log(avctx, AV_LOG_ERROR,
> -               "The requested pixel format '%s' is not supported\n",
> -               av_get_pix_fmt_name(avctx->pix_fmt));
> -        return NULL;
> -    }
> -
> -    for (i = 0; i < numcomps; i++) {
> -        cmptparm[i].prec = desc->comp[i].depth;
> -        cmptparm[i].bpp  = desc->comp[i].depth;
> -        cmptparm[i].sgnd = 0;
> -        cmptparm[i].dx = sub_dx[i];
> -        cmptparm[i].dy = sub_dy[i];
> -        cmptparm[i].w = (avctx->width + sub_dx[i] - 1) / sub_dx[i];
> -        cmptparm[i].h = (avctx->height + sub_dy[i] - 1) / sub_dy[i];
> -    }
> -
> -    img = opj_image_create(numcomps, cmptparm, color_space);
> -
> -    if (!img)
> -        return NULL;
> -
> -    // x0, y0 is the top left corner of the image
> -    // x1, y1 is the width, height of the reference grid
> -    img->x0 = 0;
> -    img->y0 = 0;
> -    img->x1 = (avctx->width  - 1) * parameters->subsampling_dx + 1;
> -    img->y1 = (avctx->height - 1) * parameters->subsampling_dy + 1;
> -
> -    return img;
> -}
> -
> -static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx)
> -{
> -    LibOpenJPEGContext *ctx = avctx->priv_data;
> -    int err = 0;
> -
> -    opj_set_default_encoder_parameters(&ctx->enc_params);
> -
> -    switch (ctx->cinema_mode) {
> -    case OPJ_CINEMA2K_24:
> -        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
> -        ctx->enc_params.max_cs_size = OPJ_CINEMA_24_CS;
> -        ctx->enc_params.max_comp_size = OPJ_CINEMA_24_COMP;
> -        break;
> -    case OPJ_CINEMA2K_48:
> -        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
> -        ctx->enc_params.max_cs_size = OPJ_CINEMA_48_CS;
> -        ctx->enc_params.max_comp_size = OPJ_CINEMA_48_COMP;
> -        break;
> -    case OPJ_CINEMA4K_24:
> -        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_4K;
> -        ctx->enc_params.max_cs_size = OPJ_CINEMA_24_CS;
> -        ctx->enc_params.max_comp_size = OPJ_CINEMA_24_COMP;
> -        break;
> -    }
> -
> -    switch (ctx->profile) {
> -    case OPJ_CINEMA2K:
> -        if (ctx->enc_params.rsiz == OPJ_PROFILE_CINEMA_4K) {
> -            err = AVERROR(EINVAL);
> -            break;
> -        }
> -        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
> -        break;
> -    case OPJ_CINEMA4K:
> -        if (ctx->enc_params.rsiz == OPJ_PROFILE_CINEMA_2K) {
> -            err = AVERROR(EINVAL);
> -            break;
> -        }
> -        ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_4K;
> -        break;
> -    }
> -
> -    if (err) {
> -        av_log(avctx, AV_LOG_ERROR,
> -               "Invalid parameter pairing: cinema_mode and profile conflict.\n");
> -        return err;
> -    }
> -
> -    if (!ctx->numresolution) {
> -        ctx->numresolution = 6;
> -        while (FFMIN(avctx->width, avctx->height) >> ctx->numresolution < 1)
> -            ctx->numresolution --;
> -    }
> -
> -    ctx->enc_params.prog_order = ctx->prog_order;
> -    ctx->enc_params.numresolution = ctx->numresolution;
> -    ctx->enc_params.irreversible = ctx->irreversible;
> -    ctx->enc_params.cp_disto_alloc = ctx->disto_alloc;
> -    ctx->enc_params.cp_fixed_quality = ctx->fixed_quality;
> -    ctx->enc_params.tcp_numlayers = 1;
> -    ctx->enc_params.tcp_rates[0] = FFMAX(avctx->compression_level, 0) * 2;
> -
> -    if (ctx->cinema_mode > 0) {
> -        cinema_parameters(&ctx->enc_params);
> -    }
> -
> -    return 0;
> -}
> -
> -static int libopenjpeg_copy_packed8(AVCodecContext *avctx, const uint8_t *src[4],
> -                                    const int linesize[4], opj_image_t *image)
> -{
> -    int compno;
> -    int x;
> -    int y;
> -    int *image_line;
> -    int frame_index;
> -    const int numcomps = image->numcomps;
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        if (image->comps[compno].w > linesize[0] / numcomps) {
> -            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
> -            return 0;
> -        }
> -    }
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        for (y = 0; y < avctx->height; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            frame_index = y * linesize[0] + compno;
> -            for (x = 0; x < avctx->width; ++x) {
> -                image_line[x] = src[0][frame_index];
> -                frame_index += numcomps;
> -            }
> -            for (; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - 1];
> -            }
> -        }
> -        for (; y < image->comps[compno].h; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            for (x = 0; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - (int)image->comps[compno].w];
> -            }
> -        }
> -    }
> -
> -    return 1;
> -}
> -
> -// for XYZ 12 bit
> -static int libopenjpeg_copy_packed12(AVCodecContext *avctx, const uint8_t *src[4],
> -                                    const int linesize[4], opj_image_t *image)
> -{
> -    int compno;
> -    int x, y;
> -    int *image_line;
> -    int frame_index;
> -    const int numcomps  = image->numcomps;
> -    const uint16_t *frame_ptr = (const uint16_t *)src[0];
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        if (image->comps[compno].w > linesize[0] / numcomps) {
> -            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
> -            return 0;
> -        }
> -    }
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        for (y = 0; y < avctx->height; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            frame_index = y * (linesize[0] / 2) + compno;
> -            for (x = 0; x < avctx->width; ++x) {
> -                image_line[x] = frame_ptr[frame_index] >> 4;
> -                frame_index += numcomps;
> -            }
> -            for (; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - 1];
> -            }
> -        }
> -        for (; y < image->comps[compno].h; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            for (x = 0; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - (int)image->comps[compno].w];
> -            }
> -        }
> -    }
> -
> -    return 1;
> -}
> -
> -static int libopenjpeg_copy_packed16(AVCodecContext *avctx, const uint8_t *src[4],
> -                                    const int linesize[4], opj_image_t *image)
> -{
> -    int compno;
> -    int x;
> -    int y;
> -    int *image_line;
> -    int frame_index;
> -    const int numcomps = image->numcomps;
> -    const uint16_t *frame_ptr = (const uint16_t*)src[0];
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        if (image->comps[compno].w > linesize[0] / numcomps) {
> -            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
> -            return 0;
> -        }
> -    }
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        for (y = 0; y < avctx->height; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            frame_index = y * (linesize[0] / 2) + compno;
> -            for (x = 0; x < avctx->width; ++x) {
> -                image_line[x] = frame_ptr[frame_index];
> -                frame_index += numcomps;
> -            }
> -            for (; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - 1];
> -            }
> -        }
> -        for (; y < image->comps[compno].h; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            for (x = 0; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - (int)image->comps[compno].w];
> -            }
> -        }
> -    }
> -
> -    return 1;
> -}
> -
> -static int libopenjpeg_copy_unpacked8(AVCodecContext *avctx, const uint8_t *src[4],
> -                                    const int linesize[4], opj_image_t *image)
> -{
> -    int compno;
> -    int x;
> -    int y;
> -    int width;
> -    int height;
> -    int *image_line;
> -    int frame_index;
> -    const int numcomps = image->numcomps;
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        if (image->comps[compno].w > linesize[compno]) {
> -            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
> -            return 0;
> -        }
> -    }
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        width  = (avctx->width + image->comps[compno].dx - 1) / image->comps[compno].dx;
> -        height = (avctx->height + image->comps[compno].dy - 1) / image->comps[compno].dy;
> -        for (y = 0; y < height; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            frame_index = y * linesize[compno];
> -            for (x = 0; x < width; ++x)
> -                image_line[x] = src[compno][frame_index++];
> -            for (; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - 1];
> -            }
> -        }
> -        for (; y < image->comps[compno].h; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            for (x = 0; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - (int)image->comps[compno].w];
> -            }
> -        }
> -    }
> -
> -    return 1;
> -}
> -
> -static int libopenjpeg_copy_unpacked16(AVCodecContext *avctx, const uint8_t *src[4],
> -                                    const int linesize[4], opj_image_t *image)
> -{
> -    int compno;
> -    int x;
> -    int y;
> -    int width;
> -    int height;
> -    int *image_line;
> -    int frame_index;
> -    const int numcomps = image->numcomps;
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        if (image->comps[compno].w > linesize[compno]) {
> -            av_log(avctx, AV_LOG_ERROR, "Error: frame's linesize is too small for the image\n");
> -            return 0;
> -        }
> -    }
> -
> -    for (compno = 0; compno < numcomps; ++compno) {
> -        const uint16_t *frame_ptr = (const uint16_t *)src[compno];
> -        width     = (avctx->width + image->comps[compno].dx - 1) / image->comps[compno].dx;
> -        height    = (avctx->height + image->comps[compno].dy - 1) / image->comps[compno].dy;
> -        for (y = 0; y < height; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            frame_index = y * (linesize[compno] / 2);
> -            for (x = 0; x < width; ++x)
> -                image_line[x] = frame_ptr[frame_index++];
> -            for (; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - 1];
> -            }
> -        }
> -        for (; y < image->comps[compno].h; ++y) {
> -            image_line = image->comps[compno].data + y * image->comps[compno].w;
> -            for (x = 0; x < image->comps[compno].w; ++x) {
> -                image_line[x] = image_line[x - (int)image->comps[compno].w];
> -            }
> -        }
> -    }
> -
> -    return 1;
> -}
> -
> -static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
> -                                    const AVFrame *frame, int *got_packet)
> -{
> -    LibOpenJPEGContext *ctx = avctx->priv_data;
> -    int ret;
> -    int cpyresult = 0;
> -    PacketWriter writer     = { 0 };
> -    opj_codec_t *compress   = NULL;
> -    opj_stream_t *stream    = NULL;
> -    opj_image_t *image      = mj2_create_image(avctx, &ctx->enc_params);
> -    const uint8_t *data[4] = { frame->data[0], frame->data[1],
> -                               frame->data[2], frame->data[3] };
> -    int linesize[4]        = { frame->linesize[0], frame->linesize[1],
> -                               frame->linesize[2], frame->linesize[3] };
> -    if (!image) {
> -        av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n");
> -        ret = AVERROR(EINVAL);
> -        goto done;
> -    }
> -
> -    switch (avctx->pix_fmt) {
> -    case AV_PIX_FMT_RGB24:
> -    case AV_PIX_FMT_RGBA:
> -    case AV_PIX_FMT_YA8:
> -        cpyresult = libopenjpeg_copy_packed8(avctx, data, linesize, image);
> -        break;
> -    case AV_PIX_FMT_XYZ12:
> -        cpyresult = libopenjpeg_copy_packed12(avctx, data, linesize, image);
> -        break;
> -    case AV_PIX_FMT_RGB48:
> -    case AV_PIX_FMT_RGBA64:
> -    case AV_PIX_FMT_YA16:
> -        cpyresult = libopenjpeg_copy_packed16(avctx, data, linesize, image);
> -        break;
> -    case AV_PIX_FMT_GBR24P:
> -    case AV_PIX_FMT_GBRP9:
> -    case AV_PIX_FMT_GBRP10:
> -    case AV_PIX_FMT_GBRP12:
> -    case AV_PIX_FMT_GBRP14:
> -    case AV_PIX_FMT_GBRP16:
> -        data[0] = frame->data[2]; // swap to be rgb
> -        data[1] = frame->data[0];
> -        data[2] = frame->data[1];
> -        linesize[0] = frame->linesize[2];
> -        linesize[1] = frame->linesize[0];
> -        linesize[2] = frame->linesize[1];
> -        if (avctx->pix_fmt == AV_PIX_FMT_GBR24P) {
> -            cpyresult = libopenjpeg_copy_unpacked8(avctx, data, linesize, image);
> -        } else {
> -            cpyresult = libopenjpeg_copy_unpacked16(avctx, data, linesize, image);
> -        }
> -        break;
> -    case AV_PIX_FMT_GRAY8:
> -    case AV_PIX_FMT_YUV410P:
> -    case AV_PIX_FMT_YUV411P:
> -    case AV_PIX_FMT_YUV420P:
> -    case AV_PIX_FMT_YUV422P:
> -    case AV_PIX_FMT_YUV440P:
> -    case AV_PIX_FMT_YUV444P:
> -    case AV_PIX_FMT_YUVA420P:
> -    case AV_PIX_FMT_YUVA422P:
> -    case AV_PIX_FMT_YUVA444P:
> -        cpyresult = libopenjpeg_copy_unpacked8(avctx, data, linesize, image);
> -        break;
> -    case AV_PIX_FMT_GRAY10:
> -    case AV_PIX_FMT_GRAY12:
> -    case AV_PIX_FMT_GRAY14:
> -    case AV_PIX_FMT_GRAY16:
> -    case AV_PIX_FMT_YUV420P9:
> -    case AV_PIX_FMT_YUV422P9:
> -    case AV_PIX_FMT_YUV444P9:
> -    case AV_PIX_FMT_YUVA420P9:
> -    case AV_PIX_FMT_YUVA422P9:
> -    case AV_PIX_FMT_YUVA444P9:
> -    case AV_PIX_FMT_YUV444P10:
> -    case AV_PIX_FMT_YUV422P10:
> -    case AV_PIX_FMT_YUV420P10:
> -    case AV_PIX_FMT_YUVA444P10:
> -    case AV_PIX_FMT_YUVA422P10:
> -    case AV_PIX_FMT_YUVA420P10:
> -    case AV_PIX_FMT_YUV420P12:
> -    case AV_PIX_FMT_YUV422P12:
> -    case AV_PIX_FMT_YUV444P12:
> -    case AV_PIX_FMT_YUV420P14:
> -    case AV_PIX_FMT_YUV422P14:
> -    case AV_PIX_FMT_YUV444P14:
> -    case AV_PIX_FMT_YUV444P16:
> -    case AV_PIX_FMT_YUV422P16:
> -    case AV_PIX_FMT_YUV420P16:
> -    case AV_PIX_FMT_YUVA444P16:
> -    case AV_PIX_FMT_YUVA422P16:
> -    case AV_PIX_FMT_YUVA420P16:
> -        cpyresult = libopenjpeg_copy_unpacked16(avctx, data, linesize, image);
> -        break;
> -    default:
> -        av_log(avctx, AV_LOG_ERROR,
> -               "The frame's pixel format '%s' is not supported\n",
> -               av_get_pix_fmt_name(avctx->pix_fmt));
> -        ret = AVERROR(EINVAL);
> -        goto done;
> -        break;
> -    }
> -
> -    if (!cpyresult) {
> -        av_log(avctx, AV_LOG_ERROR,
> -               "Could not copy the frame data to the internal image buffer\n");
> -        ret = -1;
> -        goto done;
> -    }
> -
> -    if ((ret = ff_alloc_packet(avctx, pkt, 1024)) < 0)
> -        goto done;
> -
> -    compress = opj_create_compress(ctx->format);
> -    if (!compress) {
> -        av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n");
> -        ret = AVERROR(ENOMEM);
> -        goto done;
> -    }
> -
> -    if (!opj_set_error_handler(compress, error_callback, avctx) ||
> -        !opj_set_warning_handler(compress, warning_callback, avctx) ||
> -        !opj_set_info_handler(compress, info_callback, avctx)) {
> -        av_log(avctx, AV_LOG_ERROR, "Error setting the compressor handlers\n");
> -        ret = AVERROR_EXTERNAL;
> -        goto done;
> -    }
> -
> -    if (!opj_setup_encoder(compress, &ctx->enc_params, image)) {
> -        av_log(avctx, AV_LOG_ERROR, "Error setting up the compressor\n");
> -        ret = AVERROR_EXTERNAL;
> -        goto done;
> -    }
> -    stream = opj_stream_default_create(OPJ_STREAM_WRITE);
> -
> -    if (!stream) {
> -        av_log(avctx, AV_LOG_ERROR, "Error creating the cio stream\n");
> -        ret = AVERROR(ENOMEM);
> -        goto done;
> -    }
> -
> -    writer.packet = pkt;
> -    opj_stream_set_write_function(stream, stream_write);
> -    opj_stream_set_skip_function(stream, stream_skip);
> -    opj_stream_set_seek_function(stream, stream_seek);
> -    opj_stream_set_user_data(stream, &writer, NULL);
> -
> -    if (!opj_start_compress(compress, image, stream) ||
> -        !opj_encode(compress, stream) ||
> -        !opj_end_compress(compress, stream)) {
> -        av_log(avctx, AV_LOG_ERROR, "Error during the opj encode\n");
> -        ret = AVERROR_EXTERNAL;
> -        goto done;
> -    }
> -
> -    av_shrink_packet(pkt, writer.pos);
> -
> -    *got_packet = 1;
> -    ret = 0;
> -
> -done:
> -    opj_stream_destroy(stream);
> -    opj_destroy_codec(compress);
> -    opj_image_destroy(image);
> -    return ret;
> -}
> -
> -#define OFFSET(x) offsetof(LibOpenJPEGContext, 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 = OPJ_CODEC_JP2   }, OPJ_CODEC_J2K, OPJ_CODEC_JP2,   VE, "format"      },
> -    { "j2k",           NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CODEC_J2K   }, 0,         0,           VE, "format"      },
> -    { "jp2",           NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CODEC_JP2   }, 0,         0,           VE, "format"      },
> -    { "profile",       NULL,                OFFSET(profile),       AV_OPT_TYPE_INT,   { .i64 = OPJ_STD_RSIZ    }, OPJ_STD_RSIZ,  OPJ_CINEMA4K,    VE, "profile"     },
> -    { "jpeg2000",      NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_STD_RSIZ    }, 0,         0,           VE, "profile"     },
> -    { "cinema2k",      NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA2K    }, 0,         0,           VE, "profile"     },
> -    { "cinema4k",      NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA4K    }, 0,         0,           VE, "profile"     },
> -    { "cinema_mode",   "Digital Cinema",    OFFSET(cinema_mode),   AV_OPT_TYPE_INT,   { .i64 = OPJ_OFF         }, OPJ_OFF,       OPJ_CINEMA4K_24, VE, "cinema_mode" },
> -    { "off",           NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_OFF         }, 0,         0,           VE, "cinema_mode" },
> -    { "2k_24",         NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA2K_24 }, 0,         0,           VE, "cinema_mode" },
> -    { "2k_48",         NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA2K_48 }, 0,         0,           VE, "cinema_mode" },
> -    { "4k_24",         NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CINEMA4K_24 }, 0,         0,           VE, "cinema_mode" },
> -    { "prog_order",    "Progression Order", OFFSET(prog_order),    AV_OPT_TYPE_INT,   { .i64 = OPJ_LRCP    }, OPJ_LRCP,  OPJ_CPRL,    VE, "prog_order"  },
> -    { "lrcp",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_LRCP    }, 0,         0,           VE, "prog_order"  },
> -    { "rlcp",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_RLCP    }, 0,         0,           VE, "prog_order"  },
> -    { "rpcl",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_RPCL    }, 0,         0,           VE, "prog_order"  },
> -    { "pcrl",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_PCRL    }, 0,         0,           VE, "prog_order"  },
> -    { "cprl",          NULL,                0,                     AV_OPT_TYPE_CONST, { .i64 = OPJ_CPRL    }, 0,         0,           VE, "prog_order"  },
> -    { "numresolution", NULL,                OFFSET(numresolution), AV_OPT_TYPE_INT,   { .i64 = 6            }, 0,         33,          VE                },
> -    { "irreversible",  NULL,                OFFSET(irreversible),  AV_OPT_TYPE_INT,   { .i64 = 0            }, 0,         1,           VE                },
> -    { "disto_alloc",   NULL,                OFFSET(disto_alloc),   AV_OPT_TYPE_INT,   { .i64 = 1            }, 0,         1,           VE                },
> -    { "fixed_quality", NULL,                OFFSET(fixed_quality), AV_OPT_TYPE_INT,   { .i64 = 0            }, 0,         1,           VE                },
> -    { NULL },
> -};
> -
> -static const AVClass openjpeg_class = {
> -    .class_name = "libopenjpeg",
> -    .item_name  = av_default_item_name,
> -    .option     = options,
> -    .version    = LIBAVUTIL_VERSION_INT,
> -};
> -
> -const FFCodec ff_libopenjpeg_encoder = {
> -    .p.name         = "libopenjpeg",
> -    CODEC_LONG_NAME("OpenJPEG JPEG 2000"),
> -    .p.type         = AVMEDIA_TYPE_VIDEO,
> -    .p.id           = AV_CODEC_ID_JPEG2000,
> -    .caps_internal  = FF_CODEC_CAP_NOT_INIT_THREADSAFE,
> -    .priv_data_size = sizeof(LibOpenJPEGContext),
> -    .init           = libopenjpeg_encode_init,
> -    FF_CODEC_ENCODE_CB(libopenjpeg_encode_frame),
> -    .p.capabilities = AV_CODEC_CAP_FRAME_THREADS |
> -                      AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
> -    .p.pix_fmts     = (const enum AVPixelFormat[]) {
> -        AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA, AV_PIX_FMT_RGB48,
> -        AV_PIX_FMT_RGBA64, AV_PIX_FMT_GBR24P,
> -        AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16,
> -        AV_PIX_FMT_GRAY8, AV_PIX_FMT_YA8, AV_PIX_FMT_GRAY16, AV_PIX_FMT_YA16,
> -        AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
> -        AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P,
> -        AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA422P,
> -        AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUVA444P,
> -        AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
> -        AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
> -        AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
> -        AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA444P10,
> -        AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12,
> -        AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV444P14,
> -        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
> -        AV_PIX_FMT_YUVA420P16, AV_PIX_FMT_YUVA422P16, AV_PIX_FMT_YUVA444P16,
> -        AV_PIX_FMT_XYZ12,
> -        AV_PIX_FMT_NONE
> -    },
> -    .p.priv_class   = &openjpeg_class,
> -    .p.wrapper_name = "libopenjpeg",
> -};
> --
> 2.17.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc Michael Niedermayer
  2023-03-30 23:26   ` Pierre-Anthony Lemieux
@ 2023-03-30 23:31   ` Michael Bradshaw
  2023-04-01 23:37     ` Stefano Sabatini
  2023-04-05 12:55   ` Tomas Härdin
  2 siblings, 1 reply; 14+ messages in thread
From: Michael Bradshaw @ 2023-03-30 23:31 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Thu, Mar 30, 2023 at 5:15 PM Michael Niedermayer <michael@niedermayer.cc>
wrote:

> FFmpeg has its own jpeg2000 encoder
> This avoids a dependency
>
> This is not ready yet as we still miss xyz / ya pixel formats, and some
> cinama stuff, but
> it seems this should be the direction to aim at. And it seems there is not
> much missing
>

As the person who originally wrote the libopenjpegenc.c file, I concur this
is the right direction to aim at. I fully support this.

Regarding timing and feature parity, I'll leave it for others to decide.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc
  2023-03-30 23:31   ` Michael Bradshaw
@ 2023-04-01 23:37     ` Stefano Sabatini
  0 siblings, 0 replies; 14+ messages in thread
From: Stefano Sabatini @ 2023-04-01 23:37 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Thursday 2023-03-30 17:31:10 -0600, Michael Bradshaw wrote:
> On Thu, Mar 30, 2023 at 5:15 PM Michael Niedermayer <michael@niedermayer.cc>
> wrote:
> 
> > FFmpeg has its own jpeg2000 encoder
> > This avoids a dependency
> >
> > This is not ready yet as we still miss xyz / ya pixel formats, and some
> > cinama stuff, but
> > it seems this should be the direction to aim at. And it seems there is not
> > much missing
> >

> As the person who originally wrote the libopenjpegenc.c file, I concur this
> is the right direction to aim at. I fully support this.

OTOH, keeping it in the code until the native implementation has
reached feature-parity might help development.

> Regarding timing and feature parity, I'll leave it for others to decide.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants
  2023-03-30 23:14 [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support Michael Niedermayer
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc Michael Niedermayer
@ 2023-04-02 21:24 ` Michael Niedermayer
  2 siblings, 0 replies; 14+ messages in thread
From: Michael Niedermayer @ 2023-04-02 21:24 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1314 bytes --]

On Fri, Mar 31, 2023 at 01:14:39AM +0200, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavcodec/j2kenc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> index 8475d140daf..97b0da1c976 100644
> --- a/libavcodec/j2kenc.c
> +++ b/libavcodec/j2kenc.c
> @@ -1850,7 +1850,7 @@ const FFCodec ff_jpeg2000_encoder = {
>          AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV420P16,
>          AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV422P16,
>          AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV444P16,
> -        AV_PIX_FMT_YUV440P,
> +        AV_PIX_FMT_YUV440P,                      AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV440P12,
>          AV_PIX_FMT_YUV411P,
>          AV_PIX_FMT_YUV410P,
>          AV_PIX_FMT_PAL8,

i will merge this in the patch that had it missing before pushing

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No snowflake in an avalanche ever feels responsible. -- Voltaire

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support Michael Niedermayer
@ 2023-04-02 21:34   ` Michael Niedermayer
  2023-04-05 12:50     ` Tomas Härdin
  2023-04-06 14:15     ` Leo Izen
  0 siblings, 2 replies; 14+ messages in thread
From: Michael Niedermayer @ 2023-04-02 21:34 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1114 bytes --]

On Fri, Mar 31, 2023 at 01:14:40AM +0200, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavcodec/j2kenc.c | 28 ++++++++++++++++++----------
>  1 file changed, 18 insertions(+), 10 deletions(-)
> 
> diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> index 97b0da1c976..b23fb73770a 100644
> --- a/libavcodec/j2kenc.c
> +++ b/libavcodec/j2kenc.c
> @@ -320,8 +320,8 @@ static int put_siz(Jpeg2000EncoderContext *s)
>  
>      for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i, YRsiz_i
>          bytestream_put_byte(&s->buf, s->cbps[i] - 1);
> -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[0]:1);
> -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[1]:1);
> +        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[0]:1);
> +        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[1]:1);

i will replace the %3 by +1&2 to avoid slow modulo before applying


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

You can kill me, but you cannot change the truth.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support
  2023-04-02 21:34   ` Michael Niedermayer
@ 2023-04-05 12:50     ` Tomas Härdin
  2023-04-05 23:36       ` Michael Niedermayer
  2023-04-06 14:15     ` Leo Izen
  1 sibling, 1 reply; 14+ messages in thread
From: Tomas Härdin @ 2023-04-05 12:50 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

sön 2023-04-02 klockan 23:34 +0200 skrev Michael Niedermayer:
> On Fri, Mar 31, 2023 at 01:14:40AM +0200, Michael Niedermayer wrote:
> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > ---
> >  libavcodec/j2kenc.c | 28 ++++++++++++++++++----------
> >  1 file changed, 18 insertions(+), 10 deletions(-)
> > 
> > diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> > index 97b0da1c976..b23fb73770a 100644
> > --- a/libavcodec/j2kenc.c
> > +++ b/libavcodec/j2kenc.c
> > @@ -320,8 +320,8 @@ static int put_siz(Jpeg2000EncoderContext *s)
> >  
> >      for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i,
> > YRsiz_i
> >          bytestream_put_byte(&s->buf, s->cbps[i] - 1);
> > -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[0]:1);
> > -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[1]:1);
> > +        bytestream_put_byte(&s->buf, (i%3)?1<<s-
> > >chroma_shift[0]:1);
> > +        bytestream_put_byte(&s->buf, (i%3)?1<<s-
> > >chroma_shift[1]:1);
> 
> i will replace the %3 by +1&2 to avoid slow modulo before applying

Is the compiler not smart enough to do that automagically? Not a biggie
though

/Tomas

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc
  2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc Michael Niedermayer
  2023-03-30 23:26   ` Pierre-Anthony Lemieux
  2023-03-30 23:31   ` Michael Bradshaw
@ 2023-04-05 12:55   ` Tomas Härdin
  2023-04-12  1:48     ` Pierre-Anthony Lemieux
  2 siblings, 1 reply; 14+ messages in thread
From: Tomas Härdin @ 2023-04-05 12:55 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

fre 2023-03-31 klockan 01:14 +0200 skrev Michael Niedermayer:
> FFmpeg has its own jpeg2000 encoder
> This avoids a dependency
> 
> This is not ready yet as we still miss xyz / ya pixel formats, and
> some cinama stuff, but
> it seems this should be the direction to aim at. And it seems there
> is not much missing

If we can reach feature parity then this sounds OK. In retrospect maybe
I should have worked on improving libopenjpeg performance instead. Oh
well.

We need the HT stuff in, and also my threading patchset rebased and
pushed as well. Else we'll have worse performance than opj. With my
patchset, and a bit of work on Caleb and pal's patchset, then we might
be able to bring j2k performance (both part1 and ht) far above opj

There may be some other details as well regarding features of j2kdec vs
opj but I forget

/Tomas


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support
  2023-04-05 12:50     ` Tomas Härdin
@ 2023-04-05 23:36       ` Michael Niedermayer
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Niedermayer @ 2023-04-05 23:36 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1761 bytes --]

On Wed, Apr 05, 2023 at 02:50:46PM +0200, Tomas Härdin wrote:
> sön 2023-04-02 klockan 23:34 +0200 skrev Michael Niedermayer:
> > On Fri, Mar 31, 2023 at 01:14:40AM +0200, Michael Niedermayer wrote:
> > > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > > ---
> > >  libavcodec/j2kenc.c | 28 ++++++++++++++++++----------
> > >  1 file changed, 18 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> > > index 97b0da1c976..b23fb73770a 100644
> > > --- a/libavcodec/j2kenc.c
> > > +++ b/libavcodec/j2kenc.c
> > > @@ -320,8 +320,8 @@ static int put_siz(Jpeg2000EncoderContext *s)
> > >  
> > >      for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i,
> > > YRsiz_i
> > >          bytestream_put_byte(&s->buf, s->cbps[i] - 1);
> > > -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[0]:1);
> > > -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[1]:1);
> > > +        bytestream_put_byte(&s->buf, (i%3)?1<<s-
> > > >chroma_shift[0]:1);
> > > +        bytestream_put_byte(&s->buf, (i%3)?1<<s-
> > > >chroma_shift[1]:1);
> > 
> > i will replace the %3 by +1&2 to avoid slow modulo before applying
> 
> Is the compiler not smart enough to do that automagically? Not a biggie
> though

It seemed better to not depend on that as both variants are otherwise similar
I didnt check if the compiler can remove the modulo

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

If the United States is serious about tackling the national security threats 
related to an insecure 5G network, it needs to rethink the extent to which it
values corporate profits and government espionage over security.-Bruce Schneier

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support
  2023-04-02 21:34   ` Michael Niedermayer
  2023-04-05 12:50     ` Tomas Härdin
@ 2023-04-06 14:15     ` Leo Izen
  2023-04-06 19:18       ` Michael Niedermayer
  1 sibling, 1 reply; 14+ messages in thread
From: Leo Izen @ 2023-04-06 14:15 UTC (permalink / raw)
  To: ffmpeg-devel



On 4/2/23 17:34, Michael Niedermayer wrote:
> On Fri, Mar 31, 2023 at 01:14:40AM +0200, Michael Niedermayer wrote:
>> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
>> ---
>>   libavcodec/j2kenc.c | 28 ++++++++++++++++++----------
>>   1 file changed, 18 insertions(+), 10 deletions(-)
>>
>> diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
>> index 97b0da1c976..b23fb73770a 100644
>> --- a/libavcodec/j2kenc.c
>> +++ b/libavcodec/j2kenc.c
>> @@ -320,8 +320,8 @@ static int put_siz(Jpeg2000EncoderContext *s)
>>   
>>       for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i, YRsiz_i
>>           bytestream_put_byte(&s->buf, s->cbps[i] - 1);
>> -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[0]:1);
>> -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[1]:1);
>> +        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[0]:1);
>> +        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[1]:1);
> 
> i will replace the %3 by +1&2 to avoid slow modulo before applying
> 
> 

(i % 3) and (i + 1) & 2 aren't the same tho, and won't be nonzero at the 
same time. `(i + 1) & 2` is equivalent to `(i + 1) % 4`.

- Leo Izen (thebombzen)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support
  2023-04-06 14:15     ` Leo Izen
@ 2023-04-06 19:18       ` Michael Niedermayer
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Niedermayer @ 2023-04-06 19:18 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1816 bytes --]

On Thu, Apr 06, 2023 at 10:15:48AM -0400, Leo Izen wrote:
> 
> 
> On 4/2/23 17:34, Michael Niedermayer wrote:
> > On Fri, Mar 31, 2023 at 01:14:40AM +0200, Michael Niedermayer wrote:
> > > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > > ---
> > >   libavcodec/j2kenc.c | 28 ++++++++++++++++++----------
> > >   1 file changed, 18 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
> > > index 97b0da1c976..b23fb73770a 100644
> > > --- a/libavcodec/j2kenc.c
> > > +++ b/libavcodec/j2kenc.c
> > > @@ -320,8 +320,8 @@ static int put_siz(Jpeg2000EncoderContext *s)
> > >       for (i = 0; i < s->ncomponents; i++){ // Ssiz_i XRsiz_i, YRsiz_i
> > >           bytestream_put_byte(&s->buf, s->cbps[i] - 1);
> > > -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[0]:1);
> > > -        bytestream_put_byte(&s->buf, i?1<<s->chroma_shift[1]:1);
> > > +        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[0]:1);
> > > +        bytestream_put_byte(&s->buf, (i%3)?1<<s->chroma_shift[1]:1);
> > 
> > i will replace the %3 by +1&2 to avoid slow modulo before applying
> > 
> > 
> 
> (i % 3) and (i + 1) & 2 aren't the same tho, and won't be nonzero at the
> same time. `(i + 1) & 2` is equivalent to `(i + 1) % 4`.

they are non zero in the same cases for the first 4 planes and we support
just 4. So its the same for us. Its a good argument though why gcc may
have difficulty doing this substitution on its own

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

If you fake or manipulate statistics in a paper in physics you will never
get a job again.
If you fake or manipulate statistics in a paper in medicin you will get
a job for life at the pharma industry.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc
  2023-04-05 12:55   ` Tomas Härdin
@ 2023-04-12  1:48     ` Pierre-Anthony Lemieux
  0 siblings, 0 replies; 14+ messages in thread
From: Pierre-Anthony Lemieux @ 2023-04-12  1:48 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Wed, Apr 5, 2023 at 5:55 AM Tomas Härdin <git@haerdin.se> wrote:
>
> fre 2023-03-31 klockan 01:14 +0200 skrev Michael Niedermayer:
> > FFmpeg has its own jpeg2000 encoder
> > This avoids a dependency
> >
> > This is not ready yet as we still miss xyz / ya pixel formats, and
> > some cinama stuff, but
> > it seems this should be the direction to aim at. And it seems there
> > is not much missing
>
> If we can reach feature parity then this sounds OK. In retrospect maybe
> I should have worked on improving libopenjpeg performance instead. Oh
> well.
>
> We need the HT stuff in, and also my threading patchset rebased and
> pushed as well. Else we'll have worse performance than opj. With my
> patchset, and a bit of work on Caleb and pal's patchset,

I think we have addressed all comments on the v2 patchset.

Maybe give it a last look?

> then we might
> be able to bring j2k performance (both part1 and ht) far above opj
>
> There may be some other details as well regarding features of j2kdec vs
> opj but I forget
>
> /Tomas
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-04-12  1:48 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-30 23:14 [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer
2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 2/3] avcodec/j2kenc: Add alpha support Michael Niedermayer
2023-04-02 21:34   ` Michael Niedermayer
2023-04-05 12:50     ` Tomas Härdin
2023-04-05 23:36       ` Michael Niedermayer
2023-04-06 14:15     ` Leo Izen
2023-04-06 19:18       ` Michael Niedermayer
2023-03-30 23:14 ` [FFmpeg-devel] [PATCH 3/3] [RFC] Remove libopenjpegenc Michael Niedermayer
2023-03-30 23:26   ` Pierre-Anthony Lemieux
2023-03-30 23:31   ` Michael Bradshaw
2023-04-01 23:37     ` Stefano Sabatini
2023-04-05 12:55   ` Tomas Härdin
2023-04-12  1:48     ` Pierre-Anthony Lemieux
2023-04-02 21:24 ` [FFmpeg-devel] [PATCH 1/3] avcodec/j2kenc: Add forgotten yuv440 variants Michael Niedermayer

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git