#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>
List<sp<IMemory> >::iterator it;
while (!mFramesReceived.empty()) {
it = mFramesReceived.begin();
+ // b/28466701
+ adjustOutgoingANWBuffer(it->get());
releaseRecordingFrame(*it);
mFramesReceived.erase(it);
++mNumFramesDropped;
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;
++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);
return mIsMetaDataStoredInVideoBuffers;
}
+void CameraSource::adjustIncomingANWBuffer(IMemory* data) {
+ uint8_t *payload =
+ reinterpret_cast<uint8_t*>(data->pointer());
+ if (*(uint32_t*)payload == kMetadataBufferTypeGrallocSource) {
+ buffer_handle_t* pBuffer = (buffer_handle_t*)(payload + 4);
+ *pBuffer = (buffer_handle_t)((uint8_t*)(*pBuffer) +
+ ICameraRecordingProxy::getCommonBaseAddress());
+ }
+}
+
+void CameraSource::adjustOutgoingANWBuffer(IMemory* data) {
+ uint8_t *payload =
+ reinterpret_cast<uint8_t*>(data->pointer());
+ if (*(uint32_t*)payload == kMetadataBufferTypeGrallocSource) {
+ buffer_handle_t* pBuffer = (buffer_handle_t*)(payload + 4);
+ *pBuffer = (buffer_handle_t)((uint8_t*)(*pBuffer) -
+ ICameraRecordingProxy::getCommonBaseAddress());
+ }
+}
+
CameraSource::ProxyListener::ProxyListener(const sp<CameraSource>& source) {
mSource = source;
}
#include <utils/Trace.h>
#include <gui/Surface.h>
#include <media/hardware/MetadataBufferType.h>
+#include <camera/ICameraRecordingProxy.h>
#include "common/CameraDeviceBase.h"
#include "api1/Camera2Client.h"
uint8_t *data = (uint8_t*)heap->getBase() + offset;
uint32_t type = kMetadataBufferTypeGrallocSource;
*((uint32_t*)data) = type;
- *((buffer_handle_t*)(data + 4)) = imgBuffer.mGraphicBuffer->handle;
+ buffer_handle_t* pBuffer = (buffer_handle_t*)(data + 4);
+ *pBuffer = (buffer_handle_t)(
+ (uint8_t*)imgBuffer.mGraphicBuffer->handle -
+ ICameraRecordingProxy::getCommonBaseAddress());
ALOGVV("%s: Camera %d: Sending out buffer_handle_t %p",
__FUNCTION__, mId,
imgBuffer.mGraphicBuffer->handle);
}
// Release the buffer back to the recording queue
-
- buffer_handle_t imgHandle = *(buffer_handle_t*)(data + 4);
+ // b/28466701
+ buffer_handle_t* pBuffer = (buffer_handle_t*)(data + 4);
+ buffer_handle_t imgHandle = (buffer_handle_t)((uint8_t*)(*pBuffer) +
+ ICameraRecordingProxy::getCommonBaseAddress());
size_t itemIndex;
for (itemIndex = 0; itemIndex < mRecordingBuffers.size(); itemIndex++) {