if (isRecording && ((lastRescan + 60) < time(NULL)))
{
streamLength = vdr->rescanRecording();
- Log::getInstance()->log("Player", Log::DEBUG, "Rescanned and reset length: %llu", streamLength);
+ logger->log("Player", Log::DEBUG, "Rescanned and reset length: %llu", streamLength);
lastRescan = time(NULL);
setEndTS();
}
{
int a_stream = demuxer.scan(threadBuffer, thisRead);
demuxer.setAudioStream(a_stream);
- Log::getInstance()->log("Player", Log::DEBUG, "Startup Audio stream chosen %x", a_stream);
+ logger->log("Player", Log::DEBUG, "Startup Audio stream chosen %x", a_stream);
setStartTS(thisRead);
if (!thisWrite)
{
-// Log::getInstance()->log("Player", Log::DEBUG, "DEMUXER FULL!!!");
+// logger->log("Player", Log::DEBUG, "DEMUXER FULL!!!");
// demuxer is full and cant take anymore
threadLock();
threadWaitForSignal();
threadUnlock();
-// Log::getInstance()->log("Player", Log::DEBUG, "BACK FROM WAIT");
+// logger->log("Player", Log::DEBUG, "BACK FROM WAIT");
}
threadCheckExit();
}
// end of recording
- Log::getInstance()->log("Player", Log::DEBUG, "Recording playback ends");
+ logger->log("Player", Log::DEBUG, "Recording playback ends");
Message* m = new Message(); // Must be done after this thread finishes, and must break into master mutex
if (streamLength) m->message = Message::STOP_PLAYBACK; // recording
else m->message = Message::STREAM_END; // live
- Log::getInstance()->log("Player", Log::DEBUG, "Posting message to %p...", commandMessageQueue);
+ logger->log("Player", Log::DEBUG, "Posting message to %p...", commandMessageQueue);
commandMessageQueue->postMessage(m);
- Log::getInstance()->log("Player", Log::DEBUG, "Message posted...");
+ logger->log("Player", Log::DEBUG, "Message posted...");
}
void Player::threadPostStopCleanup()
{
- Log::getInstance()->log("Player", Log::DEBUG, "Post stop cleanup 1");
+ logger->log("Player", Log::DEBUG, "Post stop cleanup 1");
if (threadBuffer)
{
- Log::getInstance()->log("Player", Log::DEBUG, "Post stop cleanup 2");
+ logger->log("Player", Log::DEBUG, "Post stop cleanup 2");
free(threadBuffer);
threadBuffer = NULL;
}
- Log::getInstance()->log("Player", Log::DEBUG, "Post stop cleanup 3");
+ logger->log("Player", Log::DEBUG, "Post stop cleanup 3");
}
void Player::setStartTS(UINT dataInBuffer)
void Player::setEndTS()
{
- Log::getInstance()->log("Player", Log::DEBUG, "Setting end TS");
+ logger->log("Player", Log::DEBUG, "Setting end TS");
UINT thisRead;
UCHAR* tempBuffer = VDR::getInstance()->getBlock((streamLength - 100000), 100000, &thisRead);
if (!tempBuffer) return;
if (thisRead) demuxer.findVideoPTS(tempBuffer, thisRead, &endTS);
free(tempBuffer);
- Log::getInstance()->log("Player", Log::DEBUG, "Set end TS");
+ logger->log("Player", Log::DEBUG, "Set end TS");
}
#ifdef DEV
void Player::test1()
{
- Log::getInstance()->log("Player", Log::DEBUG, "PLAYER TEST 1");
+ logger->log("Player", Log::DEBUG, "PLAYER TEST 1");
}
void Player::test2()
{
- Log::getInstance()->log("Player", Log::DEBUG, "PLAYER TEST 2");
+ logger->log("Player", Log::DEBUG, "PLAYER TEST 2");
+
+ ULLONG currentTS = getPositionTS();
+ ULONG currentFrameNumber = video->timecodeToFrameNumber(currentTS);
+ logger->log("Player", Log::DEBUG, "Current frame number: %lu", currentFrameNumber);
+
+ ULONG wantedFrameNumber = video->timecodeToFrameNumber(currentTS + (10 * 90000));
+ logger->log("Player", Log::DEBUG, "Wanted frame number: %lu", wantedFrameNumber);
+
+ ULLONG newPosition = VDR::getInstance()->positionFromFrameNumber(wantedFrameNumber);
+ logger->log("Player", Log::DEBUG, "feedpos %llu goto %llu", feedPosition, newPosition);
}
#endif
return recordingLength;
}
+ULLONG VDR::positionFromFrameNumber(ULONG frameNumber)
+{
+ if (!connected) return 0;
+
+ unsigned long totalLength = 12;
+ UCHAR buffer[totalLength];
+
+ *(unsigned long*)&buffer[0] = htonl(totalLength - 4);
+ *(unsigned long*)&buffer[4] = htonl(VDR_POSFROMFRAME);
+ *(unsigned long*)&buffer[8] = htonl(frameNumber);
+
+ pthread_mutex_lock(&mutex);
+ unsigned int a = tcp->sendPacket(buffer, totalLength);
+ if (a != totalLength)
+ {
+ pthread_mutex_unlock(&mutex);
+ return 0;
+ }
+
+ if (!getPacket())
+ {
+ pthread_mutex_unlock(&mutex);
+ return 0;
+ }
+
+ ULLONG position = extractULLONG();
+ freePacket();
+ pthread_mutex_unlock(&mutex);
+
+ Log::getInstance()->log("VDR", Log::DEBUG, "VDR said new position is: %llu", position);
+
+ return position;
+}
+
EventList* VDR::getChannelSchedule(ULONG number)
{
time_t now;