diff --git a/openjpeg/README.OpenSource b/openjpeg/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..5090dee175ef68348e68bfc7a0bb7b6749644f84 --- /dev/null +++ b/openjpeg/README.OpenSource @@ -0,0 +1,20 @@ +[ + { + "Name": "openJPEG", + "License": "Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium", + "License": "Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium", + "License": "Copyright (c) 2002-2014, Professor Benoit Macq", + "License": "Copyright (c) 2003-2014, Antonin Descampe", + "License": "Copyright (c) 2003-2009, Francois-Olivier Devaux", + "License": "Copyright (c) 2005, Herve Drolon, FreeImage Team", + "License": "Copyright (c) 2002-2003, Yannick Verschueren", + "License": "Copyright (c) 2001-2003, David Janssens", + "License": "Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France", + "License": "Copyright (c) 2012, CS Systemes d'Information, France", + "License File": "LICENSE.TXT", + "Version Number": "2.5", + "Owner": "yuguans@huawei.com", + "Upstream URL": "https://github.com/uclouvain/openjpeg", + "Description": "OpenJPEG is an open-source JPEG 2000 codec written in C language. It has been developed in order to promote the use of JPEG 2000, a still-image compression standard from the Joint Photographic Experts Group (JPEG). Since April 2015, it is officially recognized by ISO/IEC and ITU-T as a JPEG 2000 Reference Software." + } +] diff --git a/openjpeg/README_zh.md b/openjpeg/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..06122e0b04e5ac7c12743234e7817a642f51e078 --- /dev/null +++ b/openjpeg/README_zh.md @@ -0,0 +1,32 @@ +# 三方库openjpeg的构建及使用 + +## 一、三方库信息汇总 + +| 库名 | openjpeg | +| :--------: | :-------------------------------------------------: | +| 功能 | OpenJPEG 是用 C 语言编写的开源 JPEG 2000 编解码器。 | +| License | The 2-Clause BSD License | +| URL | https://github.com/uclouvain/openjpeg | +| 三方库版本 | v2.5.0 | +| 系统版本 | openHarmony3.2Beta1(gn构建) / API8(cmake构建) | + + + +## 二、四方库依赖 + +该库功能上无四方库依赖。 + + + +## 三、三方库构建 + +- [gn构建](gn/README_zh.md) +- [cmake构建](cmake) + + + +## 四、三方库使用 + +- [基于gn构建版本使用](gn/gn_usage.md) +- 基于cmake构建版本使用 + diff --git a/openjpeg/gn/README_zh.md b/openjpeg/gn/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..4fc0f4441121bd629c07f88ee4da2de665aece7a --- /dev/null +++ b/openjpeg/gn/README_zh.md @@ -0,0 +1,35 @@ +# 三方库openjpeg GN构建指南 + +## 前提 + +根据本文档对该库进行GN构建时,默认你已经阅读了《[三方库openjpeg的构建与使用](../README_zh.md)》一文,并已经完成Openharmony的对应版本下载及依赖四方库的构建。若未完成上述工作,请返回《[三方库openjpeg的构建与使用](../README_zh.md)》一文,并根据相关信息进行操作。 + + + +## 源码下载 + +在OpenHarmony源码根目录下的third_party目录下执行如下指令,下载三方库openjpeg源码 + +``` +git clone git@github.com:uclouvain/openjpeg.git -b v2.5.0 +``` + + + +## 修改或添加编译文件 + +按照下述操作,将文件添加至工程路径,其中*.h.in文件为该库源码在Ubuntu20.04_x64环境下根据INSTALL.md指导文档执行cmake脚本获取的。经检查,这些文件中无CPU位数等硬件相关的配置,因此不需要修改,直接复制到工程路径中即可。 + +- 将[openjpeg](openjpeg)/BUILD.gn文件拷贝到源库openjpeg/目录下 +- 将[openjpeg/src/bin/common](openjpeg/src/bin/common)/opj_apps_config.h.in文件修改成opj_apps_config.h,然后拷贝到源库openjpeg/src/bin/common/目录下 +- 将[openjpeg/src/lib/openjp2](openjpeg/src/lib/openjp2)/opj_config_private.h.in文件修改成opj_config_private.h,然后拷贝到源库openjpeg/src/lib/openjp2/目录下 +- 将[openjpeg/src/lib/openjp2](openjpeg/src/lib/openjp2)/opj_config.h.in文件修改成opj_config.h,然后拷贝到源库openjpeg/src/lib/openjp2/目录下 + + + +## 编译 + +完成上述步骤,三方库openjpeg就构建结束了。但若系统中没有组件依赖或调用,那么本库是不会参与编译的。开发者根据《[三方库openjpeg的构建与使用](../README_zh.md)》一文中三方库使用指导,将本库编译到系统中。 + + + diff --git a/openjpeg/gn/gn_usage.md b/openjpeg/gn/gn_usage.md new file mode 100644 index 0000000000000000000000000000000000000000..bd4d15345c2513f9c0edb662818ec156b6f7c070 --- /dev/null +++ b/openjpeg/gn/gn_usage.md @@ -0,0 +1,43 @@ +# 三方库openjpeg基于gn构建版本使用指导 + +## 前提 + +根据本文档对该库进行GN构建时,默认你已经阅读了《[三方库[openjpeg]的构建与使用](../README_zh.md)》一文,并已经完成本库的构建。若未完成上述工作,请返回《[三方库[openjpeg]的构建与使用](../README_zh.md)》一文,并根据相关信息进行操作。 + + + +## 创建工程 + +参考《[工程加入OpenHarmony构建体系](../../common/gn_compile_build.md)》一文,创建开发者自己的工程。 + + + +## 三方库引入工程 + +参考《[三方库引入GN工程](../../common/gn_build.md)》一文,将三方库openjpeg引入开发者自己的工程。文中[thirdpartyA]对应本库库名*openjpeg*,[libA]对应本库动态库名*libjp2*,包含头文件路径需根据openjpeg三方库头文件实际路径进行调整。 + + + +## 在工程中使用本库 + +1. 在工程源码中包含本库对外暴露接口的头文件 + + ``` + #include "openjpeg.h" + ``` +2. 在工程源码中直接调用本库接口,具体使用什么接口开发者可根据自身项目需要,下述伪代码仅供参考 + + ``` + opj_codec_t * l_codec; + opj_image_t * l_image; + opj_stream_t * l_stream; + ... ... + opj_read_header(l_stream, l_codec, &l_image); + ... ... + ``` + + + +## 编译工程 + +开发者可参考《[三方库引入GN工程](../../common/gn_build.md)》、《[工程加入OpenHarmony构建体系](../../common/gn_compile_build.md)》文中编译步骤对工程进行编译,并检查编译输出是否正确。 diff --git a/openjpeg/gn/openjpeg/BUILD.gn b/openjpeg/gn/openjpeg/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..88ec9aed896e49c699fb7d2f8eeed265bfbc6285 --- /dev/null +++ b/openjpeg/gn/openjpeg/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +config("openjpeg_cflag_config") { + cflags = [ + "-Wno-unused-function", + ] +} + +ohos_shared_library("openjp2") { + sources = [ + "//third_party/openjpeg/src/lib/openjp2/thread.c", + "//third_party/openjpeg/src/lib/openjp2/bio.c", + "//third_party/openjpeg/src/lib/openjp2/cio.c", + "//third_party/openjpeg/src/lib/openjp2/dwt.c", + "//third_party/openjpeg/src/lib/openjp2/event.c", + "//third_party/openjpeg/src/lib/openjp2/ht_dec.c", + "//third_party/openjpeg/src/lib/openjp2/image.c", + "//third_party/openjpeg/src/lib/openjp2/invert.c", + "//third_party/openjpeg/src/lib/openjp2/j2k.c", + "//third_party/openjpeg/src/lib/openjp2/jp2.c", + "//third_party/openjpeg/src/lib/openjp2/mct.c", + "//third_party/openjpeg/src/lib/openjp2/mqc.c", + "//third_party/openjpeg/src/lib/openjp2/openjpeg.c", + "//third_party/openjpeg/src/lib/openjp2/opj_clock.c", + "//third_party/openjpeg/src/lib/openjp2/pi.c", + "//third_party/openjpeg/src/lib/openjp2/t1.c", + "//third_party/openjpeg/src/lib/openjp2/t2.c", + "//third_party/openjpeg/src/lib/openjp2/tcd.c", + "//third_party/openjpeg/src/lib/openjp2/tgt.c", + "//third_party/openjpeg/src/lib/openjp2/function_list.c", + "//third_party/openjpeg/src/lib/openjp2/opj_malloc.c", + "//third_party/openjpeg/src/lib/openjp2/sparse_array.c", + ] + + include_dirs = [ + "//third_party/openjpeg/src/lib/openjp2" + ] + + configs = [ + ":openjpeg_cflag_config" + ] + + part_name = "openjpeg_lib" +} diff --git a/openjpeg/gn/openjpeg/src/bin/common/opj_apps_config.h.in b/openjpeg/gn/openjpeg/src/bin/common/opj_apps_config.h.in new file mode 100644 index 0000000000000000000000000000000000000000..1832c5a5f2316ea217374b21dd457b80135c9416 --- /dev/null +++ b/openjpeg/gn/openjpeg/src/bin/common/opj_apps_config.h.in @@ -0,0 +1,15 @@ +#include "opj_config_private.h" + +/* create opj_apps_config.h for CMake */ + +#define OPJ_HAVE_LIBPNG +#define OPJ_HAVE_PNG_H +#define OPJ_HAVE_LIBTIFF +#define OPJ_HAVE_TIFF_H + +/* #undef OPJ_HAVE_LIBLCMS1 */ +/* #undef OPJ_HAVE_LIBLCMS2 */ +/* #undef OPJ_HAVE_LCMS1_H */ +/* #undef OPJ_HAVE_LCMS2_H */ + + diff --git a/openjpeg/gn/openjpeg/src/lib/openjp2/opj_config.h.in b/openjpeg/gn/openjpeg/src/lib/openjp2/opj_config.h.in new file mode 100644 index 0000000000000000000000000000000000000000..6eae46c3452e28c0c13bed9da898cce0e99ce12a --- /dev/null +++ b/openjpeg/gn/openjpeg/src/lib/openjp2/opj_config.h.in @@ -0,0 +1,10 @@ +/* create opj_config.h for CMake */ +#define OPJ_HAVE_STDINT_H 1 + +/*--------------------------------------------------------------------------*/ +/* OpenJPEG Versioning */ + +/* Version number. */ +#define OPJ_VERSION_MAJOR 2 +#define OPJ_VERSION_MINOR 5 +#define OPJ_VERSION_BUILD 0 diff --git a/openjpeg/gn/openjpeg/src/lib/openjp2/opj_config_private.h.in b/openjpeg/gn/openjpeg/src/lib/openjp2/opj_config_private.h.in new file mode 100644 index 0000000000000000000000000000000000000000..3aad25e618b008e609e5a6f63245946b24672a4b --- /dev/null +++ b/openjpeg/gn/openjpeg/src/lib/openjp2/opj_config_private.h.in @@ -0,0 +1,49 @@ +/* create opj_config_private.h for CMake */ +#define OPJ_HAVE_INTTYPES_H 1 + +#define OPJ_PACKAGE_VERSION "2.5.0" + +/* Not used by openjp2*/ +/*#define HAVE_MEMORY_H 1*/ +/*#define HAVE_STDLIB_H 1*/ +/*#define HAVE_STRINGS_H 1*/ +/*#define HAVE_STRING_H 1*/ +/*#define HAVE_SYS_STAT_H 1*/ +/*#define HAVE_SYS_TYPES_H 1 */ +/*#define HAVE_UNISTD_H 1*/ + +/* #undef _LARGEFILE_SOURCE */ +/* #undef _LARGE_FILES */ +/* #undef _FILE_OFFSET_BITS */ +#define OPJ_HAVE_FSEEKO ON + +/* find whether or not have */ +#define OPJ_HAVE_MALLOC_H +/* check if function `aligned_alloc` exists */ +/* #undef OPJ_HAVE_ALIGNED_ALLOC */ +/* check if function `_aligned_malloc` exists */ +/* #undef OPJ_HAVE__ALIGNED_MALLOC */ +/* check if function `memalign` exists */ +#define OPJ_HAVE_MEMALIGN +/* check if function `posix_memalign` exists */ +#define OPJ_HAVE_POSIX_MEMALIGN + +#if !defined(_POSIX_C_SOURCE) +#if defined(OPJ_HAVE_FSEEKO) || defined(OPJ_HAVE_POSIX_MEMALIGN) +/* Get declarations of fseeko, ftello, posix_memalign. */ +#define _POSIX_C_SOURCE 200112L +#endif +#endif + +/* Byte order. */ +/* All compilers that support Mac OS X define either __BIG_ENDIAN__ or +__LITTLE_ENDIAN__ to match the endianness of the architecture being +compiled for. This is not necessarily the same as the architecture of the +machine doing the building. In order to support Universal Binaries on +Mac OS X, we prefer those defines to decide the endianness. +On other platforms we use the result of the TRY_RUN. */ +#if !defined(__APPLE__) +/* #undef OPJ_BIG_ENDIAN */ +#elif defined(__BIG_ENDIAN__) +# define OPJ_BIG_ENDIAN +#endif