Giter Site home page Giter Site logo

heif's Introduction

High Efficiency Image File Format (HEIF)

HEIF is a visual media container format standardized by the Moving Picture Experts Group (MPEG) for storage and sharing of images and image sequences. It is based on the well-known ISO Base Media File Format (ISOBMFF) standard. HEIF Reader/Writer Engine is an implementation of HEIF standard in order to demonstrate its powerful features and capabilities.

Please follow this link to access HEIF Web-Site. You can also check the Wiki pages for more information.

For MIAF specific code, please switch to the MIAF branch.

News:

[25.06.2020] v3.6.0 Release: Added support for several new properties, image items with decoding dependencies, Extended type box and Type combination box, associating properties for entity groups, and reader support for segmented tracks. Minor improvements and code cleanup.

[10.07.2019] v3.5.0 Release: Improved support for JPEGs and edit lists. Bug fixes, minor improvements and code cleanup.

[06.11.2018] v3.4.0 Release: Java API improvements. Bug fixes, code cleanup and robustness improvements.

[13.06.2018] v3.3.0 Release: Java desktop build added, Java API includes track and image sequence as well as entity grouping support.

[06.04.2018] v3.2 Release. Two new APIs added, a Java API which wraps the C++ libraries using JNI and a convenience C++ API (which is used by the Java API) that wraps the underlying reader and writer. The Java API is expected to remain relatively stable, however the new C++ API will most likely change in the future.

[14.03.2018] v3.1 Release. Reader API update, bug fixes and examples update.

[05.03.2018] Code updated and tagged v3.0. Writer executable replaced with writer library / API. Implementation is based on HEIF standard specification ISO/IEC 23008-12:2017 that is available from iso.org web pages.

[09.03.2017] ISO/IEC 23008-12 second edition includes support for the interchange of multi-layered images. The source code now includes structures that are specified in this second edition. Simple support for AVC is also added. Minor bug fixes are included in this update. Example configuration files for generating multi-layered streams can be found in the Wiki.

[24.02.2016] HEIF source code and website is updated to reflect the latest HEIF specification changes and various fixes. Please note that backwards compatibility is not maintained during this update.

[24.02.2016] HEIF conformance test candidate files can be found here

Features:

HEIF is a media container format. It is not an image or video encoder per se. Hence, the quality of the visual media depends highly on the proper usage of visual media encoder (e.g. HEVC). Current standard allows containing HEVC/AVC/JPEG encoded bitstreams. This can be easily extended to future visual media codecs. It has many powerful features which are currently not present in other image file formats. Some of these features are:

  • Encapsulate images coded using HEVC/SHVC/MV-HEVC/AVC/JPEG.
  • Encapsulate image sequences coded using HEVC/SHVC/MV-HEVC/AVC.
  • Storage based on widely adopted ISO Base Media File Format (ISOBMFF)
  • Supports efficient storage of image bursts and cinemagraphs
  • Supports computational photography use cases
  • Supports both lossy and lossless image data storage
  • A better and easy way to distribute still images, image collections and related metadata.

Please follow this link to see HEIF file examples.

Contents of the Repository:

This repository contains the following items:

  • ISO Base Media File Format (ISOBMFF) box parse/write source code (under srcs/common/)
  • HEIF Reader API and Library (under srcs/api/reader/)
  • HEIF Writer API and Library (under srcs/api/writer/)
  • HEIF Reader/Writer Java API (under srcs/api-java/)
  • HEIF Reader/Writer convenience C++ API (under srcs/api-cpp/)
  • HEIF Reader API Usage Example Code (under srcs/examples/)
  • HEIF Source Code Documentation (Doxygen generator under docs/)
  • HEIF Web Site Content (in gh-pages branch)
  • HEIF Reader JavaScript Implementation (in gh-pages branch)

Building source:

Prerequisites: cmake and compiler supporting C++11 in PATH.

cd heif/build
cmake --help
cmake ../srcs -G"<Generator listed by above command for your target platform>"
cmake --build .

Building Java API for Windows or Linux

Prerequisites: Java version 8 or newer, Gradle.

First build the C/C++ library as described above.

After that

cd heif/build/java-desktop
gradle build

Note that in order to run the Java API you need to have the HEIF JNI library built in the earlier step (heifjni.dll or heifjni.so) in the Java library search path.

Building Java API for Android:

Prerequisites: Android SDK & NDK Import the project files under heif/build/android into Android Studio and build the library

See wiki page for more information and platform specific instructions.

License:

Please see LICENSE.TXT file for the terms of use of the contents of this repository.

All the example media files (*.heic, *.png, *.jpg, *.gif) in this repository are under copyright © Nokia Technologies 2015-2021.

For more information/questions/source code/commercial licensing related issues, please contact: [email protected]

Copyright (c) 2015-2021, Nokia Technologies Ltd.

All rights reserved.

heif's People

Contributors

jhippela avatar nokiatech avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

heif's Issues

Please make a viewer

I compiled this but don't know what to do with writerapp, it needs some kind of config file. It would be great to have a viewer binary.

h265parser.cpp undeclared identifier 'log2'

D:\android_weiyun_proj\branches\Heif3\app\src\main\cpp\heif\Srcs\parser\h265parser\h265parser.cpp:1832:41: error: use of undeclared identifier 'log2'
unsigned int numBits = ceil(log2(numLayersInTreePartition.at(j) + 1));
^
D:\android_weiyun_proj\branches\Heif3\app\src\main\cpp\heif\Srcs\parser\h265parser\h265parser.cpp:1937:37: error: use of undeclared identifier 'log2'
unsigned int numBits = ceil(log2(numLayerSets - 1));
^
D:\android_weiyun_proj\branches\Heif3\app\src\main\cpp\heif\Srcs\parser\h265parser\h265parser.cpp:2061:45: error: use of undeclared identifier 'log2'
unsigned int numBits = ceil(log2(vpsExt.mVpsNumProfileTierLevelMinus1 + 1));
^
3 errors generated.
ninja: build stopped: subcommand failed.

