[Sumover-dev] [svn commit] r4892 - in vic/branches/mpeg4: video
sumover-dev at cs.ucl.ac.uk
sumover-dev at cs.ucl.ac.uk
Sun Dec 12 14:12:32 GMT 2010
Author: douglask
Date: Sun Dec 12 14:12:32 2010
New Revision: 4892
Modified:
vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl
vic/branches/mpeg4/tcl/ui-grabber.tcl
vic/branches/mpeg4/tcl/ui-resource.tcl
vic/branches/mpeg4/tcl/ui-util.tcl
vic/branches/mpeg4/video/device-input.h
vic/branches/mpeg4/video/device-output.h
vic/branches/mpeg4/video/device.cpp
vic/branches/mpeg4/video/grabber-decklink.cpp
vic/branches/mpeg4/video/grabber-win32DS.cpp
vic/branches/mpeg4/video/grabber-win32DS.h
Log:
Initial check-in for new DirectShow grabber controls panel support.
The DirectShow grabber controls panel includes a properties button and a capture resolution drop-down menu to select the resolution for Large captures. The properties button brings up a DirectShow filter properties dialog box.
Work still needs to be done to correctly handle capture devices that use different pixelformats at different resolutions.
Modified: vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl
==============================================================================
--- vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl (original)
+++ vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl Sun Dec 12 14:12:32 2010
@@ -730,7 +730,8 @@
proc select_device device {
global transmitButton logoButton sizeButtons portButton formatButtons \
videoFormat defaultFormat lastDevice defaultPort inputPort \
- defaultType inputType transmitButtonState logoButtonState typeButton
+ defaultType inputType transmitButtonState logoButtonState typeButton \
+ capResolutionButton
#
# Remember settings of various controls for previous device
@@ -765,7 +766,7 @@
} else {
$sizeButtons.b0 configure -state disabled
}
- if { [device_supports $device size normal] || [device_supports $device size cif] } {
+ if { [device_supports $device size normal] || [device_supports $device size cif] } {
$sizeButtons.b1 configure -state normal
} else {
$sizeButtons.b1 configure -state disabled
@@ -787,8 +788,17 @@
} else {
$typeButton configure -state disabled
}
- insert_grabber_panel [$device nickname]
-
+ if {[$device api] != ""} {
+ insert_grabber_panel [$device api]
+ } else {
+ insert_grabber_panel [$device nickname]
+ }
+ if [device_supports $device capture_resolution *] {
+ $capResolutionButton configure -state normal
+ attach_capture_resolutions $device
+ } else {
+ $capResolutionButton configure -state disabled
+ }
#set videoFormat $defaultFormat($device)
select_format $videoFormat
if $wasOverlaying {
@@ -801,7 +811,7 @@
proc compare {a b} {
- return [string compare [$a nickname] [$b nickname]]
+ return [string compare [$a nickname] [$b nickname]]
set a0 [$a nickname]
@@ -857,8 +867,8 @@
$w configure -state disabled
return
}
-
- set inputDeviceListSorted [lsort -command compare $inputDeviceList]
+
+ set inputDeviceListSorted [lsort -command compare $inputDeviceList]
foreach d $inputDeviceListSorted {
if { [$d nickname] == "still" && ![yesno stillGrabber] } {
set defaultFormat($d) $videoFormat
@@ -1183,6 +1193,41 @@
set inputType $defaultType($device)
}
+proc attach_capture_resolutions device {
+ global capResolutionButton capResolution defaultCapResolution
+ catch "destroy $capResolutionButton.menu"
+ set resolutions [attribute_class [$device attributes] capture_resolution]
+ set f [smallfont]
+ set m $capResolutionButton.menu
+ menu $m
+
+ foreach resolution $resolutions {
+ $m add radiobutton -label $resolution \
+ -command "restart" \
+ -value $resolution -variable capResolution -font $f
+ }
+ if ![info exists defaultCapResolution($device)] {
+ set nn [$device nickname]
+ if [info exists defaultCapResolution($nn)] {
+ set defaultCapResolution($device) $defaultCapResolution($nn)
+ } else {
+ set s [resource defaultCapResolution($nn)]
+ if { $s != "" } {
+ set defaultCapResolution($device) $s
+ } else {
+ # use current resolution setting
+ set s [string trim [attribute_class [$device attributes] selected_resolution]]
+ if { $s != "" } {
+ set defaultCapResolution($device) $s
+ } else {
+ set defaultCapResolution($device) [lindex $resolutions 0]
+ }
+ }
+ }
+ }
+ set capResolution $defaultCapResolution($device)
+}
+
proc build.encoder_buttons w {
set f [smallfont]
build.encoder_options $w.options
@@ -1654,6 +1699,7 @@
}
}
set_scaler_buttons_state
+ set_capture_resolution_button_state
}
proc disable_large_button { } {
@@ -1672,6 +1718,17 @@
}
}
+proc set_capture_resolution_button_state { } {
+ global inputSize capResolutionButton
+ if { [info exists capResolutionButton] } {
+ if { $inputSize == 1 } {
+ $capResolutionButton configure -state normal
+ } else {
+ $capResolutionButton configure -state disabled
+ }
+ }
+}
+
proc set_scaler_buttons_state { } {
global inputSize scalerButtons
if { [info exists scalerButtons] } {
@@ -1711,6 +1768,7 @@
} else {
enable_large_button
}
+ set_capture_resolution_button_state
if { $fmt == "pvh"} {
set w .menu.encoder.f.encoderLayer
Modified: vic/branches/mpeg4/tcl/ui-grabber.tcl
==============================================================================
--- vic/branches/mpeg4/tcl/ui-grabber.tcl (original)
+++ vic/branches/mpeg4/tcl/ui-grabber.tcl Sun Dec 12 14:12:32 2010
@@ -31,6 +31,39 @@
proc init_grabber_panel {} {
}
+proc build.directshow w {
+ global capResolutionButton capResolution videoDevice
+
+ label $w.title -text "DirectShow grabber controls"
+ frame $w.f -relief sunken -borderwidth 2
+
+ set f [smallfont]
+ # create the menubutton but don't defer the menu creation until later
+ if {$::tk_version > 8.4 } {
+ ttk::menubutton $w.f.resolution -text "Capture Resolution" \
+ -menu $w.f.resolution.menu -width 18
+ } else {
+ menubutton $w.f.resolution -text "Capture Resolution" \
+ -menu $w.f.resolution.menu -relief raised -width 20 \
+ -font $f -indicatoron 1
+ }
+
+ if {$::tk_version > 8.4 } {
+ ttk::button $w.f.properties -text "Properties" -width 18 \
+ -command "$videoDevice properties"
+ } else {
+ menubutton $w.f.properties -text "Properties" -width 20 \
+ -relief raised -command "$videoDevice properties"
+ }
+
+ pack $w.f.resolution -fill x -side left
+ pack $w.f.properties -fill x -side right
+ pack $w.title $w.f -fill x -expand 1
+ set capResolutionButton $w.f.resolution
+ set capResolution undefined
+ set_capture_resolution_button_state
+}
+
proc build.dc10 w {
build.v4l $w
}
@@ -194,7 +227,7 @@
}
proc build.blackmagic w {
- global scalerCompResolution scalerButtons
+ global scalerCapResolution scalerButtons
label $w.title -text "Blackmagic DeckLink-Grabber"
frame $w.f -relief sunken -borderwidth 2
@@ -203,38 +236,38 @@
if {$::tk_version > 8.4 && [windowingsystem] != "x11"} {
ttk::radiobutton $w.f.b0 -text "none" -command "restart" \
- -variable scalerCompResolution -value "none"
+ -variable scalerCapResolution -value "none"
ttk::radiobutton $w.f.b1 -text "960p" -command "restart" \
- -variable scalerCompResolution -value "960p"
+ -variable scalerCapResolution -value "960p"
ttk::radiobutton $w.f.b2 -text "720p" -command "restart" \
- -variable scalerCompResolution -value "720p"
+ -variable scalerCapResolution -value "720p"
ttk::radiobutton $w.f.b3 -text "576p" -command "restart" \
- -variable scalerCompResolution -value "576p"
+ -variable scalerCapResolution -value "576p"
ttk::radiobutton $w.f.b4 -text "480p" -command "restart" \
- -variable scalerCompResolution -value "480p"
+ -variable scalerCapResolution -value "480p"
} else {
set f [smallfont]
radiobutton $w.f.b0 -text "none" -command "restart" \
-padx 0 -pady 0 \
- -anchor w -variable scalerCompResolution -font $f -relief flat -value "none"
+ -anchor w -variable scalerCapResolution -font $f -relief flat -value "none"
radiobutton $w.f.b1 -text "960p" -command "restart" \
-padx 0 -pady 0 \
- -anchor w -variable scalerCompResolution -font $f -relief flat -value "960p"
+ -anchor w -variable scalerCapResolution -font $f -relief flat -value "960p"
radiobutton $w.f.b2 -text "720p" -command "restart" \
-padx 0 -pady 0 \
- -anchor w -variable scalerCompResolution -font $f -relief flat -value "720p"
+ -anchor w -variable scalerCapResolution -font $f -relief flat -value "720p"
radiobutton $w.f.b3 -text "576p" -command "restart" \
-padx 0 -pady 0 \
- -anchor w -variable scalerCompResolution -font $f -relief flat -value "576p"
+ -anchor w -variable scalerCapResolution -font $f -relief flat -value "576p"
radiobutton $w.f.b4 -text "480p" -command "restart" \
-padx 0 -pady 0 \
- -anchor w -variable scalerCompResolution -font $f -relief flat -value "480p"
+ -anchor w -variable scalerCapResolution -font $f -relief flat -value "480p"
}
pack $w.f.scaling $w.f.b0 $w.f.b1 $w.f.b2 $w.f.b3 $w.f.b4 -fill x -side left
pack $w.title $w.f -fill x -expand 1
- set scalerCompResolution [resource scalerCompResolution]
+ set scalerCapResolution [resource scalerCapResolution]
set scalerButtons $w.f
set_scaler_buttons_state
}
Modified: vic/branches/mpeg4/tcl/ui-resource.tcl
==============================================================================
--- vic/branches/mpeg4/tcl/ui-resource.tcl (original)
+++ vic/branches/mpeg4/tcl/ui-resource.tcl Sun Dec 12 14:12:32 2010
@@ -185,7 +185,7 @@
option add Vic.siteDropTime "300" startupFile
option add Vic.quality "0" startupFile
option add Vic.inputType "ntsc" startupFile
- option add Vic.scalerCompResolution "none" startupFile
+ option add Vic.scalerCapResolution "none" startupFile
option add Vic.brightness "128" startupFile
option add Vic.contrast "128" startupFile
Modified: vic/branches/mpeg4/tcl/ui-util.tcl
==============================================================================
--- vic/branches/mpeg4/tcl/ui-util.tcl (original)
+++ vic/branches/mpeg4/tcl/ui-util.tcl Sun Dec 12 14:12:32 2010
@@ -368,6 +368,22 @@
puts " </sizes>"
}
+ if [device_supports $v capture_resolution *] {
+ set resolutionList [attribute_class [$v attributes] capture_resolution]
+ if {[llength $resolutionList] == 0} {
+ puts " <capture_resolutions />"
+ } else {
+ puts " <capture_resolutions>"
+ foreach resolution $resolutionList {
+ set resolution [string map {"<" "<" ">" ">" "&" "&" "\"" """ "'" "'"} $resolution]
+ puts " <capture_resolution>$resolution</capture_resolution>"
+ }
+ puts " </capture_resolutions>"
+ }
+ } else {
+ puts " <capture_resolutions />"
+ }
+
# for the moment only the Blackmagick DeckLink grabber has a scaler
if { [string first "Blackmagic-" "[$v nickname]"] == -1 } {
puts " <scaler />"
Modified: vic/branches/mpeg4/video/device-input.h
==============================================================================
--- vic/branches/mpeg4/video/device-input.h (original)
+++ vic/branches/mpeg4/video/device-input.h Sun Dec 12 14:12:32 2010
@@ -48,11 +48,12 @@
*/
class InputDevice : public TclObject {
public:
- InputDevice(const char* name);
+ InputDevice(const char* name, const char* api="");
virtual int command(int argc, const char*const* argv);
protected:
void inception();
const char* nickname_;
+ const char* api_;
const char* attributes_;
};
Modified: vic/branches/mpeg4/video/device-output.h
==============================================================================
--- vic/branches/mpeg4/video/device-output.h (original)
+++ vic/branches/mpeg4/video/device-output.h Sun Dec 12 14:12:32 2010
@@ -38,11 +38,12 @@
*/
class OutputDevice : public TclObject {
public:
- OutputDevice(const char* nickname);
+ OutputDevice(const char* nickname, const char *api="");
virtual int command(int argc, const char*const* argv);
protected:
void inception();
const char* nickname_;
+ const char* api_;
const char* attributes_;
};
Modified: vic/branches/mpeg4/video/device.cpp
==============================================================================
--- vic/branches/mpeg4/video/device.cpp (original)
+++ vic/branches/mpeg4/video/device.cpp Sun Dec 12 14:12:32 2010
@@ -36,8 +36,8 @@
#include "device-input.h"
#include "device-output.h"
-InputDevice::InputDevice(const char* nickname)
- : nickname_(nickname), attributes_("")
+InputDevice::InputDevice(const char* nickname, const char* api)
+ : nickname_(nickname), api_(api), attributes_("")
{
}
@@ -54,6 +54,10 @@
tcl.result(nickname_);
return (TCL_OK);
}
+ if (strcmp(argv[1], "api") == 0) {
+ tcl.result(api_);
+ return (TCL_OK);
+ }
if (strcmp(argv[1], "attributes") == 0) {
tcl.result(attributes_);
return (TCL_OK);
@@ -62,8 +66,8 @@
return (TclObject::command(argc, argv));
}
-OutputDevice::OutputDevice(const char* nickname)
- : nickname_(nickname), attributes_("")
+OutputDevice::OutputDevice(const char* nickname, const char* api)
+ : nickname_(nickname), api_(api), attributes_("")
{
}
@@ -80,6 +84,10 @@
tcl.result(nickname_);
return (TCL_OK);
}
+ if (strcmp(argv[1], "api") == 0) {
+ tcl.result(api_);
+ return (TCL_OK);
+ }
if (strcmp(argv[1], "attributes") == 0) {
tcl.result(attributes_);
return (TCL_OK);
Modified: vic/branches/mpeg4/video/grabber-decklink.cpp
==============================================================================
--- vic/branches/mpeg4/video/grabber-decklink.cpp (original)
+++ vic/branches/mpeg4/video/grabber-decklink.cpp Sun Dec 12 14:12:32 2010
@@ -759,21 +759,21 @@
HRESULT result;
int flags = TCL_GLOBAL_ONLY;
Tcl& tcl = Tcl::instance();
- const char* scalerCompResolution = Tcl_GetVar(tcl.interp(), "scalerCompResolution", flags);
+ const char* scalerCapResolution = Tcl_GetVar(tcl.interp(), "scalerCapResolution", flags);
// Set the image size.
switch (decimate_) {
case 1: // large-size
- if (strcmp(scalerCompResolution, "960p") == 0) {
+ if (strcmp(scalerCapResolution, "960p") == 0) {
width_ = int(960 * displayModeWidth_ / displayModeHeight_);
height_ = 960;
- } else if (strcmp(scalerCompResolution, "720p") == 0) {
+ } else if (strcmp(scalerCapResolution, "720p") == 0) {
width_ = int(720 * displayModeWidth_ / displayModeHeight_);
height_ = 720;
- } else if (strcmp(scalerCompResolution, "576p") == 0) {
+ } else if (strcmp(scalerCapResolution, "576p") == 0) {
width_ = int(576 * displayModeWidth_ / displayModeHeight_);
height_ = 576;
- } else if (strcmp(scalerCompResolution, "480p") == 0) {
+ } else if (strcmp(scalerCapResolution, "480p") == 0) {
width_ = int(480 * displayModeWidth_ / displayModeHeight_);
height_ = 480;
} else {
Modified: vic/branches/mpeg4/video/grabber-win32DS.cpp
==============================================================================
--- vic/branches/mpeg4/video/grabber-win32DS.cpp (original)
+++ vic/branches/mpeg4/video/grabber-win32DS.cpp Sun Dec 12 14:12:32 2010
@@ -124,6 +124,8 @@
#include <stdlib.h>
#include "config.h"
#include <windows.h>
+#include <set>
+using namespace std;
#include "debug.h"
#include "grabber.h"
@@ -218,6 +220,7 @@
capturing_=0;
max_fps_ = 30;
memset(inputPorts, 0, NUM_PORTS);
+ memset(captureResolutions, 0, NUM_CAPTURE_RESOLUTIONS * sizeof(SIZE));
numInputPorts = 0;
initializedPorts = 0;
@@ -714,8 +717,15 @@
void DirectShowGrabber::setsize() {
if (decimate_ == 1 && !have_DVSD_){ //i.e. Large
- width_ = max_width_;
- height_ = max_height_;
+ int flags = TCL_GLOBAL_ONLY;
+ Tcl& tcl = Tcl::instance();
+ const char* capResolution = Tcl_GetVar(tcl.interp(), "capResolution", flags);
+ if (capResolution) {
+ sscanf(capResolution, "%ix%i", &width_, &height_);
+ } else {
+ width_ = 640;
+ height_ = 480;
+ }
} else {
width_ = basewidth_ / decimate_;
height_ = baseheight_ / decimate_;
@@ -866,7 +876,9 @@
}
//--------------------------------
-int DirectShowGrabber::getCaptureCapabilities(int preferred_max_height) {
+static bool sizeComp(SIZE lhs, SIZE rhs) {return ((lhs.cy << 16) + lhs.cx) < ((rhs.cy << 16) + rhs.cx);}
+
+int DirectShowGrabber::getCaptureCapabilities() {
IAMStreamConfig *pConfig;
AM_MEDIA_TYPE *pmtConfig;
int iCount;
@@ -875,6 +887,9 @@
HRESULT hr;
VIDEOINFOHEADER *pVih;
+ bool(*fn_pt)(SIZE, SIZE) = sizeComp;
+ set<SIZE,bool(*)(SIZE, SIZE)> resolutionSet(fn_pt);
+
pConfig = NULL;
hr = pBuild_->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
pCaptureFilter_, IID_IAMStreamConfig, (void**)&pConfig);
@@ -900,7 +915,8 @@
(pmtConfig->formattype == FORMAT_VideoInfo) &&
(pmtConfig->cbFormat >= sizeof (VIDEOINFOHEADER)) &&
(pmtConfig->pbFormat != NULL)) {
- if(scc.MaxOutputSize.cy > max_height_ && scc.MaxOutputSize.cy <= preferred_max_height){
+ resolutionSet.insert(scc.InputSize);
+ if(scc.MaxOutputSize.cy > max_height_){
max_width_ = scc.MaxOutputSize.cx;
max_height_ = scc.MaxOutputSize.cy;
}
@@ -938,11 +954,16 @@
}
}
}
+ int i=0;
+ set<SIZE, bool(*)(SIZE, SIZE)>::iterator it;
+ for (it=resolutionSet.begin() ; it != resolutionSet.end() && i < NUM_CAPTURE_RESOLUTIONS; it++) {
+ if (it->cy < NTSC_BASE_HEIGHT) continue; // ignore resolutions < 640p for Large capture
+ captureResolutions[i].cx = it->cx;
+ captureResolutions[i].cy = it->cy;
+ i++;
+ }
pConfig->Release();
- if (min_height_>=NTSC_BASE_HEIGHT && preferred_max_height != 1080)
- getCaptureCapabilities(1080);
-
if (max_width_>0)
return TRUE;
@@ -1092,6 +1113,17 @@
if ( (curr_w != width_) || (curr_h != height_ )) {
width_ = curr_w;
height_ = curr_h;
+ switch (cformat_) {
+ case CF_CIF:
+ set_size_cif(width_, height_);
+ break;
+ case CF_420:
+ set_size_420(width_, height_);
+ break;
+ case CF_422:
+ set_size_422(width_, height_);
+ break;
+ }
debug_msg("DirectShowGrabber::setCaptureOutputFormat: format set to near res: %dx%d\n",width_,height_);
} else
debug_msg("DirectShowGrabber::setCaptureOutputFormat: format set\n");
@@ -1174,7 +1206,7 @@
//#########################################################################
// DirectShowDevice class
-DirectShowDevice::DirectShowDevice(char *friendlyName, IBaseFilter *pCapFilt) : InputDevice(friendlyName) {
+DirectShowDevice::DirectShowDevice(char *friendlyName, IBaseFilter *pCapFilt) : InputDevice(friendlyName, "directshow") {
attri_ = new char[255];
attri_[0] = 0;
@@ -1206,13 +1238,24 @@
}else{
StringCbCatA(attri_, 255, "external-in ");
}
+ StringCbCatA(attri_, 255, "} ");
debug_msg("new DirectShowDevice(): after appending ports\n");
- StringCbCatA(attri_, 255, "} ");
+ SIZE *captureResolutions = o.getCaptureResolutions();
+ if(captureResolutions[0].cx != 0) {
+ StringCbCatA(attri_, 255, "capture_resolution {");
+ int i=0;
+ while( i < NUM_CAPTURE_RESOLUTIONS && captureResolutions[i].cx != 0 ) {
+ StringCbPrintfA(attri_, 255, "%s %ix%i", attri_, captureResolutions[i].cx, captureResolutions[i].cy);
+ i++;
+ }
+ StringCbCatA(attri_, 255, "} ");
+ }
char *inport = o.getInputPort();
StringCbPrintfA(attri_, 255, "%s selected_port { %s }", attri_, inport );
free(inport);
+
attributes_ = attri_;
debug_msg("attributes: %s", attributes_);
}
@@ -1233,10 +1276,52 @@
if (o != 0)
Tcl::instance().result(o->name());
return (TCL_OK);
- }
+ } else if (argc == 2) {
+ if (strcmp(argv[1], "api") == 0) {
+ tcl.result(api_);
+ return (TCL_OK);
+ } else if (strcmp(argv[1], "properties") == 0) {
+ DisplayPropertyPage();
+ return TCL_OK;
+ }
+ }
return (InputDevice::command(argc, argv));
}
+// This fn displays the custom Property page to set something
+bool DirectShowDevice::DisplayPropertyPage() {
+ bool Done = false;
+
+ ISpecifyPropertyPages *pProp;
+ HRESULT hr = pDirectShowFilter_->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pProp);
+ if (SUCCEEDED(hr)) {
+ IUnknown *pFilterUnk;
+ pDirectShowFilter_->QueryInterface(IID_IUnknown, (void **)&pFilterUnk);
+
+ // Show the page.
+ CAUUID caGUID;
+ pProp->GetPages(&caGUID);
+ pProp->Release();
+ OleCreatePropertyFrame(
+ NULL, // Parent window
+ 0, 0, // Reserved
+ NULL, // Caption for the dialog box
+ 1, // Number of objects (just the filter)
+ &pFilterUnk, // Array of object pointers.
+ caGUID.cElems, // Number of property pages
+ caGUID.pElems, // Array of property page CLSIDs
+ 0, // Locale identifier
+ 0, NULL // Reserved
+ );
+
+ // Clean up.
+ pFilterUnk->Release();
+ CoTaskMemFree(caGUID.pElems);
+ Done = true;
+ }
+ return Done;
+}
+
//#########################################################################
// DirectShowScanner class
Modified: vic/branches/mpeg4/video/grabber-win32DS.h
==============================================================================
--- vic/branches/mpeg4/video/grabber-win32DS.h (original)
+++ vic/branches/mpeg4/video/grabber-win32DS.h Sun Dec 12 14:12:32 2010
@@ -76,6 +76,7 @@
#define NUM_DEVS 20 // max number of capture devices we'll support
#define NUM_PORTS 20 // max number of ports on a capture device
+#define NUM_CAPTURE_RESOLUTIONS 20 // max number of capture resolutions of a capture device
//#define showErrorMessage(x) ShowErrorMessage(x, __LINE__, __FILE__)
@@ -148,6 +149,12 @@
return min_height_;
}
+ SIZE * getCaptureResolutions(){
+ return captureResolutions;
+ }
+ char * getInputResolution(){
+ return strdup(capture_resolution_);
+ }
Port ** getInputPorts(){
return inputPorts;
}
@@ -163,7 +170,7 @@
virtual void setsize();
virtual int grab();
void setport(const char *port);
- int getCaptureCapabilities(int preferred_max_height=720);
+ int getCaptureCapabilities();
virtual void setCaptureOutputFormat();
int useconfig_;
@@ -178,6 +185,9 @@
int height_;
int cformat_;
+ SIZE captureResolutions[NUM_CAPTURE_RESOLUTIONS];
+ int numCaptureResolutions;
+
Port * inputPorts[NUM_PORTS];
int numInputPorts;
int initializedPorts;
@@ -214,6 +224,7 @@
IAMCrossbar *pXBar_;
Crossbar *crossbar_;
Crossbar *crossbarCursor_;
+ char capture_resolution_[20];
char input_port_[20];
bool findCrossbar(IBaseFilter *);
void addCrossbar(IAMCrossbar *);
@@ -262,6 +273,8 @@
virtual int command(int argc, const char* const* argv);
protected:
+ bool DisplayPropertyPage();
+
IBaseFilter* pDirectShowFilter_;
//IBaseFilter *directShowFilter_;
More information about the Sumover-dev
mailing list