RecInfo::~RecInfo()
{
+ Log::getInstance()->log("RecInfo", Log::CRAZY, "Deleting recinfo: %lu, %s", numComponents, summary);
+
if (summary) delete[] summary;
for (ULONG i = 0; i < numComponents; i++)
{
- delete[] languages[i];
- delete[] descriptions[i];
+ Log::getInstance()->log("RecInfo", Log::CRAZY, "i: %lu, languages[i]=%p:%s", i, languages[i], languages[i]);
+ Log::getInstance()->log("RecInfo", Log::CRAZY, "i: %lu, descripti[i]=%p:%s", i, descriptions[i], descriptions[i]);
+ if (languages[i]) delete[] (languages[i]);
+ if (descriptions[i]) delete[] (descriptions[i]);
}
if (numComponents)
logger->log("RecInfo", Log::DEBUG, "descriptions[%lu]: %s", i, descriptions[i]);
}
}
+
+bool RecInfo::hasVideo()
+{
+ // video = 1, audio = 2
+
+ for (ULONG i = 0; i < numComponents; i++)
+ if (streams[i] == 1) return true;
+
+ return false;
+}
void print();
+ bool hasVideo();
+
private:
};
if (recInfo) delete recInfo;
recInfoFor = this;
recInfo = VDR::getInstance()->getRecInfo(fileName);
+ Log::getInstance()->log("Recording", Log::DEBUG, "Recording has loaded recInfo %p", recInfo);
}
void Recording::dropRecInfo()
#endif
+/*
+
+index.vdr file format for video:
+
+For every video frame:
+{
+ File offset 4 bytes
+ Picture type 1 byte
+ File number 1 byte
+ Zero 2 bytes
+}
+
+Picture types:
+
+#define NO_PICTURE 0
+#define I_FRAME 1
+#define P_FRAME 2
+#define B_FRAME 3
+
+*/
if (m->message == Message::PLAY_SELECTED_RECORDING)
{
- doPlay();
+ doPlay(false);
return;
}
if (m->message == Message::RESUME_SELECTED_RECORDING)
{
- doResume();
+ doPlay(true);
return;
}
}
}
}
-int VRecordingList::doPlay()
+int VRecordingList::doPlay(bool resume)
{
Recording* toPlay = getCurrentOptionRecording();
if (toPlay)
vidrec->draw();
viewman->add(vidrec);
viewman->updateView(vidrec);
- vidrec->go(0);
+ vidrec->go(resume);
return 1;
}
// should not get to here
return 0;
}
-int VRecordingList::doResume()
-{
- Recording* toResume = getCurrentOptionRecording();
-
- if (toResume)
- {
- toResume->loadRecInfo();
-
- VVideoRec* vidrec = new VVideoRec(toResume);
- vidrec->draw();
- viewman->add(vidrec);
- viewman->updateView(vidrec);
- vidrec->go(toResume->recInfo->resumePoint);
- return 1;
- }
-
-// should not get to here
- return 0;
-}
-
Recording* VRecordingList::getCurrentOptionRecording()
{
Recording* currentRec;
}
case Remote::PLAY:
{
- if (doResume()) return 2;
+ if (doPlay(true)) return 2;
return 1;
}
void doShowingBar();
void doDeleteSelected();
- int doPlay();
- int doResume();
+ int doPlay(bool resume);
void doMoveRecording(Directory* toDir);
Recording* getCurrentOptionRecording();
video = Video::getInstance();
timers = Timers::getInstance();
- // TODO Work out if is a radio stream
+ isRadio = !(rec->recInfo->hasVideo());
- player = new Player(Command::getInstance(), this, true, false);
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "hasVideo = %i", isRadio);
+
+ player = new Player(Command::getInstance(), this, true, isRadio);
player->init();
videoMode = video->getMode();
View::draw();
}
-void VVideoRec::go(ULONG startFrameNum)
+void VVideoRec::go(bool resume)
{
+ ULONG startFrameNum;
+ if (resume)
+ startFrameNum = myRec->recInfo->resumePoint;
+ else
+ startFrameNum = 0;
+
Log::getInstance()->log("VVideoRec", Log::DEBUG, "Starting stream: %s at frame: %lu", myRec->getFileName(), startFrameNum);
ULONG lengthFrames = 0;
ULLONG lengthBytes = vdr->streamRecording(myRec->getFileName(), &lengthFrames);
~VVideoRec();
void draw();
int handleCommand(int command);
- void go(ULONG startPosition);
+ void go(bool resume);
void timercall(int clientReference);
void processMessage(Message* m);
bool playing;
bool barShowing;
bool stickyBar;
+ bool isRadio;
+
void doBar(int action);
void drawBarClocks();
void stopPlay();