Loading media/extractors/mp4/ItemTable.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1425,7 +1425,7 @@ sp<MetaData> ItemTable::getImageMeta(const uint32_t imageIndex) { meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC); if (image->itemId == mPrimaryItemId) { meta->setInt32(kKeyIsPrimaryImage, 1); meta->setInt32(kKeyTrackIsDefault, 1); } ALOGV("image[%u]: size %dx%d", imageIndex, image->width, image->height); Loading media/extractors/mp4/MPEG4Extractor.cpp +36 −35 Original line number Diff line number Diff line Loading @@ -347,7 +347,7 @@ MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source, const char *mime) mHeaderTimescale(0), mIsQT(false), mIsHeif(false), mIsHeifSequence(false), mHasMoovBox(false), mPreferHeif(mime != NULL && !strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_HEIF)), mFirstTrack(NULL), mLastTrack(NULL), Loading Loading @@ -563,9 +563,9 @@ status_t MPEG4Extractor::readMetaData() { status_t err; bool sawMoovOrSidx = false; while (!((!mIsHeif && sawMoovOrSidx && (mMdatFound || mMoofFound)) || (mIsHeif && (mPreferHeif || !mIsHeifSequence) && (mItemTable != NULL) && mItemTable->isValid()))) { while (!((mHasMoovBox && sawMoovOrSidx && (mMdatFound || mMoofFound)) || (mIsHeif && (mPreferHeif || !mHasMoovBox) && (mItemTable != NULL) && mItemTable->isValid()))) { off64_t orig_offset = offset; err = parseChunk(&offset, 0); Loading @@ -582,12 +582,9 @@ status_t MPEG4Extractor::readMetaData() { } } if (mIsHeif) { uint32_t imageCount = mItemTable->countImages(); if (imageCount == 0) { ALOGE("found no image in heif!"); } else { for (uint32_t imageIndex = 0; imageIndex < imageCount; imageIndex++) { if (mIsHeif && (mItemTable != NULL) && (mItemTable->countImages() > 0)) { for (uint32_t imageIndex = 0; imageIndex < mItemTable->countImages(); imageIndex++) { sp<MetaData> meta = mItemTable->getImageMeta(imageIndex); if (meta == NULL) { ALOGE("heif image %u has no meta!", imageIndex); Loading @@ -611,7 +608,6 @@ status_t MPEG4Extractor::readMetaData() { track->timescale = 0; } } } if (mInitCheck == OK) { if (findTrackByMimePrefix("video/") != NULL) { Loading Loading @@ -2512,13 +2508,18 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { } else { if (brandSet.count(FOURCC('m', 'i', 'f', '1')) > 0 && brandSet.count(FOURCC('h', 'e', 'i', 'c')) > 0) { mIsHeif = true; ALOGV("identified HEIF image"); mIsHeif = true; brandSet.erase(FOURCC('m', 'i', 'f', '1')); brandSet.erase(FOURCC('h', 'e', 'i', 'c')); } if (brandSet.count(FOURCC('m', 's', 'f', '1')) > 0 && brandSet.count(FOURCC('h', 'e', 'v', 'c')) > 0) { mIsHeifSequence = true; ALOGV("identified HEIF image sequence"); if (!brandSet.empty()) { // This means that the file should have moov box. // It could be any iso files (mp4, heifs, etc.) mHasMoovBox = true; ALOGV("identified HEIF image with other tracks"); } } Loading media/extractors/mp4/MPEG4Extractor.h +1 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ private: uint32_t mHeaderTimescale; bool mIsQT; bool mIsHeif; bool mIsHeifSequence; bool mHasMoovBox; bool mPreferHeif; Track *mFirstTrack, *mLastTrack; Loading media/libmedia/include/media/mediarecorder.h +3 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,9 @@ enum output_format { /* VP8/VORBIS data in a WEBM container */ OUTPUT_FORMAT_WEBM = 9, /* HEIC data in a HEIF container */ OUTPUT_FORMAT_HEIF = 10, OUTPUT_FORMAT_LIST_END // must be last - used to validate format type }; Loading media/libstagefright/MPEG4Writer.cpp +633 −122 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
media/extractors/mp4/ItemTable.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1425,7 +1425,7 @@ sp<MetaData> ItemTable::getImageMeta(const uint32_t imageIndex) { meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC); if (image->itemId == mPrimaryItemId) { meta->setInt32(kKeyIsPrimaryImage, 1); meta->setInt32(kKeyTrackIsDefault, 1); } ALOGV("image[%u]: size %dx%d", imageIndex, image->width, image->height); Loading
media/extractors/mp4/MPEG4Extractor.cpp +36 −35 Original line number Diff line number Diff line Loading @@ -347,7 +347,7 @@ MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source, const char *mime) mHeaderTimescale(0), mIsQT(false), mIsHeif(false), mIsHeifSequence(false), mHasMoovBox(false), mPreferHeif(mime != NULL && !strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_HEIF)), mFirstTrack(NULL), mLastTrack(NULL), Loading Loading @@ -563,9 +563,9 @@ status_t MPEG4Extractor::readMetaData() { status_t err; bool sawMoovOrSidx = false; while (!((!mIsHeif && sawMoovOrSidx && (mMdatFound || mMoofFound)) || (mIsHeif && (mPreferHeif || !mIsHeifSequence) && (mItemTable != NULL) && mItemTable->isValid()))) { while (!((mHasMoovBox && sawMoovOrSidx && (mMdatFound || mMoofFound)) || (mIsHeif && (mPreferHeif || !mHasMoovBox) && (mItemTable != NULL) && mItemTable->isValid()))) { off64_t orig_offset = offset; err = parseChunk(&offset, 0); Loading @@ -582,12 +582,9 @@ status_t MPEG4Extractor::readMetaData() { } } if (mIsHeif) { uint32_t imageCount = mItemTable->countImages(); if (imageCount == 0) { ALOGE("found no image in heif!"); } else { for (uint32_t imageIndex = 0; imageIndex < imageCount; imageIndex++) { if (mIsHeif && (mItemTable != NULL) && (mItemTable->countImages() > 0)) { for (uint32_t imageIndex = 0; imageIndex < mItemTable->countImages(); imageIndex++) { sp<MetaData> meta = mItemTable->getImageMeta(imageIndex); if (meta == NULL) { ALOGE("heif image %u has no meta!", imageIndex); Loading @@ -611,7 +608,6 @@ status_t MPEG4Extractor::readMetaData() { track->timescale = 0; } } } if (mInitCheck == OK) { if (findTrackByMimePrefix("video/") != NULL) { Loading Loading @@ -2512,13 +2508,18 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { } else { if (brandSet.count(FOURCC('m', 'i', 'f', '1')) > 0 && brandSet.count(FOURCC('h', 'e', 'i', 'c')) > 0) { mIsHeif = true; ALOGV("identified HEIF image"); mIsHeif = true; brandSet.erase(FOURCC('m', 'i', 'f', '1')); brandSet.erase(FOURCC('h', 'e', 'i', 'c')); } if (brandSet.count(FOURCC('m', 's', 'f', '1')) > 0 && brandSet.count(FOURCC('h', 'e', 'v', 'c')) > 0) { mIsHeifSequence = true; ALOGV("identified HEIF image sequence"); if (!brandSet.empty()) { // This means that the file should have moov box. // It could be any iso files (mp4, heifs, etc.) mHasMoovBox = true; ALOGV("identified HEIF image with other tracks"); } } Loading
media/extractors/mp4/MPEG4Extractor.h +1 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,7 @@ private: uint32_t mHeaderTimescale; bool mIsQT; bool mIsHeif; bool mIsHeifSequence; bool mHasMoovBox; bool mPreferHeif; Track *mFirstTrack, *mLastTrack; Loading
media/libmedia/include/media/mediarecorder.h +3 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,9 @@ enum output_format { /* VP8/VORBIS data in a WEBM container */ OUTPUT_FORMAT_WEBM = 9, /* HEIC data in a HEIF container */ OUTPUT_FORMAT_HEIF = 10, OUTPUT_FORMAT_LIST_END // must be last - used to validate format type }; Loading
media/libstagefright/MPEG4Writer.cpp +633 −122 File changed.Preview size limit exceeded, changes collapsed. Show changes