Loading include/media/stagefright/ACodec.h +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ struct ACodec : public AHierarchicalStateMachine { kWhatInputSurfaceCreated = 'isfc', kWhatSignaledInputEOS = 'seos', kWhatBuffersAllocated = 'allc', kWhatOMXDied = 'OMXd', }; ACodec(); Loading Loading @@ -97,6 +98,7 @@ private: struct ExecutingToIdleState; struct IdleToLoadedState; struct FlushingState; struct DeathNotifier; enum { kWhatSetup = 'setu', Loading media/libstagefright/ACodec.cpp +49 −8 Original line number Diff line number Diff line Loading @@ -166,6 +166,24 @@ private: //////////////////////////////////////////////////////////////////////////////// struct ACodec::DeathNotifier : public IBinder::DeathRecipient { DeathNotifier(const sp<AMessage> ¬ify) : mNotify(notify) { } virtual void binderDied(const wp<IBinder> &) { mNotify->post(); } protected: virtual ~DeathNotifier() {} private: sp<AMessage> mNotify; DISALLOW_EVIL_CONSTRUCTORS(DeathNotifier); }; struct ACodec::UninitializedState : public ACodec::BaseState { UninitializedState(ACodec *codec); Loading @@ -177,6 +195,8 @@ private: void onSetup(const sp<AMessage> &msg); bool onAllocateComponent(const sp<AMessage> &msg); sp<DeathNotifier> mDeathNotifier; DISALLOW_EVIL_CONSTRUCTORS(UninitializedState); }; Loading Loading @@ -2479,6 +2499,13 @@ bool ACodec::BaseState::onMessageReceived(const sp<AMessage> &msg) { return true; } case ACodec::kWhatOMXDied: { ALOGE("OMX/mediaserver died, signalling error!"); mCodec->signalError(OMX_ErrorResourcesLost, DEAD_OBJECT); break; } default: return false; } Loading Loading @@ -3027,6 +3054,18 @@ ACodec::UninitializedState::UninitializedState(ACodec *codec) void ACodec::UninitializedState::stateEntered() { ALOGV("Now uninitialized"); if (mDeathNotifier != NULL) { mCodec->mOMX->asBinder()->unlinkToDeath(mDeathNotifier); mDeathNotifier.clear(); } mCodec->mNativeWindow.clear(); mCodec->mNode = NULL; mCodec->mOMX.clear(); mCodec->mQuirks = 0; mCodec->mFlags = 0; mCodec->mComponentName.clear(); } bool ACodec::UninitializedState::onMessageReceived(const sp<AMessage> &msg) { Loading Loading @@ -3098,6 +3137,15 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) { sp<IOMX> omx = client.interface(); sp<AMessage> notify = new AMessage(kWhatOMXDied, mCodec->id()); mDeathNotifier = new DeathNotifier(notify); if (omx->asBinder()->linkToDeath(mDeathNotifier) != OK) { // This was a local binder, if it dies so do we, we won't care // about any notifications in the afterlife. mDeathNotifier.clear(); } Vector<OMXCodec::CodecNameAndQuirks> matchingCodecs; AString mime; Loading Loading @@ -3162,7 +3210,7 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) { return false; } sp<AMessage> notify = new AMessage(kWhatOMXMessage, mCodec->id()); notify = new AMessage(kWhatOMXMessage, mCodec->id()); observer->setNotificationMessage(notify); mCodec->mComponentName = componentName; Loading Loading @@ -3216,13 +3264,6 @@ void ACodec::LoadedState::onShutdown(bool keepComponentAllocated) { if (!keepComponentAllocated) { CHECK_EQ(mCodec->mOMX->freeNode(mCodec->mNode), (status_t)OK); mCodec->mNativeWindow.clear(); mCodec->mNode = NULL; mCodec->mOMX.clear(); mCodec->mQuirks = 0; mCodec->mFlags = 0; mCodec->mComponentName.clear(); mCodec->changeState(mCodec->mUninitializedState); } Loading media/libstagefright/OMXClient.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ struct MuxOMX : public IOMX { MuxOMX(const sp<IOMX> &remoteOMX); virtual ~MuxOMX(); virtual IBinder *onAsBinder() { return NULL; } virtual IBinder *onAsBinder() { return mRemoteOMX->asBinder().get(); } virtual bool livesLocally(node_id node, pid_t pid); Loading Loading
include/media/stagefright/ACodec.h +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ struct ACodec : public AHierarchicalStateMachine { kWhatInputSurfaceCreated = 'isfc', kWhatSignaledInputEOS = 'seos', kWhatBuffersAllocated = 'allc', kWhatOMXDied = 'OMXd', }; ACodec(); Loading Loading @@ -97,6 +98,7 @@ private: struct ExecutingToIdleState; struct IdleToLoadedState; struct FlushingState; struct DeathNotifier; enum { kWhatSetup = 'setu', Loading
media/libstagefright/ACodec.cpp +49 −8 Original line number Diff line number Diff line Loading @@ -166,6 +166,24 @@ private: //////////////////////////////////////////////////////////////////////////////// struct ACodec::DeathNotifier : public IBinder::DeathRecipient { DeathNotifier(const sp<AMessage> ¬ify) : mNotify(notify) { } virtual void binderDied(const wp<IBinder> &) { mNotify->post(); } protected: virtual ~DeathNotifier() {} private: sp<AMessage> mNotify; DISALLOW_EVIL_CONSTRUCTORS(DeathNotifier); }; struct ACodec::UninitializedState : public ACodec::BaseState { UninitializedState(ACodec *codec); Loading @@ -177,6 +195,8 @@ private: void onSetup(const sp<AMessage> &msg); bool onAllocateComponent(const sp<AMessage> &msg); sp<DeathNotifier> mDeathNotifier; DISALLOW_EVIL_CONSTRUCTORS(UninitializedState); }; Loading Loading @@ -2479,6 +2499,13 @@ bool ACodec::BaseState::onMessageReceived(const sp<AMessage> &msg) { return true; } case ACodec::kWhatOMXDied: { ALOGE("OMX/mediaserver died, signalling error!"); mCodec->signalError(OMX_ErrorResourcesLost, DEAD_OBJECT); break; } default: return false; } Loading Loading @@ -3027,6 +3054,18 @@ ACodec::UninitializedState::UninitializedState(ACodec *codec) void ACodec::UninitializedState::stateEntered() { ALOGV("Now uninitialized"); if (mDeathNotifier != NULL) { mCodec->mOMX->asBinder()->unlinkToDeath(mDeathNotifier); mDeathNotifier.clear(); } mCodec->mNativeWindow.clear(); mCodec->mNode = NULL; mCodec->mOMX.clear(); mCodec->mQuirks = 0; mCodec->mFlags = 0; mCodec->mComponentName.clear(); } bool ACodec::UninitializedState::onMessageReceived(const sp<AMessage> &msg) { Loading Loading @@ -3098,6 +3137,15 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) { sp<IOMX> omx = client.interface(); sp<AMessage> notify = new AMessage(kWhatOMXDied, mCodec->id()); mDeathNotifier = new DeathNotifier(notify); if (omx->asBinder()->linkToDeath(mDeathNotifier) != OK) { // This was a local binder, if it dies so do we, we won't care // about any notifications in the afterlife. mDeathNotifier.clear(); } Vector<OMXCodec::CodecNameAndQuirks> matchingCodecs; AString mime; Loading Loading @@ -3162,7 +3210,7 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) { return false; } sp<AMessage> notify = new AMessage(kWhatOMXMessage, mCodec->id()); notify = new AMessage(kWhatOMXMessage, mCodec->id()); observer->setNotificationMessage(notify); mCodec->mComponentName = componentName; Loading Loading @@ -3216,13 +3264,6 @@ void ACodec::LoadedState::onShutdown(bool keepComponentAllocated) { if (!keepComponentAllocated) { CHECK_EQ(mCodec->mOMX->freeNode(mCodec->mNode), (status_t)OK); mCodec->mNativeWindow.clear(); mCodec->mNode = NULL; mCodec->mOMX.clear(); mCodec->mQuirks = 0; mCodec->mFlags = 0; mCodec->mComponentName.clear(); mCodec->changeState(mCodec->mUninitializedState); } Loading
media/libstagefright/OMXClient.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ struct MuxOMX : public IOMX { MuxOMX(const sp<IOMX> &remoteOMX); virtual ~MuxOMX(); virtual IBinder *onAsBinder() { return NULL; } virtual IBinder *onAsBinder() { return mRemoteOMX->asBinder().get(); } virtual bool livesLocally(node_id node, pid_t pid); Loading