Multiple compile errors with VS 2015

There are no Visual Studio project files, so I've had to craft them by hand. Most of the project is building fine, but I'm getting numerous complaints of the following form:

1>Srcs\writer\datastore.cpp(39): error C2065: 'not': undeclared identifier

where the offending line is:

if (not mValueMap.count(key))

not is not the boolean negation operator in C++, the standard very clearly defines ! as this operator. Is there any good reason for attempting to use a non-standard operator, I'm not sure I can see how doing so adds any value to the project.

corrupted tile in grid

I'm having trouble converting HEIC files from an iphone to a jpeg. The files contain 8x6 grids of images and every file, apart from some inputs, such as panorama shots(not 8x6 grid) have the 7th tile corrupted.

see attached file:
final

I put some code in a github repo: https://github.com/Kimbsen/heiftest to reproduce the problem. the code there is pretty self explanatory.

Any ideas what i might be doing wrong? I've excluded rotating the image though it should have been rotated 270 degrees as the problem is present regardless.

Comparison isnt accurate

JPEG is outdated. And its out of the league. Same with GIF.
Since you suggest new format, that not yet fully supported you have to compare with competitive alternatives:

  • JPEG2000
  • WebP
  • FLIF (+ animation)
  • WebM (animation)
  • MP4 (animation)

Look what google did: https://developers.google.com/speed/webp/docs/webp_study?csw=1
Use PSNR / SSIM

Dont get me wrong, you publish closed source codec, compare it to previous century technologies, and expect we would adapt it. No way. x265 is great since it has intel(and probably amd) cores support, but. but. It weren't adopted by any browser, nor would be adopted(except probably Safari, cause they don't mind closed source). Meanwhile almost every end-user app nowdays either hybrid or pure web.
On other hand we have WebP, which already implemented in Chrome&Opera&Android + UC (74% of world traffic consumers), and on his way in Firefox&Safari team.

If you really want your work to be worthy, you have to put some effort to it. We have tens of image format alternatives, same as with compression algorithms.

ImageFileReaderInterface::FileReaderException

...
    HevcImageFileReader reader;
    ImageFileReaderInterface::DataVector image_data;
    ImageFileReaderInterface::DataVector auxl_data;
    ImageFileReaderInterface::IdVector itemIds;
    reader.initialize(file_name);
...

The last line has an error:

terminate called after throwing an instance of 'ImageFileReaderInterface::FileReaderException'
what(): Error while reading file.

So I used gdb to debug my program, I found the exception is here:

image

image

But I dont know why...

Build issues: snprintf not declared

Hi,

i wanted to build the library using windows with cmake and mingw.
cmake runs properly and when compiling the source using make i get an error when it comes to the
jsonLib:

D:\development\Libs\c++\heif-master\Srcs\jsonlib\jsoncpp.cpp:1035:70: error: 'snprintf' was not declared in this scope
snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);

and so on.

Anyone has an idea what i am doing wrong?

Thanks
Sebastian

JavaScript: Uncaught abort() when trying to decode .heic file from iPhone x

I am trying to use the JavaScript decoder to decode some heic files coming from an iPhone (iOS 11) and am getting this error:

