Exemple #1
0
void omxplayer_ProcessPlayerData(int bytesRead)
{
	int        ticks = 0;
	static int lastSyncCheck = 0;
	static int lastRemoteSync = 0;
	int        mins = 0;
	int        secs = 0;
	int        subsecs = 0;
	int        totalCentiSecs = 0;
	char      *ptr = NULL;

	if ((mediaOutputStatus.secondsTotal == 0) &&
		(mediaOutputStatus.minutesTotal == 0) &&
		(ptr = strstr(omxBuffer, "Duration: ")))
	{
		// Sample line format:
		// (whitespace)Duration: 00:00:37.91, start: 0.000000, bitrate: 2569 kb/s
		char *ptr2 = strchr(ptr, ',');
		if (ptr2)
		{
			*ptr2 = '\0';
			ptr = ptr + 10;

			int hours = strtol(ptr, NULL, 10);
			ptr += 3;
			mediaOutputStatus.minutesTotal = strtol(ptr, NULL, 10) + (hours * 60);
			ptr += 3;
			mediaOutputStatus.secondsTotal = strtol(ptr, NULL, 10);
		}
	}

	// Data is line buffered so all stats lines should start with "M: "
	if ((!strncmp(omxBuffer, "M:", 2)) &&
		(bytesRead > 20))
	{
		errno = 0;
		ticks = strtol(&omxBuffer[2], NULL, 10);
		if (errno) {
			LogErr(VB_MEDIAOUT, "Error parsing omxplayer output.\n");
			return;
		}
	} else {
		return;
	}

	totalCentiSecs = ticks / 10000;
	mins = totalCentiSecs / 6000;
	secs = totalCentiSecs % 6000 / 100;
	subsecs = totalCentiSecs % 100;

	mediaOutputStatus.secondsElapsed = 60 * mins + secs;

	mediaOutputStatus.subSecondsElapsed = subsecs;

	mediaOutputStatus.secondsRemaining = (mediaOutputStatus.minutesTotal * 60)
		+ mediaOutputStatus.secondsTotal - mediaOutputStatus.secondsElapsed;
	// FIXME, can we get this?
	// mediaOutputStatus.subSecondsRemaining = subsecs;

	mediaOutputStatus.mediaSeconds = (float)((float)mediaOutputStatus.secondsElapsed + ((float)mediaOutputStatus.subSecondsElapsed/(float)100));

	if (getFPPmode() == MASTER_MODE)
	{
		if ((mediaOutputStatus.secondsElapsed > 0) &&
			(lastRemoteSync != mediaOutputStatus.secondsElapsed))
		{
			SendMediaSyncPacket(mediaOutput->filename, 0,
				mediaOutputStatus.mediaSeconds);
			lastRemoteSync = mediaOutputStatus.secondsElapsed;
		}
	}

	if ((sequence->IsSequenceRunning()) &&
		(mediaOutputStatus.secondsElapsed > 0) &&
		(lastSyncCheck != mediaOutputStatus.secondsElapsed))
	{
		LogDebug(VB_MEDIAOUT,
			"Elapsed: %.2d.%.2d  Remaining: %.2d Total %.2d:%.2d.\n",
			mediaOutputStatus.secondsElapsed,
			mediaOutputStatus.subSecondsElapsed,
			mediaOutputStatus.secondsRemaining,
			mediaOutputStatus.minutesTotal,
			mediaOutputStatus.secondsTotal);

		CalculateNewChannelOutputDelay(mediaOutputStatus.mediaSeconds);
		lastSyncCheck = mediaOutputStatus.secondsElapsed;
	}
}
Exemple #2
0
void ogg123Output::ParseTimes()
{
	static int lastRemoteSync = 0;
	int result;
	int secs;
	int mins;
	int subSecs;
	char tmp[3];
	tmp[2]= '\0';

	// Mins
	tmp[0] = m_ogg123_strTime[1];
	tmp[1] = m_ogg123_strTime[2];
	sscanf(tmp,"%d",&mins);

	// Secs
	tmp[0] = m_ogg123_strTime[4];
	tmp[1] = m_ogg123_strTime[5];
	sscanf(tmp,"%d",&secs);
	m_mediaOutputStatus->secondsElapsed = 60*mins + secs;

	// Subsecs
	tmp[0] = m_ogg123_strTime[7];
	tmp[1] = m_ogg123_strTime[8];
	sscanf(tmp,"%d",&m_mediaOutputStatus->subSecondsElapsed);

	// Mins Remaining
	tmp[0] = m_ogg123_strTime[11];
	tmp[1] = m_ogg123_strTime[12];
	sscanf(tmp,"%d",&mins);

	// Secs Remaining
	tmp[0] = m_ogg123_strTime[14];
	tmp[1] = m_ogg123_strTime[15];
	sscanf(tmp,"%d",&secs);
	m_mediaOutputStatus->secondsRemaining = 60*mins + secs;

	// Subsecs remaining
	tmp[0] = m_ogg123_strTime[17];
	tmp[1] = m_ogg123_strTime[18];
	sscanf(tmp,"%d",&m_mediaOutputStatus->subSecondsRemaining);

	// Total Mins
	tmp[0] = m_ogg123_strTime[24];
	tmp[1] = m_ogg123_strTime[25];
	sscanf(tmp,"%d",&m_mediaOutputStatus->minutesTotal);

	// Total Secs
	tmp[0] = m_ogg123_strTime[27];
	tmp[1] = m_ogg123_strTime[28];
	sscanf(tmp,"%d",&m_mediaOutputStatus->secondsTotal);

	m_mediaOutputStatus->mediaSeconds = (float)((float)m_mediaOutputStatus->secondsElapsed + ((float)m_mediaOutputStatus->subSecondsElapsed/(float)100));

	if (getFPPmode() == MASTER_MODE)
	{
		if ((m_mediaOutputStatus->secondsElapsed > 0) &&
			(lastRemoteSync != m_mediaOutputStatus->secondsElapsed))
		{
			SendMediaSyncPacket(m_mediaFilename.c_str(), 0,
				m_mediaOutputStatus->mediaSeconds);
			lastRemoteSync = m_mediaOutputStatus->secondsElapsed;
		}
	}

	if ((sequence->IsSequenceRunning()) &&
		(m_mediaOutputStatus->secondsElapsed > 0))
	{
		LogExcess(VB_MEDIAOUT,
			"Elapsed: %.2d.%.2d  Remaining: %.2d Total %.2d:%.2d.\n",
			m_mediaOutputStatus->secondsElapsed,
			m_mediaOutputStatus->subSecondsElapsed,
			m_mediaOutputStatus->secondsRemaining,
			m_mediaOutputStatus->minutesTotal,
			m_mediaOutputStatus->secondsTotal);

		CalculateNewChannelOutputDelay(m_mediaOutputStatus->mediaSeconds);
	}
}