void
MediaCodecDataDecoder::State(ModuleState aState)
{
  LOG("%s -> %s", ModuleStateStr(mState), ModuleStateStr(aState));

  if (aState == kDrainDecoder) {
    MOZ_ASSERT(mState == kDrainQueue);
  } else if (aState == kDrainWaitEOS) {
    MOZ_ASSERT(mState == kDrainDecoder);
  }

  mState = aState;
}
bool
MediaCodecDataDecoder::State(ModuleState aState)
{
  bool ok = true;

  if (mState == kShutdown) {
    ok = false;
  } else if (mState == kStopping) {
    ok = aState == kShutdown;
  } else if (aState == kDrainDecoder) {
    ok = mState == kDrainQueue;
  } else if (aState == kDrainWaitEOS) {
    ok = mState == kDrainDecoder;
  }

  if (ok) {
    LOG("%s -> %s", ModuleStateStr(mState), ModuleStateStr(aState));
    mState = aState;
  }

  return ok;
}
bool
MediaCodecDataDecoder::SetState(ModuleState aState)
{
  bool ok = true;

  if (mState == ModuleState::kShutdown) {
    ok = false;
  } else if (mState == ModuleState::kStopping) {
    ok = aState == ModuleState::kShutdown;
  } else if (aState == ModuleState::kDrainDecoder) {
    ok = mState == ModuleState::kDrainQueue;
  } else if (aState == ModuleState::kDrainWaitEOS) {
    ok = mState == ModuleState::kDrainDecoder;
  }

  if (ok) {
    LOG("%s -> %s", ModuleStateStr(mState), ModuleStateStr(aState));
    mState = aState;
  } else {
    LOG("Fail to transit from %s to %s state", ModuleStateStr(mState), ModuleStateStr(aState));
  }

  return ok;
}