summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-08-19 13:52:47 -0700
committerJames Dong <jdong@google.com>2010-08-19 14:04:04 -0700
commit690f546b0ee548dbfe997df36418e5302ec2d786 (patch)
tree8811cc0e220174cb6014eaba6dabfe7ccdb3c5df /media
parente0b77ce97ef84c47ae408e92f2afb7509a5051b6 (diff)
downloadframeworks_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')
-rw-r--r--media/libstagefright/MPEG4Writer.cpp26
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;