From 26083f27b7763fd297ad5d5cc83ebf5509b1b90f Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Wed, 26 Oct 2011 14:34:14 -0500 Subject: [PATCH] Fixed a rounding error on mapping audio samples to frames. Also adjusted the sample rate on the frame.Play() method to 48khz. --- include/FFmpegReader.h | 7 ++++--- src/FFmpegReader.cpp | 2 +- src/Frame.cpp | 4 +--- src/Main.cpp | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/include/FFmpegReader.h b/include/FFmpegReader.h index 6df185c0..d5695345 100644 --- a/include/FFmpegReader.h +++ b/include/FFmpegReader.h @@ -20,15 +20,16 @@ extern "C" { #include #include } - -#include -#include +#include #include +#include #include +#include #include "Magick++.h" #include "Cache.h" #include "Exceptions.h" + using namespace std; namespace openshot diff --git a/src/FFmpegReader.cpp b/src/FFmpegReader.cpp index ffe2ebd6..551ac6fd 100644 --- a/src/FFmpegReader.cpp +++ b/src/FFmpegReader.cpp @@ -705,7 +705,7 @@ audio_packet_location FFmpegReader::GetAudioPTSLocation(int pts) // Get Samples per frame int samples_per_frame = GetSamplesPerFrame(); - int sample_start = double(samples_per_frame) * sample_start_percentage; + int sample_start = round(double(samples_per_frame) * sample_start_percentage); // Prepare final audio packet location audio_packet_location location = {whole_frame, sample_start}; diff --git a/src/Frame.cpp b/src/Frame.cpp index 72a6a55a..906cfa22 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -283,8 +283,6 @@ void Frame::Play() ScopedPointer my_source; my_source = new AudioBufferSource(audio->getNumSamples(), audio->getNumChannels()); - cout << "audio->getNumSamples(): " << audio->getNumSamples() << endl; - // Add audio to AudioBufferSource for (int channel = 0; channel < audio->getNumChannels(); channel++) { @@ -295,7 +293,7 @@ void Frame::Play() AudioTransportSource transport1; transport1.setSource (my_source, 5000, // tells it to buffer this many samples ahead - (double) 8000); + (double) 48000); // sample rate of source transport1.setPosition (0); transport1.setGain(1.0); diff --git a/src/Main.cpp b/src/Main.cpp index dcfbb085..b058670d 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -17,8 +17,8 @@ int main() // openshot::FFmpegReader r("/home/jonathan/Aptana Studio Workspace/OpenShotLibrary/src/examples/test.mp4"); // openshot::FFmpegReader r("/home/jonathan/Aptana Studio Workspace/OpenShotLibrary/src/examples/test1.mp4"); // openshot::FFmpegReader r("/home/jonathan/Videos/OpenShot_Now_In_3d.mp4"); - openshot::FFmpegReader r("/home/jonathan/Videos/sintel-1024-stereo.mp4"); - // openshot::FFmpegReader r("/home/jonathan/Videos/sintel_trailer-720p.mp4"); + // openshot::FFmpegReader r("/home/jonathan/Videos/sintel-1024-stereo.mp4"); + openshot::FFmpegReader r("/home/jonathan/Videos/sintel_trailer-720p.mp4"); // openshot::FFmpegReader r("/home/jonathan/Aptana Studio Workspace/OpenShotLibrary/src/examples/test.wav"); // openshot::FFmpegReader r("/home/jonathan/Music/Army of Lovers/Crucified/Army of Lovers - Crucified [Single Version].mp3"); // openshot::FFmpegReader r("/home/jonathan/Documents/OpenShot Art/bannertemplate.png"); @@ -28,7 +28,7 @@ int main() // Display debug info r.DisplayInfo(); - for (int frame = 1500; frame < 2000; frame++) + for (int frame = 300; frame < 400; frame++) { Frame f = r.GetFrame(frame); f.Play();