diff --git a/src/FFmpegReader.cpp b/src/FFmpegReader.cpp
index f3187ce4..18bba251 100644
--- a/src/FFmpegReader.cpp
+++ b/src/FFmpegReader.cpp
@@ -1446,6 +1446,8 @@ void FFmpegReader::CheckWorkingFrames(bool end_of_stream)
bool is_video_ready = processed_video_frames.count(f->number);
bool is_audio_ready = processed_audio_frames.count(f->number);
+ if (previous_packet_location.frame == f->number && !end_of_stream)
+ is_audio_ready = false; // don't finalize the last processed audio frame
bool is_seek_trash = IsPartialFrame(f->number);
// Adjust for available streams
diff --git a/src/examples/Example.cpp b/src/examples/Example.cpp
index 715cef9a..6b7f9820 100644
--- a/src/examples/Example.cpp
+++ b/src/examples/Example.cpp
@@ -43,64 +43,64 @@ using namespace tr1;
int main(int argc, char* argv[])
{
- Timeline t10(1280, 720, Fraction(24,1), 44100, 2);
- t10.debug = false;
- Clip c10("/home/jonathan/Videos/sintel_trailer-720p.mp4");
- c10.rotation.AddPoint(1, 0.0);
- c10.rotation.AddPoint(1000, 360.0);
- c10.Open();
- c10.Position(1.05);
-
- Negate n;
- c10.AddEffect(&n);
-
- // add clip to timeline
- t10.AddClip(&c10);
-
- for (int z = 0; z<1000; z++) {
- t10.GetFrame(z);
- cout << z << endl;
- }
- return 0;
-
-
- // Test getting lots of JSON
- cout << "starting..." << endl;
-
- Json::Value root;
- root = Json::Value(Json::arrayValue);
- for (int outer = 0; outer < 1000; outer++) {
- openshot::Keyframe k;
- //cout << "creating " << outer << endl;
- for (int z = 0; z<10; z++) {
- openshot::Point p(z * 10, 1 * z * outer, BEZIER);
- k.AddPoint(p);
- }
- root.append(k.JsonValue());
- }
- //cout << root.toStyledString() << endl;
-
- // Test loading lots of JSON
- for (int z = 0; z<1000; z++) {
- //cout << "loading " << z << endl;
- Json::Value keyframe_json = root[z];
- openshot::Keyframe k;
- k.SetJsonValue(keyframe_json);
- }
-
- cout << "Successfully ended" << endl;
- return 0;
+// Timeline t10(1280, 720, Fraction(24,1), 44100, 2);
+// t10.debug = false;
+// Clip c10("/home/jonathan/Videos/sintel_trailer-720p.mp4");
+// c10.rotation.AddPoint(1, 0.0);
+// c10.rotation.AddPoint(1000, 360.0);
+// c10.Open();
+// c10.Position(1.05);
+//
+// Negate n;
+// c10.AddEffect(&n);
+//
+// // add clip to timeline
+// t10.AddClip(&c10);
+//
+// for (int z = 0; z<1000; z++) {
+// t10.GetFrame(z);
+// cout << z << endl;
+// }
+// return 0;
+//
+//
+// // Test getting lots of JSON
+// cout << "starting..." << endl;
+//
+// Json::Value root;
+// root = Json::Value(Json::arrayValue);
+// for (int outer = 0; outer < 1000; outer++) {
+// openshot::Keyframe k;
+// //cout << "creating " << outer << endl;
+// for (int z = 0; z<10; z++) {
+// openshot::Point p(z * 10, 1 * z * outer, BEZIER);
+// k.AddPoint(p);
+// }
+// root.append(k.JsonValue());
+// }
+// //cout << root.toStyledString() << endl;
+//
+// // Test loading lots of JSON
+// for (int z = 0; z<1000; z++) {
+// //cout << "loading " << z << endl;
+// Json::Value keyframe_json = root[z];
+// openshot::Keyframe k;
+// k.SetJsonValue(keyframe_json);
+// }
+//
+// cout << "Successfully ended" << endl;
+// return 0;
// Reader
- FFmpegReader r9("/home/jonathan/Videos/sintel_trailer-720p.mp4");
+ FFmpegReader r9("/home/jonathan/apps/libopenshot/src/examples/piano-mono.wav");
r9.Open();
- r9.debug = false;
+ r9.debug = true;
// Mapper
- FrameMapper map(&r9, Fraction(24,1), PULLDOWN_NONE, 48000, 2, LAYOUT_STEREO);
- map.DisplayInfo();
- map.debug = true;
- map.Open();
+ //FrameMapper map(&r9, Fraction(24,1), PULLDOWN_NONE, 48000, 2, LAYOUT_STEREO);
+ //map.DisplayInfo();
+ //map.debug = true;
+ //map.Open();
/* WRITER ---------------- */
FFmpegWriter w9("/home/jonathan/output1.mp3");
@@ -108,7 +108,7 @@ int main(int argc, char* argv[])
//ImageWriter w9("/home/jonathan/output.gif");
// Set options
- w9.SetAudioOptions(true, "libmp3lame", map.info.sample_rate, map.info.channels, map.info.channel_layout, 120000);
+ w9.SetAudioOptions(true, "libmp3lame", r9.info.sample_rate, r9.info.channels, r9.info.channel_layout, 120000);
//w9.SetAudioOptions(true, "libmp3lame", 44100, r9.info.channels, r9.info.channel_layout, 120000);
//w9.SetVideoOptions(true, "libvpx", map.info.fps, map.info.width, map.info.height, map.info.pixel_ratio, false, false, 1500000);
//w9.SetVideoOptions(true, "rawvideo", r9.info.fps, 400, 2, r9.info.pixel_ratio, false, false, 20000000);
@@ -142,13 +142,13 @@ int main(int argc, char* argv[])
int frame_number = ( frame);
cout << "get " << frame << " (frame: " << frame_number << ") " << endl;
- tr1::shared_ptr f = map.GetFrame(frame_number);
+ tr1::shared_ptr f = r9.GetFrame(frame_number);
cout << "display it (" << f->number << ", " << f << ")" << endl;
//r9.GetFrame(frame_number)->DisplayWaveform();
- //if (frame >= 65)
- // f->DisplayWaveform();
+ if (frame >= 7)
+ f->DisplayWaveform();
//f->AddColor(r9.info.width, r9.info.height, "blue");
- w9.WriteFrame(f);
+ //w9.WriteFrame(f);
//frame++;
}
@@ -163,7 +163,7 @@ int main(int argc, char* argv[])
// Close timeline
r9.Close();
- map.Close();
+ //map.Close();
/* ---------------- */
cout << "happy ending" << endl;