/**
     * Test time parsing to seconds
    */
    function testParseTimeString() {
    	// Some time conversions:
    	$this->assertEquals( TimedMediaHandler::parseTimeString( 100 ), 100 );
    	$this->assertEquals( TimedMediaHandler::parseTimeString( '1:0:0' ), 3600 );
    	$this->assertEquals( TimedMediaHandler::parseTimeString( -1 ), 0 );
    	// Test longer than duration check ( should return time -1 ) 
    	$this->assertEquals( TimedMediaHandler::parseTimeString( 10, 9 ), 8 );
    	
    	// Test failures:
    	$this->assertEquals( TimedMediaHandler::parseTimeString( '1:1:1:1' ), false );
    	$this->assertEquals( TimedMediaHandler::parseTimeString( 'abc' ), false );
    	
    }
	static function getThumbTime( $options ){
		$length = $options['file']->getLength();
		$thumbtime = false;

		// If start time param isset use that for the thumb:
		if(  isset( $options['start'] ) ) {
			$thumbtime = TimedMediaHandler::parseTimeString( $options['start'], $length );
			if( $thumbtime )
		 		return $thumbtime;
		}
		// else use thumbtime
		if ( isset( $options['thumbtime'] ) ) {
		 	$thumbtime = TimedMediaHandler::parseTimeString( $options['thumbtime'], $length );
		 	if( $thumbtime )
		 		return $thumbtime;
		}
		// Seek to midpoint by default, it tends to be more interesting than the start
		return $length / 2;
	}
 function runCheckJobThreadsLoop()
 {
     global $IP, $wgTranscodeBackgroundTimeLimit;
     // Check if we have $threads number of webTranscode jobs running else sleep
     $runingJobsCount = 0;
     foreach ($this->getProcessList() as $pid => $proc) {
         // Check that the process is a "runJobs.php" action with type webVideoTranscode argument
         if (strpos($proc['args'], 'runJobs.php') !== false && strpos($proc['args'], '--type webVideoTranscode') !== false) {
             if (TimedMediaHandler::parseTimeString($proc['time']) > $wgTranscodeBackgroundTimeLimit) {
                 // should probably "kill" the process
                 $killSuccess = posix_kill($pid);
                 $this->output("Trying to expire transcode job: " . $pid . " result:" . $killSuccess);
             } else {
                 // Job is oky add to count:
                 $runingJobsCount++;
             }
         }
     }
     if ($runingJobsCount < $this->threads) {
         // Add one process:
         $parameters = array();
         if ($this->wiki) {
             $parameters[] = '--wiki';
             $parameters[] = $this->wiki;
         }
         $parameters[] = '--type';
         $parameters[] = 'webVideoTranscode';
         $parameters[] = '--maxjobs';
         $parameters[] = '1';
         $parameters[] = '--maxtime';
         $parameters[] = $wgTranscodeBackgroundTimeLimit;
         $cmd = wfShellMaintenanceCmd("{$IP}/maintenance/runJobs.php", $parameters);
         $status = $this->runBackgroundProc($cmd);
         $this->output("{$runingJobsCount} existing job runners, Check for new transcode jobs:  ");
     } else {
         // Just output a "tick"
         $this->output("{$runingJobsCount} transcode jobs active:\n");
     }
 }
	function getTemporalUrlHash(){
		if( $this->hashTime ){
			return $this->hashTime;
		}
		$hash ='';
		if( $this->start ){
			$startSec = TimedMediaHandler::parseTimeString( $this->start );
			if( $startSec !== false ){
				$hash.= '#t=' . TimedMediaHandler::seconds2npt( $startSec );
			}
		}
		if( $this->end ){
			if( $hash == '' ){
				$hash .= '#t=0';
			}
			$endSec = TimedMediaHandler::parseTimeString( $this->end );
			if( $endSec !== false ){
				$hash.= ',' . TimedMediaHandler::seconds2npt( $endSec );
			}
		}
		$this->hashTime = $hash;
		return $this->hashTime;
	}