Yet another huge refactor, to use shared_ptr objects instead of actual pointers, due to the difficulties in managing the lifecycle of pointers between the timeline, clip, and readers. Seems to work great, and solves all sorts of bugs. =)

This commit is contained in:
Jonathan Thomas
2012-10-14 03:43:52 -05:00
parent b647ff77c8
commit 617088cebf
19 changed files with 208 additions and 198 deletions

View File

@@ -3,9 +3,11 @@
#include <iostream>
#include <map>
#include <queue>
#include <tr1/memory>
#include "../include/OpenShot.h"
using namespace openshot;
using namespace tr1;
void FrameReady(int number)
{
@@ -14,70 +16,73 @@ void FrameReady(int number)
int main()
{
// // Create timeline
// Timeline t(640, 360, Framerate(24,1));
//
// // Add some clips
// Clip c1("../../src/examples/piano.wav");
// c1.Position(0.0);
//
shared_ptr<Frame> f(new Frame(1,2,2));
// Create timeline
Timeline t(640, 360, Framerate(24,1));
// Add some clips
Clip c1("/home/jonathan/Videos/sintel-1024-stereo.mp4");
c1.Position(0.0);
// c1.time.AddPoint(1, 50);
// c1.time.AddPoint(100, 1);
// c1.time.AddPoint(200, 90);
// c1.time.PrintValues();
//
// //c1.time.AddPoint(500, 500, LINEAR);
//// c1.time.AddPoint(1, 300);
//// c1.time.AddPoint(200, 500, LINEAR);
//// c1.time.AddPoint(400, 100);
//// c1.time.AddPoint(500, 500);
//
// // Add clips
// t.AddClip(&c1);
//
//
// // Create a writer
// FFmpegWriter w("/home/jonathan/output.webm");
// w.DisplayInfo();
//
// // Set options
// w.SetAudioOptions(true, "libvorbis", 44100, 2, 128000, false);
// //w.SetVideoOptions(true, "libvpx", Fraction(24, 1), 640, 360, Fraction(1,1), false, false, 2000000);
//
// // Prepare Streams
// w.PrepareStreams();
//
// // Write header
// w.WriteHeader();
//
// // Output stream info
// w.OutputStreamInfo();
//
// for (int frame = 1; frame <= 162; frame++)
// {
// Frame *f = t.GetFrame(frame);
// if (f)
// {
// //f->AddOverlayNumber(0);
//
// // Write frame
// //cout << "queue frame " << frame << endl;
// cout << "queue frame " << frame << " (" << f->number << ", " << f << ")" << endl;
// w.WriteFrame(f);
// }
// }
//
// // Write Footer
// w.WriteTrailer();
//
// // Close writer & reader
// w.Close();
//
// // Close timeline
// t.Close();
//
// cout << "Successfully Finished Timeline DEMO" << endl;
// return 0;
//c1.time.AddPoint(500, 500, LINEAR);
c1.time.AddPoint(1, 300);
c1.time.AddPoint(200, 500, LINEAR);
c1.time.AddPoint(400, 100);
c1.time.AddPoint(500, 500);
// Add clips
t.AddClip(&c1);
// Create a writer
FFmpegWriter w("/home/jonathan/output.webm");
w.DisplayInfo();
// Set options
w.SetAudioOptions(true, "libvorbis", 44100, 2, 128000, false);
w.SetVideoOptions(true, "libvpx", Fraction(24, 1), 640, 360, Fraction(1,1), false, false, 2000000);
// Prepare Streams
w.PrepareStreams();
// Write header
w.WriteHeader();
// Output stream info
w.OutputStreamInfo();
for (int frame = 1; frame <= 500; frame++)
{
tr1::shared_ptr<Frame> f = t.GetFrame(frame);
if (f)
{
//f->AddOverlayNumber(0);
// Write frame
//cout << "queue frame " << frame << endl;
cout << "queue frame " << frame << " (" << f->number << ", " << f << ")" << endl;
w.WriteFrame(f);
}
}
// Write Footer
w.WriteTrailer();
// Close writer & reader
w.Close();
// Close timeline
t.Close();
cout << "Successfully Finished Timeline DEMO" << endl;
return 0;
@@ -125,63 +130,63 @@ int main()
// openshot::FFmpegReader r("/home/jonathan/Videos/60fps.mp4");
// openshot::FFmpegReader r("/home/jonathan/Aptana Studio Workspace/OpenShotLibrary/src/examples/asdf.wdf");
// Display debug info
r.Open();
r.DisplayInfo();
// Create a writer
FFmpegWriter w("/home/jonathan/output.webm");
w.DisplayInfo();
// Set options
w.SetAudioOptions(true, "libvorbis", 44100, 2, 128000, false);
//w.SetVideoOptions(true, "libvpx", Fraction(24, 1), 640, 360, Fraction(1,1), false, false, 2000000);
// Prepare Streams
w.PrepareStreams();
// Set Options
// w.SetOption(VIDEO_STREAM, "quality", "good");
// w.SetOption(VIDEO_STREAM, "g", "120");
// w.SetOption(VIDEO_STREAM, "qmin", "11");
// w.SetOption(VIDEO_STREAM, "qmax", "51");
// w.SetOption(VIDEO_STREAM, "profile", "0");
// w.SetOption(VIDEO_STREAM, "speed", "0");
// w.SetOption(VIDEO_STREAM, "level", "216");
// w.SetOption(VIDEO_STREAM, "rc_lookahead", "16");
// w.SetOption(VIDEO_STREAM, "rc_min_rate", "100000");
// w.SetOption(VIDEO_STREAM, "rc_max_rate", "24000000");
// w.SetOption(VIDEO_STREAM, "slices", "4");
// w.SetOption(VIDEO_STREAM, "arnr_max_frames", "7");
// w.SetOption(VIDEO_STREAM, "arnr_strength", "5");
// w.SetOption(VIDEO_STREAM, "arnr_type", "3");
// Write header
w.WriteHeader();
// Output stream info
w.OutputStreamInfo();
//Frame *f = r.GetFrame(1);
//for (int frame = 131; frame >= 1; frame--)
for (int frame = 1; frame <= 131; frame++)
{
Frame *f = r.GetFrame(frame);
//f->AddOverlayNumber(0);
//f->Display();
// Write frame
cout << "queue frame " << frame << endl;
w.WriteFrame(f);
}
// Write Footer
w.WriteTrailer();
// Close writer & reader
w.Close();
r.Close();
// // Display debug info
// r.Open();
// r.DisplayInfo();
//
// // Create a writer
// FFmpegWriter w("/home/jonathan/output.webm");
// w.DisplayInfo();
//
// // Set options
// w.SetAudioOptions(true, "libvorbis", 44100, 2, 128000, false);
// //w.SetVideoOptions(true, "libvpx", Fraction(24, 1), 640, 360, Fraction(1,1), false, false, 2000000);
//
// // Prepare Streams
// w.PrepareStreams();
//
// // Set Options
//// w.SetOption(VIDEO_STREAM, "quality", "good");
//// w.SetOption(VIDEO_STREAM, "g", "120");
//// w.SetOption(VIDEO_STREAM, "qmin", "11");
//// w.SetOption(VIDEO_STREAM, "qmax", "51");
//// w.SetOption(VIDEO_STREAM, "profile", "0");
//// w.SetOption(VIDEO_STREAM, "speed", "0");
//// w.SetOption(VIDEO_STREAM, "level", "216");
//// w.SetOption(VIDEO_STREAM, "rc_lookahead", "16");
//// w.SetOption(VIDEO_STREAM, "rc_min_rate", "100000");
//// w.SetOption(VIDEO_STREAM, "rc_max_rate", "24000000");
//// w.SetOption(VIDEO_STREAM, "slices", "4");
//// w.SetOption(VIDEO_STREAM, "arnr_max_frames", "7");
//// w.SetOption(VIDEO_STREAM, "arnr_strength", "5");
//// w.SetOption(VIDEO_STREAM, "arnr_type", "3");
//
// // Write header
// w.WriteHeader();
//
// // Output stream info
// w.OutputStreamInfo();
//
// //Frame *f = r.GetFrame(1);
//
// //for (int frame = 131; frame >= 1; frame--)
// for (int frame = 1; frame <= 131; frame++)
// {
// tr1::shared_ptr<Frame> f = r.GetFrame(frame);
// //f->AddOverlayNumber(0);
// //f->Display();
//
// // Write frame
// cout << "queue frame " << frame << endl;
// w.WriteFrame(f);
// }
//
// // Write Footer
// w.WriteTrailer();
//
// // Close writer & reader
// w.Close();
// r.Close();
cout << "Successfully executed Main.cpp!" << endl;