shithub: treason

Download patch

ref: 978f94bf9b2f384157f14c3ee436206a5d6b6450
parent: 9bbed008d94cd67aacccfcb7128a2510a77a16b2
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Mon Dec 14 09:16:31 EST 2020

display how late the video is, and audio stream information

--- a/main.c
+++ b/main.c
@@ -21,6 +21,7 @@
 static int showinfo;
 static uvlong dispdelay;
 static int framedrop;
+static uvlong late;
 
 static void
 audioproc(void *x)
@@ -53,12 +54,18 @@
 	uvlong x, end, left;
 	Rectangle r, clip;
 
+	x = nanosec();
 	if(lastframe == 0)
-		lastframe = nanosec();
+		lastframe = x;
 
 	end = lastframe + f->dt - dispdelay;
-	if(framedrop && dispdelay > 0 && nanosec() >= end+dispdelay)
-		goto drop;
+	if(dispdelay > 0 && x >= end+dispdelay){
+		late = x - (end+dispdelay);
+		if(framedrop)
+			goto drop;
+	}else{
+		late = 0;
+	}
 
 	lockdisplay(display);
 
@@ -234,14 +241,16 @@
 			case Cframe:
 				snprint(
 					info, sizeof(info),
-					"decode=%zdms yuv→rgb=%zdms display=%zdms total=%zdms %dx%d %s %s",
+					"decode=%-5zd yuv→rgb=%-3zd display=%-3zd total=%-3zd late=%-3zd %dx%d %s %s %s",
 					d->decodetime/1000000ULL,
 					dispdelay/1000000ULL,
 					yuv→rgb/1000000ULL,
 					(d->decodetime + dispdelay + yuv→rgb)/1000000ULL,
+					late/1000000ULL,
 					frame->w, frame->h,
 					d->info,
-					d->s->info
+					d->s->info,
+					saudio ? saudio->info : "no audio"
 				);
 				drawframe(frame);
 				break;
--- a/misc.c
+++ b/misc.c
@@ -25,6 +25,15 @@
 	return i < nelem(fmts) ? i : -1;
 }
 
+char *
+fmt2str(int fmt)
+{
+	if(fmt >= 0 && fmt < nelem(fmts))
+		return fmts[fmt];
+
+	return "???";
+}
+
 uvlong
 nanosec(void)
 {
--- a/misc.h
+++ b/misc.h
@@ -1,4 +1,5 @@
 int str2fmt(char *s);
+char *fmt2str(int fmt);
 uvlong nanosec(void);
 void yuv420_rgb24(
 	int width, int height,
--- a/stream_mc.c
+++ b/stream_mc.c
@@ -38,24 +38,6 @@
 	return pid;
 }
 
-static int
-audfmt(char *fmt)
-{
-	static char *fmts[] = {
-		[FmtAAC] = "aac",
-		[FmtOpus] = "opus",
-		[FmtVorbis] = "vorbis",
-	};
-	int i;
-
-	for(i = 0; i < nelem(fmts); i++){
-		if(fmts[i] != nil && strcmp(fmt, fmts[i]) == 0)
-			return i;
-	}
-
-	return -1;
-}
-
 static void
 freeaux(void *aux)
 {
@@ -113,9 +95,10 @@
 						ns++;
 					}
 				}
-			}else if(naudio < 1 && strcmp(v[1], "audio") == 0 && (s->fmt = audfmt(v[2])) >= 0){
+			}else if(naudio < 1 && strcmp(v[1], "audio") == 0 && (s->fmt = str2fmt(v[2])) >= 0){
 				s->audio.nchan = atoi(v[3]);
 				s->audio.srate = atoi(v[4]);
+				snprint(s->info, sizeof(s->info), "%s (%d %d)", v[2], s->audio.nchan, s->audio.srate);
 				if(mcfs(argv, &sp) > 0 && audopenfd(sp, s, failed) == 0){
 					naudio++;
 					ns++;