summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorSurajit Podder <spodder@codeaurora.org>2015-07-22 18:58:29 +0530
committerSatish Kamuju <skamuj@codeaurora.org>2015-10-06 17:35:24 +0530
commitbd019775a921ae9165e924e4d37bc838a7ef5781 (patch)
treee0ca419e9f0d1d28a9caed2d00ebcb7021284c4e /media
parent61f6cfa961d22a9a54d91366fefec135f091012d (diff)
downloadframeworks_av-bd019775a921ae9165e924e4d37bc838a7ef5781.zip
frameworks_av-bd019775a921ae9165e924e4d37bc838a7ef5781.tar.gz
frameworks_av-bd019775a921ae9165e924e4d37bc838a7ef5781.tar.bz2
video: Port AOSP fixes
Includes following fixes: f510d0c libstagefright: Disable multi slice mode for video encode ca46843 audio: Fix for failure in CTS MediaRecorderTest cases b4d0490 libstagefright: check the audio source when adding to MPEG4Writer 89c6c3f libstagefright: Allocate cached camera buffers for sw encoders f2c387b libstagefright: Choose target specific media_codecs.xml f3e7122 libstagefright: Implement fallback mechanism to SW decoder Change-Id: I90398b2fead1f4e163935bf1db342e24275f7933
Diffstat (limited to 'media')
-rw-r--r--media/libavextensions/stagefright/AVExtensions.h7
-rw-r--r--media/libavextensions/stagefright/AVUtils.cpp12
-rw-r--r--media/libmediaplayerservice/StagefrightRecorder.cpp2
-rw-r--r--media/libstagefright/ACodec.cpp8
-rw-r--r--media/libstagefright/MPEG4Writer.cpp9
-rw-r--r--media/libstagefright/MediaCodec.cpp1
-rw-r--r--media/libstagefright/MediaCodecList.cpp3
7 files changed, 38 insertions, 4 deletions
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 */);
}