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; } }
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); } }