Camera3InputStream.cpp revision 5e1f08b3917ac7900f8a11118afb7e8bf3e61c64
18be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala/* 28be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * Copyright (C) 2013 The Android Open Source Project 38be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * 48be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 58be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * you may not use this file except in compliance with the License. 68be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * You may obtain a copy of the License at 78be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * 88be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 98be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * 108be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 118be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 128be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * See the License for the specific language governing permissions and 148be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala * limitations under the License. 158be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala */ 168be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 178be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala#define LOG_TAG "Camera3-InputStream" 188be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala#define ATRACE_TAG ATRACE_TAG_CAMERA 198be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala//#define LOG_NDEBUG 0 208be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 218be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala#include <utils/Log.h> 228be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala#include <utils/Trace.h> 238be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala#include "Camera3InputStream.h" 248be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 258be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvalanamespace android { 268be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 278be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvalanamespace camera3 { 288be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 298be20f50711a94426f1394ec113672e41c1224e8Eino-Ville TalvalaCamera3InputStream::Camera3InputStream(int id, 308be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala uint32_t width, uint32_t height, int format) : 31ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin Camera3IOStreamBase(id, CAMERA3_STREAM_INPUT, width, height, 32ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin /*maxSize*/0, format) { 330776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 340776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (format == HAL_PIXEL_FORMAT_BLOB) { 350776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Bad format, BLOB not supported", __FUNCTION__); 360776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mState = STATE_ERROR; 370776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 380776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin} 390776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 400776a14513300f04dc5c1d2f89c4156576b8b8edIgor MurashkinCamera3InputStream::~Camera3InputStream() { 410776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin disconnectLocked(); 428be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 438be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 440776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkinstatus_t Camera3InputStream::getInputBufferLocked( 450776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin camera3_stream_buffer *buffer) { 460776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ATRACE_CALL(); 470776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin status_t res; 480776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 490776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin // FIXME: will not work in (re-)registration 500776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (mState == STATE_IN_CONFIG || mState == STATE_IN_RECONFIG) { 510776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: Buffer registration for input streams" 520776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin " not implemented (state %d)", 530776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin __FUNCTION__, mId, mState); 540776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return INVALID_OPERATION; 550776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 560776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 57ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin if ((res = getBufferPreconditionCheckLocked()) != OK) { 58ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin return res; 590776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 600776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 610776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ANativeWindowBuffer* anb; 620776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin int fenceFd; 630776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 640776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin assert(mConsumer != 0); 650776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 660776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin BufferItem bufferItem; 670776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin res = mConsumer->acquireBuffer(&bufferItem, /*waitForFence*/false); 680776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 690776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (res != OK) { 700776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: Can't acquire next output buffer: %s (%d)", 710776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin __FUNCTION__, mId, strerror(-res), res); 720776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return res; 730776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 740776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 750776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin anb = bufferItem.mGraphicBuffer->getNativeBuffer(); 760776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin assert(anb != NULL); 770776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin fenceFd = bufferItem.mFence->dup(); 78ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin 790776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin /** 800776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin * FenceFD now owned by HAL except in case of error, 810776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin * in which case we reassign it to acquire_fence 820776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin */ 83ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin handoutBufferLocked(*buffer, &(anb->handle), /*acquireFence*/fenceFd, 84ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin /*releaseFence*/-1, CAMERA3_BUFFER_STATUS_OK); 850776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mBuffersInFlight.push_back(bufferItem); 860776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 870776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return OK; 888be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 898be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 90ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkinstatus_t Camera3InputStream::returnBufferCheckedLocked( 91ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin const camera3_stream_buffer &buffer, 92ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin nsecs_t timestamp, 93ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin bool output, 94ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin /*out*/ 95ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin sp<Fence> *releaseFenceOut) { 960776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 97ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin (void)timestamp; 98ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin (void)output; 99ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin ALOG_ASSERT(!output, "Expected output to be false"); 100ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin 101ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin status_t res; 1020776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1030776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin bool bufferFound = false; 1040776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin BufferItem bufferItem; 1050776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin { 1060776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin // Find the buffer we are returning 1070776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin Vector<BufferItem>::iterator it, end; 1080776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin for (it = mBuffersInFlight.begin(), end = mBuffersInFlight.end(); 1090776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin it != end; 1100776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ++it) { 1110776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1120776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin const BufferItem& tmp = *it; 1130776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ANativeWindowBuffer *anb = tmp.mGraphicBuffer->getNativeBuffer(); 1140776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (anb != NULL && &(anb->handle) == buffer.buffer) { 1150776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin bufferFound = true; 1160776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin bufferItem = tmp; 1170776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mBuffersInFlight.erase(it); 1180776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mDequeuedBufferCount--; 1190776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1200776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1210776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1220776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (!bufferFound) { 1230776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: Can't return buffer that wasn't sent to HAL", 1240776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin __FUNCTION__, mId); 1250776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return INVALID_OPERATION; 1260776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1270776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1280776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { 1290776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (buffer.release_fence != -1) { 1300776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: HAL should not set release_fence(%d) when " 1310776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin "there is an error", __FUNCTION__, mId, buffer.release_fence); 1320776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin close(buffer.release_fence); 1330776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1340776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1350776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin /** 1360776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin * Reassign release fence as the acquire fence incase of error 1370776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin */ 1380776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin const_cast<camera3_stream_buffer*>(&buffer)->release_fence = 1390776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin buffer.acquire_fence; 1400776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1410776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1420776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin /** 1430776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin * Unconditionally return buffer to the buffer queue. 1440776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin * - Fwk takes over the release_fence ownership 1450776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin */ 1460776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin sp<Fence> releaseFence = new Fence(buffer.release_fence); 1470776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin res = mConsumer->releaseBuffer(bufferItem, releaseFence); 1480776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (res != OK) { 1490776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: Error releasing buffer back to buffer queue:" 1500776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin " %s (%d)", __FUNCTION__, mId, strerror(-res), res); 1510776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return res; 1520776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1530776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 154ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin *releaseFenceOut = releaseFence; 1550776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1560776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return OK; 1578be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 1588be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 159ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkinstatus_t Camera3InputStream::returnInputBufferLocked( 160ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin const camera3_stream_buffer &buffer) { 161ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin ATRACE_CALL(); 1620776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 163ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin return returnAnyBufferLocked(buffer, /*timestamp*/0, /*output*/false); 1648be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 1658be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 1668be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvalastatus_t Camera3InputStream::disconnectLocked() { 1670776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 168ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin status_t res; 169ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin 170ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin if ((res = Camera3IOStreamBase::disconnectLocked()) != OK) { 171ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin return res; 1720776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 1730776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1740776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin assert(mBuffersInFlight.size() == 0); 1750776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1760776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin /** 1770776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin * no-op since we can't disconnect the producer from the consumer-side 1780776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin */ 1790776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 180ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin mState = (mState == STATE_IN_RECONFIG) ? STATE_IN_CONFIG 181ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin : STATE_CONSTRUCTED; 1820776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return OK; 1838be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 1848be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 1858be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvalasp<IGraphicBufferProducer> Camera3InputStream::getProducerInterface() const { 1868be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala return mConsumer->getProducerInterface(); 1878be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 1888be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 1898be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvalavoid Camera3InputStream::dump(int fd, const Vector<String16> &args) const { 1908be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala (void) args; 1910776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin String8 lines; 1920776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin lines.appendFormat(" Stream[%d]: Input\n", mId); 1930776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin write(fd, lines.string(), lines.size()); 194ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin 195ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin Camera3IOStreamBase::dump(fd, args); 1960776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin} 1970776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 1980776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkinstatus_t Camera3InputStream::configureQueueLocked() { 1990776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin status_t res; 2000776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 201ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin if ((res = Camera3IOStreamBase::configureQueueLocked()) != OK) { 202ae3d0babb9c5d68b107b53d5a67193309020c556Igor Murashkin return res; 2030776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 2040776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 2050776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin assert(mMaxSize == 0); 2060776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin assert(camera3_stream::format != HAL_PIXEL_FORMAT_BLOB); 2070776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 2080776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mTotalBufferCount = BufferQueue::MIN_UNDEQUEUED_BUFFERS + 2090776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin camera3_stream::max_buffers; 2100776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mDequeuedBufferCount = 0; 2110776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mFrameCount = 0; 2120776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 2130776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (mConsumer.get() == 0) { 2148d764bfc74c40641f018a0aa87d6f484aec92eaeMathias Agopian sp<BufferQueue> bq = new BufferQueue(); 2158d764bfc74c40641f018a0aa87d6f484aec92eaeMathias Agopian mConsumer = new BufferItemConsumer(bq, camera3_stream::usage, 2165e1f08b3917ac7900f8a11118afb7e8bf3e61c64Mathias Agopian mTotalBufferCount); 2170776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin mConsumer->setName(String8::format("Camera3-InputStream-%d", mId)); 2180776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 2190776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 2200776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin res = mConsumer->setDefaultBufferSize(camera3_stream::width, 2210776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin camera3_stream::height); 2220776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (res != OK) { 2230776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: Could not set buffer dimensions %dx%d", 2240776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin __FUNCTION__, mId, camera3_stream::width, camera3_stream::height); 2250776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return res; 2260776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 2270776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin res = mConsumer->setDefaultBufferFormat(camera3_stream::format); 2280776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin if (res != OK) { 2290776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin ALOGE("%s: Stream %d: Could not set buffer format %d", 2300776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin __FUNCTION__, mId, camera3_stream::format); 2310776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return res; 2320776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin } 2330776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin 2340776a14513300f04dc5c1d2f89c4156576b8b8edIgor Murashkin return OK; 2358be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala} 2368be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 2378be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala}; // namespace camera3 2388be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala 2398be20f50711a94426f1394ec113672e41c1224e8Eino-Ville Talvala}; // namespace android 240