shithub: dav1d

Download patch

ref: f11d1a90ff9b077e5d93b8a4636f8b1f142b3786
parent: f98c80c2600e237274c8b9910aa797adb7272184
author: Sigrid Haflínudóttir <ftrvxmtrx@gmail.com>
date: Mon Sep 7 06:15:02 EDT 2020

set maxframes to NPROC

--- a/src/av19.c
+++ b/src/av19.c
@@ -33,16 +33,13 @@
 // FIXME why does it need this much?
 int mainstacksize = 512*1024;
 
-enum {
-	Maxframes = 4,
-};
-
 static Player *curplayer;
 static Image *curim;
-static Channel *converters[Maxframes];
+static Channel **converters;
 static QLock framelock;
 static uvlong todisplay;
 static int resize = 1;
+static int maxframes;
 
 /* yuv→rgb by Adrien Descamps */
 
@@ -221,7 +218,7 @@
 				}
 			}else{
 				f->n = p->n++;
-				sendp(converters[f->n % Maxframes], f);
+				sendp(converters[f->n % maxframes], f);
 			}
 		}
 	}while(p->data.sz > 0 || input_read(p->dc, &p->data) == 0);
@@ -362,6 +359,7 @@
 	};
 	Mousectl *mctl;
 	Keyboardctl *kctl;
+	char *s;
 	Rune key;
 	Mouse m;
 	int i, end, done;
@@ -394,7 +392,11 @@
 	a[Cresize].c = mctl->resizec;
 	a[Ckeyboard].c = kctl->c;
 
-	for(i = 0; i < nelem(converters); i++){
+	maxframes = atoi((s = getenv("NPROC")) != nil ? s : "1");
+	if(maxframes < 1)
+		maxframes = 1;
+	converters = calloc(maxframes, sizeof(*converters));
+	for(i = 0; i < maxframes; i++){
 		converters[i] = chancreate(sizeof(Frame*), 0);
 		proccreate(converterproc, converters[i], 4096);
 	}