diff options
author | Jessica Wagantall <jwagantall@cyngn.com> | 2016-08-02 11:02:17 -0700 |
---|---|---|
committer | Jessica Wagantall <jwagantall@cyngn.com> | 2016-08-02 11:37:41 -0700 |
commit | aa98968601ddb19d92790bf76bddd351dbc4c640 (patch) | |
tree | 465e1907f96ee6a67504dada03cff5c2a3326b01 /media/libstagefright/CameraSource.cpp | |
parent | a5ec3545f879e882ed5397707f65a4757f7232d5 (diff) | |
parent | 1f24c730ab6ca5aff1e3137b340b8aeaeda4bdbc (diff) | |
download | frameworks_av-aa98968601ddb19d92790bf76bddd351dbc4c640.zip frameworks_av-aa98968601ddb19d92790bf76bddd351dbc4c640.tar.gz frameworks_av-aa98968601ddb19d92790bf76bddd351dbc4c640.tar.bz2 |
Merge tag 'android-6.0.1_r61' into HEAD
Android 6.0.1 Release 61 (MOB30Z)
Change-Id: Ic86e42d5fb8f81fe5c4f58d2e76852829c609760
Diffstat (limited to 'media/libstagefright/CameraSource.cpp')
-rw-r--r-- | media/libstagefright/CameraSource.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index 1f26872..4caee78 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -27,8 +27,10 @@ #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MetaData.h> +#include <media/hardware/HardwareAPI.h> #include <camera/Camera.h> #include <camera/CameraParameters.h> +#include <camera/ICameraRecordingProxy.h> #include <gui/Surface.h> #include <utils/String8.h> #include <cutils/properties.h> @@ -850,6 +852,8 @@ void CameraSource::releaseQueuedFrames() { List<sp<IMemory> >::iterator it; while (!mFramesReceived.empty()) { it = mFramesReceived.begin(); + // b/28466701 + adjustOutgoingANWBuffer(it->get()); releaseRecordingFrame(*it); mFramesReceived.erase(it); ++mNumFramesDropped; @@ -870,6 +874,9 @@ void CameraSource::signalBufferReturned(MediaBuffer *buffer) { for (List<sp<IMemory> >::iterator it = mFramesBeingEncoded.begin(); it != mFramesBeingEncoded.end(); ++it) { if ((*it)->pointer() == buffer->data()) { + // b/28466701 + adjustOutgoingANWBuffer(it->get()); + releaseOneRecordingFrame((*it)); mFramesBeingEncoded.erase(it); ++mNumFramesEncoded; @@ -988,6 +995,10 @@ void CameraSource::dataCallbackTimestamp(int64_t timestampUs, ++mNumFramesReceived; CHECK(data != NULL && data->size() > 0); + + // b/28466701 + adjustIncomingANWBuffer(data.get()); + mFramesReceived.push_back(data); int64_t timeUs = mStartTimeUs + (timestampUs - mFirstFrameTimeUs); mFrameTimes.push_back(timeUs); @@ -1001,6 +1012,24 @@ bool CameraSource::isMetaDataStoredInVideoBuffers() const { return mIsMetaDataStoredInVideoBuffers; } +void CameraSource::adjustIncomingANWBuffer(IMemory* data) { + VideoNativeMetadata *payload = + reinterpret_cast<VideoNativeMetadata*>(data->pointer()); + if (payload->eType == kMetadataBufferTypeANWBuffer) { + payload->pBuffer = (ANativeWindowBuffer*)(((uint8_t*)payload->pBuffer) + + ICameraRecordingProxy::getCommonBaseAddress()); + } +} + +void CameraSource::adjustOutgoingANWBuffer(IMemory* data) { + VideoNativeMetadata *payload = + reinterpret_cast<VideoNativeMetadata*>(data->pointer()); + if (payload->eType == kMetadataBufferTypeANWBuffer) { + payload->pBuffer = (ANativeWindowBuffer*)(((uint8_t*)payload->pBuffer) - + ICameraRecordingProxy::getCommonBaseAddress()); + } +} + CameraSource::ProxyListener::ProxyListener(const sp<CameraSource>& source) { mSource = source; } |