MediaMuxer:SetCaptureRate for GCA SlowMotionRecord

MediaMuxer would find 'time-lapse-fps' value in input format from GCA
and pass it on to MPEG4Writer for SlowMotionRecord.

Bug: 138995916

Test: atest CtsMediaTestCases
      atest CtsMediaTestCases:android.media.cts.MediaMuxerTest

Change-Id: I6af102540ddd439b203351ebba07eabf89f2d330
gugelfrei
Gopalakrishnan Nallasamy 5 years ago
parent 393728a945
commit 4109217870

@ -1635,8 +1635,13 @@ status_t MPEG4Writer::setCaptureRate(float captureFps) {
return BAD_VALUE;
}
// Increase moovExtraSize once only irrespective of how many times
// setCaptureRate is called.
bool containsCaptureFps = mMetaKeys->contains(kMetaKey_CaptureFps);
mMetaKeys->setFloat(kMetaKey_CaptureFps, captureFps);
mMoovExtraSize += sizeof(kMetaKey_CaptureFps) + 4 + 32;
if (!containsCaptureFps) {
mMoovExtraSize += sizeof(kMetaKey_CaptureFps) + 4 + 32;
}
return OK;
}

@ -96,10 +96,18 @@ ssize_t MediaMuxer::addTrack(const sp<AMessage> &format) {
sp<MediaAdapter> newTrack = new MediaAdapter(trackMeta);
status_t result = mWriter->addSource(newTrack);
if (result == OK) {
return mTrackList.add(newTrack);
if (result != OK) {
return -1;
}
float captureFps = -1.0;
if (format->findAsFloat("time-lapse-fps", &captureFps)) {
ALOGV("addTrack() time-lapse-fps: %f", captureFps);
result = mWriter->setCaptureRate(captureFps);
if (result != OK) {
ALOGW("addTrack() setCaptureRate failed :%d", result);
}
}
return -1;
return mTrackList.add(newTrack);
}
status_t MediaMuxer::setOrientationHint(int degrees) {

@ -35,6 +35,10 @@ struct MediaWriter : public RefBase {
virtual status_t start(MetaData *params = NULL) = 0;
virtual status_t stop() = 0;
virtual status_t pause() = 0;
virtual status_t setCaptureRate(float /* captureFps */) {
ALOGW("setCaptureRate unsupported");
return ERROR_UNSUPPORTED;
}
virtual void setMaxFileSize(int64_t bytes) { mMaxFileSizeLimitBytes = bytes; }
virtual void setMaxFileDuration(int64_t durationUs) { mMaxFileDurationLimitUs = durationUs; }

Loading…
Cancel
Save