| /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer in the documentation and/or other materials provided |
| * with the distribution. |
| * * Neither the name of The Linux Foundation nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED |
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
| * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
| * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
| * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| */ |
| |
| #define LOG_TAG "QCameraBufferMaps" |
| |
| // System dependencies |
| #include <utils/Errors.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| // Camera dependencies |
| #include "QCameraBufferMaps.h" |
| |
| using namespace android; |
| |
| namespace qcamera { |
| |
| /*=========================================================================== |
| * FUNCTION : QCameraBufferMaps |
| * |
| * DESCRIPTION: default constructor of QCameraBufferMaps |
| * |
| * PARAMETERS : None |
| * |
| * RETURN : None |
| *==========================================================================*/ |
| QCameraBufferMaps::QCameraBufferMaps() |
| { |
| memset(&mBufMapList, 0, sizeof(mBufMapList)); |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : QCameraBufferMaps |
| * |
| * DESCRIPTION: copy constructor of QCameraBufferMaps |
| * |
| * PARAMETERS : |
| * @pBufferMaps : object to be copied |
| * |
| * RETURN : None |
| *==========================================================================*/ |
| QCameraBufferMaps::QCameraBufferMaps(const QCameraBufferMaps& pBufferMaps) |
| { |
| memcpy(&mBufMapList, &pBufferMaps.mBufMapList, sizeof(mBufMapList)); |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : QCameraBufferMaps |
| * |
| * DESCRIPTION: constructor of QCameraBufferMaps |
| * |
| * PARAMETERS : |
| * @pBufMapList : list of buffer maps |
| * |
| * RETURN : None |
| *==========================================================================*/ |
| QCameraBufferMaps::QCameraBufferMaps(const cam_buf_map_type_list& pBufMapList) |
| { |
| memcpy(&mBufMapList, &pBufMapList, sizeof(mBufMapList)); |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : QCameraBufferMaps |
| * |
| * DESCRIPTION: constructor of QCameraBufferMaps |
| * |
| * PARAMETERS : |
| * @pType : Type of buffer |
| * @pStreamId : Stream id |
| * @pFrameIndex : Frame index |
| * @pPlaneIndex : Plane index |
| * @pCookie : Could be job_id to identify mapping job |
| * @pFd : Origin file descriptor |
| * @pSize : Size of the buffer |
| * |
| * RETURN : None |
| *==========================================================================*/ |
| QCameraBufferMaps::QCameraBufferMaps(cam_mapping_buf_type pType, |
| uint32_t pStreamId, |
| uint32_t pFrameIndex, |
| int32_t pPlaneIndex, |
| uint32_t pCookie, |
| int32_t pFd, |
| size_t pSize, |
| void *buffer) |
| { |
| memset(&mBufMapList, 0, sizeof(mBufMapList)); |
| enqueue(pType, pStreamId, pFrameIndex, pPlaneIndex, pCookie, pFd, pSize, buffer); |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : ~QCameraBufferMaps |
| * |
| * DESCRIPTION: destructor of QCameraBufferMaps |
| * |
| * PARAMETERS : None |
| * |
| * RETURN : None |
| *==========================================================================*/ |
| QCameraBufferMaps::~QCameraBufferMaps() |
| { |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : operator= |
| * |
| * DESCRIPTION: assignment operator of QCameraBufferMaps |
| * |
| * PARAMETERS : |
| * @pBufferMaps : object to be copied |
| * |
| * RETURN : *this, with updated contents |
| *==========================================================================*/ |
| QCameraBufferMaps& QCameraBufferMaps::operator=(const QCameraBufferMaps& pBufferMaps) |
| { |
| if (&pBufferMaps != this) { |
| memcpy(&mBufMapList, &pBufferMaps.mBufMapList, sizeof(mBufMapList)); |
| } |
| return *this; |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : enqueue |
| * |
| * DESCRIPTION: Add a buffer map |
| * |
| * PARAMETERS : |
| * @pType : Type of buffer |
| * @pStreamId : Stream id |
| * @pFrameIndex : Frame index |
| * @pPlaneIndex : Plane index |
| * @pCookie : Could be job_id to identify mapping job |
| * @pFd : Origin file descriptor |
| * @pSize : Size of the buffer |
| * |
| * RETURN : int32_t type of status |
| * NO_ERROR -- success |
| * none-zero failure code |
| *==========================================================================*/ |
| uint32_t QCameraBufferMaps::enqueue(cam_mapping_buf_type pType, |
| uint32_t pStreamId, |
| uint32_t pFrameIndex, |
| int32_t pPlaneIndex, |
| uint32_t pCookie, |
| int32_t pFd, |
| size_t pSize, |
| void *buffer) |
| { |
| uint32_t pos = mBufMapList.length++; |
| mBufMapList.buf_maps[pos].type = pType; |
| mBufMapList.buf_maps[pos].stream_id = pStreamId; |
| mBufMapList.buf_maps[pos].frame_idx = pFrameIndex; |
| mBufMapList.buf_maps[pos].plane_idx = pPlaneIndex; |
| mBufMapList.buf_maps[pos].cookie = pCookie; |
| mBufMapList.buf_maps[pos].fd = pFd; |
| mBufMapList.buf_maps[pos].size = pSize; |
| mBufMapList.buf_maps[pos].buffer = buffer; |
| |
| return NO_ERROR; |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : getCamBufMapList |
| * |
| * DESCRIPTION: Populate the list |
| * |
| * PARAMETERS : |
| * @pBufMapList : [output] the list of buffer maps |
| * |
| * RETURN : int32_t type of status |
| * NO_ERROR -- success |
| * none-zero failure code |
| *==========================================================================*/ |
| uint32_t QCameraBufferMaps::getCamBufMapList(cam_buf_map_type_list& pBufMapList) const |
| { |
| memcpy(&pBufMapList, &mBufMapList, sizeof(pBufMapList)); |
| |
| return NO_ERROR; |
| } |
| |
| /*=========================================================================== |
| * FUNCTION : makeSingletonBufMapList |
| * |
| * DESCRIPTION: Create a buffer map list of a single element |
| * |
| * PARAMETERS : |
| * @pType : Type of buffer |
| * @pStreamId : Stream id |
| * @pFrameIndex : Frame index |
| * @pPlaneIndex : Plane index |
| * @pCookie : Could be job_id to identify mapping job |
| * @pFd : Origin file descriptor |
| * @pSize : Size of the buffer |
| * @pBufMapList : [output] the list of buffer maps |
| * |
| * RETURN : int32_t type of status |
| * NO_ERROR -- success |
| * none-zero failure code |
| *==========================================================================*/ |
| uint32_t QCameraBufferMaps::makeSingletonBufMapList(cam_mapping_buf_type pType, |
| uint32_t pStreamId, |
| uint32_t pFrameIndex, |
| int32_t pPlaneIndex, |
| uint32_t pCookie, |
| int32_t pFd, |
| size_t pSize, |
| cam_buf_map_type_list& pBufMapList, |
| void *buffer) |
| { |
| uint32_t rc = NO_ERROR; |
| |
| QCameraBufferMaps bufferMaps(pType, |
| pStreamId, |
| pFrameIndex, |
| pPlaneIndex, |
| pCookie, |
| pFd, |
| pSize, |
| buffer); |
| rc = bufferMaps.getCamBufMapList(pBufMapList); |
| |
| return rc; |
| } |
| |
| }; // namespace qcamera |