nokiatech / heif Goto Github PK
View Code? Open in Web Editor NEWHigh Efficiency Image File Format
License: Other
High Efficiency Image File Format
License: Other
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?
No modern royalty free codec is supported currently.
AV1 is a reasonable option, and has very broad industry adoption.
help me
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.
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.
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.
How do I edit XMP metadata fields in an existing HEIC file?
Is there a documentation or an example for this feature?
From the README.md:
HEIF Reader JavaScript Implementation
I couldn't find any .js
files in the repository.
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
我在centos7上用cmake对源码进行编译,生成了可执行文件,但是我不知道下一步该怎么做,是要用一个实例去调用吗?
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.
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)
...
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:
But I dont know why...
How can I get the image's info from exif?
Like jpg, it can use libexif for get image's info from exif, but it can't support get image's info from heif file's exif!
Thank you!
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)
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.
When method MetadataWriter::getMetadataLength is called, then an exception is thrown if the metadata type is set to XML_ITEM_TYPE (i.e. "xml1").
lzj@lzj:/jia/mytest/image_process/heif/build$/jia/mytest/image_process/heif/build$ ../Bins/examples
lzj@lzj:
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
I want to read conver image use HevcImageFileReader, the function reader.getItemDataWithDecoderParameters failed
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)
I use these commands to build the project:
cmake ../srcs
make
and I got below error, somebody help me please?
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
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/opensource/heif-3.2/build'
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
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=/opensource/heif-3.2/build'
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
[ 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/opensource/heif-3.2/build'
/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
make: *** [all] Error 2
I'm not find the API of the JAVA and some examples about my question.
Who can tell me how??? plz
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
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.
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.
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.
As per the HEIF files spec, files cmpatible with brand 'mif1' should have 'iinf' box version as 0 or 1 but the files given at ''https://github.com/nokiatech/heif/tree/gh-pages/content/images' have the version 2 of this box.
Our metadata parser is written according to the HEIF spec and it is rejecting these files.
Can anybody let me know if I am missing something here?
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
how to read Exif inside the heif file?
Refactor the very few lines of the library that make use of dynamic_cast so we can compile it without RTTI.
Can I use the code here to convert jpg to heif format online on our company's website? I first use ffmpeg jpg into h265 format images, and then modify the code to use nokiatech / heif here, online conversion heif image format
Finally, on the terminal, use other sdk to parse the heif image format
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.
Isn't this library thread-safe? I'm going to make a mistake with my multi-threaded call.
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
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);
}
Mime type for HEIC and HEIF must appear here:
https://www.iana.org/assignments/media-types/media-types.xhtml
This is a requirement of major operating systems in order for them to include mime types by default on their config files. See this bug report response, where I tried to make standard Apache on Linux be aware of HEIF/HEIC thought mime types: https://pagure.io/mailcap/issue/1
Thank you in advance
The file contains some typos.
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
It is said that depth map can be stored as an auxiliary image in a heic file. I wonder in what format will it be stored. In raw data? Or maybe use some method to encode the information?
OpenCV: Couldn't read video stream from file "/Desktop/temp_bitstream.hevc"
cv::VideoCapture::isOpened returned false
Hi!
I'd like to use this library in a commercial project. However, the license is not clear about this. Could you explain to me whether it is possible at all?
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.
Can example7 not encode images taken by the iPhone8?
Hey,
I am maintaining https://aur.archlinux.org/packages/heif/ but I have troubles updating to the latest v3.0 release.
It would help alot if the README would have some building and installing instructions.
Thanks
I run all the examples,but I find that none of the examples can encode JPEG to heif
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:
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.
Srcs/common/iteminfobox.hpp:105:5: error: unused parameter 'itemInfoEntry' [-Werror=unused-parameter]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.