status_t CameraSource::initWithCameraAccess( const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy, int32_t cameraId, const String16& clientName, uid_t clientUid, Size videoSize, int32_t frameRate, bool storeMetaDataInVideoBuffers) { ALOGV("initWithCameraAccess"); status_t err = OK; if ((err = isCameraAvailable(camera, proxy, cameraId, clientName, clientUid)) != OK) { ALOGE("Camera connection could not be established."); return err; } CameraParameters params(mCamera->getParameters()); if ((err = isCameraColorFormatSupported(params)) != OK) { return err; } // Set the camera to use the requested video frame size // and/or frame rate. if ((err = configureCamera(¶ms, videoSize.width, videoSize.height, frameRate))) { return err; } // Check on video frame size and frame rate. CameraParameters newCameraParams(mCamera->getParameters()); if ((err = checkVideoSize(newCameraParams, videoSize.width, videoSize.height)) != OK) { return err; } if ((err = checkFrameRate(newCameraParams, frameRate)) != OK) { return err; } // Set the preview display. Skip this if mSurface is null because // applications may already set a surface to the camera. if (mSurface != NULL) { // This CHECK is good, since we just passed the lock/unlock // check earlier by calling mCamera->setParameters(). CHECK_EQ((status_t)OK, mCamera->setPreviewTarget(mSurface)); } // By default, do not store metadata in video buffers mIsMetaDataStoredInVideoBuffers = false; mCamera->storeMetaDataInBuffers(false); if (storeMetaDataInVideoBuffers) { if (OK == mCamera->storeMetaDataInBuffers(true)) { mIsMetaDataStoredInVideoBuffers = true; } } int64_t glitchDurationUs = (1000000LL / mVideoFrameRate); if (glitchDurationUs > mGlitchDurationThresholdUs) { mGlitchDurationThresholdUs = glitchDurationUs; } // XXX: query camera for the stride and slice height // when the capability becomes available. mMeta = new MetaData; mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_RAW); mMeta->setInt32(kKeyColorFormat, mColorFormat); mMeta->setInt32(kKeyWidth, mVideoSize.width); mMeta->setInt32(kKeyHeight, mVideoSize.height); mMeta->setInt32(kKeyStride, mVideoSize.width); mMeta->setInt32(kKeySliceHeight, mVideoSize.height); mMeta->setInt32(kKeyFrameRate, mVideoFrameRate); return OK; }
status_t CameraSource::initWithCameraAccess( const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy, int32_t cameraId, Size videoSize, int32_t frameRate, bool storeMetaDataInVideoBuffers) { LOGV("initWithCameraAccess"); status_t err = OK; if ((err = isCameraAvailable(camera, proxy, cameraId)) != OK) { LOGE("Camera connection could not be established."); return err; } CameraParameters params(mCamera->getParameters()); if ((err = isCameraColorFormatSupported(params)) != OK) { return err; } // Set the camera to use the requested video frame size // and/or frame rate. if ((err = configureCamera(¶ms, videoSize.width, videoSize.height, frameRate))) { return err; } // Check on video frame size and frame rate. CameraParameters newCameraParams(mCamera->getParameters()); if ((err = checkVideoSize(newCameraParams, videoSize.width, videoSize.height)) != OK) { return err; } if ((err = checkFrameRate(newCameraParams, frameRate)) != OK) { return err; } // This CHECK is good, since we just passed the lock/unlock // check earlier by calling mCamera->setParameters(). CHECK_EQ(OK, mCamera->setPreviewDisplay(mSurface)); // By default, do not store metadata in video buffers mIsMetaDataStoredInVideoBuffers = false; mCamera->storeMetaDataInBuffers(false); if (storeMetaDataInVideoBuffers) { if (OK == mCamera->storeMetaDataInBuffers(true)) { mIsMetaDataStoredInVideoBuffers = true; } } #ifdef QCOM_HARDWARE const char *hfr_str = params.get("video-hfr"); int32_t hfr = -1; if ( hfr_str != NULL ) { hfr = atoi(hfr_str); } if(hfr < 0) { LOGW("Invalid hfr value(%d) set from app. Disabling HFR.", hfr); hfr = 0; } #endif int64_t glitchDurationUs = (1000000LL / mVideoFrameRate); if (glitchDurationUs > mGlitchDurationThresholdUs) { mGlitchDurationThresholdUs = glitchDurationUs; } // XXX: query camera for the stride and slice height // when the capability becomes available. #ifdef STE_HARDWARE int stride = newCameraParams.getInt(CameraParameters::KEY_RECORD_STRIDE); int sliceHeight = newCameraParams.getInt(CameraParameters::KEY_RECORD_SLICE_HEIGHT); #endif mMeta = new MetaData; mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_RAW); mMeta->setInt32(kKeyColorFormat, mColorFormat); mMeta->setInt32(kKeyWidth, mVideoSize.width); mMeta->setInt32(kKeyHeight, mVideoSize.height); #ifndef STE_HARDWARE mMeta->setInt32(kKeyStride, mVideoSize.width); mMeta->setInt32(kKeySliceHeight, mVideoSize.height); #else mMeta->setInt32(kKeyStride, stride != -1 ? stride : mVideoSize.width); mMeta->setInt32(kKeySliceHeight, sliceHeight != -1 ? sliceHeight : mVideoSize.height); #endif mMeta->setInt32(kKeyFrameRate, mVideoFrameRate); #ifdef QCOM_HARDWARE mMeta->setInt32(kKeyHFR, hfr); #endif return OK; }