HEIFReader: REQUEST FILE INFO: http://127.0.0.1:8080/content/images/rodo.heic
Skipping an unknown box of type 'colr' in ItemPropertyContainer.
Skipping an unknown box of type 'pixi' in ItemPropertyContainer.
Skipping an unknown box of type 'colr' in ItemPropertyContainer.
Skipping an unknown box of type 'pixi' in ItemPropertyContainer.
FileInfo {fileFeature: {…}, trackProperties: undefined, rootLevelMetaBoxProperties: {…},
Major brand: heic
Compatible brands: mif1,heic
ImageProvider: REQUEST IMAGE DATA: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
libde265.min.js:21 Uncaught abort() at Error
at La (http://127.0.0.1:8080/js/libde265.min.js:31:6)

rodo.zip

build fail in Centos 6.5

This is error log. please help me,thank you.

[root@baseline build]# cmake ..
-- The C compiler identification is GNU 4.4.7
-- The CXX compiler identification is GNU 4.4.7
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- System name : Linux
-- Project Name : HEIF
-- Project directory : /home/heif
-- Executables in : /home/heif/Bins
-- File-list :
-- Performing Test COMPILER_SUPPORTS_CXX11
-- Performing Test COMPILER_SUPPORTS_CXX11 - Failed
-- Performing Test COMPILER_SUPPORTS_CXX0X
-- Performing Test COMPILER_SUPPORTS_CXX0X - Success
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/heif/build
[root@baseline build]# make
/usr/bin/cmake -H/home/heif -B/home/heif/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/heif/build/CMakeFiles /home/heif/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory /home/heif/build' make -f Srcs/parser/h265parser/CMakeFiles/h265parser.dir/build.make Srcs/parser/h265parser/CMakeFiles/h265parser.dir/depend make[2]: Entering directory /home/heif/build'
cd /home/heif/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/heif /home/heif/Srcs/parser/h265parser /home/heif/build /home/heif/build/Srcs/parser/h265parser /home/heif/build/Srcs/parser/h265parser/CMakeFiles/h265parser.dir/DependInfo.cmake --color=
Scanning dependencies of target h265parser
make[2]: Leaving directory /home/heif/build' make -f Srcs/parser/h265parser/CMakeFiles/h265parser.dir/build.make Srcs/parser/h265parser/CMakeFiles/h265parser.dir/build make[2]: Entering directory /home/heif/build'
/usr/bin/cmake -E cmake_progress_report /home/heif/build/CMakeFiles 65
[ 1%] Building CXX object Srcs/parser/h265parser/CMakeFiles/h265parser.dir/h265parser.cpp.o
cd /home/heif/build/Srcs/parser/h265parser && /usr/bin/c++ -std=c++0x -Wall -Wextra -Werror -Wno-missing-field-initializers -I/home/heif/Srcs/common -I/home/heif/Srcs/parser -o CMakeFiles/h265parser.dir/h265parser.cpp.o -c /home/heif/Srcs/parser/h265parser/h265parser.cpp
/home/heif/Srcs/parser/h265parser/h265parser.cpp: In destructor ‘virtual H265Parser::~H265Parser()’:
/home/heif/Srcs/parser/h265parser/h265parser.cpp:38: error: expected initializer before ‘:’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:43: error: expected primary-expression before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:43: error: expected ‘;’ before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:43: error: expected primary-expression before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:43: error: expected ‘)’ before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:43: error: expected initializer before ‘:’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:48: error: expected primary-expression before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:48: error: expected ‘;’ before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:48: error: expected primary-expression before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:48: error: expected ‘)’ before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:48: error: expected initializer before ‘:’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:52: error: expected primary-expression before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:52: error: expected ‘;’ before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:52: error: expected primary-expression before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:52: error: expected ‘)’ before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:52: error: expected primary-expression before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:52: error: expected ‘;’ before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp: In member function ‘bool H265Parser::initDisplayOrderArray(const char*)’:
/home/heif/Srcs/parser/h265parser/h265parser.cpp:109: error: expected initializer before ‘:’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:116: error: could not convert ‘std::sort [with _RAIter = __gnu_cxx::__normal_iterator<ParserInterface::PicOrder*, std::vector<ParserInterface::PicOrder, std::allocatorParserInterface::PicOrder > >, _Compare = bool (*)(const ParserInterface::PicOrder&, const ParserInterface::PicOrder&)](picOrder.std::vector<_Tp, _Alloc>::begin with _Tp = ParserInterface::PicOrder, _Alloc = std::allocatorParserInterface::PicOrder, picOrder.std::vector<_Tp, _Alloc>::end with _Tp = ParserInterface::PicOrder, _Alloc = std::allocatorParserInterface::PicOrder, ParserInterface::compareDecodeOrder)’ to ‘bool’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:118: error: expected primary-expression before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:118: error: expected ‘)’ before ‘for’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:118: error: expected initializer before ‘:’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:122: error: could not convert ‘picOrder.std::vector<_Tp, _Alloc>::clear with _Tp = ParserInterface::PicOrder, _Alloc = std::allocatorParserInterface::PicOrder’ to ‘bool’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:123: error: expected primary-expression before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:123: error: expected ‘)’ before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:123: error: expected primary-expression before ‘}’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:123: error: expected ‘;’ before ‘}’ token
cc1plus: warnings being treated as errors
/home/heif/Srcs/parser/h265parser/h265parser.cpp:86: error: unused variable ‘displayNum’
/home/heif/Srcs/parser/h265parser/h265parser.cpp: In member function ‘bool H265Parser::hasVpsExtension()’:
/home/heif/Srcs/parser/h265parser/h265parser.cpp:147: error: expected initializer before ‘:’ token
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: expected primary-expression at end of input
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: expected ‘;’ at end of input
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: expected primary-expression at end of input
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: expected ‘)’ at end of input
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: expected statement at end of input
/home/heif/Srcs/parser/h265parser/h265parser.cpp:146: error: unused variable ‘hasExtension’
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: expected ‘}’ at end of input
/home/heif/Srcs/parser/h265parser/h265parser.cpp:3033: error: no return statement in function returning non-void
make[2]: *** [Srcs/parser/h265parser/CMakeFiles/h265parser.dir/h265parser.cpp.o] Error 1
make[2]: Leaving directory /home/heif/build' make[1]: *** [Srcs/parser/h265parser/CMakeFiles/h265parser.dir/all] Error 2 make[1]: Leaving directory /home/heif/build'
make: *** [all] Error 2

OSX El Capitain - Compile Issue

Tried to compile heir for OS X and got these errors during compiling process:

In file included from /heif/Srcs/common/hevcsampleentry.cpp:13:
/Users/gary/Desktop/raypack_heif/heif/Srcs/common/hevcsampleentry.hpp:46:18: error: 'writeBox' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]
virtual void writeBox(BitStream& bitstr);
^
/heif/Srcs/common/visualsampleentrybox.hpp:66:18: note: overridden virtual function is here
virtual void writeBox(BitStream& bitstr);
^
In file included from /heif/Srcs/common/hevcsampleentry.cpp:13:
/heif/Srcs/common/hevcsampleentry.hpp:51:18: error: 'parseBox' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]
virtual void parseBox(BitStream& bitstr);
^
/heif/Srcs/common/visualsampleentrybox.hpp:70:18: note: overridden virtual function is here
virtual void parseBox(BitStream& bitstr);
^
2 errors generated.

Failed in buildding project

I use these commands for build this project:

cd heif/build   
cmake3 ../srcs   
camke3 --build .

and I'm using
gcc 4.8.5 and cmake 3.11.2 on CentOS 7

but I failed with following error, somebody help me please?

