Set null sideband handle for non-tunneled playback.
If a surface is used in tunneled mode before, CCodec should reset
sideband handle to null for it while using it in non-tunneled mode.
Test:
Netflix playback pass
Bug: 201626994
Change-Id: I816494956f86fde381754b341042ddb8c8719821
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 10a6896..a2aefc0 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -1854,9 +1854,11 @@
{
Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
const std::unique_ptr<Config> &config = *configLocked;
+ sp<ANativeWindow> nativeWindow = static_cast<ANativeWindow *>(surface.get());
+ status_t err = OK;
+
if (config->mTunneled && config->mSidebandHandle != nullptr) {
- sp<ANativeWindow> nativeWindow = static_cast<ANativeWindow *>(surface.get());
- status_t err = native_window_set_sideband_stream(
+ err = native_window_set_sideband_stream(
nativeWindow.get(),
const_cast<native_handle_t *>(config->mSidebandHandle->handle()));
if (err != OK) {
@@ -1864,6 +1866,15 @@
nativeWindow.get(), config->mSidebandHandle->handle(), err);
return err;
}
+ } else {
+ // Explicitly reset the sideband handle of the window for
+ // non-tunneled video in case the window was previously used
+ // for a tunneled video playback.
+ err = native_window_set_sideband_stream(nativeWindow.get(), nullptr);
+ if (err != OK) {
+ ALOGE("native_window_set_sideband_stream(nullptr) failed! (err %d).", err);
+ return err;
+ }
}
}
return mChannel->setSurface(surface);