1 /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 */ 29 30 #define LOG_TAG "QCameraBufferMaps" 31 32 // System dependencies 33 #include <utils/Errors.h> 34 #include <stdlib.h> 35 #include <string.h> 36 37 // Camera dependencies 38 #include "QCameraBufferMaps.h" 39 40 using namespace android; 41 42 namespace qcamera { 43 44 /*=========================================================================== 45 * FUNCTION : QCameraBufferMaps 46 * 47 * DESCRIPTION: default constructor of QCameraBufferMaps 48 * 49 * PARAMETERS : None 50 * 51 * RETURN : None 52 *==========================================================================*/ 53 QCameraBufferMaps::QCameraBufferMaps() 54 { 55 memset(&mBufMapList, 0, sizeof(mBufMapList)); 56 } 57 58 /*=========================================================================== 59 * FUNCTION : QCameraBufferMaps 60 * 61 * DESCRIPTION: copy constructor of QCameraBufferMaps 62 * 63 * PARAMETERS : 64 * @pBufferMaps : object to be copied 65 * 66 * RETURN : None 67 *==========================================================================*/ 68 QCameraBufferMaps::QCameraBufferMaps(const QCameraBufferMaps& pBufferMaps) 69 { 70 memcpy(&mBufMapList, &pBufferMaps.mBufMapList, sizeof(mBufMapList)); 71 } 72 73 /*=========================================================================== 74 * FUNCTION : QCameraBufferMaps 75 * 76 * DESCRIPTION: constructor of QCameraBufferMaps 77 * 78 * PARAMETERS : 79 * @pBufMapList : list of buffer maps 80 * 81 * RETURN : None 82 *==========================================================================*/ 83 QCameraBufferMaps::QCameraBufferMaps(const cam_buf_map_type_list& pBufMapList) 84 { 85 memcpy(&mBufMapList, &pBufMapList, sizeof(mBufMapList)); 86 } 87 88 /*=========================================================================== 89 * FUNCTION : QCameraBufferMaps 90 * 91 * DESCRIPTION: constructor of QCameraBufferMaps 92 * 93 * PARAMETERS : 94 * @pType : Type of buffer 95 * @pStreamId : Stream id 96 * @pFrameIndex : Frame index 97 * @pPlaneIndex : Plane index 98 * @pCookie : Could be job_id to identify mapping job 99 * @pFd : Origin file descriptor 100 * @pSize : Size of the buffer 101 * 102 * RETURN : None 103 *==========================================================================*/ 104 QCameraBufferMaps::QCameraBufferMaps(cam_mapping_buf_type pType, 105 uint32_t pStreamId, 106 uint32_t pFrameIndex, 107 int32_t pPlaneIndex, 108 uint32_t pCookie, 109 int32_t pFd, 110 size_t pSize, 111 void *buffer) 112 { 113 memset(&mBufMapList, 0, sizeof(mBufMapList)); 114 enqueue(pType, pStreamId, pFrameIndex, pPlaneIndex, pCookie, pFd, pSize, buffer); 115 } 116 117 /*=========================================================================== 118 * FUNCTION : ~QCameraBufferMaps 119 * 120 * DESCRIPTION: destructor of QCameraBufferMaps 121 * 122 * PARAMETERS : None 123 * 124 * RETURN : None 125 *==========================================================================*/ 126 QCameraBufferMaps::~QCameraBufferMaps() 127 { 128 } 129 130 /*=========================================================================== 131 * FUNCTION : operator= 132 * 133 * DESCRIPTION: assignment operator of QCameraBufferMaps 134 * 135 * PARAMETERS : 136 * @pBufferMaps : object to be copied 137 * 138 * RETURN : *this, with updated contents 139 *==========================================================================*/ 140 QCameraBufferMaps& QCameraBufferMaps::operator=(const QCameraBufferMaps& pBufferMaps) 141 { 142 if (&pBufferMaps != this) { 143 memcpy(&mBufMapList, &pBufferMaps.mBufMapList, sizeof(mBufMapList)); 144 } 145 return *this; 146 } 147 148 /*=========================================================================== 149 * FUNCTION : enqueue 150 * 151 * DESCRIPTION: Add a buffer map 152 * 153 * PARAMETERS : 154 * @pType : Type of buffer 155 * @pStreamId : Stream id 156 * @pFrameIndex : Frame index 157 * @pPlaneIndex : Plane index 158 * @pCookie : Could be job_id to identify mapping job 159 * @pFd : Origin file descriptor 160 * @pSize : Size of the buffer 161 * 162 * RETURN : int32_t type of status 163 * NO_ERROR -- success 164 * none-zero failure code 165 *==========================================================================*/ 166 uint32_t QCameraBufferMaps::enqueue(cam_mapping_buf_type pType, 167 uint32_t pStreamId, 168 uint32_t pFrameIndex, 169 int32_t pPlaneIndex, 170 uint32_t pCookie, 171 int32_t pFd, 172 size_t pSize, 173 void *buffer) 174 { 175 uint32_t pos = mBufMapList.length++; 176 mBufMapList.buf_maps[pos].type = pType; 177 mBufMapList.buf_maps[pos].stream_id = pStreamId; 178 mBufMapList.buf_maps[pos].frame_idx = pFrameIndex; 179 mBufMapList.buf_maps[pos].plane_idx = pPlaneIndex; 180 mBufMapList.buf_maps[pos].cookie = pCookie; 181 mBufMapList.buf_maps[pos].fd = pFd; 182 mBufMapList.buf_maps[pos].size = pSize; 183 mBufMapList.buf_maps[pos].buffer = buffer; 184 185 return NO_ERROR; 186 } 187 188 /*=========================================================================== 189 * FUNCTION : getCamBufMapList 190 * 191 * DESCRIPTION: Populate the list 192 * 193 * PARAMETERS : 194 * @pBufMapList : [output] the list of buffer maps 195 * 196 * RETURN : int32_t type of status 197 * NO_ERROR -- success 198 * none-zero failure code 199 *==========================================================================*/ 200 uint32_t QCameraBufferMaps::getCamBufMapList(cam_buf_map_type_list& pBufMapList) const 201 { 202 memcpy(&pBufMapList, &mBufMapList, sizeof(pBufMapList)); 203 204 return NO_ERROR; 205 } 206 207 /*=========================================================================== 208 * FUNCTION : makeSingletonBufMapList 209 * 210 * DESCRIPTION: Create a buffer map list of a single element 211 * 212 * PARAMETERS : 213 * @pType : Type of buffer 214 * @pStreamId : Stream id 215 * @pFrameIndex : Frame index 216 * @pPlaneIndex : Plane index 217 * @pCookie : Could be job_id to identify mapping job 218 * @pFd : Origin file descriptor 219 * @pSize : Size of the buffer 220 * @pBufMapList : [output] the list of buffer maps 221 * 222 * RETURN : int32_t type of status 223 * NO_ERROR -- success 224 * none-zero failure code 225 *==========================================================================*/ 226 uint32_t QCameraBufferMaps::makeSingletonBufMapList(cam_mapping_buf_type pType, 227 uint32_t pStreamId, 228 uint32_t pFrameIndex, 229 int32_t pPlaneIndex, 230 uint32_t pCookie, 231 int32_t pFd, 232 size_t pSize, 233 cam_buf_map_type_list& pBufMapList, 234 void *buffer) 235 { 236 uint32_t rc = NO_ERROR; 237 238 QCameraBufferMaps bufferMaps(pType, 239 pStreamId, 240 pFrameIndex, 241 pPlaneIndex, 242 pCookie, 243 pFd, 244 pSize, 245 buffer); 246 rc = bufferMaps.getCamBufMapList(pBufMapList); 247 248 return rc; 249 } 250 251 }; // namespace qcamera 252