Error_t CCommandLineOptions::process( int argc, char* argv[] ) { if (!m_bIsInitialized) return kNotInitializedError; if (!argv || argc < 2) return kFunctionInvalidArgsError; for (int i = 1; i < argc; i++) { int iIdx = getBufferIdx(argv[i]); if (iIdx < 0) continue; assert(iIdx <= m_iNumOfOptions); if (m_ppCOptions[iIdx]->getType() == COption::OptionType_t::kBool) m_ppCClArgs[iIdx]->setCurrOption(); else { if (i < argc-1) { m_ppCClArgs[iIdx]->setCurrOption(argv[i+1]); if (getBufferIdx(argv[i+1]) >= 0) { return kInvalidString; } i++; } } } return kNoError; }
bool CCommandLineOptions::isOptionSet( int iIdentifier ) const { int iIdx = getBufferIdx(iIdentifier); if (iIdx >+ m_iNumOfOptions || iIdx < 0) return false; return m_ppCClArgs[iIdx]->isSet(); }
bool CCommandLineOptions::isOptionSet( std::string argv ) const { int iIdx = getBufferIdx(argv); if (iIdx >= m_iNumOfOptions || iIdx < 0) return false; return m_ppCClArgs[iIdx]->isSet(); }
Error_t CCommandLineOptions::getOption( std::string argv, std::string& sResult ) const { if (!isOptionSet(argv)) return kNotInitializedError; int iIdx = getBufferIdx(argv); sResult = m_ppCClArgs[iIdx]->getArg(); return kNoError; }
int PreviewStream::allocateBuffers(int /*width*/, int /*height*/, int /*format*/, int /*numBufs*/ ) { int index = -1; int ret = NO_ERROR; //In DeviceAdapter::handleFrameRelease, if mPreviewing is false, //will not dec mRefCount. This will happen when performance is low. //So need zero ref count. for (int i = 0; i < mTotalBuffers; i++) { // FLOGI("==== PreviewStream::allocateBuffers, i %d, state %d, ref %d", // i, mCameraBuffer[i].getState(), mCameraBuffer[i].getRefCount()); mCameraBuffer[i].ZeroRefCount(); } for (int i = 0; i < mMaxProducerBuffers; i++) { buffer_handle_t *buf_h = NULL; ret = mNativeWindow->dequeue_buffer(mNativeWindow, &buf_h); if (ret != 0) { FLOGE("dequeueBuffer failed: %s (%d)", strerror(-ret), -ret); if (ENODEV == ret) { FLOGE("Preview surface abandoned!"); mNativeWindow = NULL; } return ret; } index = getBufferIdx(buf_h); if (index < 0 || index >= mTotalBuffers) { FLOGE("%s dequeue invalid buffer", __FUNCTION__); return BAD_VALUE; } mCameraBuffer[index].setState(CameraFrame::BUFS_FREE); if(mDeviceAdapter.get() && mDeviceAdapter->UseMJPG()) { mDeviceAdapter.get()->mVPUPhyAddr[i] = (unsigned char*)mCameraBuffer[index].mPhyAddr; mDeviceAdapter.get()->mVPUVirtAddr[i] = (unsigned char*)mCameraBuffer[index].mVirtAddr; FLOGI("allocateBuffers, index %d, phyAddr 0x%x", index, mCameraBuffer[index].mPhyAddr); } } for (int i = 0; i < mTotalBuffers; i++) { int state = mCameraBuffer[i].getState(); if (state != CameraFrame::BUFS_FREE) { mCameraBuffer[i].setState(CameraFrame::BUFS_IN_SERVICE); // The frame held in service. // Make sure we dont add one more reference // count for it if(!mCameraBuffer[i].getRefCount()) mCameraBuffer[i].addReference(); } if(mDeviceAdapter.get() && mDeviceAdapter->UseMJPG()) { mCameraBuffer[i].mBindUVCBufIdx = -1; mCameraBuffer[i].mpFrameBuf = NULL; } } dispatchBuffers(&mCameraBuffer[0], mTotalBuffers, BUFFER_CREATE); return ret; }