diff --git a/singe/preBuild.sh b/singe/preBuild.sh index 52a8ce358..98d62245a 100755 --- a/singe/preBuild.sh +++ b/singe/preBuild.sh @@ -21,9 +21,10 @@ if [[ -z $1 ]]; then - G_PLATFORM=mingw + G_PLATFORM=pi +# G_PLATFORM=mingw # G_PLATFORM=linux - G_BITS=64 + G_BITS=32 G_THIRDPARTY=$(pwd)/thirdparty G_DEST="$(pwd)/../thirdparty-build/${G_PLATFORM}/${G_BITS}" else @@ -38,6 +39,16 @@ G_L="--------------------------------------------------------------------------- # Work out compiler settings case "${G_PLATFORM}" in + pi) + G_CROSS_HOME="/opt/cross/pi/32bit/bin" + G_OS="linux" + G_CCOMPILER="${G_CROSS_HOME}/arm-unknown-linux-gnueabi-gcc" + G_CPPCOMPILER="${G_CROSS_HOME}/arm-unknown-linux-gnueabi-g++" + G_CROSS="arm-unknown-linux-gnueabi" + G_LUAPLAT="posix" + G_ARCH="armv6" + ;; + linux) G_OS="linux" G_CCOMPILER="gcc" @@ -315,7 +326,7 @@ autoBuild libFLAC.a SDL2_mixer/external/flac-1.3.3 autoBuild libvorbis.a SDL2_mixer/external/libvorbis-1.3.6 # === ModPlug === -autoBuild libmodplug.a SDL2_mixer/external/libmodplug-0.8.9.0 +autoBuild libmodplug.a SDL2_mixer/external/libmodplug-0.8.9.0 "ac_cv_c_bigendian=no" # === MPG123 === autoBuild libmpg123.a SDL2_mixer/external/mpg123-1.25.13 diff --git a/singe/thirdparty/SDL2_mixer/external/flac-1.3.3/doc/html/Makefile.in b/singe/thirdparty/SDL2_mixer/external/flac-1.3.3/doc/html/Makefile.in index 65de627fd..3af9abfe8 100644 --- a/singe/thirdparty/SDL2_mixer/external/flac-1.3.3/doc/html/Makefile.in +++ b/singe/thirdparty/SDL2_mixer/external/flac-1.3.3/doc/html/Makefile.in @@ -667,8 +667,8 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -@FLaC__HAS_DOXYGEN_FALSE@install-data-local: @FLaC__HAS_DOXYGEN_FALSE@distclean-local: +@FLaC__HAS_DOXYGEN_FALSE@install-data-local: @FLaC__HAS_DOXYGEN_FALSE@uninstall-local: clean: clean-recursive diff --git a/singe/thirdparty/SDL2_mixer/external/opus-1.3.1/doc/Makefile.in b/singe/thirdparty/SDL2_mixer/external/opus-1.3.1/doc/Makefile.in index cae040bf9..102eee49f 100644 --- a/singe/thirdparty/SDL2_mixer/external/opus-1.3.1/doc/Makefile.in +++ b/singe/thirdparty/SDL2_mixer/external/opus-1.3.1/doc/Makefile.in @@ -394,9 +394,9 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -@HAVE_DOXYGEN_FALSE@clean-local: -@HAVE_DOXYGEN_FALSE@uninstall-local: @HAVE_DOXYGEN_FALSE@install-data-local: +@HAVE_DOXYGEN_FALSE@uninstall-local: +@HAVE_DOXYGEN_FALSE@clean-local: clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am diff --git a/singe/videoPlayer.c b/singe/videoPlayer.c index 645911d7f..ee6044ee5 100644 --- a/singe/videoPlayer.c +++ b/singe/videoPlayer.c @@ -56,6 +56,7 @@ typedef struct VideoPlayerS { int64_t frameDeltaTime; int64_t lastFrameTime; int64_t timestamp; + int64_t audioDelta; int64_t audioPosition; Uint16 audioFormat; Uint32 lastTickTime; @@ -542,12 +543,14 @@ int32_t videoUpdate(int32_t playerHandle, SDL_Texture **texture) { int64_t count = 0; VideoPlayerT *v = NULL; + // Get our player structure HASH_FIND_INT(_videoPlayerHash, &playerHandle, v); if (!v) utilDie("No video player at index %d in videoUpdate.", playerHandle); // Handle video frames (and time) - if ((SDL_GetTicks() - v->lastTickTime >= v->frameDeltaTime) || v->resetTime) { + if ((SDL_GetTicks() - v->lastTickTime >= v->frameDeltaTime) || (v->audioDelta > (v->audioProps->SampleRate / 2)) || v->resetTime) { + v->lastTickTime = SDL_GetTicks(); if (v->frameData) { @@ -557,10 +560,13 @@ int32_t videoUpdate(int32_t playerHandle, SDL_Texture **texture) { *texture = v->videoTexture; result = v->frame; + // 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->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)((v->frameInfo->PTS * v->videoTimeBase->Num) / (double)v->videoTimeBase->Den); // Convert to milliseconds + 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->lastFrameTime = v->timestamp; @@ -576,8 +582,9 @@ int32_t videoUpdate(int32_t playerHandle, SDL_Texture **texture) { SDL_AudioStreamClear(v->audioStream); v->lastTickTime = 0; v->frameDeltaTime = 0; - v->audioPosition = (int64_t)((double)(v->timestamp * 0.001) * (double)v->audioProps->SampleRate); + v->audioPosition = (int64_t)((double)v->timestamp * 0.001 * (double)v->audioProps->SampleRate); v->resetTime = false; + v->audioDelta = 0; } } @@ -595,10 +602,6 @@ int32_t videoUpdate(int32_t playerHandle, SDL_Texture **texture) { if (FFMS_GetAudio(v->audioSource, v->audioBuffer, v->audioPosition, count, &v->errInfo)) utilDie("%s", v->errInfo.Buffer); // Feed it to the mixer stream if (SDL_AudioStreamPut(v->audioStream, v->audioBuffer, (int32_t)(count * v->audioSampleSize)) < 0) utilDie("%s", SDL_GetError()); - - //int64_t temp = (int64_t)((double)(v->timestamp * 0.001) * (double)v->audioProps->SampleRate); - //utilSay("A: %ld C: %ld D: %ld W: %ld", v->audioPosition, temp, v->audioPosition - temp, SDL_AudioStreamAvailable(v->audioStream)); - v->audioPosition += count; } }