Loading media/libmedia/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -207,6 +207,7 @@ cc_library { ], ], shared_libs: [ shared_libs: [ "android.hidl.token@1.0-utils", "liblog", "liblog", "libcutils", "libcutils", "libutils", "libutils", Loading media/libstagefright/include/media/stagefright/PersistentSurface.h +24 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <android/IGraphicBufferSource.h> #include <android/IGraphicBufferSource.h> #include <binder/Parcel.h> #include <binder/Parcel.h> #include <hidl/HidlSupport.h> #include <hidl/HidlSupport.h> #include <hidl/HybridInterface.h> #include <gui/IGraphicBufferProducer.h> #include <gui/IGraphicBufferProducer.h> #include <media/stagefright/foundation/ABase.h> #include <media/stagefright/foundation/ABase.h> Loading Loading @@ -59,7 +60,19 @@ struct PersistentSurface : public RefBase { status_t writeToParcel(Parcel *parcel) const { status_t writeToParcel(Parcel *parcel) const { parcel->writeStrongBinder(IInterface::asBinder(mBufferProducer)); parcel->writeStrongBinder(IInterface::asBinder(mBufferProducer)); // this can handle null parcel->writeStrongBinder(IInterface::asBinder(mBufferSource)); parcel->writeStrongBinder(IInterface::asBinder(mBufferSource)); // write hidl target if (mHidlTarget != nullptr) { HalToken token; bool result = createHalToken(mHidlTarget, &token); parcel->writeBool(result); if (result) { parcel->writeByteArray(token.size(), token.data()); } } else { parcel->writeBool(false); } return NO_ERROR; return NO_ERROR; } } Loading @@ -68,6 +81,17 @@ struct PersistentSurface : public RefBase { parcel->readStrongBinder()); parcel->readStrongBinder()); mBufferSource = interface_cast<IGraphicBufferSource>( mBufferSource = interface_cast<IGraphicBufferSource>( parcel->readStrongBinder()); parcel->readStrongBinder()); // read hidl target bool haveHidlTarget = parcel->readBool(); if (haveHidlTarget) { std::vector<uint8_t> tokenVector; parcel->readByteVector(&tokenVector); HalToken token = HalToken(tokenVector); mHidlTarget = retrieveHalInterface(token); deleteHalToken(token); } else { mHidlTarget.clear(); } return NO_ERROR; return NO_ERROR; } } Loading Loading
media/libmedia/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -207,6 +207,7 @@ cc_library { ], ], shared_libs: [ shared_libs: [ "android.hidl.token@1.0-utils", "liblog", "liblog", "libcutils", "libcutils", "libutils", "libutils", Loading
media/libstagefright/include/media/stagefright/PersistentSurface.h +24 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <android/IGraphicBufferSource.h> #include <android/IGraphicBufferSource.h> #include <binder/Parcel.h> #include <binder/Parcel.h> #include <hidl/HidlSupport.h> #include <hidl/HidlSupport.h> #include <hidl/HybridInterface.h> #include <gui/IGraphicBufferProducer.h> #include <gui/IGraphicBufferProducer.h> #include <media/stagefright/foundation/ABase.h> #include <media/stagefright/foundation/ABase.h> Loading Loading @@ -59,7 +60,19 @@ struct PersistentSurface : public RefBase { status_t writeToParcel(Parcel *parcel) const { status_t writeToParcel(Parcel *parcel) const { parcel->writeStrongBinder(IInterface::asBinder(mBufferProducer)); parcel->writeStrongBinder(IInterface::asBinder(mBufferProducer)); // this can handle null parcel->writeStrongBinder(IInterface::asBinder(mBufferSource)); parcel->writeStrongBinder(IInterface::asBinder(mBufferSource)); // write hidl target if (mHidlTarget != nullptr) { HalToken token; bool result = createHalToken(mHidlTarget, &token); parcel->writeBool(result); if (result) { parcel->writeByteArray(token.size(), token.data()); } } else { parcel->writeBool(false); } return NO_ERROR; return NO_ERROR; } } Loading @@ -68,6 +81,17 @@ struct PersistentSurface : public RefBase { parcel->readStrongBinder()); parcel->readStrongBinder()); mBufferSource = interface_cast<IGraphicBufferSource>( mBufferSource = interface_cast<IGraphicBufferSource>( parcel->readStrongBinder()); parcel->readStrongBinder()); // read hidl target bool haveHidlTarget = parcel->readBool(); if (haveHidlTarget) { std::vector<uint8_t> tokenVector; parcel->readByteVector(&tokenVector); HalToken token = HalToken(tokenVector); mHidlTarget = retrieveHalInterface(token); deleteHalToken(token); } else { mHidlTarget.clear(); } return NO_ERROR; return NO_ERROR; } } Loading