Created
October 13, 2016 02:29
-
-
Save updateing/9d3683b058d3d0cb1ae7a602213a8cb7 to your computer and use it in GitHub Desktop.
CM14 frameworks/av patches for camcorder
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From d289004f35708eb794557dc7e20827d963bfe7bf Mon Sep 17 00:00:00 2001 | |
From: Hamster Tian <[email protected]> | |
Date: Sun, 2 Oct 2016 23:15:03 +0800 | |
Subject: [PATCH 1/4] Revert "stagefright: untangle metadata-mode handling" | |
This reverts commit 3e328782f1e1061d08ea0c45b855cc418a2d9ea6. | |
Conflicts: | |
include/media/stagefright/SurfaceMediaSource.h | |
Change-Id: I50563b1d5e50138d07d1cdc2e15705473bd2a865 | |
--- | |
cmds/stagefright/Android.mk | 6 +-- | |
include/media/IOMX.h | 7 ++- | |
include/media/stagefright/CameraSource.h | 7 ++- | |
include/media/stagefright/SurfaceMediaSource.h | 11 ++--- | |
media/libmedia/IOMX.cpp | 6 +-- | |
media/libmediaplayerservice/Android.mk | 1 - | |
.../libmediaplayerservice/StagefrightRecorder.cpp | 12 ++--- | |
media/libmediaplayerservice/StagefrightRecorder.h | 4 +- | |
media/libstagefright/ACodec.cpp | 57 +++++++++------------- | |
media/libstagefright/CameraSource.cpp | 14 ++---- | |
media/libstagefright/MediaCodecSource.cpp | 4 ++ | |
media/libstagefright/SurfaceMediaSource.cpp | 33 ++++++++----- | |
media/libstagefright/omx/OMXNodeInstance.cpp | 23 ++------- | |
media/libstagefright/tests/Android.mk | 1 - | |
media/libstagefright/wifi-display/Android.mk | 1 - | |
.../wifi-display/source/PlaybackSession.cpp | 5 +- | |
16 files changed, 79 insertions(+), 113 deletions(-) | |
diff --git a/cmds/stagefright/Android.mk b/cmds/stagefright/Android.mk | |
index 9e15a81..e5fbba0 100644 | |
--- a/cmds/stagefright/Android.mk | |
+++ b/cmds/stagefright/Android.mk | |
@@ -39,8 +39,7 @@ LOCAL_SHARED_LIBRARIES := \ | |
LOCAL_C_INCLUDES:= \ | |
frameworks/av/media/libstagefright \ | |
- $(TOP)/frameworks/native/include/media/openmax \ | |
- $(TOP)/frameworks/native/include/media/hardware | |
+ $(TOP)/frameworks/native/include/media/openmax | |
LOCAL_CFLAGS += -Wno-multichar -Werror -Wall | |
LOCAL_CLANG := true | |
@@ -64,8 +63,7 @@ LOCAL_SHARED_LIBRARIES := \ | |
LOCAL_C_INCLUDES:= \ | |
frameworks/av/media/libstagefright \ | |
- $(TOP)/frameworks/native/include/media/openmax \ | |
- $(TOP)/frameworks/native/include/media/hardware | |
+ $(TOP)/frameworks/native/include/media/openmax | |
LOCAL_CFLAGS += -Wno-multichar -Werror -Wall | |
LOCAL_CLANG := true | |
diff --git a/include/media/IOMX.h b/include/media/IOMX.h | |
index 15d691f..459e965 100644 | |
--- a/include/media/IOMX.h | |
+++ b/include/media/IOMX.h | |
@@ -277,18 +277,17 @@ struct CodecProfileLevel { | |
OMX_U32 mLevel; | |
}; | |
-inline static const char *asString(MetadataBufferType i, const char *def = "??") { | |
+} // namespace android | |
+ | |
+inline static const char *asString(android::MetadataBufferType i, const char *def = "??") { | |
using namespace android; | |
switch (i) { | |
case kMetadataBufferTypeCameraSource: return "CameraSource"; | |
case kMetadataBufferTypeGrallocSource: return "GrallocSource"; | |
case kMetadataBufferTypeANWBuffer: return "ANWBuffer"; | |
- case kMetadataBufferTypeNativeHandleSource: return "NativeHandleSource"; | |
case kMetadataBufferTypeInvalid: return "Invalid"; | |
default: return def; | |
} | |
} | |
-} // namespace android | |
- | |
#endif // ANDROID_IOMX_H_ | |
diff --git a/include/media/stagefright/CameraSource.h b/include/media/stagefright/CameraSource.h | |
index c2e75a6..399f363 100644 | |
--- a/include/media/stagefright/CameraSource.h | |
+++ b/include/media/stagefright/CameraSource.h | |
@@ -28,7 +28,6 @@ | |
#include <utils/List.h> | |
#include <utils/RefBase.h> | |
#include <utils/String16.h> | |
-#include <MetadataBufferType.h> | |
namespace android { | |
@@ -119,11 +118,11 @@ public: | |
* Tell whether this camera source stores meta data or real YUV | |
* frame data in video buffers. | |
* | |
- * @return a valid type if meta data is stored in the video | |
- * buffers; kMetadataBufferTypeInvalid if real YUV data is stored in | |
+ * @return true if meta data is stored in the video | |
+ * buffers; false if real YUV data is stored in | |
* the video buffers. | |
*/ | |
- MetadataBufferType metaDataStoredInVideoBuffers() const; | |
+ bool isMetaDataStoredInVideoBuffers() const; | |
virtual void signalBufferReturned(MediaBuffer* buffer); | |
diff --git a/include/media/stagefright/SurfaceMediaSource.h b/include/media/stagefright/SurfaceMediaSource.h | |
index 1657a38..2177c00 100644 | |
--- a/include/media/stagefright/SurfaceMediaSource.h | |
+++ b/include/media/stagefright/SurfaceMediaSource.h | |
@@ -25,8 +25,6 @@ | |
#include <media/stagefright/MediaSource.h> | |
#include <media/stagefright/MediaBuffer.h> | |
-#include <media/hardware/MetadataBufferType.h> | |
- | |
#include "foundation/ABase.h" | |
namespace android { | |
@@ -111,9 +109,9 @@ public: | |
void dump(String8& result, const char* prefix, char* buffer, | |
size_t SIZE) const; | |
- // metaDataStoredInVideoBuffers tells the encoder what kind of metadata | |
- // is passed through the buffers. Currently, it is set to ANWBuffer | |
- MetadataBufferType metaDataStoredInVideoBuffers() const; | |
+ // isMetaDataStoredInVideoBuffers tells the encoder whether we will | |
+ // pass metadata through the buffers. Currently, it is force set to true | |
+ bool isMetaDataStoredInVideoBuffers() const; | |
sp<IGraphicBufferProducer> getProducer() const { return mProducer; } | |
@@ -236,9 +234,6 @@ private: | |
Condition mMediaBuffersAvailableCondition; | |
- // Allocate and return a new MediaBuffer and pass the ANW buffer as metadata into it. | |
- void passMetadataBuffer_l(MediaBuffer **buffer, ANativeWindowBuffer *bufferHandle) const; | |
- | |
// Avoid copying and equating and default constructor | |
DISALLOW_EVIL_CONSTRUCTORS(SurfaceMediaSource); | |
}; | |
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp | |
index 3f7831e..cfc337a 100644 | |
--- a/media/libmedia/IOMX.cpp | |
+++ b/media/libmedia/IOMX.cpp | |
@@ -438,9 +438,7 @@ public: | |
data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); | |
data.writeInt32((int32_t)node); | |
data.writeInt32(port_index); | |
- data.writeInt32((int32_t)enable); | |
- data.writeInt32(type == NULL ? kMetadataBufferTypeANWBuffer : *type); | |
- | |
+ data.writeInt32((uint32_t)enable); | |
remote()->transact(STORE_META_DATA_IN_BUFFERS, data, &reply); | |
// read type even storeMetaDataInBuffers failed | |
@@ -1046,7 +1044,7 @@ status_t BnOMX::onTransact( | |
OMX_U32 port_index = data.readInt32(); | |
OMX_BOOL enable = (OMX_BOOL)data.readInt32(); | |
- MetadataBufferType type = (MetadataBufferType)data.readInt32(); | |
+ MetadataBufferType type = kMetadataBufferTypeInvalid; | |
status_t err = storeMetaDataInBuffers(node, port_index, enable, &type); | |
reply->writeInt32(type); | |
diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk | |
index b175453..163ff22 100644 | |
--- a/media/libmediaplayerservice/Android.mk | |
+++ b/media/libmediaplayerservice/Android.mk | |
@@ -54,7 +54,6 @@ LOCAL_C_INCLUDES := \ | |
$(TOP)/frameworks/av/include/media \ | |
$(TOP)/frameworks/av/include/camera \ | |
$(TOP)/frameworks/native/include/media/openmax \ | |
- $(TOP)/frameworks/native/include/media/hardware \ | |
$(TOP)/external/tremolo/Tremolo \ | |
libcore/include \ | |
$(TOP)/frameworks/av/media/libavextensions \ | |
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp | |
index 6a9ba60..eaf667b 100644 | |
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp | |
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp | |
@@ -1515,8 +1515,8 @@ status_t StagefrightRecorder::setupCameraSource( | |
CHECK(mFrameRate != -1); | |
- mMetaDataStoredInVideoBuffers = | |
- (*cameraSource)->metaDataStoredInVideoBuffers(); | |
+ mIsMetaDataStoredInVideoBuffers = | |
+ (*cameraSource)->isMetaDataStoredInVideoBuffers(); | |
return OK; | |
} | |
@@ -1618,11 +1618,11 @@ status_t StagefrightRecorder::setupVideoEncoder( | |
} | |
} | |
- if (mMetaDataStoredInVideoBuffers != kMetadataBufferTypeInvalid) { | |
- format->setInt32("android._input-metadata-buffer-type", mMetaDataStoredInVideoBuffers); | |
+ uint32_t flags = 0; | |
+ if (mIsMetaDataStoredInVideoBuffers) { | |
+ flags |= MediaCodecSource::FLAG_USE_METADATA_INPUT; | |
} | |
- uint32_t flags = 0; | |
if (cameraSource == NULL) { | |
flags |= MediaCodecSource::FLAG_USE_SURFACE_INPUT; | |
} else { | |
@@ -1924,7 +1924,7 @@ status_t StagefrightRecorder::reset() { | |
mCaptureFps = 0.0f; | |
mTimeBetweenCaptureUs = -1; | |
mCameraSourceTimeLapse = NULL; | |
- mMetaDataStoredInVideoBuffers = kMetadataBufferTypeInvalid; | |
+ mIsMetaDataStoredInVideoBuffers = false; | |
mEncoderProfiles = MediaProfiles::getInstance(); | |
mRotationDegrees = 0; | |
mLatitudex10000 = -3600000; | |
diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h | |
index 87f9462..779bd58 100644 | |
--- a/media/libmediaplayerservice/StagefrightRecorder.h | |
+++ b/media/libmediaplayerservice/StagefrightRecorder.h | |
@@ -24,8 +24,6 @@ | |
#include <media/stagefright/MediaSource.h> | |
#include <system/audio.h> | |
-#include <MetadataBufferType.h> | |
- | |
namespace android { | |
class Camera; | |
@@ -124,7 +122,7 @@ protected: | |
String8 mParams; | |
- MetadataBufferType mMetaDataStoredInVideoBuffers; | |
+ bool mIsMetaDataStoredInVideoBuffers; | |
MediaProfiles *mEncoderProfiles; | |
int64_t mPauseStartTimeUs; | |
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp | |
index 84ed571..eac5abb 100644 | |
--- a/media/libstagefright/ACodec.cpp | |
+++ b/media/libstagefright/ACodec.cpp | |
@@ -816,10 +816,10 @@ status_t ACodec::allocateBuffersOnPort(OMX_U32 portIndex) { | |
MetadataBufferType type = | |
portIndex == kPortIndexOutput ? mOutputMetadataType : mInputMetadataType; | |
size_t bufSize = def.nBufferSize; | |
- if (type == kMetadataBufferTypeANWBuffer) { | |
+ if (type == kMetadataBufferTypeGrallocSource) { | |
+ bufSize = sizeof(VideoGrallocMetadata); | |
+ } else if (type == kMetadataBufferTypeANWBuffer) { | |
bufSize = sizeof(VideoNativeMetadata); | |
- } else if (type == kMetadataBufferTypeNativeHandleSource) { | |
- bufSize = sizeof(VideoNativeHandleMetadata); | |
} | |
// If using gralloc or native source input metadata buffers, allocate largest | |
@@ -827,7 +827,7 @@ status_t ACodec::allocateBuffersOnPort(OMX_U32 portIndex) { | |
// may require gralloc source. For camera source, allocate at least enough | |
// size for native metadata buffers. | |
size_t allottedSize = bufSize; | |
- if (portIndex == kPortIndexInput && type == kMetadataBufferTypeANWBuffer) { | |
+ if (portIndex == kPortIndexInput && type >= kMetadataBufferTypeGrallocSource) { | |
bufSize = max(sizeof(VideoGrallocMetadata), sizeof(VideoNativeMetadata)); | |
} else if (portIndex == kPortIndexInput && type == kMetadataBufferTypeCameraSource) { | |
bufSize = max(bufSize, sizeof(VideoNativeMetadata)); | |
@@ -1826,20 +1826,19 @@ status_t ACodec::configureCodec( | |
int32_t storeMeta; | |
if (encoder | |
- && msg->findInt32("android._input-metadata-buffer-type", &storeMeta) | |
- && storeMeta != kMetadataBufferTypeInvalid) { | |
- mInputMetadataType = (MetadataBufferType)storeMeta; | |
- err = mOMX->storeMetaDataInBuffers( | |
- mNode, kPortIndexInput, OMX_TRUE, &mInputMetadataType); | |
+ && msg->findInt32("store-metadata-in-buffers", &storeMeta) | |
+ && storeMeta != 0) { | |
+ err = mOMX->storeMetaDataInBuffers(mNode, kPortIndexInput, OMX_TRUE, &mInputMetadataType); | |
if (err != OK) { | |
ALOGE("[%s] storeMetaDataInBuffers (input) failed w/ err %d", | |
mComponentName.c_str(), err); | |
return err; | |
- } else if (storeMeta == kMetadataBufferTypeANWBuffer | |
- && mInputMetadataType == kMetadataBufferTypeGrallocSource) { | |
- // IOMX translates ANWBuffers to gralloc source already. | |
- mInputMetadataType = (MetadataBufferType)storeMeta; | |
+ } | |
+ // For this specific case we could be using camera source even if storeMetaDataInBuffers | |
+ // returns Gralloc source. Pretend that we are; this will force us to use nBufferSize. | |
+ if (mInputMetadataType == kMetadataBufferTypeGrallocSource) { | |
+ mInputMetadataType = kMetadataBufferTypeCameraSource; | |
} | |
uint32_t usageBits; | |
@@ -1885,10 +1884,9 @@ status_t ACodec::configureCodec( | |
mIsVideo = video; | |
if (encoder && video) { | |
OMX_BOOL enable = (OMX_BOOL) (prependSPSPPS | |
- && msg->findInt32("android._store-metadata-in-buffers-output", &storeMeta) | |
+ && msg->findInt32("store-metadata-in-buffers-output", &storeMeta) | |
&& storeMeta != 0); | |
- mOutputMetadataType = kMetadataBufferTypeNativeHandleSource; | |
err = mOMX->storeMetaDataInBuffers(mNode, kPortIndexOutput, enable, &mOutputMetadataType); | |
if (err != OK) { | |
ALOGE("[%s] storeMetaDataInBuffers (output) failed w/ err %d", | |
@@ -2017,7 +2015,6 @@ status_t ACodec::configureCodec( | |
} | |
// Always try to enable dynamic output buffers on native surface | |
- mOutputMetadataType = kMetadataBufferTypeANWBuffer; | |
err = mOMX->storeMetaDataInBuffers( | |
mNode, kPortIndexOutput, OMX_TRUE, &mOutputMetadataType); | |
if (err != OK) { | |
@@ -6252,15 +6249,18 @@ bool ACodec::BaseState::onOMXFillBufferDone( | |
if (mCodec->usingMetadataOnEncoderOutput()) { | |
native_handle_t *handle = NULL; | |
- VideoNativeHandleMetadata &nativeMeta = | |
- *(VideoNativeHandleMetadata *)info->mData->data(); | |
- if (info->mData->size() >= sizeof(nativeMeta) | |
- && nativeMeta.eType == kMetadataBufferTypeNativeHandleSource) { | |
+ VideoGrallocMetadata &grallocMeta = *(VideoGrallocMetadata *)info->mData->data(); | |
+ VideoNativeMetadata &nativeMeta = *(VideoNativeMetadata *)info->mData->data(); | |
+ if (info->mData->size() >= sizeof(grallocMeta) | |
+ && grallocMeta.eType == kMetadataBufferTypeGrallocSource) { | |
+ handle = (native_handle_t *)(uintptr_t)grallocMeta.pHandle; | |
+ } else if (info->mData->size() >= sizeof(nativeMeta) | |
+ && nativeMeta.eType == kMetadataBufferTypeANWBuffer) { | |
#ifdef OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS | |
- // handle is only valid on 32-bit/mediaserver process | |
+ // ANativeWindowBuffer is only valid on 32-bit/mediaserver process | |
handle = NULL; | |
#else | |
- handle = (native_handle_t *)nativeMeta.pHandle; | |
+ handle = (native_handle_t *)nativeMeta.pBuffer->handle; | |
#endif | |
} | |
info->mData->meta()->setPointer("handle", handle); | |
@@ -7032,14 +7032,8 @@ void ACodec::LoadedState::onCreateInputSurface( | |
sp<IGraphicBufferProducer> bufferProducer; | |
if (err == OK) { | |
- mCodec->mInputMetadataType = kMetadataBufferTypeANWBuffer; | |
err = mCodec->mOMX->createInputSurface( | |
- mCodec->mNode, kPortIndexInput, dataSpace, &bufferProducer, | |
- &mCodec->mInputMetadataType); | |
- // framework uses ANW buffers internally instead of gralloc handles | |
- if (mCodec->mInputMetadataType == kMetadataBufferTypeGrallocSource) { | |
- mCodec->mInputMetadataType = kMetadataBufferTypeANWBuffer; | |
- } | |
+ mCodec->mNode, kPortIndexInput, dataSpace, &bufferProducer, &mCodec->mInputMetadataType); | |
} | |
if (err == OK) { | |
@@ -7078,14 +7072,9 @@ void ACodec::LoadedState::onSetInputSurface( | |
notify->setMessage("output-format", mCodec->mOutputFormat); | |
if (err == OK) { | |
- mCodec->mInputMetadataType = kMetadataBufferTypeANWBuffer; | |
err = mCodec->mOMX->setInputSurface( | |
mCodec->mNode, kPortIndexInput, surface->getBufferConsumer(), | |
&mCodec->mInputMetadataType); | |
- // framework uses ANW buffers internally instead of gralloc handles | |
- if (mCodec->mInputMetadataType == kMetadataBufferTypeGrallocSource) { | |
- mCodec->mInputMetadataType = kMetadataBufferTypeANWBuffer; | |
- } | |
} | |
if (err == OK) { | |
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp | |
index 5cf6c94..c05d0be 100644 | |
--- a/media/libstagefright/CameraSource.cpp | |
+++ b/media/libstagefright/CameraSource.cpp | |
@@ -1261,19 +1261,13 @@ void CameraSource::processBufferQueueFrame(BufferItem& buffer) { | |
mFrameAvailableCondition.signal(); | |
} | |
-MetadataBufferType CameraSource::metaDataStoredInVideoBuffers() const { | |
- ALOGV("metaDataStoredInVideoBuffers"); | |
+bool CameraSource::isMetaDataStoredInVideoBuffers() const { | |
+ ALOGV("isMetaDataStoredInVideoBuffers"); | |
// Output buffers will contain metadata if camera sends us buffer in metadata mode or via | |
// buffer queue. | |
- switch (mVideoBufferMode) { | |
- case hardware::ICamera::VIDEO_BUFFER_MODE_DATA_CALLBACK_METADATA: | |
- return kMetadataBufferTypeNativeHandleSource; | |
- case hardware::ICamera::VIDEO_BUFFER_MODE_BUFFER_QUEUE: | |
- return kMetadataBufferTypeANWBuffer; | |
- default: | |
- return kMetadataBufferTypeInvalid; | |
- } | |
+ return (mVideoBufferMode == hardware::ICamera::VIDEO_BUFFER_MODE_DATA_CALLBACK_METADATA || | |
+ mVideoBufferMode == hardware::ICamera::VIDEO_BUFFER_MODE_BUFFER_QUEUE); | |
} | |
CameraSource::ProxyListener::ProxyListener(const sp<CameraSource>& source) { | |
diff --git a/media/libstagefright/MediaCodecSource.cpp b/media/libstagefright/MediaCodecSource.cpp | |
index 3a153c5..3921fd7 100755 | |
--- a/media/libstagefright/MediaCodecSource.cpp | |
+++ b/media/libstagefright/MediaCodecSource.cpp | |
@@ -453,6 +453,10 @@ status_t MediaCodecSource::initEncoder() { | |
mCodecLooper->setName("codec_looper"); | |
mCodecLooper->start(); | |
+ if (mFlags & FLAG_USE_METADATA_INPUT) { | |
+ mOutputFormat->setInt32("store-metadata-in-buffers", 1); | |
+ } | |
+ | |
if (mFlags & FLAG_USE_SURFACE_INPUT) { | |
mOutputFormat->setInt32("create-input-buffers-suspended", 1); | |
} | |
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp | |
index 15ff569..e4bf67a 100644 | |
--- a/media/libstagefright/SurfaceMediaSource.cpp | |
+++ b/media/libstagefright/SurfaceMediaSource.cpp | |
@@ -23,7 +23,6 @@ | |
#include <media/stagefright/MediaDefs.h> | |
#include <media/stagefright/MetaData.h> | |
#include <OMX_IVCommon.h> | |
-#include <media/hardware/HardwareAPI.h> | |
#include <media/hardware/MetadataBufferType.h> | |
#include <ui/GraphicBuffer.h> | |
@@ -127,9 +126,9 @@ status_t SurfaceMediaSource::setFrameRate(int32_t fps) | |
return OK; | |
} | |
-MetadataBufferType SurfaceMediaSource::metaDataStoredInVideoBuffers() const { | |
+bool SurfaceMediaSource::isMetaDataStoredInVideoBuffers() const { | |
ALOGV("isMetaDataStoredInVideoBuffers"); | |
- return kMetadataBufferTypeANWBuffer; | |
+ return true; | |
} | |
int32_t SurfaceMediaSource::getFrameRate( ) const { | |
@@ -251,19 +250,29 @@ sp<MetaData> SurfaceMediaSource::getFormat() | |
} | |
// Pass the data to the MediaBuffer. Pass in only the metadata | |
+// The metadata passed consists of two parts: | |
+// 1. First, there is an integer indicating that it is a GRAlloc | |
+// source (kMetadataBufferTypeGrallocSource) | |
+// 2. This is followed by the buffer_handle_t that is a handle to the | |
+// GRalloc buffer. The encoder needs to interpret this GRalloc handle | |
+// and encode the frames. | |
+// -------------------------------------------------------------- | |
+// | kMetadataBufferTypeGrallocSource | sizeof(buffer_handle_t) | | |
+// -------------------------------------------------------------- | |
// Note: Call only when you have the lock | |
-void SurfaceMediaSource::passMetadataBuffer_l(MediaBuffer **buffer, | |
- ANativeWindowBuffer *bufferHandle) const { | |
- *buffer = new MediaBuffer(sizeof(VideoNativeMetadata)); | |
- VideoNativeMetadata *data = (VideoNativeMetadata *)(*buffer)->data(); | |
+static void passMetadataBuffer(MediaBuffer **buffer, | |
+ buffer_handle_t bufferHandle) { | |
+ *buffer = new MediaBuffer(4 + sizeof(buffer_handle_t)); | |
+ char *data = (char *)(*buffer)->data(); | |
if (data == NULL) { | |
ALOGE("Cannot allocate memory for metadata buffer!"); | |
return; | |
} | |
- data->eType = metaDataStoredInVideoBuffers(); | |
- data->pBuffer = bufferHandle; | |
- data->nFenceFd = -1; | |
- ALOGV("handle = %p, offset = %zu, length = %zu", | |
+ OMX_U32 type = kMetadataBufferTypeGrallocSource; | |
+ memcpy(data, &type, 4); | |
+ memcpy(data + 4, &bufferHandle, sizeof(buffer_handle_t)); | |
+ | |
+ ALOGV("handle = %p, , offset = %zu, length = %zu", | |
bufferHandle, (*buffer)->range_length(), (*buffer)->range_offset()); | |
} | |
@@ -352,7 +361,7 @@ status_t SurfaceMediaSource::read( | |
mNumFramesEncoded++; | |
// Pass the data to the MediaBuffer. Pass in only the metadata | |
- passMetadataBuffer_l(buffer, mSlots[mCurrentSlot].mGraphicBuffer->getNativeBuffer()); | |
+ passMetadataBuffer(buffer, mSlots[mCurrentSlot].mGraphicBuffer->handle); | |
(*buffer)->setObserver(this); | |
(*buffer)->add_ref(); | |
diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp | |
index 3039fbb..f07655b 100644 | |
--- a/media/libstagefright/omx/OMXNodeInstance.cpp | |
+++ b/media/libstagefright/omx/OMXNodeInstance.cpp | |
@@ -540,9 +540,6 @@ status_t OMXNodeInstance::storeMetaDataInBuffers_l( | |
OMX_U32 portIndex, OMX_BOOL enable, MetadataBufferType *type) { | |
if (portIndex != kPortIndexInput && portIndex != kPortIndexOutput) { | |
android_errorWriteLog(0x534e4554, "26324358"); | |
- if (type != NULL) { | |
- *type = kMetadataBufferTypeInvalid; | |
- } | |
return BAD_VALUE; | |
} | |
@@ -553,32 +550,26 @@ status_t OMXNodeInstance::storeMetaDataInBuffers_l( | |
OMX_STRING nativeBufferName = const_cast<OMX_STRING>( | |
"OMX.google.android.index.storeANWBufferInMetadata"); | |
MetadataBufferType negotiatedType; | |
- MetadataBufferType requestedType = type != NULL ? *type : kMetadataBufferTypeANWBuffer; | |
StoreMetaDataInBuffersParams params; | |
InitOMXParams(¶ms); | |
params.nPortIndex = portIndex; | |
params.bStoreMetaData = enable; | |
- OMX_ERRORTYPE err = | |
- requestedType == kMetadataBufferTypeANWBuffer | |
- ? OMX_GetExtensionIndex(mHandle, nativeBufferName, &index) | |
- : OMX_ErrorUnsupportedIndex; | |
+ OMX_ERRORTYPE err = OMX_GetExtensionIndex(mHandle, nativeBufferName, &index); | |
OMX_ERRORTYPE xerr = err; | |
if (err == OMX_ErrorNone) { | |
err = OMX_SetParameter(mHandle, index, ¶ms); | |
if (err == OMX_ErrorNone) { | |
name = nativeBufferName; // set name for debugging | |
- negotiatedType = requestedType; | |
+ negotiatedType = kMetadataBufferTypeANWBuffer; | |
} | |
} | |
if (err != OMX_ErrorNone) { | |
err = OMX_GetExtensionIndex(mHandle, name, &index); | |
xerr = err; | |
if (err == OMX_ErrorNone) { | |
- negotiatedType = | |
- requestedType == kMetadataBufferTypeANWBuffer | |
- ? kMetadataBufferTypeGrallocSource : requestedType; | |
+ negotiatedType = kMetadataBufferTypeGrallocSource; | |
err = OMX_SetParameter(mHandle, index, ¶ms); | |
} | |
} | |
@@ -600,9 +591,8 @@ status_t OMXNodeInstance::storeMetaDataInBuffers_l( | |
} | |
mMetadataType[portIndex] = negotiatedType; | |
} | |
- CLOG_CONFIG(storeMetaDataInBuffers, "%s:%u %srequested %s:%d negotiated %s:%d", | |
- portString(portIndex), portIndex, enable ? "" : "UN", | |
- asString(requestedType), requestedType, asString(negotiatedType), negotiatedType); | |
+ CLOG_CONFIG(storeMetaDataInBuffers, "%s:%u negotiated %s:%d", | |
+ portString(portIndex), portIndex, asString(negotiatedType), negotiatedType); | |
if (type != NULL) { | |
*type = negotiatedType; | |
@@ -958,9 +948,6 @@ status_t OMXNodeInstance::createGraphicBufferSource( | |
} | |
// Input buffers will hold meta-data (ANativeWindowBuffer references). | |
- if (type != NULL) { | |
- *type = kMetadataBufferTypeANWBuffer; | |
- } | |
err = storeMetaDataInBuffers_l(portIndex, OMX_TRUE, type); | |
if (err != OK) { | |
return err; | |
diff --git a/media/libstagefright/tests/Android.mk b/media/libstagefright/tests/Android.mk | |
index d1c9d36..111e6c5 100644 | |
--- a/media/libstagefright/tests/Android.mk | |
+++ b/media/libstagefright/tests/Android.mk | |
@@ -30,7 +30,6 @@ LOCAL_C_INCLUDES := \ | |
frameworks/av/media/libstagefright \ | |
frameworks/av/media/libstagefright/include \ | |
$(TOP)/frameworks/native/include/media/openmax \ | |
- $(TOP)/frameworks/native/include/media/hardware \ | |
LOCAL_CFLAGS += -Werror -Wall | |
LOCAL_CLANG := true | |
diff --git a/media/libstagefright/wifi-display/Android.mk b/media/libstagefright/wifi-display/Android.mk | |
index ae4ac90..5bd6e5c 100644 | |
--- a/media/libstagefright/wifi-display/Android.mk | |
+++ b/media/libstagefright/wifi-display/Android.mk | |
@@ -17,7 +17,6 @@ LOCAL_SRC_FILES:= \ | |
LOCAL_C_INCLUDES:= \ | |
$(TOP)/frameworks/av/media/libstagefright \ | |
$(TOP)/frameworks/native/include/media/openmax \ | |
- $(TOP)/frameworks/native/include/media/hardware \ | |
$(TOP)/frameworks/av/media/libstagefright/mpeg2ts \ | |
LOCAL_SHARED_LIBRARIES:= \ | |
diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp | |
index 3587cb9..3ecb52b 100644 | |
--- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp | |
+++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp | |
@@ -948,9 +948,8 @@ status_t WifiDisplaySource::PlaybackSession::addSource( | |
if (isVideo) { | |
format->setString("mime", MEDIA_MIMETYPE_VIDEO_AVC); | |
- format->setInt32( | |
- "android._input-metadata-buffer-type", kMetadataBufferTypeANWBuffer); | |
- format->setInt32("android._store-metadata-in-buffers-output", (mHDCP != NULL) | |
+ format->setInt32("store-metadata-in-buffers", true); | |
+ format->setInt32("store-metadata-in-buffers-output", (mHDCP != NULL) | |
&& (mHDCP->getCaps() & HDCPModule::HDCP_CAPS_ENCRYPT_NATIVE)); | |
format->setInt32( | |
"color-format", OMX_COLOR_FormatAndroidOpaque); | |
-- | |
2.1.4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 6685335e49bb7116091ad72923f48e703afbd533 Mon Sep 17 00:00:00 2001 | |
From: Hamster Tian <[email protected]> | |
Date: Sun, 2 Oct 2016 23:16:46 +0800 | |
Subject: [PATCH 2/4] Revert "Add cameraserver process" | |
This reverts commit 1f36e3b27abfb16bc5e788e253d367eff4886dba. | |
Conflicts: | |
camera/cameraserver/Android.mk | |
camera/cameraserver/cameraserver.rc | |
Change-Id: Ib862bdc051859f37aa138f399c36566f78eb1dbd | |
--- | |
camera/cameraserver/Android.mk | 36 ------------------------------- | |
camera/cameraserver/cameraserver.rc | 6 ------ | |
camera/cameraserver/main_cameraserver.cpp | 35 ------------------------------ | |
media/mediaserver/main_mediaserver.cpp | 2 ++ | |
4 files changed, 2 insertions(+), 77 deletions(-) | |
delete mode 100644 camera/cameraserver/Android.mk | |
delete mode 100644 camera/cameraserver/cameraserver.rc | |
delete mode 100644 camera/cameraserver/main_cameraserver.cpp | |
diff --git a/camera/cameraserver/Android.mk b/camera/cameraserver/Android.mk | |
deleted file mode 100644 | |
index 7e36c5e..0000000 | |
--- a/camera/cameraserver/Android.mk | |
+++ /dev/null | |
@@ -1,36 +0,0 @@ | |
-# Copyright 2015 The Android Open Source Project | |
-# | |
-# Licensed under the Apache License, Version 2.0 (the "License"); | |
-# you may not use this file except in compliance with the License. | |
-# You may obtain a copy of the License at | |
-# | |
-# http://www.apache.org/licenses/LICENSE-2.0 | |
-# | |
-# Unless required by applicable law or agreed to in writing, software | |
-# distributed under the License is distributed on an "AS IS" BASIS, | |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
-# See the License for the specific language governing permissions and | |
-# limitations under the License. | |
- | |
-LOCAL_PATH:= $(call my-dir) | |
- | |
-include $(CLEAR_VARS) | |
- | |
-LOCAL_SRC_FILES:= \ | |
- main_cameraserver.cpp | |
- | |
-LOCAL_SHARED_LIBRARIES := \ | |
- libcameraservice \ | |
- libcutils \ | |
- libutils \ | |
- libbinder \ | |
- libcamera_client | |
- | |
-LOCAL_MODULE:= cameraserver | |
-LOCAL_32_BIT_ONLY := true | |
- | |
-LOCAL_CFLAGS += -Wall -Wextra -Werror -Wno-unused-parameter | |
- | |
-LOCAL_INIT_RC := cameraserver.rc | |
- | |
-include $(BUILD_EXECUTABLE) | |
diff --git a/camera/cameraserver/cameraserver.rc b/camera/cameraserver/cameraserver.rc | |
deleted file mode 100644 | |
index 16d9da8..0000000 | |
--- a/camera/cameraserver/cameraserver.rc | |
+++ /dev/null | |
@@ -1,6 +0,0 @@ | |
-service cameraserver /system/bin/cameraserver | |
- class main | |
- user cameraserver | |
- group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct | |
- ioprio rt 4 | |
- writepid /dev/cpuset/foreground/tasks | |
diff --git a/camera/cameraserver/main_cameraserver.cpp b/camera/cameraserver/main_cameraserver.cpp | |
deleted file mode 100644 | |
index f4be468..0000000 | |
--- a/camera/cameraserver/main_cameraserver.cpp | |
+++ /dev/null | |
@@ -1,35 +0,0 @@ | |
-/* | |
- * Copyright (C) 2015 The Android Open Source Project | |
- * | |
- * Licensed under the Apache License, Version 2.0 (the "License"); | |
- * you may not use this file except in compliance with the License. | |
- * You may obtain a copy of the License at | |
- * | |
- * http://www.apache.org/licenses/LICENSE-2.0 | |
- * | |
- * Unless required by applicable law or agreed to in writing, software | |
- * distributed under the License is distributed on an "AS IS" BASIS, | |
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
- * See the License for the specific language governing permissions and | |
- * limitations under the License. | |
- */ | |
- | |
-#define LOG_TAG "cameraserver" | |
-//#define LOG_NDEBUG 0 | |
- | |
-// from LOCAL_C_INCLUDES | |
-#include "CameraService.h" | |
- | |
-using namespace android; | |
- | |
-int main(int argc __unused, char** argv __unused) | |
-{ | |
- signal(SIGPIPE, SIG_IGN); | |
- | |
- sp<ProcessState> proc(ProcessState::self()); | |
- sp<IServiceManager> sm = defaultServiceManager(); | |
- ALOGI("ServiceManager: %p", sm.get()); | |
- CameraService::instantiate(); | |
- ProcessState::self()->startThreadPool(); | |
- IPCThreadState::self()->joinThreadPool(); | |
-} | |
diff --git a/media/mediaserver/main_mediaserver.cpp b/media/mediaserver/main_mediaserver.cpp | |
index ecddc48..cb96635 100644 | |
--- a/media/mediaserver/main_mediaserver.cpp | |
+++ b/media/mediaserver/main_mediaserver.cpp | |
@@ -28,6 +28,7 @@ | |
#include "IcuUtils.h" | |
#include "MediaPlayerService.h" | |
#include "ResourceManagerService.h" | |
+#include "CameraService.h" | |
using namespace android; | |
@@ -41,6 +42,7 @@ int main(int argc __unused, char **argv __unused) | |
InitializeIcuOrDie(); | |
MediaPlayerService::instantiate(); | |
ResourceManagerService::instantiate(); | |
+ CameraService::instantiate(); | |
registerExtensions(); | |
ProcessState::self()->startThreadPool(); | |
IPCThreadState::self()->joinThreadPool(); | |
-- | |
2.1.4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 7fa9274aac4b499dca08700c52eeab22e6964d1c Mon Sep 17 00:00:00 2001 | |
From: Hamster Tian <[email protected]> | |
Date: Sun, 2 Oct 2016 23:20:40 +0800 | |
Subject: [PATCH 3/4] Mark CameraService as media | |
Change-Id: I34caa513a7d2e019002fafb0f7e8f89bcbf59c26 | |
--- | |
services/camera/libcameraservice/CameraService.cpp | 2 +- | |
1 file changed, 1 insertion(+), 1 deletion(-) | |
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp | |
index e50bff9..602f27e 100644 | |
--- a/services/camera/libcameraservice/CameraService.cpp | |
+++ b/services/camera/libcameraservice/CameraService.cpp | |
@@ -831,7 +831,7 @@ String8 CameraService::toString(std::set<userid_t> intSet) { | |
Status CameraService::initializeShimMetadata(int cameraId) { | |
int uid = getCallingUid(); | |
- String16 internalPackageName("cameraserver"); | |
+ String16 internalPackageName("media"); | |
String8 id = String8::format("%d", cameraId); | |
Status ret = Status::ok(); | |
sp<Client> tmp = nullptr; | |
-- | |
2.1.4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 180e52c6843c3531b06ff9ae731b92663858121b Mon Sep 17 00:00:00 2001 | |
From: Hamster Tian <[email protected]> | |
Date: Mon, 3 Oct 2016 11:53:47 +0800 | |
Subject: [PATCH 4/4] ACodec: Accept kMetadataBufferTypeCameraSource as buffer | |
type | |
Change-Id: I205717b8160636369676fc28e7721737b5148543 | |
--- | |
media/libstagefright/ACodec.cpp | 1 + | |
1 file changed, 1 insertion(+) | |
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp | |
index eac5abb..4f9a8ae 100644 | |
--- a/media/libstagefright/ACodec.cpp | |
+++ b/media/libstagefright/ACodec.cpp | |
@@ -6019,6 +6019,7 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) { | |
status_t err2 = OK; | |
switch (metaType) { | |
+ case kMetadataBufferTypeCameraSource: | |
case kMetadataBufferTypeInvalid: | |
break; | |
#ifndef OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS | |
-- | |
2.1.4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment