Cleaned up provider creation interface

Originally committed to SVN as r148.
This commit is contained in:
Rodrigo Braz Monteiro 2006-02-24 08:43:44 +00:00
parent 9b395f283d
commit 360147d4ea
8 changed files with 37 additions and 20 deletions

View File

@ -14,7 +14,7 @@
#include <wx/rawbmp.h>
#include "subs_grid.h"
#include "frame_main.h"
#include "video_provider_avs.h"
#include "video_provider.h"
#include "video_display.h"
#include "video_box.h"
#include "ass_file.h"
@ -75,8 +75,7 @@ void FrameMain::OnVideoTrackPoints(wxCommandEvent &event) {
if( !config.FeatureNumber ) return;
// Get Video
bool usedDirectshow;
VideoProvider *movie = new AvisynthVideoProvider(videoBox->videoDisplay->videoName, wxString(_T("")), 1.0,usedDirectshow);
VideoProvider *movie = VideoProvider::GetProvider(videoBox->videoDisplay->videoName, wxString(_T("")));
// Create Tracker
if( curline->Tracker ) delete curline->Tracker;

View File

@ -163,6 +163,8 @@ void VideoDisplay::SetVideo(const wxString &filename) {
// Choose a provider
bool usedDirectshow = false;
provider = VideoProvider::GetProvider(filename,GetTempWorkFile());
provider->SetZoom(zoomValue);
provider->SetDAR(GetARFromType(arType));
// Set keyframes
wxString ext = filename.Right(4).Lower();
@ -484,17 +486,20 @@ void VideoDisplay::SetZoomPos(int value) {
}
///////////////////
// Sets zoom level
//////////////////////////
// Calculate aspect ratio
double VideoDisplay::GetARFromType(int type) {
if (type == 0) return (double)provider->GetSourceWidth()/(double)provider->GetSourceHeight();
if (type == 1) return 4.0/3.0;
if (type == 2) return 16.0/9.0;
}
/////////////////////
// Sets aspect ratio
void VideoDisplay::SetAspectRatio(int value) {
if (provider) {
if (value == 0)
provider->SetDAR((float)provider->GetSourceWidth()/(float)provider->GetSourceHeight());
else if (value == 1)
provider->SetDAR(4.0/3.0);
else if (value == 2)
provider->SetDAR(16.0/9.0);
provider->SetDAR(GetARFromType(value));
arType = value;
UpdateSize();
RefreshVideo();

View File

@ -131,6 +131,7 @@ public:
void RefreshVideo();
void DrawText( wxPoint Pos, wxString Text );
void UpdatePositionDisplay();
double GetARFromType(int type);
void SetAspectRatio(int type);
void SetZoom(double value);
int GetAspectRatio() { return arType; }

View File

@ -62,9 +62,13 @@ VideoProvider *VideoProvider::GetProvider(wxString video,wxString subtitles) {
#ifdef USE_LAVC
if (Options.AsBool(_T("Use ffmpeg"))) {
try {
provider = new LAVCVideoProvider(video,subtitles,1.0);
provider = new LAVCVideoProvider(video,subtitles);
}
catch (...) {
// Delete old provider
delete provider;
// Try to fallback to avisynth
if (avisynthAvailable) {
wxMessageBox(_T("Failed loading FFmpeg decoder for video, falling back to Avisynth."),_T("FFmpeg error."));
provider = NULL;
@ -79,7 +83,15 @@ VideoProvider *VideoProvider::GetProvider(wxString video,wxString subtitles) {
// Use avisynth provider
#ifdef __WINDOWS__
bool usedDirectshow = false;
if (!provider) provider = new AvisynthVideoProvider(video,subtitles,1.0,usedDirectshow);
if (!provider) {
try {
provider = new AvisynthVideoProvider(video,subtitles,usedDirectshow);
}
catch (...) {
delete provider;
throw;
}
}
#endif
// Return provider

View File

@ -43,7 +43,7 @@
#ifdef __WINDOWS__
AvisynthVideoProvider::AvisynthVideoProvider(wxString _filename, wxString _subfilename, double _zoom, bool &usedDirectshow) {
AvisynthVideoProvider::AvisynthVideoProvider(wxString _filename, wxString _subfilename, bool &usedDirectshow) {
bool mpeg2dec3_priority = true;
RGB32Video = NULL;
SubtitledVideo = NULL;
@ -53,7 +53,7 @@ AvisynthVideoProvider::AvisynthVideoProvider(wxString _filename, wxString _subfi
last_fnum = -1;
subfilename = _subfilename;
zoom = _zoom;
zoom = 1.0;
LoadVSFilter();

View File

@ -83,7 +83,7 @@ private:
void LoadVSFilter();
public:
AvisynthVideoProvider(wxString _filename, wxString _subfilename, double _zoom, bool &usedDirectshow);
AvisynthVideoProvider(wxString _filename, wxString _subfilename, bool &usedDirectshow);
~AvisynthVideoProvider();
void RefreshSubtitles();

View File

@ -45,7 +45,7 @@
///////////////
// Constructor
LAVCVideoProvider::LAVCVideoProvider(wxString filename, wxString subfilename, double _zoom) {
LAVCVideoProvider::LAVCVideoProvider(wxString filename, wxString subfilename) {
// Init variables
codecContext = NULL;
formatContext = NULL;
@ -57,7 +57,7 @@ LAVCVideoProvider::LAVCVideoProvider(wxString filename, wxString subfilename, do
buffer1Size = 0;
buffer2Size = 0;
vidStream = -1;
zoom = _zoom;
zoom = 1.0;
validFrame = false;
// Register types

View File

@ -87,7 +87,7 @@ private:
wxBitmap AVFrameToWX(AVFrame *frame);
public:
LAVCVideoProvider(wxString filename, wxString subfilename, double zoom);
LAVCVideoProvider(wxString filename, wxString subfilename);
~LAVCVideoProvider();
void RefreshSubtitles();