Loading camera/camera2/OutputConfiguration.cpp +20 −4 Original line number Diff line number Diff line Loading @@ -97,6 +97,10 @@ int OutputConfiguration::getMirrorMode() const { return mMirrorMode; } bool OutputConfiguration::useReadoutTimestamp() const { return mUseReadoutTimestamp; } OutputConfiguration::OutputConfiguration() : mRotation(INVALID_ROTATION), mSurfaceSetID(INVALID_SET_ID), Loading @@ -110,7 +114,8 @@ OutputConfiguration::OutputConfiguration() : mColorSpace(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED), mStreamUseCase(ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT), mTimestampBase(TIMESTAMP_BASE_DEFAULT), mMirrorMode(MIRROR_MODE_AUTO) { mMirrorMode(MIRROR_MODE_AUTO), mUseReadoutTimestamp(false) { } OutputConfiguration::OutputConfiguration(const android::Parcel& parcel) : Loading Loading @@ -220,6 +225,12 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { return err; } int useReadoutTimestamp = 0; if ((err = parcel->readInt32(&useReadoutTimestamp)) != OK) { ALOGE("%s: Failed to read useReadoutTimestamp flag from parcel", __FUNCTION__); return err; } mRotation = rotation; mSurfaceSetID = setID; mSurfaceType = surfaceType; Loading @@ -231,6 +242,7 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { mStreamUseCase = streamUseCase; mTimestampBase = timestampBase; mMirrorMode = mirrorMode; mUseReadoutTimestamp = useReadoutTimestamp != 0; for (auto& surface : surfaceShims) { ALOGV("%s: OutputConfiguration: %p, name %s", __FUNCTION__, surface.graphicBufferProducer.get(), Loading @@ -244,10 +256,10 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { ALOGV("%s: OutputConfiguration: rotation = %d, setId = %d, surfaceType = %d," " physicalCameraId = %s, isMultiResolution = %d, streamUseCase = %" PRId64 ", timestampBase = %d, mirrorMode = %d", ", timestampBase = %d, mirrorMode = %d, useReadoutTimestamp = %d", __FUNCTION__, mRotation, mSurfaceSetID, mSurfaceType, String8(mPhysicalCameraId).string(), mIsMultiResolution, mStreamUseCase, timestampBase, mMirrorMode); mMirrorMode, mUseReadoutTimestamp); return err; } Loading @@ -267,6 +279,7 @@ OutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int ro mStreamUseCase = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT; mTimestampBase = TIMESTAMP_BASE_DEFAULT; mMirrorMode = MIRROR_MODE_AUTO; mUseReadoutTimestamp = false; } OutputConfiguration::OutputConfiguration( Loading @@ -280,7 +293,7 @@ OutputConfiguration::OutputConfiguration( mColorSpace(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED), mStreamUseCase(ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT), mTimestampBase(TIMESTAMP_BASE_DEFAULT), mMirrorMode(MIRROR_MODE_AUTO) { } mMirrorMode(MIRROR_MODE_AUTO), mUseReadoutTimestamp(false) { } status_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const { Loading Loading @@ -342,6 +355,9 @@ status_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const { err = parcel->writeInt32(mMirrorMode); if (err != OK) return err; err = parcel->writeInt32(mUseReadoutTimestamp ? 1 : 0); if (err != OK) return err; return OK; } Loading camera/include/camera/camera2/OutputConfiguration.h +8 −3 Original line number Diff line number Diff line Loading @@ -44,8 +44,7 @@ public: TIMESTAMP_BASE_MONOTONIC = 2, TIMESTAMP_BASE_REALTIME = 3, TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED = 4, TIMESTAMP_BASE_READOUT_SENSOR = 5, TIMESTAMP_BASE_MAX = TIMESTAMP_BASE_READOUT_SENSOR, TIMESTAMP_BASE_MAX = TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED, }; enum MirrorModeType { MIRROR_MODE_AUTO = 0, Loading @@ -69,6 +68,7 @@ public: int64_t getStreamUseCase() const; int getTimestampBase() const; int getMirrorMode() const; bool useReadoutTimestamp() const; // set of sensor pixel mode resolutions allowed {MAX_RESOLUTION, DEFAULT_MODE}; const std::vector<int32_t>& getSensorPixelModesUsed() const; Loading Loading @@ -115,7 +115,8 @@ public: mColorSpace == other.mColorSpace && mStreamUseCase == other.mStreamUseCase && mTimestampBase == other.mTimestampBase && mMirrorMode == other.mMirrorMode); mMirrorMode == other.mMirrorMode && mUseReadoutTimestamp == other.mUseReadoutTimestamp); } bool operator != (const OutputConfiguration& other) const { return !(*this == other); Loading Loading @@ -167,6 +168,9 @@ public: if (mMirrorMode != other.mMirrorMode) { return mMirrorMode < other.mMirrorMode; } if (mUseReadoutTimestamp != other.mUseReadoutTimestamp) { return mUseReadoutTimestamp < other.mUseReadoutTimestamp; } return gbpsLessThan(other); } Loading Loading @@ -196,6 +200,7 @@ private: int64_t mStreamUseCase; int mTimestampBase; int mMirrorMode; bool mUseReadoutTimestamp; }; } // namespace params } // namespace camera2 Loading services/camera/libcameraservice/api2/CameraDeviceClient.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -890,6 +890,7 @@ binder::Status CameraDeviceClient::createStream( int timestampBase = outputConfiguration.getTimestampBase(); int mirrorMode = outputConfiguration.getMirrorMode(); int32_t colorSpace = outputConfiguration.getColorSpace(); bool useReadoutTimestamp = outputConfiguration.useReadoutTimestamp(); res = SessionConfigurationUtils::checkSurfaceType(numBufferProducers, deferredConsumer, outputConfiguration.getSurfaceType()); Loading Loading @@ -973,7 +974,8 @@ binder::Status CameraDeviceClient::createStream( static_cast<camera_stream_rotation_t>(outputConfiguration.getRotation()), &streamId, physicalCameraId, streamInfo.sensorPixelModesUsed, &surfaceIds, outputConfiguration.getSurfaceSetID(), isShared, isMultiResolution, streamInfo.colorSpace, streamInfo.dynamicRangeProfile, streamInfo.streamUseCase); streamInfo.colorSpace, streamInfo.dynamicRangeProfile, streamInfo.streamUseCase, useReadoutTimestamp); if (err == OK) { Mutex::Autolock l(mCompositeLock); mCompositeStreamMap.add(IInterface::asBinder(surfaces[0]->getIGraphicBufferProducer()), Loading @@ -986,7 +988,8 @@ binder::Status CameraDeviceClient::createStream( &streamId, physicalCameraId, streamInfo.sensorPixelModesUsed, &surfaceIds, outputConfiguration.getSurfaceSetID(), isShared, isMultiResolution, /*consumerUsage*/0, streamInfo.dynamicRangeProfile, streamInfo.streamUseCase, streamInfo.timestampBase, streamInfo.mirrorMode, streamInfo.colorSpace); streamInfo.timestampBase, streamInfo.mirrorMode, streamInfo.colorSpace, useReadoutTimestamp); } if (err != OK) { Loading Loading @@ -1085,7 +1088,8 @@ binder::Status CameraDeviceClient::createDeferredSurfaceStreamLocked( outputConfiguration.isMultiResolution(), consumerUsage, outputConfiguration.getDynamicRangeProfile(), outputConfiguration.getStreamUseCase(), outputConfiguration.getMirrorMode()); outputConfiguration.getMirrorMode(), outputConfiguration.useReadoutTimestamp()); if (err != OK) { res = STATUS_ERROR_FMT(CameraService::ERROR_INVALID_OPERATION, Loading services/camera/libcameraservice/api2/CompositeStream.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ status_t CompositeStream::createStream(const std::vector<sp<Surface>>& consumers const std::unordered_set<int32_t> &sensorPixelModesUsed, std::vector<int> * surfaceIds, int streamSetId, bool isShared, bool isMultiResolution, int32_t colorSpace, int64_t dynamicProfile, int64_t streamUseCase) { int64_t dynamicProfile, int64_t streamUseCase, bool useReadoutTimestamp) { if (hasDeferredConsumer) { ALOGE("%s: Deferred consumers not supported in case of composite streams!", __FUNCTION__); Loading @@ -77,7 +77,7 @@ status_t CompositeStream::createStream(const std::vector<sp<Surface>>& consumers return createInternalStreams(consumers, hasDeferredConsumer, width, height, format, rotation, id, physicalCameraId, sensorPixelModesUsed, surfaceIds, streamSetId, isShared, colorSpace, dynamicProfile, streamUseCase); colorSpace, dynamicProfile, streamUseCase, useReadoutTimestamp); } status_t CompositeStream::deleteStream() { Loading services/camera/libcameraservice/api2/CompositeStream.h +2 −2 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ public: const std::unordered_set<int32_t> &sensorPixelModesUsed, std::vector<int> *surfaceIds, int streamSetId, bool isShared, bool isMultiResolution, int32_t colorSpace, int64_t dynamicProfile, int64_t streamUseCase); int64_t dynamicProfile, int64_t streamUseCase, bool useReadoutTimestamp); status_t deleteStream(); Loading @@ -61,7 +61,7 @@ public: const std::unordered_set<int32_t> &sensorPixelModesUsed, std::vector<int> *surfaceIds, int streamSetId, bool isShared, int32_t colorSpace, int64_t dynamicProfile, int64_t streamUseCase) = 0; int64_t dynamicProfile, int64_t streamUseCase, bool useReadoutTimestamp) = 0; // Release all internal streams and corresponding resources. virtual status_t deleteInternalStreams() = 0; Loading Loading
camera/camera2/OutputConfiguration.cpp +20 −4 Original line number Diff line number Diff line Loading @@ -97,6 +97,10 @@ int OutputConfiguration::getMirrorMode() const { return mMirrorMode; } bool OutputConfiguration::useReadoutTimestamp() const { return mUseReadoutTimestamp; } OutputConfiguration::OutputConfiguration() : mRotation(INVALID_ROTATION), mSurfaceSetID(INVALID_SET_ID), Loading @@ -110,7 +114,8 @@ OutputConfiguration::OutputConfiguration() : mColorSpace(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED), mStreamUseCase(ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT), mTimestampBase(TIMESTAMP_BASE_DEFAULT), mMirrorMode(MIRROR_MODE_AUTO) { mMirrorMode(MIRROR_MODE_AUTO), mUseReadoutTimestamp(false) { } OutputConfiguration::OutputConfiguration(const android::Parcel& parcel) : Loading Loading @@ -220,6 +225,12 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { return err; } int useReadoutTimestamp = 0; if ((err = parcel->readInt32(&useReadoutTimestamp)) != OK) { ALOGE("%s: Failed to read useReadoutTimestamp flag from parcel", __FUNCTION__); return err; } mRotation = rotation; mSurfaceSetID = setID; mSurfaceType = surfaceType; Loading @@ -231,6 +242,7 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { mStreamUseCase = streamUseCase; mTimestampBase = timestampBase; mMirrorMode = mirrorMode; mUseReadoutTimestamp = useReadoutTimestamp != 0; for (auto& surface : surfaceShims) { ALOGV("%s: OutputConfiguration: %p, name %s", __FUNCTION__, surface.graphicBufferProducer.get(), Loading @@ -244,10 +256,10 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) { ALOGV("%s: OutputConfiguration: rotation = %d, setId = %d, surfaceType = %d," " physicalCameraId = %s, isMultiResolution = %d, streamUseCase = %" PRId64 ", timestampBase = %d, mirrorMode = %d", ", timestampBase = %d, mirrorMode = %d, useReadoutTimestamp = %d", __FUNCTION__, mRotation, mSurfaceSetID, mSurfaceType, String8(mPhysicalCameraId).string(), mIsMultiResolution, mStreamUseCase, timestampBase, mMirrorMode); mMirrorMode, mUseReadoutTimestamp); return err; } Loading @@ -267,6 +279,7 @@ OutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int ro mStreamUseCase = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT; mTimestampBase = TIMESTAMP_BASE_DEFAULT; mMirrorMode = MIRROR_MODE_AUTO; mUseReadoutTimestamp = false; } OutputConfiguration::OutputConfiguration( Loading @@ -280,7 +293,7 @@ OutputConfiguration::OutputConfiguration( mColorSpace(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED), mStreamUseCase(ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT), mTimestampBase(TIMESTAMP_BASE_DEFAULT), mMirrorMode(MIRROR_MODE_AUTO) { } mMirrorMode(MIRROR_MODE_AUTO), mUseReadoutTimestamp(false) { } status_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const { Loading Loading @@ -342,6 +355,9 @@ status_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const { err = parcel->writeInt32(mMirrorMode); if (err != OK) return err; err = parcel->writeInt32(mUseReadoutTimestamp ? 1 : 0); if (err != OK) return err; return OK; } Loading
camera/include/camera/camera2/OutputConfiguration.h +8 −3 Original line number Diff line number Diff line Loading @@ -44,8 +44,7 @@ public: TIMESTAMP_BASE_MONOTONIC = 2, TIMESTAMP_BASE_REALTIME = 3, TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED = 4, TIMESTAMP_BASE_READOUT_SENSOR = 5, TIMESTAMP_BASE_MAX = TIMESTAMP_BASE_READOUT_SENSOR, TIMESTAMP_BASE_MAX = TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED, }; enum MirrorModeType { MIRROR_MODE_AUTO = 0, Loading @@ -69,6 +68,7 @@ public: int64_t getStreamUseCase() const; int getTimestampBase() const; int getMirrorMode() const; bool useReadoutTimestamp() const; // set of sensor pixel mode resolutions allowed {MAX_RESOLUTION, DEFAULT_MODE}; const std::vector<int32_t>& getSensorPixelModesUsed() const; Loading Loading @@ -115,7 +115,8 @@ public: mColorSpace == other.mColorSpace && mStreamUseCase == other.mStreamUseCase && mTimestampBase == other.mTimestampBase && mMirrorMode == other.mMirrorMode); mMirrorMode == other.mMirrorMode && mUseReadoutTimestamp == other.mUseReadoutTimestamp); } bool operator != (const OutputConfiguration& other) const { return !(*this == other); Loading Loading @@ -167,6 +168,9 @@ public: if (mMirrorMode != other.mMirrorMode) { return mMirrorMode < other.mMirrorMode; } if (mUseReadoutTimestamp != other.mUseReadoutTimestamp) { return mUseReadoutTimestamp < other.mUseReadoutTimestamp; } return gbpsLessThan(other); } Loading Loading @@ -196,6 +200,7 @@ private: int64_t mStreamUseCase; int mTimestampBase; int mMirrorMode; bool mUseReadoutTimestamp; }; } // namespace params } // namespace camera2 Loading
services/camera/libcameraservice/api2/CameraDeviceClient.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -890,6 +890,7 @@ binder::Status CameraDeviceClient::createStream( int timestampBase = outputConfiguration.getTimestampBase(); int mirrorMode = outputConfiguration.getMirrorMode(); int32_t colorSpace = outputConfiguration.getColorSpace(); bool useReadoutTimestamp = outputConfiguration.useReadoutTimestamp(); res = SessionConfigurationUtils::checkSurfaceType(numBufferProducers, deferredConsumer, outputConfiguration.getSurfaceType()); Loading Loading @@ -973,7 +974,8 @@ binder::Status CameraDeviceClient::createStream( static_cast<camera_stream_rotation_t>(outputConfiguration.getRotation()), &streamId, physicalCameraId, streamInfo.sensorPixelModesUsed, &surfaceIds, outputConfiguration.getSurfaceSetID(), isShared, isMultiResolution, streamInfo.colorSpace, streamInfo.dynamicRangeProfile, streamInfo.streamUseCase); streamInfo.colorSpace, streamInfo.dynamicRangeProfile, streamInfo.streamUseCase, useReadoutTimestamp); if (err == OK) { Mutex::Autolock l(mCompositeLock); mCompositeStreamMap.add(IInterface::asBinder(surfaces[0]->getIGraphicBufferProducer()), Loading @@ -986,7 +988,8 @@ binder::Status CameraDeviceClient::createStream( &streamId, physicalCameraId, streamInfo.sensorPixelModesUsed, &surfaceIds, outputConfiguration.getSurfaceSetID(), isShared, isMultiResolution, /*consumerUsage*/0, streamInfo.dynamicRangeProfile, streamInfo.streamUseCase, streamInfo.timestampBase, streamInfo.mirrorMode, streamInfo.colorSpace); streamInfo.timestampBase, streamInfo.mirrorMode, streamInfo.colorSpace, useReadoutTimestamp); } if (err != OK) { Loading Loading @@ -1085,7 +1088,8 @@ binder::Status CameraDeviceClient::createDeferredSurfaceStreamLocked( outputConfiguration.isMultiResolution(), consumerUsage, outputConfiguration.getDynamicRangeProfile(), outputConfiguration.getStreamUseCase(), outputConfiguration.getMirrorMode()); outputConfiguration.getMirrorMode(), outputConfiguration.useReadoutTimestamp()); if (err != OK) { res = STATUS_ERROR_FMT(CameraService::ERROR_INVALID_OPERATION, Loading
services/camera/libcameraservice/api2/CompositeStream.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ status_t CompositeStream::createStream(const std::vector<sp<Surface>>& consumers const std::unordered_set<int32_t> &sensorPixelModesUsed, std::vector<int> * surfaceIds, int streamSetId, bool isShared, bool isMultiResolution, int32_t colorSpace, int64_t dynamicProfile, int64_t streamUseCase) { int64_t dynamicProfile, int64_t streamUseCase, bool useReadoutTimestamp) { if (hasDeferredConsumer) { ALOGE("%s: Deferred consumers not supported in case of composite streams!", __FUNCTION__); Loading @@ -77,7 +77,7 @@ status_t CompositeStream::createStream(const std::vector<sp<Surface>>& consumers return createInternalStreams(consumers, hasDeferredConsumer, width, height, format, rotation, id, physicalCameraId, sensorPixelModesUsed, surfaceIds, streamSetId, isShared, colorSpace, dynamicProfile, streamUseCase); colorSpace, dynamicProfile, streamUseCase, useReadoutTimestamp); } status_t CompositeStream::deleteStream() { Loading
services/camera/libcameraservice/api2/CompositeStream.h +2 −2 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ public: const std::unordered_set<int32_t> &sensorPixelModesUsed, std::vector<int> *surfaceIds, int streamSetId, bool isShared, bool isMultiResolution, int32_t colorSpace, int64_t dynamicProfile, int64_t streamUseCase); int64_t dynamicProfile, int64_t streamUseCase, bool useReadoutTimestamp); status_t deleteStream(); Loading @@ -61,7 +61,7 @@ public: const std::unordered_set<int32_t> &sensorPixelModesUsed, std::vector<int> *surfaceIds, int streamSetId, bool isShared, int32_t colorSpace, int64_t dynamicProfile, int64_t streamUseCase) = 0; int64_t dynamicProfile, int64_t streamUseCase, bool useReadoutTimestamp) = 0; // Release all internal streams and corresponding resources. virtual status_t deleteInternalStreams() = 0; Loading