diff options
-rw-r--r-- | include/media/stagefright/ACodec.h | 4 | ||||
-rw-r--r-- | include/media/stagefright/MediaCodecSource.h | 2 | ||||
-rw-r--r-- | media/libavextensions/stagefright/AVExtensions.h | 7 | ||||
-rw-r--r-- | media/libavextensions/stagefright/AVUtils.cpp | 12 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 2 | ||||
-rw-r--r-- | media/libstagefright/ACodec.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 9 | ||||
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 1 | ||||
-rw-r--r-- | media/libstagefright/MediaCodecList.cpp | 3 |
9 files changed, 42 insertions, 6 deletions
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h index 9eaec9b..aaaf2d1 100644 --- a/include/media/stagefright/ACodec.h +++ b/include/media/stagefright/ACodec.h @@ -376,7 +376,7 @@ protected: status_t configureBitrate( int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); - status_t setupErrorCorrectionParameters(); + virtual status_t setupErrorCorrectionParameters(); status_t initNativeWindow(); @@ -437,6 +437,8 @@ protected: return OK; } + sp<IOMXObserver> createObserver(); + DISALLOW_EVIL_CONSTRUCTORS(ACodec); }; diff --git a/include/media/stagefright/MediaCodecSource.h b/include/media/stagefright/MediaCodecSource.h index 71f58a9..d41d87b 100644 --- a/include/media/stagefright/MediaCodecSource.h +++ b/include/media/stagefright/MediaCodecSource.h @@ -28,7 +28,7 @@ class AMessage; struct AReplyToken; class IGraphicBufferProducer; class IGraphicBufferConsumer; -class MediaCodec; +struct MediaCodec; class MetaData; struct MediaCodecSource : public MediaSource, diff --git a/media/libavextensions/stagefright/AVExtensions.h b/media/libavextensions/stagefright/AVExtensions.h index 3e51463..4d73f59 100644 --- a/media/libavextensions/stagefright/AVExtensions.h +++ b/media/libavextensions/stagefright/AVExtensions.h @@ -32,6 +32,8 @@ #include <media/stagefright/DataSource.h> #include <common/AVExtensionsCommon.h> #include <system/audio.h> +#include <camera/ICamera.h> +#include <media/mediarecorder.h> namespace android { @@ -141,9 +143,12 @@ struct AVUtils { return mHEVCMuxer; } + virtual bool isAudioMuxFormatSupported(const char *mime); + virtual void cacheCaptureBuffers(sp<ICamera> camera, video_encoder encoder); + virtual const char *getCustomCodecsLocation(); + private: HEVCMuxer mHEVCMuxer; - // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVUtils); }; diff --git a/media/libavextensions/stagefright/AVUtils.cpp b/media/libavextensions/stagefright/AVUtils.cpp index 8e7c39d..5113446 100644 --- a/media/libavextensions/stagefright/AVUtils.cpp +++ b/media/libavextensions/stagefright/AVUtils.cpp @@ -143,6 +143,18 @@ void AVUtils::HEVCMuxer::getHEVCCodecSpecificDataFromInputFormatIfPossible( return; } +bool AVUtils::isAudioMuxFormatSupported(const char *) { + return true; +} + +void AVUtils::cacheCaptureBuffers(sp<ICamera>, video_encoder) { + return; +} + +const char *AVUtils::getCustomCodecsLocation() { + return "/etc/media_codecs.xml"; +} + // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVUtils::AVUtils() {} diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index d64f814..4f3e2ea 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -56,6 +56,7 @@ #include <system/audio.h> #include "ARTPWriter.h" +#include <stagefright/AVExtensions.h> namespace android { @@ -1476,6 +1477,7 @@ status_t StagefrightRecorder::setupCameraSource( videoSize, mFrameRate, mPreviewSurface); } + AVUtils::get()->cacheCaptureBuffers(mCamera, mVideoEncoder); mCamera.clear(); mCameraProxy.clear(); if (*cameraSource == NULL) { diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 9af5f4b..97a0be0 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -5715,6 +5715,7 @@ bool ACodec::LoadedState::onConfigureComponent( { sp<AMessage> notify = mCodec->mNotify->dup(); notify->setInt32("what", CodecBase::kWhatComponentConfigured); + notify->setString("componentName", mCodec->mComponentName.c_str()); notify->setMessage("input-format", mCodec->mInputFormat); notify->setMessage("output-format", mCodec->mOutputFormat); notify->post(); @@ -6377,6 +6378,13 @@ void ACodec::onSignalEndOfInputStream() { notify->post(); } +sp<IOMXObserver> ACodec::createObserver() { + sp<CodecObserver> observer = new CodecObserver; + sp<AMessage> notify = new AMessage(kWhatOMXMessageList, this); + observer->setNotificationMessage(notify); + return observer; +} + bool ACodec::ExecutingState::onOMXFrameRendered(int64_t mediaTimeUs, nsecs_t systemNano) { mCodec->onFrameRendered(mediaTimeUs, systemNano); return true; diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 86ca2a1..dd80b42 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -42,7 +42,7 @@ #include <cutils/properties.h> #include "include/ESDS.h" - +#include <stagefright/AVExtensions.h> #ifndef __predict_false #define __predict_false(exp) __builtin_expect((exp) != 0, 0) @@ -508,6 +508,11 @@ status_t MPEG4Writer::addSource(const sp<MediaSource> &source) { mIsVideoHEVC = AVUtils::get()->HEVCMuxerUtils().isVideoHEVC(mime); } + if (isAudio && !AVUtils::get()->isAudioMuxFormatSupported(mime)) { + ALOGE("Muxing is not supported for %s", mime); + return ERROR_UNSUPPORTED; + } + // At this point, we know the track to be added is either // video or audio. Thus, we only need to check whether it // is an audio track or not (if it is not, then it must be @@ -595,7 +600,7 @@ int64_t MPEG4Writer::estimateMoovBoxSize(int32_t bitRate) { // If the estimation is wrong, we will pay the price of wasting // some reserved space. This should not happen so often statistically. - static const int32_t factor = mUse32BitOffset? 1: 2; + int32_t factor = mUse32BitOffset? 1: 2; static const int64_t MIN_MOOV_BOX_SIZE = 3 * 1024; // 3 KB static const int64_t MAX_MOOV_BOX_SIZE = (180 * 3000000 * 6LL / 8000); int64_t size = MIN_MOOV_BOX_SIZE; diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index fca8b2c..7f7c7fa 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -1178,6 +1178,7 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { // reset input surface flag mHaveInputSurface = false; + CHECK(msg->findString("componentName", &mComponentName)); CHECK(msg->findMessage("input-format", &mInputFormat)); CHECK(msg->findMessage("output-format", &mOutputFormat)); diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp index b1dd96f..ff94314 100644 --- a/media/libstagefright/MediaCodecList.cpp +++ b/media/libstagefright/MediaCodecList.cpp @@ -40,6 +40,7 @@ #include <cutils/properties.h> #include <libexpat/expat.h> +#include <stagefright/AVExtensions.h> namespace android { @@ -174,7 +175,7 @@ MediaCodecList::MediaCodecList() : mInitCheck(NO_INIT), mUpdate(false), mGlobalSettings(new AMessage()) { - parseTopLevelXMLFile("/etc/media_codecs.xml"); + parseTopLevelXMLFile(AVUtils::get()->getCustomCodecsLocation()); parseTopLevelXMLFile("/etc/media_codecs_performance.xml", true/* ignore_errors */); parseTopLevelXMLFile(kProfilingResults, true/* ignore_errors */); } |