diff --git a/src/ChargeVideo.hpp b/src/ChargeVideo.hpp index 4065895..a895ac7 100644 --- a/src/ChargeVideo.hpp +++ b/src/ChargeVideo.hpp @@ -89,10 +89,10 @@ private: _ffmpeg::AVStream *videoStream, *audioStream; struct _ffmpeg::SwsContext *swsCtx = NULL; // Visual struct _ffmpeg::SwrContext *swrCtx = NULL; // Audio + int8_t videoStreamNum = -1, audioStreamNum = -1; uint16_t ID = 0; // Time specific - int8_t videoStreamNum = -1, audioStreamNum = -1; uint32_t currentFrameNumber = 0; double timeBase = 0, clock = 0; @@ -100,11 +100,11 @@ private: ChargeAudio::Engine *audioEngine; ChargeAudio::SoundContainer bufferedAudio; - // Channel data + // Audio Channel data _ffmpeg::AVChannelLayout outLayout; _ffmpeg::AVSampleFormat sampleFormat = _ffmpeg::AV_SAMPLE_FMT_FLT; - // Buffering + // Image Buffering std::map frameBuffer; uint32_t bufferMaxFrames = 0; diff --git a/src/Time.cpp b/src/Time.cpp index c9f2f84..3c400ed 100644 --- a/src/Time.cpp +++ b/src/Time.cpp @@ -17,8 +17,6 @@ void Time::AdvanceTime() { if (time.currentFrameTime() == 0.0f) { time.start(); } - - // We are giving average delta for frame timing stablisation DeltaTime = time.currentFrameDuration(); for (auto processVideo : videoPlayMethods) { diff --git a/src/Video.cpp b/src/Video.cpp index 5b191f0..b8f28ad 100644 --- a/src/Video.cpp +++ b/src/Video.cpp @@ -92,6 +92,7 @@ Video::Video(std::string path, ChargeAudio::Engine *engine, } else { outLayout = AV_CHANNEL_LAYOUT_MONO; } + swr_alloc_set_opts2(&swrCtx, &outLayout, sampleFormat, audioEngine->GetSampleRate(), &aCodecCtx->ch_layout, aCodecCtx->sample_fmt, aCodecCtx->sample_rate, 0, NULL); @@ -149,7 +150,6 @@ void Video::StartLooping() { isVideoLooping = true; } // ================== Private Video Controls ================== void Video::continueVideo() { // Looping handling - /* Shelved for now if (currentFrameNumber >= videoStream->nb_frames - 2) { if (!isVideoLooping) { isVideoOver = true; @@ -157,7 +157,7 @@ void Video::continueVideo() { return; // We remove what we are returning TO } restartVideo(); - }*/ + } // Timing // Audio Synced @@ -353,9 +353,12 @@ void Video::restartVideo() { avcodec_flush_buffers(vCodecCtx); avcodec_flush_buffers(aCodecCtx); currentFrameNumber = 0; + dumpAndRefillBuffer(); } void Video::dumpAndRefillBuffer() { std::map().swap(frameBuffer); + bufferedAudio.release(); + bufferedAudio = audioEngine->CreateSound(10); loadTexture(loadNextFrame().second); }