shithub: treason

Download patch

ref: eac7952b194921bd8792d5d35675bd7a4721c8cf
parent: 079f7c650735d150aec2a00630b7958915815095
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Fri Jan 29 20:00:48 EST 2021

install.rc: apply sane defaults and seek patches from qwx as well

--- a/decoder_h264.c
+++ b/decoder_h264.c
@@ -46,18 +46,20 @@
 {
 	int i, firstvalid;
 
-	if(a->ctx.pLastDecPicInfo->pPreviousDecodedPictureInDpb && a->ctx.pLastDecPicInfo->pPreviousDecodedPictureInDpb->bNewSeqBegin){
-		a->lastgopremain = a->npics;
+	if(a->npics > 0){
+		if(a->ctx.pLastDecPicInfo->pPreviousDecodedPictureInDpb && a->ctx.pLastDecPicInfo->pPreviousDecodedPictureInDpb->bNewSeqBegin){
+			a->lastgopremain = a->npics;
 
-		for(i = 0; i <= a->lbufpicind; i++)
-			a->pics[i].bLastGOP = a->pics[i].iPOC > IMinInt32;
-	}else{
-		for(i = 0; i <= a->lbufpicind; i++){
-			if(a->pics[i].iPOC == a->ctx.pSliceHeader->iPicOrderCntLsb){
-				a->lastgopremain = a->npics;
-				for(i = 0; i <= a->lbufpicind; i++)
-					a->pics[i].bLastGOP = a->pics[i].iPOC > IMinInt32;
-				break;
+			for(i = 0; i <= a->lbufpicind; i++)
+				a->pics[i].bLastGOP = a->pics[i].iPOC > IMinInt32;
+		}else{
+			for(i = 0; i <= a->lbufpicind; i++){
+				if(a->pics[i].iPOC == a->ctx.pSliceHeader->iPicOrderCntLsb){
+					a->lastgopremain = a->npics;
+					for(i = 0; i <= a->lbufpicind; i++)
+						a->pics[i].bLastGOP = a->pics[i].iPOC > IMinInt32;
+					break;
+				}
 			}
 		}
 	}
@@ -65,7 +67,6 @@
 	for(i = 0; i < nelem(a->pics); i++){
 		if(a->pics[i].iPOC == IMinInt32){
 			memmove(&a->pics[i].sBufferInfo, &a->info, sizeof(a->info));
-			a->pics[i].uiDecodingTimeStamp = ts;
 			a->pics[i].iPOC = a->ctx.pSliceHeader->iPicOrderCntLsb;
 			a->pics[i].iPicBuffIdx = a->ctx.pLastDecPicInfo->pPreviousDecodedPictureInDpb->iPicBuffIdx;
 			a->pics[i].uiDecodingTimeStamp = ts;
@@ -138,7 +139,7 @@
 	}
 	if(a->minpoc > IMinInt32 && ((a->lastwritten > IMinInt32 && a->minpoc - a->lastwritten <= 1) || a->minpoc < a->ctx.pSliceHeader->iPicOrderCntLsb)){
 		a->lastwritten = a->minpoc;
-		memmove(&a->info, &a->pics[a->picind].sBufferInfo, sizeof (SBufferInfo));
+		memmove(&a->info, &a->pics[a->picind].sBufferInfo, sizeof(a->info));
 		a->data[0] = a->info.pDst[0];
 		a->data[1] = a->info.pDst[1];
 		a->data[2] = a->info.pDst[2];
@@ -212,8 +213,20 @@
 	lasttimestamp = 0;
 	start = nanosec();
 	for(res = 0, framenum = 0; res >= 0 && (res = Sread(d->s, &sf)) == 0 && sf.sz > 0; framenum++){
-		fprint(2, "%d %.*H\n", framenum, MIN(32, sf.sz), sf.buf);
+		a->ctx.iErrorCode = dsErrorFree;
+		a->ctx.iFeedbackVclNalInAu = FEEDBACK_UNKNOWN_NAL;
+	    a->ctx.uiTimeStamp = a->info.uiInBsTimeStamp;
+		memset(&a->info, 0, sizeof(a->info));
+		memset(a->data, 0, sizeof(a->data));
+		a->ctx.bReferenceLostAtT0Flag = false;
+		a->ctx.bCurAuContainLtrMarkSeFlag = false;
+		a->ctx.iFrameNumOfAuMarkedLtr = 0;
+		a->ctx.iFrameNum = -1;
+		a->ctx.iFeedbackTidInAu = -1;
+		a->ctx.iFeedbackNalRefIdc = -1;
 		if((res = WelsDecodeBs(&a->ctx, sf.buf, sf.sz, a->data, &a->info, nil)) != 0){
+			if(a->ctx.iErrorCode & dsOutOfMemory)
+				continue;
 			werrstr("%s on frame %llud: %.*H", err2s(res), framenum, MIN(32, sf.sz), sf.buf);
 			break;
 		}
--- a/install.rc
+++ b/install.rc
@@ -49,9 +49,16 @@
 echo downloading alienpatch and building all things opus
 test -d alienpatch || { hget https://github.com/qwx9/alienpatch/archive/master.tar.gz | tar xz && \
 	mv alienpatch-master alienpatch && \
-	for(i in opus libopusenc opusfile opus-tools) { \
+	for(i in opus libopusenc opusfile opus-tools){ \
 		cd $i; \
 		ape/patch -p0 <../alienpatch/$i || echo failed; \
+		cd ..; \
+	} && \
+	cd opus-tools && ape/patch -p0 <../alienpatch/opus-tools-defaults && \
+	                 ape/patch -p0 <../alienpatch/opus-tools-seek && \
+	cd .. && \
+	for(i in opus libopusenc opusfile opus-tools){ \
+		cd $i; \
 		mk install; \
 		cd ..; \
 	}