1bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray/* 2bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * Copyright (C) 2013 The Android Open Source Project 3bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * 4bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * Licensed under the Apache License, Version 2.0 (the "License"); 5bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * you may not use this file except in compliance with the License. 6bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * You may obtain a copy of the License at 7bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * 8bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * http://www.apache.org/licenses/LICENSE-2.0 9bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * 10bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * Unless required by applicable law or agreed to in writing, software 11bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * distributed under the License is distributed on an "AS IS" BASIS, 12bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * See the License for the specific language governing permissions and 14bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray * limitations under the License. 15bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray */ 16bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 1769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray#include <stdio.h> 18bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#include <hardware/camera3.h> 19bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#include <hardware/gralloc.h> 20bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#include <system/graphics.h> 21555676430e4682514681e95fdc2891a8a09bfe03Alex Ray#include <utils/Mutex.h> 22bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 23bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray//#define LOG_NDEBUG 0 24bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#define LOG_TAG "Stream" 25bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#include <cutils/log.h> 26bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 27bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#define ATRACE_TAG (ATRACE_TAG_CAMERA | ATRACE_TAG_HAL) 28ea80382be17ab288622506475b8f15d9d8ebee80Alex Ray#include <utils/Trace.h> 29bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 30bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray#include "Stream.h" 31bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 32bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Raynamespace default_camera_hal { 33bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 34bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex RayStream::Stream(int id, camera3_stream_t *s) 35bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray : mReuse(false), 36bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mId(id), 37bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mStream(s), 38bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mType(s->stream_type), 39bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mWidth(s->width), 40bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mHeight(s->height), 41bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mFormat(s->format), 42bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mUsage(0), 43bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mMaxBuffers(0), 448a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mRegistered(false), 458a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mBuffers(0), 468a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mNumBuffers(0) 47bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 48bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 49bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 50bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex RayStream::~Stream() 51bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 52555676430e4682514681e95fdc2891a8a09bfe03Alex Ray android::Mutex::Autolock al(mLock); 538a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray unregisterBuffers_L(); 54bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 55bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 56bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Rayvoid Stream::setUsage(uint32_t usage) 57bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 58555676430e4682514681e95fdc2891a8a09bfe03Alex Ray android::Mutex::Autolock al(mLock); 59bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (usage != mUsage) { 60bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mUsage = usage; 612b286dab84b2a0524c1deed67fea92200e598c6eAlex Ray mStream->usage = usage; 628a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray unregisterBuffers_L(); 63bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 64bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 65bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 66bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Rayvoid Stream::setMaxBuffers(uint32_t max_buffers) 67bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 68555676430e4682514681e95fdc2891a8a09bfe03Alex Ray android::Mutex::Autolock al(mLock); 69bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (max_buffers != mMaxBuffers) { 70bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray mMaxBuffers = max_buffers; 712b286dab84b2a0524c1deed67fea92200e598c6eAlex Ray mStream->max_buffers = max_buffers; 728a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray unregisterBuffers_L(); 73bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 74bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 75bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 76bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Rayint Stream::getType() 77bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 78bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return mType; 79bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 80bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 81bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Raybool Stream::isInputType() 82bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 83768216ee2c90ecbbc73121b528e60c82ff668eb5Alex Ray return mType == CAMERA3_STREAM_INPUT || 84768216ee2c90ecbbc73121b528e60c82ff668eb5Alex Ray mType == CAMERA3_STREAM_BIDIRECTIONAL; 85bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 86bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 87bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Raybool Stream::isOutputType() 88bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 89768216ee2c90ecbbc73121b528e60c82ff668eb5Alex Ray return mType == CAMERA3_STREAM_OUTPUT || 90768216ee2c90ecbbc73121b528e60c82ff668eb5Alex Ray mType == CAMERA3_STREAM_BIDIRECTIONAL; 91bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 92bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 9369f1f9166adea3579353fd3bc14b6a23c43de024Alex Rayconst char* Stream::typeToString(int type) 9469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray{ 9569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray switch (type) { 9669f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case CAMERA3_STREAM_INPUT: 9769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "CAMERA3_STREAM_INPUT"; 9869f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case CAMERA3_STREAM_OUTPUT: 9969f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "CAMERA3_STREAM_OUTPUT"; 10069f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case CAMERA3_STREAM_BIDIRECTIONAL: 10169f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "CAMERA3_STREAM_BIDIRECTIONAL"; 10269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray } 10369f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "Invalid stream type!"; 10469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray} 10569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray 10669f1f9166adea3579353fd3bc14b6a23c43de024Alex Rayconst char* Stream::formatToString(int format) 10769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray{ 10869f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray // See <system/graphics.h> for full list 10969f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray switch (format) { 11069f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_BGRA_8888: 11169f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "BGRA 8888"; 11269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_RGBA_8888: 11369f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "RGBA 8888"; 11469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_RGBX_8888: 11569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "RGBX 8888"; 11669f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_RGB_888: 11769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "RGB 888"; 11869f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_RGB_565: 11969f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "RGB 565"; 12069f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_sRGB_A_8888: 12169f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "sRGB A 8888"; 12269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_sRGB_X_8888: 12369f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "sRGB B 8888"; 12469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_Y8: 12569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "Y8"; 12669f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_Y16: 12769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "Y16"; 12869f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_YV12: 12969f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "YV12"; 13069f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_YCbCr_422_SP: 13169f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "NV16"; 13269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_YCrCb_420_SP: 13369f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "NV21"; 13469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_YCbCr_422_I: 13569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "YUY2"; 13669f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_RAW_SENSOR: 13769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "RAW SENSOR"; 13869f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_BLOB: 13969f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "BLOB"; 14069f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: 14169f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "IMPLEMENTATION DEFINED"; 14269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray case HAL_PIXEL_FORMAT_YCbCr_420_888: 14369f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "FLEXIBLE YCbCr 420 888"; 14469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray } 14569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray return "Invalid stream format!"; 14669f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray} 14769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray 1488a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Raybool Stream::isRegistered() 1498a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray{ 1508a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray return mRegistered; 1518a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray} 1528a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 153bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Raybool Stream::isValidReuseStream(int id, camera3_stream_t *s) 154bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray{ 155bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (id != mId) { 156bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray ALOGE("%s:%d: Invalid camera id for reuse. Got %d expect %d", 157bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray __func__, mId, id, mId); 158bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return false; 159bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 160bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (s != mStream) { 161bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray ALOGE("%s:%d: Invalid stream handle for reuse. Got %p expect %p", 162bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray __func__, mId, s, mStream); 163bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return false; 164bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 165bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (s->stream_type != mType) { 16669f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray ALOGE("%s:%d: Mismatched type in reused stream. Got %s(%d) " 16769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray "expect %s(%d)", __func__, mId, typeToString(s->stream_type), 16869f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray s->stream_type, typeToString(mType), mType); 169bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return false; 170bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 171bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (s->format != mFormat) { 17269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray ALOGE("%s:%d: Mismatched format in reused stream. Got %s(%d) " 17369f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray "expect %s(%d)", __func__, mId, formatToString(s->format), 17469f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray s->format, formatToString(mFormat), mFormat); 175bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return false; 176bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 177bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (s->width != mWidth) { 178bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray ALOGE("%s:%d: Mismatched width in reused stream. Got %d expect %d", 179bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray __func__, mId, s->width, mWidth); 180bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return false; 181bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 182bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray if (s->height != mHeight) { 183bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray ALOGE("%s:%d: Mismatched height in reused stream. Got %d expect %d", 184bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray __func__, mId, s->height, mHeight); 185bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return false; 186bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray } 187bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray return true; 188bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} 189bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray 1908a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Rayint Stream::registerBuffers(const camera3_stream_buffer_set_t *buf_set) 1918a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray{ 192ea80382be17ab288622506475b8f15d9d8ebee80Alex Ray ATRACE_CALL(); 193555676430e4682514681e95fdc2891a8a09bfe03Alex Ray android::Mutex::Autolock al(mLock); 1948a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 1958a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray if (buf_set->stream != mStream) { 1968a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray ALOGE("%s:%d: Buffer set for invalid stream. Got %p expect %p", 1978a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray __func__, mId, buf_set->stream, mStream); 1988a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray return -EINVAL; 1998a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray } 2008a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 2018a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mNumBuffers = buf_set->num_buffers; 2028a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mBuffers = new buffer_handle_t*[mNumBuffers]; 2038a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 2048a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray for (unsigned int i = 0; i < mNumBuffers; i++) { 2058a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray ALOGV("%s:%d: Registering buffer %p", __func__, mId, 2068a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray buf_set->buffers[i]); 2078a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mBuffers[i] = buf_set->buffers[i]; 2088a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray // TODO: register buffers with hw, handle error cases 2098a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray } 2108a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mRegistered = true; 2118a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 2128a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray return 0; 2138a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray} 2148a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 215555676430e4682514681e95fdc2891a8a09bfe03Alex Ray// This must only be called with mLock held 2168a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Rayvoid Stream::unregisterBuffers_L() 2178a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray{ 2188a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mRegistered = false; 2198a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray mNumBuffers = 0; 2208a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray delete [] mBuffers; 2218a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray // TODO: unregister buffers from hw 2228a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray} 2238a8f86bbe6cd0d62c81b7f0f7414b74e1aa20f37Alex Ray 22469f1f9166adea3579353fd3bc14b6a23c43de024Alex Rayvoid Stream::dump(int fd) 22569f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray{ 226555676430e4682514681e95fdc2891a8a09bfe03Alex Ray android::Mutex::Autolock al(mLock); 22769f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray 2280d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Stream ID: %d (%p)\n", mId, mStream); 2290d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Stream Type: %s (%d)\n", typeToString(mType), mType); 2300d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Width: %"PRIu32" Height: %"PRIu32"\n", mWidth, mHeight); 2310d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Stream Format: %s (%d)", formatToString(mFormat), mFormat); 23269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray // ToDo: prettyprint usage mask flags 2330d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Gralloc Usage Mask: %#"PRIx32"\n", mUsage); 2340d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Max Buffer Count: %"PRIu32"\n", mMaxBuffers); 2350d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Buffers Registered: %s\n", mRegistered ? "true" : "false"); 2360d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Number of Buffers: %"PRIu32"\n", mNumBuffers); 237a82f456c387cb6ff6c5aab7c930a7a61c36ed8baSasha Levitskiy for (uint32_t i = 0; i < mNumBuffers; i++) { 2380d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes dprintf(fd, "Buffer %"PRIu32"/%"PRIu32": %p\n", i, mNumBuffers, 2390d1c2a49d675945a34baca364d68c396f03cc3e8Elliott Hughes mBuffers[i]); 24069f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray } 24169f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray} 24269f1f9166adea3579353fd3bc14b6a23c43de024Alex Ray 243bcaf788434b0f4fcc4f194ca01d94cd59eb912a9Alex Ray} // namespace default_camera_hal 244