Loading media/libstagefright/MPEG4Extractor.cpp +18 −7 Original line number Diff line number Diff line Loading @@ -1368,6 +1368,9 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { return err; } const char *mime; CHECK(mLastTrack->meta->findCString(kKeyMIMEType, &mime)); if (max_size != 0) { // Assume that a given buffer only contains at most 10 chunks, // each chunk originally prefixed with a 2 byte length will Loading @@ -1377,19 +1380,27 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { } else { // No size was specified. Pick a conservatively large size. int32_t width, height; if (mLastTrack->meta->findInt32(kKeyWidth, &width) && mLastTrack->meta->findInt32(kKeyHeight, &height)) { mLastTrack->meta->setInt32(kKeyMaxInputSize, width * height * 3 / 2); } else { if (!mLastTrack->meta->findInt32(kKeyWidth, &width) || !mLastTrack->meta->findInt32(kKeyHeight, &height)) { ALOGE("No width or height, assuming worst case 1080p"); mLastTrack->meta->setInt32(kKeyMaxInputSize, 3110400); width = 1920; height = 1080; } if (!strcmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) { // AVC requires compression ratio of at least 2, and uses // macroblocks max_size = ((width + 15) / 16) * ((height + 15) / 16) * 192; } else { // For all other formats there is no minimum compression // ratio. Use compression ratio of 1. max_size = width * height * 3 / 2; } mLastTrack->meta->setInt32(kKeyMaxInputSize, max_size); } *offset += chunk_size; // Calculate average frame rate. const char *mime; CHECK(mLastTrack->meta->findCString(kKeyMIMEType, &mime)); if (!strncasecmp("video/", mime, 6)) { size_t nSamples = mLastTrack->sampleTable->countSamples(); int64_t durationUs; Loading Loading
media/libstagefright/MPEG4Extractor.cpp +18 −7 Original line number Diff line number Diff line Loading @@ -1368,6 +1368,9 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { return err; } const char *mime; CHECK(mLastTrack->meta->findCString(kKeyMIMEType, &mime)); if (max_size != 0) { // Assume that a given buffer only contains at most 10 chunks, // each chunk originally prefixed with a 2 byte length will Loading @@ -1377,19 +1380,27 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { } else { // No size was specified. Pick a conservatively large size. int32_t width, height; if (mLastTrack->meta->findInt32(kKeyWidth, &width) && mLastTrack->meta->findInt32(kKeyHeight, &height)) { mLastTrack->meta->setInt32(kKeyMaxInputSize, width * height * 3 / 2); } else { if (!mLastTrack->meta->findInt32(kKeyWidth, &width) || !mLastTrack->meta->findInt32(kKeyHeight, &height)) { ALOGE("No width or height, assuming worst case 1080p"); mLastTrack->meta->setInt32(kKeyMaxInputSize, 3110400); width = 1920; height = 1080; } if (!strcmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) { // AVC requires compression ratio of at least 2, and uses // macroblocks max_size = ((width + 15) / 16) * ((height + 15) / 16) * 192; } else { // For all other formats there is no minimum compression // ratio. Use compression ratio of 1. max_size = width * height * 3 / 2; } mLastTrack->meta->setInt32(kKeyMaxInputSize, max_size); } *offset += chunk_size; // Calculate average frame rate. const char *mime; CHECK(mLastTrack->meta->findCString(kKeyMIMEType, &mime)); if (!strncasecmp("video/", mime, 6)) { size_t nSamples = mLastTrack->sampleTable->countSamples(); int64_t durationUs; Loading