大家新年好:
这两天再看android中Acodec.cpp中的代码,对google这样的代码层次不是很明白,请指点写,谢谢!
Acodec.cpp中把每个状态单独写成一个类,然后在代码中调用这个类。
定于如下:
sp<UninitializedState> mUninitializedState;
sp<LoadedToIdleState> mLoadedToIdleState;
sp<IdleToExecutingState> mIdleToExecutingState;
sp<ExecutingState> mExecutingState;
sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState;
sp<ExecutingToIdleState> mExecutingToIdleState;
sp<IdleToLoadedState> mIdleToLoadedState;
sp<FlushingState> mFlushingState;举例说明每个类的写法:
struct ACodec::IdleToLoadedState : public ACodec::BaseState {
IdleToLoadedState(ACodec *codec);protected:
virtual bool onMessageReceived(const sp<AMessage> &msg);
virtual void stateEntered(); virtual bool onOMXEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2);private:
DISALLOW_EVIL_CONSTRUCTORS(IdleToLoadedState);
};使用是这样的:
void ACodec::ExecutingToIdleState::changeStateIfWeOwnAllBuffers() {
if (mCodec->allYourBuffersAreBelongToUs()) {
CHECK_EQ(mCodec->mOMX->sendCommand(
mCodec->mNode, OMX_CommandStateSet, OMX_StateLoaded),
(status_t)OK); CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexInput), (status_t)OK);
CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexOutput), (status_t)OK); mCodec->changeState(mCodec->mIdleToLoadedState);
}
}我想问的是: 这样每个状态单独定义成一个类,然后切换状态就变成了在多个类中相互切换。 这样做比 在一个大类中定义几个函数,然后在函数中相互切换,哪里有优势,谢谢!
这两天再看android中Acodec.cpp中的代码,对google这样的代码层次不是很明白,请指点写,谢谢!
Acodec.cpp中把每个状态单独写成一个类,然后在代码中调用这个类。
定于如下:
sp<UninitializedState> mUninitializedState;
sp<LoadedToIdleState> mLoadedToIdleState;
sp<IdleToExecutingState> mIdleToExecutingState;
sp<ExecutingState> mExecutingState;
sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState;
sp<ExecutingToIdleState> mExecutingToIdleState;
sp<IdleToLoadedState> mIdleToLoadedState;
sp<FlushingState> mFlushingState;举例说明每个类的写法:
struct ACodec::IdleToLoadedState : public ACodec::BaseState {
IdleToLoadedState(ACodec *codec);protected:
virtual bool onMessageReceived(const sp<AMessage> &msg);
virtual void stateEntered(); virtual bool onOMXEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2);private:
DISALLOW_EVIL_CONSTRUCTORS(IdleToLoadedState);
};使用是这样的:
void ACodec::ExecutingToIdleState::changeStateIfWeOwnAllBuffers() {
if (mCodec->allYourBuffersAreBelongToUs()) {
CHECK_EQ(mCodec->mOMX->sendCommand(
mCodec->mNode, OMX_CommandStateSet, OMX_StateLoaded),
(status_t)OK); CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexInput), (status_t)OK);
CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexOutput), (status_t)OK); mCodec->changeState(mCodec->mIdleToLoadedState);
}
}我想问的是: 这样每个状态单独定义成一个类,然后切换状态就变成了在多个类中相互切换。 这样做比 在一个大类中定义几个函数,然后在函数中相互切换,哪里有优势,谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货