Loading camera/ndk/ndk_vendor/impl/ACameraDevice.cpp +31 −9 Original line number Diff line number Diff line Loading @@ -330,7 +330,8 @@ camera_status_t CameraDevice::updateOutputConfigurationLocked(ACaptureSessionOut return ACAMERA_ERROR_UNKNOWN; } mConfiguredOutputs[streamId] = std::make_pair(output->mWindow, outConfigW); mConfiguredOutputs[streamId] = std::move(std::make_pair(std::move(output->mWindow), std::move(outConfigW))); return ACAMERA_OK; } Loading Loading @@ -623,7 +624,8 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu outConfigInsert.windowHandles[0] = anw; outConfigInsert.physicalCameraId = outConfig.mPhysicalCameraId; native_handle_ptr_wrapper wrap(anw); outputSet.insert(std::make_pair(anw, outConfigInsertW)); outputSet.emplace(std::make_pair(std::move(anw), std::move(outConfigInsertW))); } std::set<std::pair<native_handle_ptr_wrapper, OutputConfigurationWrapper>> addSet = outputSet; std::vector<int32_t> deleteList; Loading Loading @@ -680,7 +682,7 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu } // add new streams for (auto outputPair : addSet) { for (const auto &outputPair : addSet) { int streamId; Status status = Status::UNKNOWN_ERROR; auto ret = mRemote->createStream(outputPair.second, Loading Loading @@ -845,12 +847,32 @@ CameraDevice::onCaptureErrorLocked( return; } const auto& windowHandles = outputPairIt->second.second.mOutputConfiguration.windowHandles; for (const auto& outHandle : windowHandles) { for (auto streamAndWindowId : request->mCaptureRequest.streamAndWindowIds) { int32_t windowId = streamAndWindowId.windowId; if (utils::isWindowNativeHandleEqual(windowHandles[windowId],outHandle)) { const native_handle_t* anw = windowHandles[windowId].getNativeHandle(); // Get the surfaces corresponding to the error stream id, go through // them and try to match the surfaces in the corresponding // CaptureRequest. const auto& errorWindowHandles = outputPairIt->second.second.mOutputConfiguration.windowHandles; for (const auto& errorWindowHandle : errorWindowHandles) { for (const auto &requestStreamAndWindowId : request->mCaptureRequest.streamAndWindowIds) { // Go through the surfaces in the capture request and see which // ones match the surfaces in the error stream. int32_t requestWindowId = requestStreamAndWindowId.windowId; auto requestSurfacePairIt = mConfiguredOutputs.find(requestStreamAndWindowId.streamId); if (requestSurfacePairIt == mConfiguredOutputs.end()) { ALOGE("%s: Error: request stream id %d does not exist", __FUNCTION__, requestStreamAndWindowId.streamId); setCameraDeviceErrorLocked(ACAMERA_ERROR_CAMERA_SERVICE); return; } const auto &requestWindowHandles = requestSurfacePairIt->second.second.mOutputConfiguration.windowHandles; if (utils::isWindowNativeHandleEqual( requestWindowHandles[requestWindowId], errorWindowHandle)) { const native_handle_t* anw = requestWindowHandles[requestWindowId].getNativeHandle(); ALOGV("Camera %s Lost output buffer for ANW %p frame %" PRId64, getId(), anw, frameNumber); Loading camera/ndk/ndk_vendor/impl/utils.h +24 −2 Original line number Diff line number Diff line Loading @@ -109,8 +109,30 @@ struct OutputConfigurationWrapper { mOutputConfiguration.windowGroupId = -1; }; OutputConfigurationWrapper(OutputConfiguration &outputConfiguration) : mOutputConfiguration((outputConfiguration)) { } OutputConfigurationWrapper(const OutputConfigurationWrapper &other) { *this = other; } // Needed to make sure that OutputConfiguration in // OutputConfigurationWrapper, when copied doesn't call hidl_handle's // assignment operator / copy constructor, which will lead to native handle // cloning, which is not what we want for app callbacks which have the native // handle as parameter. OutputConfigurationWrapper &operator=(const OutputConfigurationWrapper &other) { const OutputConfiguration &outputConfiguration = other.mOutputConfiguration; mOutputConfiguration.rotation = outputConfiguration.rotation; mOutputConfiguration.isDeferred = outputConfiguration.isDeferred; mOutputConfiguration.width = outputConfiguration.width; mOutputConfiguration.height = outputConfiguration.height; mOutputConfiguration.windowGroupId = outputConfiguration.windowGroupId; mOutputConfiguration.windowHandles.resize(outputConfiguration.windowHandles.size()); mOutputConfiguration.physicalCameraId = outputConfiguration.physicalCameraId; size_t i = 0; for (const auto &handle : outputConfiguration.windowHandles) { mOutputConfiguration.windowHandles[i++] = handle.getNativeHandle(); } return *this; } bool operator ==(const OutputConfiguration &other) const { const OutputConfiguration &self = mOutputConfiguration; Loading media/codec2/sfplugin/CCodecConfig.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -1896,8 +1896,10 @@ status_t CCodecConfig::querySupportedParameters(std::vector<std::string> *names) names->clear(); // TODO: expand to standard params for (const auto &[key, desc] : mVendorParams) { if (desc->isVisible()) { names->push_back(key); } } return OK; } Loading media/codec2/sfplugin/Codec2InfoBuilder.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -281,6 +281,11 @@ void addSupportedColorFormats( } }; // The color format is ordered by preference. The intention here is to advertise: // c2.android.* codecs: YUV420s, Surface, <the rest> // all other codecs: Surface, YUV420s, <the rest> // TODO: get this preference via Codec2 API // vendor video codecs prefer opaque format if (trait.name.find("android") == std::string::npos) { addDefaultColorFormat(COLOR_FormatSurface); Loading @@ -290,9 +295,8 @@ void addSupportedColorFormats( addDefaultColorFormat(COLOR_FormatYUV420SemiPlanar); addDefaultColorFormat(COLOR_FormatYUV420PackedPlanar); addDefaultColorFormat(COLOR_FormatYUV420PackedSemiPlanar); // framework video encoders must support surface format, though it is unclear // that they will be able to map it if it is opaque if (encoder && trait.name.find("android") != std::string::npos) { // Android video codecs prefer CPU-readable formats if (trait.name.find("android") != std::string::npos) { addDefaultColorFormat(COLOR_FormatSurface); } for (int32_t colorFormat : supportedColorFormats) { Loading media/libaaudio/include/aaudio/AAudio.h +10 −2 Original line number Diff line number Diff line Loading @@ -778,8 +778,16 @@ AAUDIO_API aaudio_result_t AAudio_createStreamBuilder(AAudioStreamBuilder** buil __INTRODUCED_IN(26); /** * Request an audio device identified device using an ID. * On Android, for example, the ID could be obtained from the Java AudioManager. * Request an audio device identified by an ID. * * The ID could be obtained from the Java AudioManager. * AudioManager.getDevices() returns an array of {@link AudioDeviceInfo}, * which contains a getId() method. That ID can be passed to this function. * * It is possible that you may not get the device that you requested. * So if it is important to you, you should call * AAudioStream_getDeviceId() after the stream is opened to * verify the actual ID. * * The default, if you do not call this function, is {@link #AAUDIO_UNSPECIFIED}, * in which case the primary device will be used. Loading Loading
camera/ndk/ndk_vendor/impl/ACameraDevice.cpp +31 −9 Original line number Diff line number Diff line Loading @@ -330,7 +330,8 @@ camera_status_t CameraDevice::updateOutputConfigurationLocked(ACaptureSessionOut return ACAMERA_ERROR_UNKNOWN; } mConfiguredOutputs[streamId] = std::make_pair(output->mWindow, outConfigW); mConfiguredOutputs[streamId] = std::move(std::make_pair(std::move(output->mWindow), std::move(outConfigW))); return ACAMERA_OK; } Loading Loading @@ -623,7 +624,8 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu outConfigInsert.windowHandles[0] = anw; outConfigInsert.physicalCameraId = outConfig.mPhysicalCameraId; native_handle_ptr_wrapper wrap(anw); outputSet.insert(std::make_pair(anw, outConfigInsertW)); outputSet.emplace(std::make_pair(std::move(anw), std::move(outConfigInsertW))); } std::set<std::pair<native_handle_ptr_wrapper, OutputConfigurationWrapper>> addSet = outputSet; std::vector<int32_t> deleteList; Loading Loading @@ -680,7 +682,7 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu } // add new streams for (auto outputPair : addSet) { for (const auto &outputPair : addSet) { int streamId; Status status = Status::UNKNOWN_ERROR; auto ret = mRemote->createStream(outputPair.second, Loading Loading @@ -845,12 +847,32 @@ CameraDevice::onCaptureErrorLocked( return; } const auto& windowHandles = outputPairIt->second.second.mOutputConfiguration.windowHandles; for (const auto& outHandle : windowHandles) { for (auto streamAndWindowId : request->mCaptureRequest.streamAndWindowIds) { int32_t windowId = streamAndWindowId.windowId; if (utils::isWindowNativeHandleEqual(windowHandles[windowId],outHandle)) { const native_handle_t* anw = windowHandles[windowId].getNativeHandle(); // Get the surfaces corresponding to the error stream id, go through // them and try to match the surfaces in the corresponding // CaptureRequest. const auto& errorWindowHandles = outputPairIt->second.second.mOutputConfiguration.windowHandles; for (const auto& errorWindowHandle : errorWindowHandles) { for (const auto &requestStreamAndWindowId : request->mCaptureRequest.streamAndWindowIds) { // Go through the surfaces in the capture request and see which // ones match the surfaces in the error stream. int32_t requestWindowId = requestStreamAndWindowId.windowId; auto requestSurfacePairIt = mConfiguredOutputs.find(requestStreamAndWindowId.streamId); if (requestSurfacePairIt == mConfiguredOutputs.end()) { ALOGE("%s: Error: request stream id %d does not exist", __FUNCTION__, requestStreamAndWindowId.streamId); setCameraDeviceErrorLocked(ACAMERA_ERROR_CAMERA_SERVICE); return; } const auto &requestWindowHandles = requestSurfacePairIt->second.second.mOutputConfiguration.windowHandles; if (utils::isWindowNativeHandleEqual( requestWindowHandles[requestWindowId], errorWindowHandle)) { const native_handle_t* anw = requestWindowHandles[requestWindowId].getNativeHandle(); ALOGV("Camera %s Lost output buffer for ANW %p frame %" PRId64, getId(), anw, frameNumber); Loading
camera/ndk/ndk_vendor/impl/utils.h +24 −2 Original line number Diff line number Diff line Loading @@ -109,8 +109,30 @@ struct OutputConfigurationWrapper { mOutputConfiguration.windowGroupId = -1; }; OutputConfigurationWrapper(OutputConfiguration &outputConfiguration) : mOutputConfiguration((outputConfiguration)) { } OutputConfigurationWrapper(const OutputConfigurationWrapper &other) { *this = other; } // Needed to make sure that OutputConfiguration in // OutputConfigurationWrapper, when copied doesn't call hidl_handle's // assignment operator / copy constructor, which will lead to native handle // cloning, which is not what we want for app callbacks which have the native // handle as parameter. OutputConfigurationWrapper &operator=(const OutputConfigurationWrapper &other) { const OutputConfiguration &outputConfiguration = other.mOutputConfiguration; mOutputConfiguration.rotation = outputConfiguration.rotation; mOutputConfiguration.isDeferred = outputConfiguration.isDeferred; mOutputConfiguration.width = outputConfiguration.width; mOutputConfiguration.height = outputConfiguration.height; mOutputConfiguration.windowGroupId = outputConfiguration.windowGroupId; mOutputConfiguration.windowHandles.resize(outputConfiguration.windowHandles.size()); mOutputConfiguration.physicalCameraId = outputConfiguration.physicalCameraId; size_t i = 0; for (const auto &handle : outputConfiguration.windowHandles) { mOutputConfiguration.windowHandles[i++] = handle.getNativeHandle(); } return *this; } bool operator ==(const OutputConfiguration &other) const { const OutputConfiguration &self = mOutputConfiguration; Loading
media/codec2/sfplugin/CCodecConfig.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -1896,8 +1896,10 @@ status_t CCodecConfig::querySupportedParameters(std::vector<std::string> *names) names->clear(); // TODO: expand to standard params for (const auto &[key, desc] : mVendorParams) { if (desc->isVisible()) { names->push_back(key); } } return OK; } Loading
media/codec2/sfplugin/Codec2InfoBuilder.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -281,6 +281,11 @@ void addSupportedColorFormats( } }; // The color format is ordered by preference. The intention here is to advertise: // c2.android.* codecs: YUV420s, Surface, <the rest> // all other codecs: Surface, YUV420s, <the rest> // TODO: get this preference via Codec2 API // vendor video codecs prefer opaque format if (trait.name.find("android") == std::string::npos) { addDefaultColorFormat(COLOR_FormatSurface); Loading @@ -290,9 +295,8 @@ void addSupportedColorFormats( addDefaultColorFormat(COLOR_FormatYUV420SemiPlanar); addDefaultColorFormat(COLOR_FormatYUV420PackedPlanar); addDefaultColorFormat(COLOR_FormatYUV420PackedSemiPlanar); // framework video encoders must support surface format, though it is unclear // that they will be able to map it if it is opaque if (encoder && trait.name.find("android") != std::string::npos) { // Android video codecs prefer CPU-readable formats if (trait.name.find("android") != std::string::npos) { addDefaultColorFormat(COLOR_FormatSurface); } for (int32_t colorFormat : supportedColorFormats) { Loading
media/libaaudio/include/aaudio/AAudio.h +10 −2 Original line number Diff line number Diff line Loading @@ -778,8 +778,16 @@ AAUDIO_API aaudio_result_t AAudio_createStreamBuilder(AAudioStreamBuilder** buil __INTRODUCED_IN(26); /** * Request an audio device identified device using an ID. * On Android, for example, the ID could be obtained from the Java AudioManager. * Request an audio device identified by an ID. * * The ID could be obtained from the Java AudioManager. * AudioManager.getDevices() returns an array of {@link AudioDeviceInfo}, * which contains a getId() method. That ID can be passed to this function. * * It is possible that you may not get the device that you requested. * So if it is important to you, you should call * AAudioStream_getDeviceId() after the stream is opened to * verify the actual ID. * * The default, if you do not call this function, is {@link #AAUDIO_UNSPECIFIED}, * in which case the primary device will be used. Loading