Wenn man den Patch von kls hernimmt, fällt mir auf die Schnelle sowas ein (ungetestet):
diff --git a/displayreplay.c b/displayreplay.c
index 3b09d57..d656143 100644
--- a/displayreplay.c
+++ b/displayreplay.c
@@ -243,6 +243,7 @@ void cLCARSNGDisplayReplay::DrawBlinkingRec(void)
void cLCARSNGDisplayReplay::SetRecording(const cRecording *Recording)
{
fps = Recording->FramesPerSecond();
+ totalMarks = Recording->NumFramesAfterEdit();
if (PosterPixmap) {
osd->DestroyPixmap(PosterPixmap);
@@ -416,9 +417,12 @@ void cLCARSNGDisplayReplay::SetCurrent(const char *Current)
// Display total time above progressbar
if (isRecording && !(total > framesTotal))
endTime = cString::sprintf("%s: %s / %s", tr("length"), *IndexToHMSF(total, false, fps), *IndexToHMSF(framesTotal, false, fps));
- else
- endTime = cString::sprintf("%s: %s", tr("length"), *IndexToHMSF(total, false, fps));
-
+ else {
+ if (totalMarks > 0)
+ endTime = cString::sprintf("%s: %s / %s", tr("length"), *IndexToHMSF(total, false, fps), *IndexToHMSF(totalMarks, false, fps));
+ else
+ endTime = cString::sprintf("%s: %s", tr("length"), *IndexToHMSF(total, false, fps));
+ }
int wT = osdFont->Width(*endTime) + 2 * textBorder;
DrawText(ReplayPixmap, xp15 - wT, yp06, *endTime, Theme.Color(clrReplayPosition), textColorBg, osdFont, max(lastTotalWidth, wT), 0, taCenter | taBorder);
lastTotalWidth = wT;
diff --git a/displayreplay.h b/displayreplay.h
index d481973..f32fbf2 100644
--- a/displayreplay.h
+++ b/displayreplay.h
@@ -21,6 +21,7 @@ private:
int smlLineHeight;
int current = 0;
int total = 0;
+ int totalMarks = 0;
tColor frameColorFg;
tColor frameColorBg;
tColor frameColorBr;
Alles anzeigen
Wie und wo auch immer man das ausgeben möchte.
Für die Realtime-Restlaufzeit stelle ich mir das so vor:
In ::SetRecording erstmal *Recording oder *Marks in die cLCARSNGDisplayReplay Klasse holen
Mit dem Parameter Current aus SetProgress(Current, Total) und den Marken könnte man dann quasi ein CurrentMarks ermitteln, das genau um die frames niedriger als Current ist, die sich vor Current nicht in einem in-Block befinden.
Und dann hätte man alle Parameter, um die aktuelle Position und Restlaufzeit bezogen auf geschnittene Bereiche auszugeben.
Wenn ich drüber nachdenke, ist es wohl doch nicht so schwierig, oder habe ich einen Denkfehler?
Das I-Tüpfelchen wäre, wenn entweder VDR hier eine Funktion wie SetProgressEdited(CurrentEdited, TotalEdited) eingebaut bekommen würde, dann kämen die beiden Variablen schon von VDR - der sie aber dann vorher natürlich ausrechnen müsste...
Ein Marks::GetCurrentFramesAfterEdit(int Current) würde es auch schon tun...
Im Plugin sollte es ohne VDR aber auch gehen.