Fixes to DirectShow provider

Originally committed to SVN as r872.
This commit is contained in:
Rodrigo Braz Monteiro 2007-01-22 03:39:36 +00:00
parent b043898c6c
commit bef789fb57
3 changed files with 7 additions and 15 deletions

View file

@ -53,6 +53,7 @@
#include "subs_grid.h"
#include "video_box.h"
#include "video_slider.h"
#include "video_provider.h"
#include "audio_box.h"
#include "audio_display.h"
@ -354,16 +355,7 @@ DialogOptions::DialogOptions(wxWindow *parent)
// Second sizer
videoSizer4->Add(new wxStaticText(videoPage,-1,_("Video provider: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
wxArrayString choices4;
#ifdef __WINDOWS__
choices4.Add(_T("Avisynth"));
#endif
#if USE_LAVC == 1
choices4.Add(_T("ffmpeg"));
#endif
#if USE_DIRECTSHOW == 1
choices4.Add(_T("dshow"));
#endif
wxArrayString choices4 = VideoProviderFactory::GetFactoryList();
control = new wxComboBox(videoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,choices4,wxCB_DROPDOWN | wxCB_READONLY);
Bind(control,_T("Video provider"),1);
videoSizer4->Add(control,1,wxEXPAND);

View file

@ -242,14 +242,14 @@ PClip AvisynthVideoProvider::OpenVideo(wxString _filename, bool mpeg2dec3_priori
// If DSS2 loaded properly, try using it
dss2 = false;
if (env->FunctionExists("dss2")) {
AVSTRACE(_T("visynthVideoProvider::OpenVideo: Invoking DSS2"));
AVSTRACE(_T("AvisynthVideoProvider::OpenVideo: Invoking DSS2"));
if (fps == 0.0) script = env->Invoke("DSS2", videoFilename);
else {
const char *argnames[2] = { 0, "fps" };
AVSValue args[2] = { videoFilename, fps };
script = env->Invoke("DSS2", AVSValue(args,2), argnames);
}
AVSTRACE(_T("visynthVideoProvider::OpenVideo: Successfully opened file with DSS2"));
AVSTRACE(_T("AvisynthVideoProvider::OpenVideo: Successfully opened file with DSS2"));
dss2 = true;
}

View file

@ -284,11 +284,9 @@ HRESULT DirectShowVideoProvider::OpenVideo(wxString _filename) {
// Add VideoSink to graph
pG->AddFilter(pR, L"VideoSink");
// Create instance of sink (??)
// Query interface from sink
CComQIPtr<IVideoSink> sink(pR);
if (!sink) return E_NOINTERFACE;
// Create another instance of sink (??)
CComQIPtr<IVideoSink2> sink2(pR);
if (!sink2) return E_NOINTERFACE;
@ -394,6 +392,8 @@ void DirectShowVideoProvider::CloseVideo() {
m_pR.Release();
m_pGC.Release();
m_pGS.Release();
ResetEvent(m_hFrameReady);
CloseHandle(m_hFrameReady);
}