Loading libs/gui/SurfaceComposerClient.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -543,9 +543,14 @@ SurfaceComposerClient::SurfaceComposerClient(const sp<IGraphicBufferProducer>& r { } SurfaceComposerClient::SurfaceComposerClient(const sp<ISurfaceComposerClient>& client) : mStatus(NO_ERROR), mClient(client) { } void SurfaceComposerClient::onFirstRef() { sp<ISurfaceComposer> sf(ComposerService::getComposerService()); if (sf != 0) { if (sf != 0 && mStatus == NO_INIT) { auto rootProducer = mParent.promote(); sp<ISurfaceComposerClient> conn; conn = (rootProducer != nullptr) ? sf->createScopedConnection(rootProducer) : Loading libs/gui/SurfaceControl.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -166,5 +166,28 @@ sp<SurfaceComposerClient> SurfaceControl::getClient() const return mClient; } void SurfaceControl::writeToParcel(Parcel* parcel) { parcel->writeStrongBinder(ISurfaceComposerClient::asBinder(mClient->getClient())); parcel->writeStrongBinder(mHandle); parcel->writeStrongBinder(IGraphicBufferProducer::asBinder(mGraphicBufferProducer)); } sp<SurfaceControl> SurfaceControl::readFromParcel(Parcel* parcel) { sp<IBinder> client = parcel->readStrongBinder(); sp<IBinder> handle = parcel->readStrongBinder(); if (client == nullptr || handle == nullptr) { ALOGE("Invalid parcel"); return nullptr; } sp<IBinder> gbp; parcel->readNullableStrongBinder(&gbp); return new SurfaceControl(new SurfaceComposerClient( interface_cast<ISurfaceComposerClient>(client)), handle.get(), interface_cast<IGraphicBufferProducer>(gbp)); } // ---------------------------------------------------------------------------- }; // namespace android libs/gui/include/gui/SurfaceComposerClient.h +1 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ class SurfaceComposerClient : public RefBase friend class Composer; public: SurfaceComposerClient(); SurfaceComposerClient(const sp<ISurfaceComposerClient>& client); SurfaceComposerClient(const sp<IGraphicBufferProducer>& parent); virtual ~SurfaceComposerClient(); Loading libs/gui/include/gui/SurfaceControl.h +3 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ class SurfaceComposerClient; class SurfaceControl : public RefBase { public: static sp<SurfaceControl> readFromParcel(Parcel* parcel); void writeToParcel(Parcel* parcel); static bool isValid(const sp<SurfaceControl>& surface) { return (surface != 0) && surface->isValid(); } Loading Loading
libs/gui/SurfaceComposerClient.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -543,9 +543,14 @@ SurfaceComposerClient::SurfaceComposerClient(const sp<IGraphicBufferProducer>& r { } SurfaceComposerClient::SurfaceComposerClient(const sp<ISurfaceComposerClient>& client) : mStatus(NO_ERROR), mClient(client) { } void SurfaceComposerClient::onFirstRef() { sp<ISurfaceComposer> sf(ComposerService::getComposerService()); if (sf != 0) { if (sf != 0 && mStatus == NO_INIT) { auto rootProducer = mParent.promote(); sp<ISurfaceComposerClient> conn; conn = (rootProducer != nullptr) ? sf->createScopedConnection(rootProducer) : Loading
libs/gui/SurfaceControl.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -166,5 +166,28 @@ sp<SurfaceComposerClient> SurfaceControl::getClient() const return mClient; } void SurfaceControl::writeToParcel(Parcel* parcel) { parcel->writeStrongBinder(ISurfaceComposerClient::asBinder(mClient->getClient())); parcel->writeStrongBinder(mHandle); parcel->writeStrongBinder(IGraphicBufferProducer::asBinder(mGraphicBufferProducer)); } sp<SurfaceControl> SurfaceControl::readFromParcel(Parcel* parcel) { sp<IBinder> client = parcel->readStrongBinder(); sp<IBinder> handle = parcel->readStrongBinder(); if (client == nullptr || handle == nullptr) { ALOGE("Invalid parcel"); return nullptr; } sp<IBinder> gbp; parcel->readNullableStrongBinder(&gbp); return new SurfaceControl(new SurfaceComposerClient( interface_cast<ISurfaceComposerClient>(client)), handle.get(), interface_cast<IGraphicBufferProducer>(gbp)); } // ---------------------------------------------------------------------------- }; // namespace android
libs/gui/include/gui/SurfaceComposerClient.h +1 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ class SurfaceComposerClient : public RefBase friend class Composer; public: SurfaceComposerClient(); SurfaceComposerClient(const sp<ISurfaceComposerClient>& client); SurfaceComposerClient(const sp<IGraphicBufferProducer>& parent); virtual ~SurfaceComposerClient(); Loading
libs/gui/include/gui/SurfaceControl.h +3 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ class SurfaceComposerClient; class SurfaceControl : public RefBase { public: static sp<SurfaceControl> readFromParcel(Parcel* parcel); void writeToParcel(Parcel* parcel); static bool isValid(const sp<SurfaceControl>& surface) { return (surface != 0) && surface->isValid(); } Loading