Loading media/libmediaplayerservice/StagefrightMetadataRetriever.cpp +34 −24 Original line number Diff line number Diff line Loading @@ -174,9 +174,7 @@ sp<IMemory> StagefrightMetadataRetriever::getImageInternal( ALOGV("getting track %zu of %zu, meta=%s", i, n, meta->toString().c_str()); const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); if (!strncasecmp(mime, "image/", 6)) { if (meta->findCString(kKeyMIMEType, &mime) && !strncasecmp(mime, "image/", 6)) { int32_t isPrimary; if ((index < 0 && meta->findInt32( kKeyTrackIsDefault, &isPrimary) && isPrimary) Loading Loading @@ -208,7 +206,10 @@ sp<IMemory> StagefrightMetadataRetriever::getImageInternal( } const char *mime; CHECK(trackMeta->findCString(kKeyMIMEType, &mime)); if (!trackMeta->findCString(kKeyMIMEType, &mime)) { ALOGE("image track has no mime type"); return NULL; } ALOGV("extracting from %s track", mime); if (!strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC)) { mime = MEDIA_MIMETYPE_VIDEO_HEVC; Loading Loading @@ -299,9 +300,7 @@ sp<IMemory> StagefrightMetadataRetriever::getFrameInternal( } const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); if (!strncasecmp(mime, "video/", 6)) { if (meta->findCString(kKeyMIMEType, &mime) && !strncasecmp(mime, "video/", 6)) { break; } } Loading Loading @@ -337,7 +336,10 @@ sp<IMemory> StagefrightMetadataRetriever::getFrameInternal( } const char *mime; CHECK(trackMeta->findCString(kKeyMIMEType, &mime)); if (!trackMeta->findCString(kKeyMIMEType, &mime)) { ALOGE("video track has no mime information."); return NULL; } bool preferhw = property_get_bool( "media.stagefright.thumbnail.prefer_hw_codecs", false); Loading Loading @@ -531,7 +533,7 @@ void StagefrightMetadataRetriever::parseMetaData() { int32_t audioBitrate = -1; int32_t rotationAngle = -1; int32_t imageCount = 0; int32_t imagePrimary = 0; int32_t imagePrimary = -1; int32_t imageWidth = -1; int32_t imageHeight = -1; int32_t imageRotation = -1; Loading Loading @@ -574,29 +576,33 @@ void StagefrightMetadataRetriever::parseMetaData() { mMetaData.add(METADATA_KEY_SAMPLERATE, String8(tmp)); } } else if (!hasVideo && !strncasecmp("video/", mime, 6)) { hasVideo = true; videoMime = String8(mime); CHECK(trackMeta->findInt32(kKeyWidth, &videoWidth)); CHECK(trackMeta->findInt32(kKeyHeight, &videoHeight)); if (!trackMeta->findInt32(kKeyRotation, &rotationAngle)) { rotationAngle = 0; } if (!trackMeta->findInt32(kKeyFrameCount, &videoFrameCount)) { videoFrameCount = 0; } if (trackMeta->findInt32(kKeyWidth, &videoWidth) && trackMeta->findInt32(kKeyHeight, &videoHeight)) { hasVideo = true; videoMime = String8(mime); parseColorAspects(trackMeta); } else { ALOGE("video track ignored for missing dimensions"); } } else if (!strncasecmp("image/", mime, 6)) { int32_t isPrimary; if (trackMeta->findInt32( kKeyTrackIsDefault, &isPrimary) && isPrimary) { imagePrimary = imageCount; CHECK(trackMeta->findInt32(kKeyWidth, &imageWidth)); CHECK(trackMeta->findInt32(kKeyHeight, &imageHeight)); if (!trackMeta->findInt32(kKeyRotation, &imageRotation)) { imageRotation = 0; } if (trackMeta->findInt32(kKeyWidth, &imageWidth) && trackMeta->findInt32(kKeyHeight, &imageHeight)) { imagePrimary = imageCount; } else { ALOGE("primary image track ignored for missing dimensions"); } } imageCount++; } else if (!strcasecmp(mime, MEDIA_MIMETYPE_TEXT_3GPP)) { Loading Loading @@ -629,9 +635,11 @@ void StagefrightMetadataRetriever::parseMetaData() { if (hasVideo) { mMetaData.add(METADATA_KEY_HAS_VIDEO, String8("yes")); CHECK(videoWidth >= 0); sprintf(tmp, "%d", videoWidth); mMetaData.add(METADATA_KEY_VIDEO_WIDTH, String8(tmp)); CHECK(videoHeight >= 0); sprintf(tmp, "%d", videoHeight); mMetaData.add(METADATA_KEY_VIDEO_HEIGHT, String8(tmp)); Loading @@ -646,7 +654,8 @@ void StagefrightMetadataRetriever::parseMetaData() { } } if (imageCount > 0) { // only if we have a primary image if (imageCount > 0 && imagePrimary >= 0) { mMetaData.add(METADATA_KEY_HAS_IMAGE, String8("yes")); sprintf(tmp, "%d", imageCount); Loading @@ -655,9 +664,11 @@ void StagefrightMetadataRetriever::parseMetaData() { sprintf(tmp, "%d", imagePrimary); mMetaData.add(METADATA_KEY_IMAGE_PRIMARY, String8(tmp)); CHECK(imageWidth >= 0); sprintf(tmp, "%d", imageWidth); mMetaData.add(METADATA_KEY_IMAGE_WIDTH, String8(tmp)); CHECK(imageHeight >= 0); sprintf(tmp, "%d", imageHeight); mMetaData.add(METADATA_KEY_IMAGE_HEIGHT, String8(tmp)); Loading Loading @@ -685,10 +696,9 @@ void StagefrightMetadataRetriever::parseMetaData() { !strcasecmp(fileMIME, "video/x-matroska")) { sp<MetaData> trackMeta = mExtractor->getTrackMetaData(0); const char *trackMIME; if (trackMeta != nullptr) { CHECK(trackMeta->findCString(kKeyMIMEType, &trackMIME)); } if (!strncasecmp("audio/", trackMIME, 6)) { if (trackMeta != nullptr && trackMeta->findCString(kKeyMIMEType, &trackMIME) && !strncasecmp("audio/", trackMIME, 6)) { // The matroska file only contains a single audio track, // rewrite its mime type. mMetaData.add( Loading Loading
media/libmediaplayerservice/StagefrightMetadataRetriever.cpp +34 −24 Original line number Diff line number Diff line Loading @@ -174,9 +174,7 @@ sp<IMemory> StagefrightMetadataRetriever::getImageInternal( ALOGV("getting track %zu of %zu, meta=%s", i, n, meta->toString().c_str()); const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); if (!strncasecmp(mime, "image/", 6)) { if (meta->findCString(kKeyMIMEType, &mime) && !strncasecmp(mime, "image/", 6)) { int32_t isPrimary; if ((index < 0 && meta->findInt32( kKeyTrackIsDefault, &isPrimary) && isPrimary) Loading Loading @@ -208,7 +206,10 @@ sp<IMemory> StagefrightMetadataRetriever::getImageInternal( } const char *mime; CHECK(trackMeta->findCString(kKeyMIMEType, &mime)); if (!trackMeta->findCString(kKeyMIMEType, &mime)) { ALOGE("image track has no mime type"); return NULL; } ALOGV("extracting from %s track", mime); if (!strcasecmp(mime, MEDIA_MIMETYPE_IMAGE_ANDROID_HEIC)) { mime = MEDIA_MIMETYPE_VIDEO_HEVC; Loading Loading @@ -299,9 +300,7 @@ sp<IMemory> StagefrightMetadataRetriever::getFrameInternal( } const char *mime; CHECK(meta->findCString(kKeyMIMEType, &mime)); if (!strncasecmp(mime, "video/", 6)) { if (meta->findCString(kKeyMIMEType, &mime) && !strncasecmp(mime, "video/", 6)) { break; } } Loading Loading @@ -337,7 +336,10 @@ sp<IMemory> StagefrightMetadataRetriever::getFrameInternal( } const char *mime; CHECK(trackMeta->findCString(kKeyMIMEType, &mime)); if (!trackMeta->findCString(kKeyMIMEType, &mime)) { ALOGE("video track has no mime information."); return NULL; } bool preferhw = property_get_bool( "media.stagefright.thumbnail.prefer_hw_codecs", false); Loading Loading @@ -531,7 +533,7 @@ void StagefrightMetadataRetriever::parseMetaData() { int32_t audioBitrate = -1; int32_t rotationAngle = -1; int32_t imageCount = 0; int32_t imagePrimary = 0; int32_t imagePrimary = -1; int32_t imageWidth = -1; int32_t imageHeight = -1; int32_t imageRotation = -1; Loading Loading @@ -574,29 +576,33 @@ void StagefrightMetadataRetriever::parseMetaData() { mMetaData.add(METADATA_KEY_SAMPLERATE, String8(tmp)); } } else if (!hasVideo && !strncasecmp("video/", mime, 6)) { hasVideo = true; videoMime = String8(mime); CHECK(trackMeta->findInt32(kKeyWidth, &videoWidth)); CHECK(trackMeta->findInt32(kKeyHeight, &videoHeight)); if (!trackMeta->findInt32(kKeyRotation, &rotationAngle)) { rotationAngle = 0; } if (!trackMeta->findInt32(kKeyFrameCount, &videoFrameCount)) { videoFrameCount = 0; } if (trackMeta->findInt32(kKeyWidth, &videoWidth) && trackMeta->findInt32(kKeyHeight, &videoHeight)) { hasVideo = true; videoMime = String8(mime); parseColorAspects(trackMeta); } else { ALOGE("video track ignored for missing dimensions"); } } else if (!strncasecmp("image/", mime, 6)) { int32_t isPrimary; if (trackMeta->findInt32( kKeyTrackIsDefault, &isPrimary) && isPrimary) { imagePrimary = imageCount; CHECK(trackMeta->findInt32(kKeyWidth, &imageWidth)); CHECK(trackMeta->findInt32(kKeyHeight, &imageHeight)); if (!trackMeta->findInt32(kKeyRotation, &imageRotation)) { imageRotation = 0; } if (trackMeta->findInt32(kKeyWidth, &imageWidth) && trackMeta->findInt32(kKeyHeight, &imageHeight)) { imagePrimary = imageCount; } else { ALOGE("primary image track ignored for missing dimensions"); } } imageCount++; } else if (!strcasecmp(mime, MEDIA_MIMETYPE_TEXT_3GPP)) { Loading Loading @@ -629,9 +635,11 @@ void StagefrightMetadataRetriever::parseMetaData() { if (hasVideo) { mMetaData.add(METADATA_KEY_HAS_VIDEO, String8("yes")); CHECK(videoWidth >= 0); sprintf(tmp, "%d", videoWidth); mMetaData.add(METADATA_KEY_VIDEO_WIDTH, String8(tmp)); CHECK(videoHeight >= 0); sprintf(tmp, "%d", videoHeight); mMetaData.add(METADATA_KEY_VIDEO_HEIGHT, String8(tmp)); Loading @@ -646,7 +654,8 @@ void StagefrightMetadataRetriever::parseMetaData() { } } if (imageCount > 0) { // only if we have a primary image if (imageCount > 0 && imagePrimary >= 0) { mMetaData.add(METADATA_KEY_HAS_IMAGE, String8("yes")); sprintf(tmp, "%d", imageCount); Loading @@ -655,9 +664,11 @@ void StagefrightMetadataRetriever::parseMetaData() { sprintf(tmp, "%d", imagePrimary); mMetaData.add(METADATA_KEY_IMAGE_PRIMARY, String8(tmp)); CHECK(imageWidth >= 0); sprintf(tmp, "%d", imageWidth); mMetaData.add(METADATA_KEY_IMAGE_WIDTH, String8(tmp)); CHECK(imageHeight >= 0); sprintf(tmp, "%d", imageHeight); mMetaData.add(METADATA_KEY_IMAGE_HEIGHT, String8(tmp)); Loading Loading @@ -685,10 +696,9 @@ void StagefrightMetadataRetriever::parseMetaData() { !strcasecmp(fileMIME, "video/x-matroska")) { sp<MetaData> trackMeta = mExtractor->getTrackMetaData(0); const char *trackMIME; if (trackMeta != nullptr) { CHECK(trackMeta->findCString(kKeyMIMEType, &trackMIME)); } if (!strncasecmp("audio/", trackMIME, 6)) { if (trackMeta != nullptr && trackMeta->findCString(kKeyMIMEType, &trackMIME) && !strncasecmp("audio/", trackMIME, 6)) { // The matroska file only contains a single audio track, // rewrite its mime type. mMetaData.add( Loading