Camera3InputStream.cpp revision 7b82efe7a376c882f8f938e1c41b8311a8cdda4a
1b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek/* 277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * Copyright (C) 2013 The Android Open Source Project 377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * 477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * Licensed under the Apache License, Version 2.0 (the "License"); 577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * you may not use this file except in compliance with the License. 677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * You may obtain a copy of the License at 777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * 877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * http://www.apache.org/licenses/LICENSE-2.0 977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * 10b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek * Unless required by applicable law or agreed to in writing, software 1141573ebf8fb971f40fa8a3e20648362c359b4916Ted Kremenek * distributed under the License is distributed on an "AS IS" BASIS, 12b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * See the License for the specific language governing permissions and 1477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek * limitations under the License. 1577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek */ 16d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek 17d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek#define LOG_TAG "Camera3-InputStream" 18d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek#define ATRACE_TAG ATRACE_TAG_CAMERA 19c77a55126fcad66fb086f8e100a494caa2496a2dZhongxing Xu//#define LOG_NDEBUG 0 201309f9a3b225ea846e5822691c39a77423125505Ted Kremenek 211309f9a3b225ea846e5822691c39a77423125505Ted Kremenek#include <utils/Log.h> 221309f9a3b225ea846e5822691c39a77423125505Ted Kremenek#include <utils/Trace.h> 231309f9a3b225ea846e5822691c39a77423125505Ted Kremenek#include "Camera3InputStream.h" 241309f9a3b225ea846e5822691c39a77423125505Ted Kremenek 256b67630d5df195f4fe0e4273061c016901d69681Ted Kremeneknamespace android { 26c0c3f5dbc9e78aa53a86c7d5e3eeda23ddad93d6Ted Kremenek 27f494b579b22f9950f5af021f0bf9879a91bb8b41Steve Naroffnamespace camera3 { 28bb141217871e93767aa3f2de1b9946fa6d37066aZhongxing Xu 2977349cb20bfd7069d081f84c91975bfa8ef60a32Ted KremenekCamera3InputStream::Camera3InputStream(int id, 301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump uint32_t width, uint32_t height, int format) : 315e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramer Camera3IOStreamBase(id, CAMERA3_STREAM_INPUT, width, height, 325e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramer /*maxSize*/0, format) { 335e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramer 34f494b579b22f9950f5af021f0bf9879a91bb8b41Steve Naroff if (format == HAL_PIXEL_FORMAT_BLOB) { 351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump ALOGE("%s: Bad format, BLOB not supported", __FUNCTION__); 3625e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu mState = STATE_ERROR; 3725e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu } 380111f575b968e423dccae439e501225b8314b257Zhongxing Xu} 391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 40b387a3f23e423d62c053be86294b703da1d1a222Ted KremenekCamera3InputStream::~Camera3InputStream() { 41031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu disconnectLocked(); 421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 43b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek 44b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenekstatus_t Camera3InputStream::getInputBufferLocked( 45031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu camera3_stream_buffer *buffer) { 461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump ATRACE_CALL(); 47b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek status_t res; 484adc81e540b874bafa15715fd2c5cb662463debdTed Kremenek 49cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek // FIXME: will not work in (re-)registration 50b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek if (mState == STATE_IN_CONFIG || mState == STATE_IN_RECONFIG) { 51b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek ALOGE("%s: Stream %d: Buffer registration for input streams" 521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump " not implemented (state %d)", 538e5fb2849d9a8cb40d008a409273766f8ff8f854Ted Kremenek __FUNCTION__, mId, mState); 548e5fb2849d9a8cb40d008a409273766f8ff8f854Ted Kremenek return INVALID_OPERATION; 551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 566c07bdba93b095b66e2c8c82dd5ed458fa8285eaTed Kremenek 5706669c8e5c24251f6b140298148fbe53ab70a936Ted Kremenek if ((res = getBufferPreconditionCheckLocked()) != OK) { 581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return res; 59846d4e923bf11bcdc2816758aafa331795f29230Ted Kremenek } 60031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu 61846d4e923bf11bcdc2816758aafa331795f29230Ted Kremenek ANativeWindowBuffer* anb; 62846d4e923bf11bcdc2816758aafa331795f29230Ted Kremenek int fenceFd; 630d093d3005dd583675a45a85bd688063572cc8afTed Kremenek 641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump assert(mConsumer != 0); 651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 66b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek BufferItem bufferItem; 6703509aea098772644bf4662dc1c88634818ceeccZhongxing Xu res = mConsumer->acquireBuffer(&bufferItem, /*waitForFence*/false); 681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 69e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek if (res != OK) { 70e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek ALOGE("%s: Stream %d: Can't acquire next output buffer: %s (%d)", 711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump __FUNCTION__, mId, strerror(-res), res); 72e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek return res; 73e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek } 74e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek 751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump anb = bufferItem.mGraphicBuffer->getNativeBuffer(); 76bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek assert(anb != NULL); 77ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu fenceFd = bufferItem.mFence->dup(); 78094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek 79b94b81a9ab46c99b00c7ad28c5e1e212c63fc9acZhongxing Xu /** 809e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek * FenceFD now owned by HAL except in case of error, 819e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek * in which case we reassign it to acquire_fence 829e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek */ 839e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek handoutBufferLocked(*buffer, &(anb->handle), /*acquireFence*/fenceFd, 849e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek /*releaseFence*/-1, CAMERA3_BUFFER_STATUS_OK); 859e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek mBuffersInFlight.push_back(bufferItem); 869e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek 879e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek return OK; 889e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek} 89094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek 90ff944a8c481d6c0f1ad2633e4be9bf8b1dd2a09fZhongxing Xustatus_t Camera3InputStream::returnBufferCheckedLocked( 919e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek const camera3_stream_buffer &buffer, 929e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek nsecs_t timestamp, 939e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek bool output, 949e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek /*out*/ 959e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek sp<Fence> *releaseFenceOut) { 969e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek 979e9595b12e9b55586c4d50d370f429c7a3c92a90Ted Kremenek (void)timestamp; 98cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek (void)output; 9932a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek ALOG_ASSERT(!output, "Expected output to be false"); 10032a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek 1011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump status_t res; 102cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu 103cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu bool bufferFound = false; 10403509aea098772644bf4662dc1c88634818ceeccZhongxing Xu BufferItem bufferItem; 105cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu { 106cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu // Find the buffer we are returning 10703509aea098772644bf4662dc1c88634818ceeccZhongxing Xu Vector<BufferItem>::iterator it, end; 108cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu for (it = mBuffersInFlight.begin(), end = mBuffersInFlight.end(); 109cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu it != end; 110cb7464ab402d057849dda9749d62a62d86c35ab8Zhongxing Xu ++it) { 111b22d589e2ccd09cada0bcea136f0966883a8bb11Ted Kremenek 11232a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek const BufferItem& tmp = *it; 113cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek ANativeWindowBuffer *anb = tmp.mGraphicBuffer->getNativeBuffer(); 11450a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek if (anb != NULL && &(anb->handle) == buffer.buffer) { 1151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump bufferFound = true; 11625e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu bufferItem = tmp; 1172ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu mBuffersInFlight.erase(it); 1182ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu mDequeuedBufferCount--; 1192ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu } 1202ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu } 1212ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu } 1222ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu if (!bufferFound) { 1232ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu ALOGE("%s: Stream %d: Can't return buffer that wasn't sent to HAL", 1242ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu __FUNCTION__, mId); 1252ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu return INVALID_OPERATION; 1262ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu } 127b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek 1281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { 129b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek if (buffer.release_fence != -1) { 130c77a55126fcad66fb086f8e100a494caa2496a2dZhongxing Xu ALOGE("%s: Stream %d: HAL should not set release_fence(%d) when " 1315032ffe4259e7d436f2eb19e5a29fdae559e7c12Zhongxing Xu "there is an error", __FUNCTION__, mId, buffer.release_fence); 1322ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu close(buffer.release_fence); 1331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 13432c3fa4195762ba93f0b7114ab36c0941bc34432Ted Kremenek 1351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump /** 13632a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek * Reassign release fence as the acquire fence incase of error 1371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump */ 138cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek const_cast<camera3_stream_buffer*>(&buffer)->release_fence = 1391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump buffer.acquire_fence; 140ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu } 141ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu 14232a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek /** 14332a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek * Unconditionally return buffer to the buffer queue. 1441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump * - Fwk takes over the release_fence ownership 145e01c98767dfd7153c3c84637c36659e3bbe16ff7Ted Kremenek */ 146e01c98767dfd7153c3c84637c36659e3bbe16ff7Ted Kremenek sp<Fence> releaseFence = new Fence(buffer.release_fence); 147ffe0f43806d4823271c2406c1fccc2373115c36aTed Kremenek res = mConsumer->releaseBuffer(bufferItem, releaseFence); 1481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (res != OK) { 149031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu ALOGE("%s: Stream %d: Error releasing buffer back to buffer queue:" 1501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump " %s (%d)", __FUNCTION__, mId, strerror(-res), res); 151b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek return res; 152b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek } 15317fd8632dcda97022a51effc24060eacdad9dbe0Zhongxing Xu 1541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump *releaseFenceOut = releaseFence; 155031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu 156031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu return OK; 15750a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek} 158ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu 159094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenekstatus_t Camera3InputStream::returnInputBufferLocked( 160094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek const camera3_stream_buffer &buffer) { 161094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek ATRACE_CALL(); 162094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek 163094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek return returnAnyBufferLocked(buffer, /*timestamp*/0, /*output*/false); 164ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu} 165094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek 166094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenekstatus_t Camera3InputStream::disconnectLocked() { 167ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu 168ec9227fea66c3439991fc84b0d33b0a8b4b8875eZhongxing Xu status_t res; 169094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek 170094bef56a7900f13bb777f9a352704104b1458e7Ted Kremenek if ((res = Camera3IOStreamBase::disconnectLocked()) != OK) { 1715a5d98bc6962dc2d1aaa5e0e522f1bf84273b9c1Ted Kremenek return res; 1721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 173bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek 174536aa02b29ea2bdffff2cc507ed04f6b56737116Ted Kremenek assert(mBuffersInFlight.size() == 0); 1751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 176b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek /** 1771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump * no-op since we can't disconnect the producer from the consumer-side 17803509aea098772644bf4662dc1c88634818ceeccZhongxing Xu */ 1791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1806a6719a3a11087b48d9f1a4eb08b3bd43cb05a65Ted Kremenek mState = (mState == STATE_IN_RECONFIG) ? STATE_IN_CONFIG 1816a6719a3a11087b48d9f1a4eb08b3bd43cb05a65Ted Kremenek : STATE_CONSTRUCTED; 1826a6719a3a11087b48d9f1a4eb08b3bd43cb05a65Ted Kremenek return OK; 18303509aea098772644bf4662dc1c88634818ceeccZhongxing Xu} 1844323a57627e796dcfdfdb7d47672dc09ed308edaTed Kremenek 1851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpsp<IGraphicBufferProducer> Camera3InputStream::getProducerInterface() const { 186b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek return mConsumer->getProducerInterface(); 187b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek} 18803509aea098772644bf4662dc1c88634818ceeccZhongxing Xu 18903509aea098772644bf4662dc1c88634818ceeccZhongxing Xuvoid Camera3InputStream::dump(int fd, const Vector<String16> &args) const { 1901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump (void) args; 191b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek String8 lines; 192b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek lines.appendFormat(" Stream[%d]: Input\n", mId); 193031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu write(fd, lines.string(), lines.size()); 1941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 195b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek Camera3IOStreamBase::dump(fd, args); 196b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek} 197031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu 1981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpstatus_t Camera3InputStream::configureQueueLocked() { 19911062b118476368fa5b294954713e5df97d8599fTed Kremenek status_t res; 20011062b118476368fa5b294954713e5df97d8599fTed Kremenek 20173099bfea9f5d4ec05265170bbefec3d76fb6b5eTed Kremenek if ((res = Camera3IOStreamBase::configureQueueLocked()) != OK) { 202102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor return res; 203ccc263b44c62ce3a02f797a3ddb3d6017cf0e5e4Ted Kremenek } 204102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor 205102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor assert(mMaxSize == 0); 206ccc263b44c62ce3a02f797a3ddb3d6017cf0e5e4Ted Kremenek assert(camera3_stream::format != HAL_PIXEL_FORMAT_BLOB); 207102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor 208102acd5369bbb17c0d6ab868af376671acff7a93Douglas Gregor mTotalBufferCount = BufferQueue::MIN_UNDEQUEUED_BUFFERS + 209ccc263b44c62ce3a02f797a3ddb3d6017cf0e5e4Ted Kremenek camera3_stream::max_buffers; 210ccc263b44c62ce3a02f797a3ddb3d6017cf0e5e4Ted Kremenek mDequeuedBufferCount = 0; 211ccc263b44c62ce3a02f797a3ddb3d6017cf0e5e4Ted Kremenek mFrameCount = 0; 21232a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek 21332a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek if (mConsumer.get() == 0) { 21403509aea098772644bf4662dc1c88634818ceeccZhongxing Xu sp<BufferQueue> bq = new BufferQueue(); 2151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump mConsumer = new BufferItemConsumer(bq, camera3_stream::usage, 2162ce43c8f43254a9edea53a20dc0e69195bc82ae0Zhongxing Xu mTotalBufferCount); 21790e72e4106a0c3efa7575e9f9cba0c775bb54552Zhongxing Xu mConsumer->setName(String8::format("Camera3-InputStream-%d", mId)); 21890e72e4106a0c3efa7575e9f9cba0c775bb54552Zhongxing Xu } 2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 220a516ce16b472e61924f5dd10d181c3e8330979afTed Kremenek res = mConsumer->setDefaultBufferSize(camera3_stream::width, 221a516ce16b472e61924f5dd10d181c3e8330979afTed Kremenek camera3_stream::height); 222a516ce16b472e61924f5dd10d181c3e8330979afTed Kremenek if (res != OK) { 2231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump ALOGE("%s: Stream %d: Could not set buffer dimensions %dx%d", 224044b6f0417cb98741f277602fabf5f07ec9a02c0Ted Kremenek __FUNCTION__, mId, camera3_stream::width, camera3_stream::height); 2256297a8ec313c722db50f686fd190842b7ea91118Ted Kremenek return res; 2266297a8ec313c722db50f686fd190842b7ea91118Ted Kremenek } 2276297a8ec313c722db50f686fd190842b7ea91118Ted Kremenek res = mConsumer->setDefaultBufferFormat(camera3_stream::format); 2286297a8ec313c722db50f686fd190842b7ea91118Ted Kremenek if (res != OK) { 2296297a8ec313c722db50f686fd190842b7ea91118Ted Kremenek ALOGE("%s: Stream %d: Could not set buffer format %d", 2306297a8ec313c722db50f686fd190842b7ea91118Ted Kremenek __FUNCTION__, mId, camera3_stream::format); 2311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return res; 2321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 2338e5fb2849d9a8cb40d008a409273766f8ff8f854Ted Kremenek 2341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return OK; 235044b6f0417cb98741f277602fabf5f07ec9a02c0Ted Kremenek} 23600a3a5f024ac54088ab887712b292171188064f0Ted Kremenek 23700a3a5f024ac54088ab887712b292171188064f0Ted Kremenek}; // namespace camera3 2381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 23905a2378c708688c8ef498a5cea40ed7f5db15fa5Ted Kremenek}; // namespace android 240031ccc0555a82afc2e8afe29e19dd57ff204e2deZhongxing Xu