/root/heif/heif/srcs/api-cpp/Heif.cpp:47:43: error: redeclaration ‘HEIFPP::Heif::InvalidGroup’ differs in ‘constexpr’
 constexpr HEIF::GroupId Heif::InvalidGroup((std::uint32_t) 0);
                                           ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:77:36: error: from previous declaration ‘HEIFPP::Heif::InvalidGroup’
         static const HEIF::GroupId InvalidGroup;
                                    ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:47:43: error: ‘HEIFPP::Heif::InvalidGroup’ declared ‘constexpr’ outside its class
 constexpr HEIF::GroupId Heif::InvalidGroup((std::uint32_t) 0);
                                           ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:47:43: error: declaration of ‘const HEIF::GroupId HEIFPP::Heif::InvalidGroup’ outside of class is not definition [-fpermissive]
/root/heif/heif/srcs/api-cpp/Heif.cpp:48:42: error: redeclaration ‘HEIFPP::Heif::InvalidItem’ differs in ‘constexpr’
 constexpr HEIF::ImageId Heif::InvalidItem((std::uint32_t) 0);
                                          ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:78:36: error: from previous declaration ‘HEIFPP::Heif::InvalidItem’
         static const HEIF::ImageId InvalidItem;
                                    ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:48:42: error: ‘HEIFPP::Heif::InvalidItem’ declared ‘constexpr’ outside its class
 constexpr HEIF::ImageId Heif::InvalidItem((std::uint32_t) 0);
                                          ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:48:42: error: declaration of ‘const HEIF::ImageId HEIFPP::Heif::InvalidItem’ outside of class is not definition [-fpermissive]
/root/heif/heif/srcs/api-cpp/Heif.cpp:49:49: error: redeclaration ‘HEIFPP::Heif::InvalidSequence’ differs in ‘constexpr’
 constexpr HEIF::SequenceId Heif::InvalidSequence((std::uint32_t) ~0);
                                                 ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:79:39: error: from previous declaration ‘HEIFPP::Heif::InvalidSequence’
         static const HEIF::SequenceId InvalidSequence;
                                       ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:49:49: error: ‘HEIFPP::Heif::InvalidSequence’ declared ‘constexpr’ outside its class
 constexpr HEIF::SequenceId Heif::InvalidSequence((std::uint32_t) ~0);
                                                 ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:49:49: error: declaration of ‘const HEIF::SequenceId HEIFPP::Heif::InvalidSequence’ outside of class is not definition [-fpermissive]
/root/heif/heif/srcs/api-cpp/Heif.cpp:50:59: error: redeclaration ‘HEIFPP::Heif::InvalidSequenceImage’ differs in ‘constexpr’
 constexpr HEIF::SequenceImageId Heif::InvalidSequenceImage((std::uint32_t) ~0);
                                                           ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:80:44: error: from previous declaration ‘HEIFPP::Heif::InvalidSequenceImage’
         static const HEIF::SequenceImageId InvalidSequenceImage;
                                            ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:50:59: error: ‘HEIFPP::Heif::InvalidSequenceImage’ declared ‘constexpr’ outside its class
 constexpr HEIF::SequenceImageId Heif::InvalidSequenceImage((std::uint32_t) ~0);
                                                           ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:50:59: error: declaration of ‘const HEIF::SequenceImageId HEIFPP::Heif::InvalidSequenceImage’ outside of class is not definition [-fpermissive]
/root/heif/heif/srcs/api-cpp/Heif.cpp:51:49: error: redeclaration ‘HEIFPP::Heif::InvalidProperty’ differs in ‘constexpr’
 constexpr HEIF::PropertyId Heif::InvalidProperty((std::uint32_t) 0);
                                                 ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:81:39: error: from previous declaration ‘HEIFPP::Heif::InvalidProperty’
         static const HEIF::PropertyId InvalidProperty;
                                       ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:51:49: error: ‘HEIFPP::Heif::InvalidProperty’ declared ‘constexpr’ outside its class
 constexpr HEIF::PropertyId Heif::InvalidProperty((std::uint32_t) 0);
                                                 ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:51:49: error: declaration of ‘const HEIF::PropertyId HEIFPP::Heif::InvalidProperty’ outside of class is not definition [-fpermissive]
/root/heif/heif/srcs/api-cpp/Heif.cpp:52:59: error: redeclaration ‘HEIFPP::Heif::InvalidDecoderConfig’ differs in ‘constexpr’
 constexpr HEIF::DecoderConfigId Heif::InvalidDecoderConfig((std::uint32_t) 0);
                                                           ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:82:44: error: from previous declaration ‘HEIFPP::Heif::InvalidDecoderConfig’
         static const HEIF::DecoderConfigId InvalidDecoderConfig;
                                            ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:52:59: error: ‘HEIFPP::Heif::InvalidDecoderConfig’ declared ‘constexpr’ outside its class
 constexpr HEIF::DecoderConfigId Heif::InvalidDecoderConfig((std::uint32_t) 0);
                                                           ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:52:59: error: declaration of ‘const HEIF::DecoderConfigId HEIFPP::Heif::InvalidDecoderConfig’ outside of class is not definition [-fpermissive]
/root/heif/heif/srcs/api-cpp/Heif.cpp:53:51: error: redeclaration ‘HEIFPP::Heif::InvalidMediaData’ differs in ‘constexpr’
 constexpr HEIF::MediaDataId Heif::InvalidMediaData((std::uint32_t) 0);
                                                   ^
In file included from /root/heif/heif/srcs/api-cpp/DecoderConfiguration.h:15:0,
                 from /root/heif/heif/srcs/api-cpp/AACDecoderConfiguration.h:15,
                 from /root/heif/heif/srcs/api-cpp/Heif.cpp:16:
