+
+ if (changed & (changeState|changeVideo|changeAudio))
+ {
+ /* play, slowmotion, fast-forward */
+ int state_table[6][4] =
+ {
+ /* [stateStop] = */ {0, 0, 0},
+ /* [statePause] = */ {0, 0, 0},
+ /* [statePlay] = */ {1, 0, 0},
+ /* [stateDecoderFastForward] = */ {1, 0, m_ff_sm_ratio},
+ /* [stateHighspeedFastForward] = */ {1, 0, 1},
+ /* [stateSlowMotion] = */ {1, m_ff_sm_ratio, 0}
+ };
+ int *s = state_table[m_state];
+ if (changed & (changeState|changeVideo) && m_video)
+ {
+ m_video->setSlowMotion(s[1]);
+ m_video->setFastForward(s[2]);
+ if (s[0])
+ m_video->unfreeze();
+ else
+ m_video->freeze();
+ }
+ if (changed & (changeState|changeAudio) && m_audio)
+ {
+ if (s[0])
+ m_audio->unfreeze();
+ else
+ m_audio->freeze();
+ }
+ m_changed &= ~changeState;
+ }
+