[FFmpeg-devel] Add support for libopenjpeg 2.3

Submitted by Gyan on Oct. 8, 2017, 11:21 a.m.

Details

Message ID edfbbe5c-cd8e-a09b-194b-793a3f8be013@gmail.com
State Superseded
Headers show

Commit Message

Gyan Oct. 8, 2017, 11:21 a.m.
OpenJPEG 2.3 was released a few days ago. Changelog reports "No API/ABI 
break compared to v2.2.0 but additional symbols for subset of components 
decoding"

This patch is adapted from an earlier patch which added support for 2.2.

Applied and tested locally.
From c42f0c4290170cb49dc00f7898bee31d2e8ee814 Mon Sep 17 00:00:00 2001
From: Gyan Doshi <gyandoshi@gmail.com>
Date: Sun, 8 Oct 2017 14:59:23 +0530
Subject: [PATCH] lavc: add support for openjpeg 2.3

Signed-off-by: Gyan Doshi <gyandoshi@gmail.com>
---
 configure                   |  5 ++++-
 libavcodec/libopenjpegdec.c |  8 +++++---
 libavcodec/libopenjpegenc.c | 10 ++++++----
 3 files changed, 15 insertions(+), 8 deletions(-)

Comments

Clément Bœsch Oct. 8, 2017, 11:43 a.m.
On Sun, Oct 08, 2017 at 04:51:49PM +0530, Gyan Doshi wrote:
> OpenJPEG 2.3 was released a few days ago. Changelog reports "No API/ABI
> break compared to v2.2.0 but additional symbols for subset of components
> decoding"
> 
> This patch is adapted from an earlier patch which added support for 2.2.
> 
> Applied and tested locally.