/root/heif/heif/srcs/api-cpp/Heif.h:83:40: error: from previous declaration ‘HEIFPP::Heif::InvalidMediaData’
         static const HEIF::MediaDataId InvalidMediaData;
                                        ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:53:51: error: ‘HEIFPP::Heif::InvalidMediaData’ declared ‘constexpr’ outside its class
 constexpr HEIF::MediaDataId Heif::InvalidMediaData((std::uint32_t) 0);
                                                   ^
/root/heif/heif/srcs/api-cpp/Heif.cpp:53:51: error: declaration of ‘const HEIF::MediaDataId HEIFPP::Heif::InvalidMediaData’ outside of class is not definition [-fpermissive]
make[2]: *** [api-cpp/CMakeFiles/heifpp.dir/Heif.cpp.o] Error 1
make[2]: Leaving directory `/root/heif/heif/build'
make[1]: *** [api-cpp/CMakeFiles/heifpp.dir/all] Error 2
make[1]: Leaving directory `/root/heif/heif/build'
make: *** [all] Error 2

how can I run it with JAVA

My build command are as following, and succeed:
sudo cmake ../srcs
sudo cmake --build .
I see the directory "heif/srcs/api-java" has "cpp" and "java" two directories, and HEIF.java has "System.loadLibrary("heifjni");", but in directory "heif/build/lib", I can't find heifjni.so or heifjni.a.
How can I build heifjni file?
Looking forward to your reply.

Add AV1 support

No modern royalty free codec is supported currently.

AV1 is a reasonable option, and has very broad industry adoption.

Build issues using GCC4.8 on Ubuntu14.04

I use these commands to build the project:
cmake ../srcs
make
and I got below error, somebody help me please?

  1. cmake log
    cmake ../srcs
    -- The CXX compiler identification is GNU 4.8.4
    -- The C compiler identification is GNU 4.8.4
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    Allocator test failed, enable fix
    fatal: Not a git repository (or any parent up to mount point /home)
    Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
    Could not get version information from git
    -- System name : Linux
    -- Project Name : heif
    -- Project directory : ~/opensource/heif-3.2/srcs
    -- Build called from : ~/opensource/heif-3.2/build
    -- Executables in : ~/opensource/heif-3.2/build/bin
    -- Libraries in :
    -- Configuring done
    -- Generating done
    -- Build files have been written to: ~/opensource/heif-3.2/build

  2. build log
    /usr/local/bin/cmake -H~/opensource/heif-3.2/srcs -B~/opensource/heif-3.2/build --check-build-system CMakeFiles/Makefile.cmake 0
    /usr/local/bin/cmake -E cmake_progress_start ~/opensource/heif-3.2/build/CMakeFiles /opensource/heif-3.2/build/CMakeFiles/progress.marks
    make -f CMakeFiles/Makefile2 all
    make[1]: Entering directory ~/opensource/heif-3.2/build' make -f common/CMakeFiles/common.dir/build.make common/CMakeFiles/common.dir/depend make[2]: Entering directory
    /opensource/heif-3.2/build'
    cd ~/opensource/heif-3.2/build && /usr/local/bin/cmake -E cmake_depends "Unix Makefiles" ~/opensource/heif-3.2/srcs ~/opensource/heif-3.2/srcs/common ~/opensource/heif-3.2/build ~/opensource/heif-3.2/build/common /opensource/heif-3.2/build/common/CMakeFiles/common.dir/DependInfo.cmake --color=
    make[2]: Leaving directory ~/opensource/heif-3.2/build' make -f common/CMakeFiles/common.dir/build.make common/CMakeFiles/common.dir/build make[2]: Entering directory
    /opensource/heif-3.2/build'
    [ 0%] Building CXX object common/CMakeFiles/common.dir/audiosampleentrybox.cpp.o
    cd /opensource/heif-3.2/build/common && /usr/bin/c++ -I/opensource/heif-3.2/build -DHEIF_GCC_ALLOCATOR_FIX=1 -g -W -Wall -Wall -Wextra -Wcast-align -Wcast-qual -Wdisabled-optimization -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wlogical-op -Wnoexcept -Wstrict-null-sentinel -fvisibility=hidden -fPIC -std=c++11 -o CMakeFiles/common.dir/audiosampleentrybox.cpp.o -c ~/opensource/heif-3.2/srcs/common/audiosampleentrybox.cpp
    In file included from /usr/include/c++/4.8/string:52:0,
    from /usr/include/c++/4.8/stdexcept:39,
    from /usr/include/c++/4.8/array:38,
    from /usr/include/c++/4.8/tuple:39,
    from /usr/include/c++/4.8/bits/stl_map.h:63,
    from /usr/include/c++/4.8/map:61,
    from ~/opensource/heif-3.2/srcs/common/customallocator.hpp:16,
    from ~/opensource/heif-3.2/srcs/common/bitstream.hpp:16,
    from ~/opensource/heif-3.2/srcs/common/audiosampleentrybox.hpp:15,
    from ~/opensource/heif-3.2/srcs/common/audiosampleentrybox.cpp:14:
    /usr/include/c++/4.8/bits/basic_string.h: In instantiation of ‘class std::basic_string<char, std::char_traits, Allocator >’:
    /opensource/heif-3.2/srcs/common/customallocator.hpp:226:24: required from here
    /usr/include/c++/4.8/bits/basic_string.h:122:61: error: no type named ‘difference_type’ in ‘std::basic_string<char, std::char_traits, Allocator >::_CharT_alloc_type {aka class Allocator}’
    typedef typename _CharT_alloc_type::difference_type difference_type;
    ^
    make[2]: *** [common/CMakeFiles/common.dir/audiosampleentrybox.cpp.o] Error 1
    make[2]: Leaving directory ~/opensource/heif-3.2/build' make[1]: *** [common/CMakeFiles/common.dir/all] Error 2 make[1]: Leaving directory
    /opensource/heif-3.2/build'
    make: *** [all] Error 2

