MCPcopy Create free account
hub / github.com/crownengine/crown / imageParseJpeg

Function imageParseJpeg

3rdparty/bimg/src/image_decode.cpp:703–837  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

701 }
702
703 static ImageContainer* imageParseJpeg(bx::AllocatorI* _allocator, const void* _data, uint32_t _size, bx::Error* _err)
704 {
705 bx::MemoryReader reader(_data, _size);
706
707 bx::Error err;
708
709 uint16_t magic = 0;
710 bx::readHE(&reader, magic, false, &err);
711
712 if (!err.isOk()
713 || 0xffd8 != magic)
714 {
715 return NULL;
716 }
717
718 Orientation::Enum orientation = Orientation::R0;
719
720 while (err.isOk() )
721 {
722 bx::readHE(&reader, magic, false, &err);
723
724 uint16_t size;
725 bx::readHE(&reader, size, false, &err);
726
727 if (!err.isOk() )
728 {
729 return NULL;
730 }
731
732 if (0xffe1 != magic)
733 {
734 bx::seek(&reader, size-2);
735 continue;
736 }
737
738 char exif00[6];
739 bx::read(&reader, exif00, 6, &err);
740
741 if (0 == bx::memCmp(exif00, "Exif\0\0", 6) )
742 {
743 uint16_t iimm = 0;
744 bx::read(&reader, iimm, &err);
745
746 const bool littleEndian = iimm == 0x4949; //II - Intel - little endian
747 if (!err.isOk()
748 && !littleEndian
749 && iimm != 0x4d4d) // MM - Motorola - big endian
750 {
751 return NULL;
752 }
753
754 bx::readHE(&reader, magic, littleEndian, &err);
755 if (!err.isOk()
756 || 0x2a != magic)
757 {
758 return NULL;
759 }
760

Callers 1

imageParseFunction · 0.85

Calls 4

seekFunction · 0.85
memCmpFunction · 0.85
imageParseStbImageFunction · 0.85
readFunction · 0.50

Tested by

no test coverage detected