video->UnlockClock();
- paused=false;
omx_running=true;
setVolume(volume);
+ video->clockUnpause();
if (!video->setClockExecutingandRunning()) return 0;
int AudioOMX::pause() {
if (!initted)
return 0;
- if (!paused) {
- paused = true;
- VideoOMX *vw = (VideoOMX*) Video::getInstance();
- vw->LockClock();
- if (omx_running) {
- OMX_ERRORTYPE error;
- error = OMX_SendCommand(omx_aud_rend, OMX_CommandFlush,
- omx_rend_input_port, NULL);
- if (error != OMX_ErrorNone) {
- Log::getInstance()->log("Audio", Log::DEBUG,
- "OMX_Flush rend in failed %x", error);
- }
- if (!vw->ChangeComponentState(omx_aud_rend,OMX_StateIdle)) {
- Log::getInstance()->log("Audio", Log::DEBUG, " pause aud_rend idle ChangeComponentState");
- }
- }
- vw->UnlockClock();
- vw->clockPause();
- }
+ VideoOMX *vw = (VideoOMX*) Video::getInstance();
+ vw->clockPause();
+
return 1;
}
int AudioOMX::unPause()
{
if (!initted) return 0;
- if (paused) {
- paused=false; // may be also change omx clock
- VideoOMX *vw = (VideoOMX*) Video::getInstance();
- if (omx_running) {
- if (!vw->ChangeComponentState(omx_aud_rend,OMX_StateExecuting)) {
- Log::getInstance()->log("Audio", Log::DEBUG, " unpause aud_rend idle ChangeComponentState");
- }
- }
- vw->clockUnpause();
- }
+
+ VideoOMX *vw = (VideoOMX*) Video::getInstance();
+
+ vw->clockUnpause();
+
return 1;
}
}
if (!omx_running) return 0; // if we are not runnig do not do this
- if (paused) return 0; //Block if we pause
+ //if (paused) return 0; //Block if we pause
//Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 1");
//Log::getInstance()->log("Audio", Log::DEBUG, "DeliverMediaPacketOMX time %lld",packet.presentation_time);
outputinterlaced=interlaced;
} else {
/* analog tv case */
- Log::getInstance()->log("Video", Log::NOTICE, "No CEA and DMT modes found analog tv case?");
+ Log::getInstance()->log("Video", Log::NOTICE, "Analog tv case");
Remote::getInstance()->shutdown();
vc_tv_power_off();
SDTV_MODE_T setmode=SDTV_MODE_PAL;
void VideoOMX::clockUnpause()
{
OMX_ERRORTYPE error;
+ Log::getInstance()->log("Video", Log::NOTICE, "enter Clockunpause");
clock_mutex.Lock();
- if (clock_references>0) {
- OMX_TIME_CONFIG_CLOCKSTATETYPE clock_conf;
- memset(&clock_conf,0,sizeof(clock_conf));
- clock_conf.nSize=sizeof(clock_conf);
- clock_conf.nVersion.nVersion=OMX_VERSION;
- clock_conf.eState=OMX_TIME_ClockStateRunning;
- clock_conf.nStartTime=intToOMXTicks(0);
- clock_conf.nOffset=intToOMXTicks(0);
- clock_conf.nWaitMask=OMX_CLOCKPORT1;
- error=OMX_SetConfig(omx_clock,OMX_IndexConfigTimeClockState,&clock_conf);
+ if (clock_references>0 && clockpaused) {
+ OMX_TIME_CONFIG_SCALETYPE scale_type;
+ memset(&scale_type,0,sizeof(scale_type));
+ scale_type.nSize=sizeof(scale_type);
+ scale_type.nVersion.nVersion=OMX_VERSION;
+ scale_type.xScale=1<<16;
+ error=OMX_SetConfig(omx_clock,OMX_IndexConfigTimeScale,&scale_type);
if (error!=OMX_ErrorNone) {
- Log::getInstance()->log("Video", Log::DEBUG, "ClockUnpause IndexConfigTimeClockState failed %x", error);
+ Log::getInstance()->log("Video", Log::DEBUG, "ClockUnpause OMX_IndexConfigTimeScale failed %x", error);
}
+ Log::getInstance()->log("Video", Log::NOTICE, "set playback speed ClockUnpause");
+ clockpaused=false;
}
clock_mutex.Unlock();
}
void VideoOMX::clockPause()
{
OMX_ERRORTYPE error;
+ Log::getInstance()->log("Video", Log::NOTICE, "enter ClockPause");
clock_mutex.Lock();
- if (clock_references>0) {
- OMX_TIME_CONFIG_CLOCKSTATETYPE clock_conf;
- memset(&clock_conf,0,sizeof(clock_conf));
- clock_conf.nSize=sizeof(clock_conf);
- clock_conf.nVersion.nVersion=OMX_VERSION;
- clock_conf.eState=OMX_TIME_ClockStateStopped;
- clock_conf.nStartTime=intToOMXTicks(0);
- clock_conf.nOffset=intToOMXTicks(0);
- clock_conf.nWaitMask=OMX_CLOCKPORT1;
- error=OMX_SetConfig(omx_clock,OMX_IndexConfigTimeClockState,&clock_conf);
+ if (clock_references>0 && !clockpaused) {
+ OMX_TIME_CONFIG_SCALETYPE scale_type;
+ memset(&scale_type,0,sizeof(scale_type));
+ scale_type.nSize=sizeof(scale_type);
+ scale_type.nVersion.nVersion=OMX_VERSION;
+ scale_type.xScale=0;
+ error=OMX_SetConfig(omx_clock,OMX_IndexConfigTimeScale,&scale_type);
if (error!=OMX_ErrorNone) {
- Log::getInstance()->log("Video", Log::DEBUG, "ClockUnpause IndexConfigTimeClockState failed %x", error);
+ Log::getInstance()->log("Video", Log::DEBUG, "ClockPause OMX_IndexConfigTimeScale failed %x", error);
}
+ Log::getInstance()->log("Video", Log::NOTICE, "set playback speed ClockPause");
+ clockpaused=true;
}
clock_mutex.Unlock();
}
//playbacktimeoffset=-GetCurrentSystemTime();
- paused=false;
+
iframemode=false;
omx_running=true;
clock_mutex.Unlock();
+ clockUnpause();
updateMode();
setClockExecutingandRunning();
{
if (!initted) return 0;
Log::getInstance()->log("Video", Log::DEBUG, "enter pause");
- if (!paused) {
- paused=true;
- //maybe also change omx clock?
- //pausetimecode=GetCurrentSystemTime();
-
- }
+ // clockPause();
+ // ignore it audio handles this
return 1;
}
if (!initted) return 0;
Log::getInstance()->log("Video", Log::DEBUG, "enter unpause");
- if (paused) {
- // playbacktimeoffset+=GetCurrentSystemTime()-pausetimecode;
- paused=false; // may be also change omx clock
- }
+ //clockUnpause();
+ //ignore it audio handles this
return 1;
}
if (!omx_running) return 0; // if we are not runnig do not do this
- if (paused) return 0; //Block if we pause
+ //if (paused) return 0; //Block if we pause
// Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 1");
//Log::getInstance()->log("Video", Log::DEBUG, "DeliverMediaPacketOMX time %lld",packet.presentation_time);