diff --git a/makePiRoot.sh b/makePiRoot.sh index f6bd22f0a..a790edeaa 100755 --- a/makePiRoot.sh +++ b/makePiRoot.sh @@ -23,11 +23,17 @@ sudo cp -ax /tmp/mnt-${DIST}/. ${DIST}/ sudo chown -R ${MY_UID}:${MY_GID} ${DIST} sudo umount /tmp/mnt-${DIST} +sed -i 's/#deb/deb/g' buster/etc/apt/sources.list +sed -i 's/#deb/deb/g' buster/etc/apt/sources.list.d/raspi.list + proot -S ${DIST} -q qemu-arm apt-get -y update proot -S ${DIST} -q qemu-arm apt-get -y upgrade -proot -S ${DIST} -q qemu-arm apt-get -y install libxv-dev libx11-dev libxext-dev libxi-dev -proot -S ${DIST} -q qemu-arm apt-get -y install libomxil-bellagio-bin libomxil-bellagio-dev libraspberrypi-dev -proot -S ${DIST} -q qemu-arm apt-get -y install libopenal-dev libasound2-dev +proot -S ${DIST} -q qemu-arm apt-get -y build-dep libsdl2 libsdl2-image libsdl2-mixer libsdl2-ttf ffmpeg +proot -S ${DIST} -q qemu-arm apt-get -y install libdrm-deb libgbm-dev + +#proot -S ${DIST} -q qemu-arm apt-get -y install libxv-dev libx11-dev libxext-dev libxi-dev +#proot -S ${DIST} -q qemu-arm apt-get -y install libomxil-bellagio-bin libomxil-bellagio-dev libraspberrypi-dev +#proot -S ${DIST} -q qemu-arm apt-get -y install libopenal-dev libasound2-dev touch ${DIST}/usr/include/immintrin.h diff --git a/singe/buildRelease.sh b/singe/buildRelease.sh index 65cd6af5a..64a39efda 100755 --- a/singe/buildRelease.sh +++ b/singe/buildRelease.sh @@ -65,17 +65,16 @@ function doBuild() { popd } -:<audioProps->SampleRate / 2); + // Handle video frames (and time) - if ((SDL_GetTicks() - v->lastTickTime >= v->frameDeltaTime) || (v->audioDelta > (v->audioProps->SampleRate / 2)) || v->resetTime) { + if ((SDL_GetTicks() - v->lastTickTime >= v->frameDeltaTime) || (v->audioDelta > threshold) || v->resetTime) { v->lastTickTime = SDL_GetTicks(); @@ -559,15 +565,28 @@ int32_t videoUpdate(int32_t playerHandle, SDL_Texture **texture) { *texture = v->videoTexture; result = v->frame; + v->framesPlayed++; + + // Did we trip the audio sync compensation? + if (v->audioDelta > threshold) { + // Adjust frame rate to try and match + if (v->audioDelta > 0) { + v->audioAdjustment += 0.000001; + } else { + v->audioAdjustment -= 0.000001; + } + } // Used to determine if we should play two frames rapidly to catch up to audio - v->audioDelta = v->audioPosition - (int64_t)((double)v->timestamp * 0.001 * (double)v->audioProps->SampleRate); + v->audioDelta = labs(v->audioPosition - (int64_t)((double)v->timestamp * 0.001 * (double)v->audioProps->SampleRate)); + + utilSay("D %ld T %ld A %f", v->audioDelta, threshold, v->audioAdjustment); v->frameData = FFMS_GetFrame(v->videoSource, v->frame, &v->errInfo); if (v->frameData == NULL) utilDie("%s", v->errInfo.Buffer); v->frameInfo = FFMS_GetFrameInfo(FFMS_GetTrackFromVideo(v->videoSource), v->frame); v->timestamp = (int64_t)((double)v->frameInfo->PTS * (double)v->videoTimeBase->Num / (double)v->videoTimeBase->Den); // Convert to milliseconds - v->frameDeltaTime = v->timestamp - v->lastFrameTime; + v->frameDeltaTime = (v->timestamp - v->lastFrameTime); // - (v->audioAdjustment * v->framesPlayed); v->lastFrameTime = v->timestamp; if (v->playing) { @@ -585,6 +604,7 @@ int32_t videoUpdate(int32_t playerHandle, SDL_Texture **texture) { v->audioPosition = (int64_t)((double)v->timestamp * 0.001 * (double)v->audioProps->SampleRate); v->resetTime = false; v->audioDelta = 0; + v->framesPlayed = 0; } }