Parser SPS crash as SPS struct not init!!

 The SequenceParameterSet is struct type, and not init while new.

if (naluHeader.mH265NalUnitType == H265NalUnitType::SPS){
SequenceParameterSet* sps = new SequenceParameterSet;
printf("[%s-%d]%p mSpsInferScalingListFlag(%d)\n", func, LINE, this, sps->mSpsInferScalingListFlag);
parseSPS(bitstr, *sps, naluHeader);
removeSps(sps->mSpsId);
mSpsList.push_back(sps);
}

Then print log is:
[parseNalUnit-457]0x7ffeefbfd7e8 mSpsInferScalingListFlag(66301659)

A problem about iPhone heic

Dear Nokia Developer,
I know a typical iPhone heic picture has 48 tiles, and I extract all tiles into H.265 bitstream successful. Then I use ffmpeg convert them to png,I get all 48 still tiles picture finally.
But it's not I wanted. I try to put all decoder tile into one memory buffer, just converting one times get the complete png picture. Because I think maybe I could get a picture, not 48 tile. But I don't know how to set the HEVC NAL Uint at the beganing of memory buffer. What should I do? Or the mathod cannot make it?
My part code

Array<ImageId> gridIds;
Grid gridData;
Array<ImageId> tileItemIds;
if(reader->getItemListByType("grid",gridIds) == ErrorCode::OK)
{
    tileItemIds = gridData.imageIds;
    if(reader->getItem(gridIds[0].get(), gridData) == ErrorCode::OK)
        {
            tileItemIds = gridData.imageIds; // 48 tiles
            
            // Calculate size of parameter sets, but do not copy the data yet.
            size_t parameterSize = 0;
            DecoderConfiguration decodeConf;
             if(reader->getDecoderParameterSets(tileItemIds[0], decodeConf) == ErrorCode::OK)       
             // I konw the decodeConf is not I want 
            {
                for (auto& config : decodeConf.decoderSpecificInfo)
                {parameterSize += config.decSpecInfoData.size;}
            }
            
            //  Copy (worong)parameter data to the beginning of the buffer.
            uint64_t itemSize(0);
            size_t offset = 0;
            for (const auto& config : decodeConf.decoderSpecificInfo)
            {
                memcpy(memoryBuffer + offset, config.decSpecInfoData.begin(), config.decSpecInfoData.size);
                offset += config.decSpecInfoData.size;
            }
            itemSize = memoryBufferSize - static_cast<uint32_t>(parameterSize);
            
            // Copy all tiles data to the buffer
            size_t tileSize = 0;
            for (unsigned int i = 0; i < tileItemIds.size; i++)
            {

                if (reader->getItemData(tileItemIds[i].get(), &memoryBuffer[parameterSize+tileSize], itemSize) == ErrorCode::OK)
                {
                    cout << "Get the tile: " << i << endl;
                    tileSize += itemSize;
                    itemSize = memoryBufferSize - parameterSize - tileSize;
                }
                else{cout << "Get Image Data error!" << endl;}
                
                memoryBufferSize = static_cast<uint32_t>(parameterSize) + tileSize;
                
                ofstream outfile(file_name, ofstream::binary);
                outfile.write(memoryBuffer, memoryBufferSize);
            }

crash when i use example1()

lzj@lzj:/jia/mytest/image_process/heif/build$
lzj@lzj:
/jia/mytest/image_process/heif/build$ ../Bins/examples
compatibilityVersion = 0
[MESSAGE][readStream-1036] compatibilityVersion = 0
Skipping an unknown box of type 'colr' in ItemPropertyContainer.
Skipping an unknown box of type 'pixi' in ItemPropertyContainer.
Skipping an unknown box of type 'colr' in ItemPropertyContainer.
Skipping an unknown box of type 'pixi' in ItemPropertyContainer.
success
terminate called after throwing an instance of 'std::out_of_range'
what(): map::at
Terminated(core dump)

This is a picture sample, and when I use other images in heic format, it's the same mistake;
The environment is ubuntu 14.04;
IMG_0657.zip

example.cpp build issues on Ubuntu 16.10

I am having issues building the example.cpp on Ubuntu 16.10:

/tmp/example-d90d81.o: In function `example1()':
example.cpp:(.text+0x13): undefined reference to `HevcImageFileReader::HevcImageFileReader()'
example.cpp:(.text+0x58): undefined reference to `HevcImageFileReader::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cpp:(.text+0x163): undefined reference to `HevcImageFileReader::getCoverImageItemId(unsigned int) const'
example.cpp:(.text+0x1af): undefined reference to `HevcImageFileReader::getItemDataWithDecoderParameters(unsigned int, unsigned int, std::vector<unsigned char, std::allocator<unsigned char> >&)'
/tmp/example-d90d81.o: In function `example2()':
example.cpp:(.text+0x243): undefined reference to `HevcImageFileReader::HevcImageFileReader()'
example.cpp:(.text+0x2a0): undefined reference to `HevcImageFileReader::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cpp:(.text+0x424): undefined reference to `HevcImageFileReader::getItemListByType(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
example.cpp:(.text+0x51f): undefined reference to `HevcImageFileReader::getReferencedToItemListByType(unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
example.cpp:(.text+0x590): undefined reference to `HevcImageFileReader::getItemDataWithDecoderParameters(unsigned int, unsigned int, std::vector<unsigned char, std::allocator<unsigned char> >&)'
example.cpp:(.text+0x639): undefined reference to `HevcImageFileReader::getItemDataWithDecoderParameters(unsigned int, unsigned int, std::vector<unsigned char, std::allocator<unsigned char> >&)'
/tmp/example-d90d81.o: In function `example3()':
example.cpp:(.text+0x6e3): undefined reference to `HevcImageFileReader::HevcImageFileReader()'
example.cpp:(.text+0x74c): undefined reference to `HevcImageFileReader::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cpp:(.text+0x80f): undefined reference to `HevcImageFileReader::getItemListByType(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
example.cpp:(.text+0x913): undefined reference to `HevcImageFileReader::getReferencedToItemListByType(unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
/tmp/example-d90d81.o: In function `example4()':
example.cpp:(.text+0xc13): undefined reference to `HevcImageFileReader::HevcImageFileReader()'
example.cpp:(.text+0xc64): undefined reference to `HevcImageFileReader::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cpp:(.text+0xd27): undefined reference to `HevcImageFileReader::getItemListByType(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
example.cpp:(.text+0xddc): undefined reference to `HevcImageFileReader::getReferencedFromItemListByType(unsigned int, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
example.cpp:(.text+0xe43): undefined reference to `HevcImageFileReader::getItemProperties(unsigned int, unsigned int) const'
example.cpp:(.text+0xee5): undefined reference to `HevcImageFileReader::getPropertyIrot(unsigned int, unsigned int) const'
/tmp/example-d90d81.o: In function `example5()':
example.cpp:(.text+0x11e3): undefined reference to `HevcImageFileReader::HevcImageFileReader()'
example.cpp:(.text+0x1234): undefined reference to `HevcImageFileReader::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cpp:(.text+0x161f): undefined reference to `HevcImageFileReader::getItemTimestamps(unsigned int, std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > >&) const'
example.cpp:(.text+0x184b): undefined reference to `HevcImageFileReader::getItemDecodeDependencies(unsigned int, unsigned int, std::vector<unsigned int, std::allocator<unsigned int> >&) const'
example.cpp:(.text+0x18ed): undefined reference to `HevcImageFileReader::getItemDataWithDecoderParameters(unsigned int, unsigned int, std::vector<unsigned char, std::allocator<unsigned char> >&)'
/tmp/example-d90d81.o: In function `example6()':
example.cpp:(.text+0x1a13): undefined reference to `HevcImageFileReader::HevcImageFileReader()'
example.cpp:(.text+0x1a64): undefined reference to `HevcImageFileReader::initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cpp:(.text+0x1baf): undefined reference to `HevcImageFileReader::getDisplayWidth(unsigned int) const'
example.cpp:(.text+0x1bd8): undefined reference to `HevcImageFileReader::getDisplayWidth(unsigned int) const'
/tmp/example-d90d81.o: In function `example3()::$_0::operator()(unsigned int, unsigned int) const':
example.cpp:(.text+0x1f6a): undefined reference to `HevcImageFileReader::getWidth(unsigned int, unsigned int) const'
example.cpp:(.text+0x1f83): undefined reference to `HevcImageFileReader::getWidth(unsigned int, unsigned int) const'
/tmp/example-d90d81.o: In function `HevcImageFileReader::~HevcImageFileReader()':
example.cpp:(.text._ZN19HevcImageFileReaderD2Ev[_ZN19HevcImageFileReaderD2Ev]+0xa): undefined reference to `vtable for HevcImageFileReader'
/tmp/example-d90d81.o: In function `FileTypeBox::~FileTypeBox()':
example.cpp:(.text._ZN11FileTypeBoxD2Ev[_ZN11FileTypeBoxD2Ev]+0xa): undefined reference to `vtable for FileTypeBox'
/tmp/example-d90d81.o: In function `MetaBox::~MetaBox()':
example.cpp:(.text._ZN7MetaBoxD2Ev[_ZN7MetaBoxD2Ev]+0xa): undefined reference to `vtable for MetaBox'
/tmp/example-d90d81.o: In function `GroupsListBox::~GroupsListBox()':
example.cpp:(.text._ZN13GroupsListBoxD2Ev[_ZN13GroupsListBoxD2Ev]+0xa): undefined reference to `vtable for GroupsListBox'
/tmp/example-d90d81.o: In function `ItemPropertiesBox::~ItemPropertiesBox()':
example.cpp:(.text._ZN17ItemPropertiesBoxD2Ev[_ZN17ItemPropertiesBoxD2Ev]+0xa): undefined reference to `vtable for ItemPropertiesBox'
/tmp/example-d90d81.o: In function `ItemDataBox::~ItemDataBox()':
example.cpp:(.text._ZN11ItemDataBoxD2Ev[_ZN11ItemDataBoxD2Ev]+0xa): undefined reference to `vtable for ItemDataBox'
/tmp/example-d90d81.o: In function `ItemReferenceBox::~ItemReferenceBox()':
example.cpp:(.text._ZN16ItemReferenceBoxD2Ev[_ZN16ItemReferenceBoxD2Ev]+0xa): undefined reference to `vtable for ItemReferenceBox'
/tmp/example-d90d81.o: In function `ItemInfoBox::~ItemInfoBox()':
example.cpp:(.text._ZN11ItemInfoBoxD2Ev[_ZN11ItemInfoBoxD2Ev]+0xa): undefined reference to `vtable for ItemInfoBox'
/tmp/example-d90d81.o: In function `ItemProtectionBox::~ItemProtectionBox()':
example.cpp:(.text._ZN17ItemProtectionBoxD2Ev[_ZN17ItemProtectionBoxD2Ev]+0xa): undefined reference to `vtable for ItemProtectionBox'
/tmp/example-d90d81.o: In function `ItemLocationBox::~ItemLocationBox()':
example.cpp:(.text._ZN15ItemLocationBoxD2Ev[_ZN15ItemLocationBoxD2Ev]+0xa): undefined reference to `vtable for ItemLocationBox'
/tmp/example-d90d81.o: In function `DataInformationBox::~DataInformationBox()':
example.cpp:(.text._ZN18DataInformationBoxD2Ev[_ZN18DataInformationBoxD2Ev]+0xa): undefined reference to `vtable for DataInformationBox'
/tmp/example-d90d81.o: In function `HandlerBox::~HandlerBox()':
example.cpp:(.text._ZN10HandlerBoxD2Ev[_ZN10HandlerBoxD2Ev]+0xa): undefined reference to `vtable for HandlerBox'
/tmp/example-d90d81.o: In function `ItemPropertyAssociation::~ItemPropertyAssociation()':
example.cpp:(.text._ZN23ItemPropertyAssociationD2Ev[_ZN23ItemPropertyAssociationD2Ev]+0xa): undefined reference to `vtable for ItemPropertyAssociation'
/tmp/example-d90d81.o: In function `ItemPropertyContainer::~ItemPropertyContainer()':
example.cpp:(.text._ZN21ItemPropertyContainerD2Ev[_ZN21ItemPropertyContainerD2Ev]+0xa): undefined reference to `vtable for ItemPropertyContainer'
/tmp/example-d90d81.o: In function `std::pair<unsigned int const, ItemInfoEntry>::~pair()':
example.cpp:(.text._ZNSt4pairIKj13ItemInfoEntryED2Ev[_ZNSt4pairIKj13ItemInfoEntryED2Ev]+0x15): undefined reference to `ItemInfoEntry::~ItemInfoEntry()'
/tmp/example-d90d81.o: In function `DataReferenceBox::~DataReferenceBox()':
example.cpp:(.text._ZN16DataReferenceBoxD2Ev[_ZN16DataReferenceBoxD2Ev]+0xa): undefined reference to `vtable for DataReferenceBox'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Here is a link to the Dockerfile that reproduces the issue:
https://gist.github.com/Eriken/2f36e232e637d4e9cd34a539a7c0bfa0

problems building

Using git source.

The only thing built is writerapp. No reader, etc.
And "make install" gives me "No rule to make target 'install'".

I don't know much about cmake, so I'm not sure what to do.
I have cmake 3.9.1 and GCC 7.1.0, BTW.

DecodePts::applyShiftEdit - Attempt to deference an invalid iterator

In the line 177 of the file decodepts.hpp you have
if (std::prev(it) != mMediaPts.cbegin() &&...

I believe what you intended was
if (it != mMediaPts.cbegin() &&...

I happened by this bug when to use the C036.heic (found on your own repository) with the reader.

A simple
HevcImageFileReader reader;
reader.initialize("C036.heic");
is enough to reproduce the problem.

Problems with decoding the 7th tile on JavaScript

Problems with decoding the 7th tile. When you try to decode the 7th tile, then there are problems. Here already wrote, how to solve this problem on c++, but nothing about JavaScript.

I tried to rewrite it on the JS, but nothing came out. Is it even possible?
Somebody did the decoding onJavaScript?

default

HevcImageFileReader::initialize does not reset internal state

HevcImageFileReader::initialize does not reset the class internal state.

That means that if have more than one file/stream and we attempt to reuse an instance of the HevcImageFileReader class to read the next one, all the data from the previous stream will still be there, resulting in crashes (when you are lucky)

Fedora 26 - compile error with gcc-c++-7.1.1

I just tried compiling heif fresh from github on my fedora 26 beta pc and the compilation fails with the following error:

cd /home/zzz/Downloads/git/heif/build/Srcs/jsonlib && /usr/lib64/ccache/c++    -std=c++11 -Wall -Wextra -Werror -Wno-missing-field-initializers   -o CMakeFiles/json.dir/jsoncpp.cpp.o -c /home/zzz/Downloads/git/heif/Srcs/jsonlib/jsoncpp.cpp
/home/zzz/Downloads/git/heif/Srcs/jsonlib/jsoncpp.cpp: In member function ‘bool Json::OurReader::readToken(Json::OurReader::Token&)’:
/home/zzz/Downloads/git/heif/Srcs/jsonlib/jsoncpp.cpp:1444:5: error: this statement may fall through [-Werror=implicit-fallthrough=]
     if (features_.allowSingleQuotes_) {
     ^~
/home/zzz/Downloads/git/heif/Srcs/jsonlib/jsoncpp.cpp:1449:3: note: here
   case '/':
   ^~~~
cc1plus: all warnings being treated as errors
make[2]: *** [Srcs/jsonlib/CMakeFiles/json.dir/build.make:66: Srcs/jsonlib/CMakeFiles/json.dir/jsoncpp.cpp.o] Error 1

MetaData writing exception: XML

When method MetadataWriter::getMetadataLength is called, then an exception is thrown if the metadata type is set to XML_ITEM_TYPE (i.e. "xml1").

Write EXIF tags to HEIF

In example 8 EXIF data is read from a HEIC file. Is it also possible to go the other way around: write EXIF data (for instance read from a JPG file) into a HEIC file?

Can't Find Image Data

I am trying to make a simple Heic image viewer. I was able to link the libraries okay and find the height and width of an image. However, I can't find the routines that get the bits per pixel or the decoded image data.

Do I need codec just to view simple images? Is there a simple way to get the image data?

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.