> From c42f0c4290170cb49dc00f7898bee31d2e8ee814 Mon Sep 17 00:00:00 2001
> From: Gyan Doshi <gyandoshi@gmail.com>
> Date: Sun, 8 Oct 2017 14:59:23 +0530
> Subject: [PATCH] lavc: add support for openjpeg 2.3
> 
> Signed-off-by: Gyan Doshi <gyandoshi@gmail.com>
> ---
>  configure                   |  5 ++++-
>  libavcodec/libopenjpegdec.c |  8 +++++---
>  libavcodec/libopenjpegenc.c | 10 ++++++----
>  3 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/configure b/configure
> index 391c141e7a..3280e74f0f 100755
> --- a/configure
> +++ b/configure
> @@ -1930,6 +1930,7 @@ HEADERS_LIST="
>      machine_ioctl_meteor_h
>      malloc_h
>      opencv2_core_core_c_h
> +    openjpeg_2_3_openjpeg_h
>      openjpeg_2_2_openjpeg_h
>      openjpeg_2_1_openjpeg_h
>      openjpeg_2_0_openjpeg_h
> @@ -5950,7 +5951,9 @@ enabled libopencv         && { check_header opencv2/core/core_c.h &&
>                                   require opencv 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_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
> +enabled libopenjpeg       && { { check_lib libopenjpeg openjpeg-2.3/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
> +                               check_lib libopenjpeg openjpeg-2.3/openjpeg.h opj_version -lopenjp2 ||
> +							   { check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
>                                 check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 ||
>                                 { check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
>                                 check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 ||

I'm sorry but this needs to stop. Why the hell do we have to add a ton of
garbage to the configure every time there is a new openjpeg release?

Why is it the only project that pollutes the configure like this at every
release?

[...]
> -#if HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H || HAVE_OPENJPEG_2_0_OPENJPEG_H
> +#if HAVE_OPENJPEG_2_3_OPENJPEG_H || HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H || HAVE_OPENJPEG_2_0_OPENJPEG_H

...and then this?

Yeah well, please put an end to this. This condition should be something
like #if OPENJPEG_MAJOR >= 2 or something like that.

[...]
Alexis Ballier Oct. 8, 2017, 12:34 p.m.
On Sun, 8 Oct 2017 13:43:45 +0200
Clément Bœsch <u@pkh.me> wrote:

> On Sun, Oct 08, 2017 at 04:51:49PM +0530, Gyan Doshi wrote:
> > OpenJPEG 2.3 was released a few days ago. Changelog reports "No
> > API/ABI break compared to v2.2.0 but additional symbols for subset
> > of components decoding"
> > 
> > This patch is adapted from an earlier patch which added support for
> > 2.2.
> > 
> > Applied and tested locally.  
> 
> > From c42f0c4290170cb49dc00f7898bee31d2e8ee814 Mon Sep 17 00:00:00
> > 2001 From: Gyan Doshi <gyandoshi@gmail.com>
> > Date: Sun, 8 Oct 2017 14:59:23 +0530
> > Subject: [PATCH] lavc: add support for openjpeg 2.3
> > 
> > Signed-off-by: Gyan Doshi <gyandoshi@gmail.com>
> > ---
> >  configure                   |  5 ++++-
> >  libavcodec/libopenjpegdec.c |  8 +++++---
> >  libavcodec/libopenjpegenc.c | 10 ++++++----
> >  3 files changed, 15 insertions(+), 8 deletions(-)
> > 
> > diff --git a/configure b/configure
> > index 391c141e7a..3280e74f0f 100755
> > --- a/configure
> > +++ b/configure
> > @@ -1930,6 +1930,7 @@ HEADERS_LIST="
> >      machine_ioctl_meteor_h
> >      malloc_h
> >      opencv2_core_core_c_h
> > +    openjpeg_2_3_openjpeg_h
> >      openjpeg_2_2_openjpeg_h
> >      openjpeg_2_1_openjpeg_h
> >      openjpeg_2_0_openjpeg_h
> > @@ -5950,7 +5951,9 @@ enabled libopencv         && { check_header
> > opencv2/core/core_c.h && require opencv 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_lib
> > libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2
> > -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || +enabled
> > libopenjpeg       && { { check_lib libopenjpeg
> > openjpeg-2.3/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC &&
> > add_cppflags -DOPJ_STATIC; } ||
> > +                               check_lib libopenjpeg
> > openjpeg-2.3/openjpeg.h opj_version -lopenjp2 ||
> > +
> > { check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version
> > -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || check_lib
> > libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 ||
> > { check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version
> > -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || check_lib
> > libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 ||  
> 
> I'm sorry but this needs to stop. Why the hell do we have to add a
> ton of garbage to the configure every time there is a new openjpeg
> release?
> 
> Why is it the only project that pollutes the configure like this at
> every release?


openjpeg provides a pkg-config file here; from the look of it, it only
needs to require a recent enough version (>=2.1 I'd guess), use the
pkg-config reported cflags and libs, and #include <openjpeg.h> instead
of <openjpeg-$version/openjpeg.h>
Michael Bradshaw Oct. 8, 2017, 3:18 p.m.
I can clean these up as part of the patch that drops OpenJPEG 1.x support,
which I plan on making after the next release (though of course someone
else is welcome to beat me to it; it seems there's a race for OpenJPEG
patches!).
Derek Buitenhuis Oct. 8, 2017, 3:34 p.m.
On 10/8/2017 4:18 PM, Michael Bradshaw wrote:
> I can clean these up as part of the patch that drops OpenJPEG 1.x support,
> which I plan on making after the next release (though of course someone
> else is welcome to beat me to it; it seems there's a race for OpenJPEG
> patches!).

Is there anything that precludes switching 2.X to pkg-config and leaving
1.X as is?

- Derek
Michael Bradshaw Oct. 8, 2017, 5:41 p.m.
On Sun, Oct 8, 2017 at 8:34 AM, Derek Buitenhuis <derek.buitenhuis@gmail.com
> wrote:
>
> Is there anything that precludes switching 2.X to pkg-config and leaving
> 1.X as is?


No, switching 2.x to pkg-config isn't dependent on dropping 1.x. But since
I plan to do both, I figure I might as well do them together since they're
both clean-up work.

Patch hide | download patch | download mbox

diff --git a/configure b/configure
index 391c141e7a..3280e74f0f 100755
--- a/configure
+++ b/configure
@@ -1930,6 +1930,7 @@  HEADERS_LIST="
     machine_ioctl_meteor_h
     malloc_h
     opencv2_core_core_c_h
+    openjpeg_2_3_openjpeg_h
     openjpeg_2_2_openjpeg_h
     openjpeg_2_1_openjpeg_h
     openjpeg_2_0_openjpeg_h
@@ -5950,7 +5951,9 @@  enabled libopencv         && { check_header opencv2/core/core_c.h &&
                                  require opencv 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_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
+enabled libopenjpeg       && { { check_lib libopenjpeg openjpeg-2.3/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
+                               check_lib libopenjpeg openjpeg-2.3/openjpeg.h opj_version -lopenjp2 ||
+							   { check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
                                check_lib libopenjpeg openjpeg-2.2/openjpeg.h opj_version -lopenjp2 ||
                                { check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } ||
                                check_lib libopenjpeg openjpeg-2.1/openjpeg.h opj_version -lopenjp2 ||
diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c
index 1210123265..67d47bd6a0 100644
--- a/libavcodec/libopenjpegdec.c
+++ b/libavcodec/libopenjpegdec.c
@@ -34,7 +34,9 @@ 
 #include "internal.h"
 #include "thread.h"
 
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H
+#  include <openjpeg-2.3/openjpeg.h>
+#elif HAVE_OPENJPEG_2_2_OPENJPEG_H
 #  include <openjpeg-2.2/openjpeg.h>
 #elif HAVE_OPENJPEG_2_1_OPENJPEG_H
 #  include <openjpeg-2.1/openjpeg.h>
@@ -46,7 +48,7 @@ 
 #  include <openjpeg.h>
 #endif
 
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H || HAVE_OPENJPEG_2_0_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H || HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H || HAVE_OPENJPEG_2_0_OPENJPEG_H
 #  define OPENJPEG_MAJOR_VERSION 2
 #  define OPJ(x) OPJ_##x
 #else
@@ -431,7 +433,7 @@  static int libopenjpeg_decode_frame(AVCodecContext *avctx,
     opj_stream_set_read_function(stream, stream_read);
     opj_stream_set_skip_function(stream, stream_skip);
     opj_stream_set_seek_function(stream, stream_seek);
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H || HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H
     opj_stream_set_user_data(stream, &reader, NULL);
 #elif HAVE_OPENJPEG_2_0_OPENJPEG_H
     opj_stream_set_user_data(stream, &reader);
diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c
index b67e533d1d..92b4433b04 100644
--- a/libavcodec/libopenjpegenc.c
+++ b/libavcodec/libopenjpegenc.c
@@ -32,7 +32,9 @@ 
 #include "avcodec.h"
 #include "internal.h"
 
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H
+#  include <openjpeg-2.3/openjpeg.h>
+#elif HAVE_OPENJPEG_2_2_OPENJPEG_H
 #  include <openjpeg-2.2/openjpeg.h>
 #elif HAVE_OPENJPEG_2_1_OPENJPEG_H
 #  include <openjpeg-2.1/openjpeg.h>
@@ -44,7 +46,7 @@ 
 #  include <openjpeg.h>
 #endif
 
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H || HAVE_OPENJPEG_2_0_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H || HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H || HAVE_OPENJPEG_2_0_OPENJPEG_H
 #  define OPENJPEG_MAJOR_VERSION 2
 #  define OPJ(x) OPJ_##x
 #else
@@ -307,7 +309,7 @@  static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx)
 
     opj_set_default_encoder_parameters(&ctx->enc_params);
 
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H || HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H
     switch (ctx->cinema_mode) {
     case OPJ_CINEMA2K_24:
         ctx->enc_params.rsiz = OPJ_PROFILE_CINEMA_2K;
@@ -771,7 +773,7 @@  static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *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);
-#if HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H
+#if HAVE_OPENJPEG_2_3_OPENJPEG_H || HAVE_OPENJPEG_2_2_OPENJPEG_H || HAVE_OPENJPEG_2_1_OPENJPEG_H
     opj_stream_set_user_data(stream, &writer, NULL);
 #elif HAVE_OPENJPEG_2_0_OPENJPEG_H
     opj_stream_set_user_data(stream, &writer);