diff options
author | James Dong <jdong@google.com> | 2010-08-19 13:52:47 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-08-19 14:04:04 -0700 |
commit | 690f546b0ee548dbfe997df36418e5302ec2d786 (patch) | |
tree | 8811cc0e220174cb6014eaba6dabfe7ccdb3c5df /media/libstagefright/MPEG4Writer.cpp | |
parent | e0b77ce97ef84c47ae408e92f2afb7509a5051b6 (diff) | |
download | frameworks_av-690f546b0ee548dbfe997df36418e5302ec2d786.zip frameworks_av-690f546b0ee548dbfe997df36418e5302ec2d786.tar.gz frameworks_av-690f546b0ee548dbfe997df36418e5302ec2d786.tar.bz2 |
Return error from MPEG4Writer stop() if the check on codec specific data failed
Change-Id: Icbd08eec9b4201facbad56ff2040f0830cfb0115
Diffstat (limited to 'media/libstagefright/MPEG4Writer.cpp')
-rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 6bb54bd..0d0a998 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -174,6 +174,9 @@ private: // value, the user-supplied time scale will be used. void setTimeScale(); + // Simple validation on the codec specific data + status_t checkCodecSpecificData() const; + Track(const Track &); Track &operator=(const Track &); }; @@ -1624,6 +1627,8 @@ status_t MPEG4Writer::Track::threadEntry() { if (mSampleSizes.empty()) { err = ERROR_MALFORMED; + } else if (OK != checkCodecSpecificData()) { + err = ERROR_MALFORMED; } mOwner->trackProgressStatus(this, -1, err); @@ -1833,6 +1838,27 @@ int64_t MPEG4Writer::Track::getEstimatedTrackSizeBytes() const { return mEstimatedTrackSizeBytes; } +status_t MPEG4Writer::Track::checkCodecSpecificData() const { + const char *mime; + CHECK(mMeta->findCString(kKeyMIMEType, &mime)); + if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_AAC, mime) || + !strcasecmp(MEDIA_MIMETYPE_VIDEO_MPEG4, mime) || + !strcasecmp(MEDIA_MIMETYPE_VIDEO_AVC, mime)) { + if (!mCodecSpecificData || + mCodecSpecificDataSize <= 0) { + // Missing codec specific data + return ERROR_MALFORMED; + } + } else { + if (mCodecSpecificData || + mCodecSpecificDataSize > 0) { + // Unexepected codec specific data found + return ERROR_MALFORMED; + } + } + return OK; +} + void MPEG4Writer::Track::writeTrackHeader( int32_t trackID, bool use32BitOffset) { const char *mime; |