From 0f32fb3ecfdfaa03acf880a356629d43da3fe2fe Mon Sep 17 00:00:00 2001 From: James Dong Date: Sat, 14 May 2011 07:22:40 -0700 Subject: Make track informational event optional, depending on system property o also add a track informational event to return the encoded data in kilo-bytes Change-Id: I7c383360d57048c8a3606d0b8141ba53e4f4b224 --- include/media/mediarecorder.h | 3 +++ media/java/android/media/MediaRecorder.java | 4 ++++ media/libstagefright/MPEG4Writer.cpp | 31 +++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/include/media/mediarecorder.h b/include/media/mediarecorder.h index 59093c9234e2..36bf34ebbd10 100644 --- a/include/media/mediarecorder.h +++ b/include/media/mediarecorder.h @@ -179,6 +179,9 @@ enum media_recorder_info_type { // The time used to compensate for initial A/V sync. MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS = 1008, + // Total number of bytes of the media data. + MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES = 1009, + MEDIA_RECORDER_TRACK_INFO_LIST_END = 2000, }; diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 961ee1e57f92..0f5a440b0dbb 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -860,6 +860,10 @@ public class MediaRecorder * {@hide} */ public static final int MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS = 1008; + /** Provide the total number of data (in kilo-bytes) encoded. + * {@hide} + */ + public static final int MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES = 1009; /** * {@hide} */ diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 9dc83a638d05..988392effd54 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -760,7 +761,27 @@ void MPEG4Writer::writeFtypBox(const MetaData *param) { endBox(); } +static bool isTestModeEnabled() { +#if (PROPERTY_VALUE_MAX < 5) +#error "PROPERTY_VALUE_MAX must be at least 5" +#endif + + // Test mode is enabled only if rw.media.record.test system + // property is enabled. + char value[PROPERTY_VALUE_MAX]; + if (property_get("rw.media.record.test", value, NULL) && + (!strcasecmp(value, "true") || !strcasecmp(value, "1"))) { + return true; + } + return false; +} + void MPEG4Writer::sendSessionSummary() { + // Send session summary only if test mode is enabled + if (!isTestModeEnabled()) { + return; + } + for (List::iterator it = mChunkInfos.begin(); it != mChunkInfos.end(); ++it) { int trackNum = it->mTrack->getTrackId() << 28; @@ -2227,6 +2248,12 @@ status_t MPEG4Writer::Track::threadEntry() { } void MPEG4Writer::Track::sendTrackSummary(bool hasMultipleTracks) { + + // Send track summary only if test mode is enabled. + if (!isTestModeEnabled()) { + return; + } + int trackNum = (mTrackId << 28); mOwner->notify(MEDIA_RECORDER_TRACK_EVENT_INFO, @@ -2256,6 +2283,10 @@ void MPEG4Writer::Track::sendTrackSummary(bool hasMultipleTracks) { (initialDelayUs) / 1000); } + mOwner->notify(MEDIA_RECORDER_TRACK_EVENT_INFO, + trackNum | MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES, + mMdatSizeBytes / 1024); + if (hasMultipleTracks) { mOwner->notify(MEDIA_RECORDER_TRACK_EVENT_INFO, trackNum | MEDIA_RECORDER_TRACK_INFO_MAX_CHUNK_DUR_MS, -- cgit v1.2.3-59-g8ed1b