Initial
This commit is contained in:
883
dvcap/Mainwnd.cpp
Normal file
883
dvcap/Mainwnd.cpp
Normal file
@@ -0,0 +1,883 @@
|
||||
#include <dvcap/mainwnd.hpp>
|
||||
#include <common/dxsdk.hpp>
|
||||
#include <common/opendlg.hpp>
|
||||
#include <dvcap/dvcap.hpp>
|
||||
#include <dvcap/CaptureDeviceGraph.hpp>
|
||||
#include <common/assert.hpp>
|
||||
#include <common/dbt.hpp>
|
||||
|
||||
char MainWindow::szClassName[]="DVCAP [v1.00]";
|
||||
char MainWindow::szMenuName[]="DVCAP";
|
||||
|
||||
MainWindow::MainWindow(void)
|
||||
: mHaveDevice(false), mVideoWidth(0), mVideoHeight(0), mCapStartTime(0),
|
||||
mHours(0), mMinutes(0), mSeconds(0)
|
||||
{
|
||||
mPaintHandler.setCallback(this,&MainWindow::paintHandler);
|
||||
mDestroyHandler.setCallback(this,&MainWindow::destroyHandler);
|
||||
mCommandHandler.setCallback(this,&MainWindow::commandHandler);
|
||||
mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler);
|
||||
mSizeHandler.setCallback(this,&MainWindow::sizeHandler);
|
||||
mCreateHandler.setCallback(this,&MainWindow::createHandler);
|
||||
mUserHandler.setCallback(this,&MainWindow::userHandler);
|
||||
mDeviceChangeHandler.setCallback(this,&MainWindow::deviceChangeHandler);
|
||||
mATNTimerHandler.setCallback(this,&MainWindow::atnTimerHandler);
|
||||
mCapLimitTimerHandler.setCallback(this,&MainWindow::capLimitTimerHandler);
|
||||
mFramesTimerHandler.setCallback(this,&MainWindow::framesTimerHandler);
|
||||
mAtnTimer.insertHandler(&mATNTimerHandler);
|
||||
mCapLimitTimer.insertHandler(&mCapLimitTimerHandler);
|
||||
mFramesTimer.insertHandler(&mFramesTimerHandler);
|
||||
insertHandlers();
|
||||
registerClass();
|
||||
::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this);
|
||||
show(SW_SHOW);
|
||||
update();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
destroy();
|
||||
}
|
||||
|
||||
void MainWindow::insertHandlers(void)
|
||||
{
|
||||
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
||||
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
||||
insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
|
||||
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
||||
insertHandler(VectorHandler::UserHandler,&mUserHandler);
|
||||
insertHandler(VectorHandler::DeviceChangeHandler,&mDeviceChangeHandler);
|
||||
}
|
||||
|
||||
void MainWindow::removeHandlers(void)
|
||||
{
|
||||
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
||||
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
||||
removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
|
||||
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
||||
removeHandler(VectorHandler::UserHandler,&mUserHandler);
|
||||
removeHandler(VectorHandler::DeviceChangeHandler,&mDeviceChangeHandler);
|
||||
}
|
||||
|
||||
void MainWindow::registerClass(void)
|
||||
{
|
||||
HINSTANCE hInstance(processInstance());
|
||||
WNDCLASS wndClass;
|
||||
|
||||
if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return;
|
||||
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
|
||||
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
|
||||
wndClass.cbClsExtra =0;
|
||||
wndClass.cbWndExtra =sizeof(MainWindow*);
|
||||
wndClass.hInstance =hInstance;
|
||||
wndClass.hIcon =::LoadIcon(processInstance(),"DVCAP");
|
||||
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
|
||||
wndClass.hbrBackground =(HBRUSH)::GetStockObject(GRAY_BRUSH);
|
||||
wndClass.lpszMenuName =szMenuName;
|
||||
wndClass.lpszClassName =szClassName;
|
||||
::RegisterClass(&wndClass);
|
||||
assert(0!=::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass));
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
if(mCaptureDeviceGraph.isOkay())mCaptureDeviceGraph.destroy();
|
||||
removeHandlers();
|
||||
::PostQuitMessage(0);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::deviceChangeHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
handleDeviceChange(someCallbackData);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
switch(someCallbackData.wParam())
|
||||
{
|
||||
case DVCAPMENU_FILE_SETOUTPUT :
|
||||
handleFileSetOutput();
|
||||
break;
|
||||
case DVCAPMENU_FILE_SETINPUT :
|
||||
handleFileSetInput();
|
||||
break;
|
||||
case DVCAPMENU_FILE_SAVEGRAPH :
|
||||
handleFileSaveGraph();
|
||||
break;
|
||||
case DVCAPMENU_FILE_CAPTURESIZE :
|
||||
handleFileCaptureSize();
|
||||
break;
|
||||
case DVCAPMENU_FILE_EXIT :
|
||||
sendMessage(WM_CLOSE,0,0L);
|
||||
break;
|
||||
case DVCAPMENU_MODE_PREVIEW :
|
||||
handleModePreview();
|
||||
break;
|
||||
case DVCAPMENU_MODE_DVTOFILE :
|
||||
handleModeDVToFile();
|
||||
break;
|
||||
case DVCAPMENU_MODE_DVTOFILE_NOPRE :
|
||||
handleModeDVToFileNoPre();
|
||||
break;
|
||||
case DVCAPMENU_MODE_FILETODV :
|
||||
handleModeFileToDV();
|
||||
break;
|
||||
case DVCAPMENU_MODE_FILETODV_NOPRE :
|
||||
handleModeFileToDVNoPre();
|
||||
break;
|
||||
case DVCAPMENU_MODE_DVTOFILE_TYPE2 :
|
||||
handleModeDVToFileType2();
|
||||
break;
|
||||
case DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2 :
|
||||
handleModeDVToFileNoPreType2();
|
||||
break;
|
||||
case DVCAPMENU_MODE_FILETODV_TYPE2 :
|
||||
handleModeFileToDVType2();
|
||||
break;
|
||||
case DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2 :
|
||||
handleModeFileToDVNoPreType2();
|
||||
break;
|
||||
case DVCAPMENU_OPTIONS_REFRESH_MODE :
|
||||
handleOptionsRefreshMode();
|
||||
break;
|
||||
case DVCAPMENU_OPTIONS_CHECK_TAPE :
|
||||
handleOptionsCheckTape();
|
||||
break;
|
||||
case DVCAPMENU_OPTIONS_DECODE_SIZE :
|
||||
handleOptionsDecodeSize();
|
||||
break;
|
||||
case DVCAPMENU_OPTIONS_FRAME_RATE :
|
||||
handleOptionsFrameRate();
|
||||
break;
|
||||
case DVCAPMENU_HELP_ABOUT :
|
||||
handleHelpAbout();
|
||||
break;
|
||||
case IDM_PLAY :
|
||||
handlePlay();
|
||||
break;
|
||||
case IDM_PAUSE :
|
||||
handlePause();
|
||||
break;
|
||||
case IDM_STOP :
|
||||
handleStop();
|
||||
break;
|
||||
case IDM_RECORD :
|
||||
handleRecord();
|
||||
break;
|
||||
case IDM_FORWARD :
|
||||
handleForward();
|
||||
break;
|
||||
case IDM_REVERSE :
|
||||
handleReverse();
|
||||
break;
|
||||
case IDM_FORWARDFASTEST :
|
||||
handleForwardFastest();
|
||||
break;
|
||||
case IDM_SKIPNEXT :
|
||||
handleSkipNext();
|
||||
break;
|
||||
case IDM_SKIPPREV :
|
||||
handleSkipPrev();
|
||||
break;
|
||||
case IDM_REVERSEFASTEST :
|
||||
handleReverseFastest();
|
||||
break;
|
||||
case IDM_SEEKATN :
|
||||
handleSeekATN();
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
mAppMenu=getMenu();
|
||||
mToolBar=::new ToolBar();
|
||||
mToolBar.disposition(PointerDisposition::Delete);
|
||||
mToolBar->create(*this,ToolBarID);
|
||||
mToolBar->addBitmap(AddBitmap("TOOLBAR"));
|
||||
mToolBar->addButton(ToolBarButton(0,IDM_PLAY,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(1,IDM_PAUSE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(2,IDM_STOP,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(3,IDM_RECORD,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(4,IDM_FORWARD,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(5,IDM_REVERSE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(6,IDM_FORWARDFASTEST,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(7,IDM_SKIPNEXT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(8,IDM_SKIPPREV,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(9,IDM_REVERSEFASTEST,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mToolBar->addButton(ToolBarButton(10,IDM_SEEKATN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
|
||||
mStatusBar=::new StatusBarEx(*this,StatusBarID);
|
||||
mStatusBar.disposition(PointerDisposition::Delete);
|
||||
setParts();
|
||||
mDeviceNotification.registerDeviceNotification(*this);
|
||||
mCaptureDeviceGraph=::new CaptureDeviceGraph();
|
||||
mCaptureDeviceGraph.disposition(PointerDisposition::Delete);
|
||||
dvAppSetup(mCaptureDeviceGraph->buildBasicGraph());
|
||||
|
||||
int left=350;
|
||||
Rect initRect;
|
||||
mEdit1=::new Control();
|
||||
mEdit1.disposition(PointerDisposition::Delete);
|
||||
initRect=Rect(left,2,25,22);
|
||||
mEdit1->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditHourID);
|
||||
|
||||
mEdit2=::new Control();
|
||||
mEdit2.disposition(PointerDisposition::Delete);
|
||||
initRect=Rect(left+25,2,25,22);
|
||||
mEdit2->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditMinuteID);
|
||||
|
||||
mEdit3=::new Control();
|
||||
mEdit3.disposition(PointerDisposition::Delete);
|
||||
initRect=Rect(left+48,2,25,22);
|
||||
mEdit3->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditSecondID);
|
||||
|
||||
mEdit4=::new Control();
|
||||
mEdit4.disposition(PointerDisposition::Delete);
|
||||
initRect=Rect(left+71,2,25,22);
|
||||
mEdit4->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditFrameID);
|
||||
|
||||
mTCButton=::new Control();
|
||||
mTCButton.disposition(PointerDisposition::Delete);
|
||||
initRect=Rect(left+100,2,190,22);
|
||||
mTCButton->createControl("button","Display Timecodes",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,TCButtonID);
|
||||
mTCButton->sendMessage(BM_SETCHECK,true,0L);
|
||||
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::userHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
switch(someCallbackData.wParam())
|
||||
{
|
||||
case WM_FGNOTIFY :
|
||||
break;
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
// begin timer handlers
|
||||
|
||||
CallbackData::ReturnType MainWindow::atnTimerHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::capLimitTimerHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::framesTimerHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// end timer handlers
|
||||
|
||||
void MainWindow::setParts()
|
||||
{
|
||||
GlobalData<int> parts;
|
||||
int partWidth=width()/3;
|
||||
parts.size(3);
|
||||
parts[0]=partWidth;
|
||||
parts[1]=parts[0]+partWidth;
|
||||
parts[2]=parts[1]+partWidth;
|
||||
mStatusBar->setParts(parts);
|
||||
}
|
||||
|
||||
void MainWindow::handleDeviceChange(CallbackData &cbData)
|
||||
{
|
||||
PDEV_BROADCAST_HDR pDevBroadcastHeader=0;
|
||||
PDEV_BROADCAST_DEVICEINTERFACE pDevBroadcastInterface=0;
|
||||
if(DBT_DEVICEARRIVAL!=cbData.wParam())return;
|
||||
dvStatusText("Detected new capture device.");
|
||||
mStatusBar->update();
|
||||
pDevBroadcastHeader=(PDEV_BROADCAST_HDR)cbData.lParam();
|
||||
if(DBT_DEVTYP_DEVICEINTERFACE!=pDevBroadcastHeader->dbch_devicetype)return;
|
||||
pDevBroadcastInterface=(PDEV_BROADCAST_DEVICEINTERFACE)cbData.lParam();
|
||||
if(pDevBroadcastInterface->dbcc_classguid!=AM_KSCATEGORY_CAPTURE)return;
|
||||
if(!mHaveDevice)
|
||||
{
|
||||
message("New capture device detected");
|
||||
mCaptureDeviceGraph=::new CaptureDeviceGraph();
|
||||
mCaptureDeviceGraph.disposition(PointerDisposition::Delete);
|
||||
dvAppSetup(mCaptureDeviceGraph->buildBasicGraph());
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::handleFileSaveGraph(void)
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleFileSetInput(void)
|
||||
{
|
||||
OpenDialog openDialog;
|
||||
String pathFileName;
|
||||
|
||||
if(!openDialog.getOpenFileName(*this,"Microsoft AVI\0*.avi\0\0","Set Output File Name","Capture.avi",pathFileName))return;
|
||||
mInputFileName=pathFileName;
|
||||
}
|
||||
|
||||
bool MainWindow::handleFileSetOutput(void)
|
||||
{
|
||||
OpenDialog openDialog;
|
||||
String pathFileName;
|
||||
|
||||
if(!openDialog.getSaveFileName(*this,"Microsoft AVI\0*.avi\0\0","Set Output File Name","Capture.avi",pathFileName))
|
||||
return false;
|
||||
mOutputFileName=pathFileName;
|
||||
return true;
|
||||
}
|
||||
|
||||
void MainWindow::handleFileCaptureSize()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModePreview()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModeDVToFile()
|
||||
{
|
||||
if(mOutputFileName.isNull()&&!handleFileSetOutput())return;
|
||||
if(CaptureDeviceGraph::GraphDVToFile==mGraphType)return;
|
||||
if(!mCaptureDeviceGraph->stopGraph())return;
|
||||
mCaptureDeviceGraph->nukeDeviceFilter();
|
||||
if(!mCaptureDeviceGraph->makeDVToFileGraphType1(mOutputFileName))
|
||||
{
|
||||
message("MakeDVToFileGraphType1() Failed");
|
||||
return;
|
||||
}
|
||||
setPreviewWindow();
|
||||
markGraphModeMenu(DVCAPMENU_MODE_DVTOFILE);
|
||||
markToolBarButton(true,true);
|
||||
}
|
||||
|
||||
void MainWindow::handleModeDVToFileNoPre()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModeFileToDV()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModeFileToDVNoPre()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModeDVToFileType2()
|
||||
{
|
||||
if(mOutputFileName.isNull()&&!handleFileSetOutput())return;
|
||||
if(CaptureDeviceGraph::GraphDVToFileType2==mGraphType)return;
|
||||
if(!mCaptureDeviceGraph->stopGraph())return;
|
||||
mCaptureDeviceGraph->nukeDeviceFilter();
|
||||
if(!mCaptureDeviceGraph->makeDVToFileGraphType2(mOutputFileName))
|
||||
{
|
||||
message("MakeDVToFileGraphType2() Failed");
|
||||
return;
|
||||
}
|
||||
setPreviewWindow();
|
||||
markGraphModeMenu(DVCAPMENU_MODE_DVTOFILE_TYPE2);
|
||||
markToolBarButton(true,false);
|
||||
}
|
||||
|
||||
void MainWindow::handleModeDVToFileNoPreType2()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModeFileToDVType2()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleModeFileToDVNoPreType2()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleOptionsRefreshMode()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleOptionsCheckTape()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleOptionsDecodeSize()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleOptionsFrameRate()
|
||||
{
|
||||
}
|
||||
|
||||
void MainWindow::handleHelpAbout()
|
||||
{
|
||||
}
|
||||
|
||||
// start transport handlers
|
||||
|
||||
void MainWindow::handlePlay()
|
||||
{
|
||||
if(CaptureDeviceGraph::GraphFileToDV==mGraphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVNoPre==mGraphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVType2==mGraphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVNoPreType2==mGraphType)
|
||||
{
|
||||
mToolBar->setState(IDM_PLAY,ToolBar::Indeterminate);
|
||||
mCapStartTime=::GetTickCount();
|
||||
mFramesTimer.startTimer(TimerResolution);
|
||||
mCaptureDeviceGraph->startGraph();
|
||||
}
|
||||
else
|
||||
{
|
||||
dvPutVcrMode(ED_MODE_PLAY);
|
||||
if(CaptureDeviceGraph::GraphPreview==mGraphType)mCaptureDeviceGraph->startGraph();
|
||||
if(BST_CHECKED==mTCButton->sendMessage(BM_GETCHECK,0,0L))
|
||||
mAtnTimer.startTimer(TimerResolution);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::handleStop()
|
||||
{
|
||||
mAtnTimer.stopTimer();
|
||||
mCapLimitTimer.stopTimer();
|
||||
mFramesTimer.stopTimer();
|
||||
mCaptureDeviceGraph->stopGraph();
|
||||
dvPutVcrMode(ED_MODE_STOP);
|
||||
mToolBar->setState(IDM_PLAY,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate);
|
||||
}
|
||||
|
||||
void MainWindow::handlePause(void)
|
||||
{
|
||||
if(CaptureDeviceGraph::GraphFileToDV==mGraphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVNoPre==mGraphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVType2==mGraphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVNoPreType2==mGraphType)
|
||||
{
|
||||
mCaptureDeviceGraph->pauseGraph();
|
||||
}
|
||||
else
|
||||
{
|
||||
dvPutVcrMode(ED_MODE_FREEZE);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Enabled);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::handleForward()
|
||||
{
|
||||
dvPutVcrMode(ED_MODE_PLAY_FASTEST_FWD);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate);
|
||||
}
|
||||
|
||||
void MainWindow::handleReverse()
|
||||
{
|
||||
dvPutVcrMode(ED_MODE_PLAY_FASTEST_REV);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate);
|
||||
}
|
||||
|
||||
void MainWindow::handleForwardFastest()
|
||||
{
|
||||
dvPutVcrMode(ED_MODE_FF);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate);
|
||||
}
|
||||
|
||||
void MainWindow::handleSkipNext()
|
||||
{
|
||||
mAtnTimer.stopTimer();
|
||||
dvPutVcrMode(ED_MODE_STEP_FWD);
|
||||
dvDisplayTimecode();
|
||||
}
|
||||
|
||||
void MainWindow::handleSkipPrev()
|
||||
{
|
||||
mAtnTimer.stopTimer();
|
||||
dvPutVcrMode(ED_MODE_STEP_REV);
|
||||
dvDisplayTimecode();
|
||||
}
|
||||
|
||||
void MainWindow::handleReverseFastest()
|
||||
{
|
||||
dvPutVcrMode(ED_MODE_REW);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate);
|
||||
}
|
||||
|
||||
void MainWindow::handleSeekATN()
|
||||
{
|
||||
dvSeekAtn(); // this needs to be completed
|
||||
dvDisplayTimecode();
|
||||
}
|
||||
|
||||
void MainWindow::handleRecord()
|
||||
{
|
||||
message("Record");
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
case IDM_RECORD :
|
||||
// update the toolbar accordingly
|
||||
SendMessage(g_hwndTBar, TB_SETSTATE, IDM_STEP_FWD, MAKELONG(TBSTATE_INDETERMINATE, 0L));
|
||||
SendMessage(g_hwndTBar, TB_SETSTATE, IDM_STEP_REV, MAKELONG(TBSTATE_INDETERMINATE, 0L));
|
||||
|
||||
// check to see if it is a capture graph
|
||||
if (GRAPH_DV_TO_FILE == g_iGraphType || GRAPH_DV_TO_FILE_NOPRE == g_iGraphType ||
|
||||
GRAPH_DV_TO_FILE_TYPE2 == g_iGraphType || GRAPH_DV_TO_FILE_NOPRE_TYPE2 == g_iGraphType)
|
||||
{
|
||||
//do something here to record to an avi file on the disk - or to start recording on the vcr.
|
||||
switch (g_dwCaptureLimit)
|
||||
{
|
||||
case DV_CAPLIMIT_NONE :
|
||||
break;
|
||||
case DV_CAPLIMIT_TIME :
|
||||
SetTimer(hwnd, DV_TIMER_CAPLIMIT, g_dwTimeLimit * 1000, (TIMERPROC) DV_StopRecProc);
|
||||
break;
|
||||
case DV_CAPLIMIT_SIZE :
|
||||
//rather than monitor disk usage, we'll just do the math and set a timer
|
||||
SetTimer(hwnd, DV_TIMER_CAPLIMIT, ((g_dwDiskSpace * 100000) / DV_BYTESPERMSEC), (TIMERPROC) DV_StopRecProc);
|
||||
break;
|
||||
default :
|
||||
//MBOX(TEXT("Bad value for g_dwCaptureLimit (%d)"), g_dwCaptureLimit);
|
||||
break;
|
||||
}
|
||||
//update the status bar with the dropped frames information
|
||||
g_CapStartTime = GetTickCount();
|
||||
SetTimer(hwnd, DV_TIMER_FRAMES, DV_TIMERFREQ, (TIMERPROC) DV_DroppedFrameProc);
|
||||
//run the graph - assume that the camera is already playing if in Vcr mode
|
||||
g_pGraph->StartGraph();
|
||||
}
|
||||
else if (GRAPH_FILE_TO_DV == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE == g_iGraphType ||
|
||||
GRAPH_FILE_TO_DV_TYPE2 == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE_TYPE2 == g_iGraphType)
|
||||
{
|
||||
// if transmit graph then record on tape of the device
|
||||
DV_PutVcrMode(ED_MODE_RECORD);
|
||||
}
|
||||
else
|
||||
{
|
||||
//we shouldn't get here
|
||||
MBOX( TEXT("Undefined graph mode (maybe GRAPH_PREVIEW) in IDM_RECORD message"));
|
||||
}
|
||||
break;
|
||||
|
||||
*/
|
||||
|
||||
// end transport handlers
|
||||
|
||||
void MainWindow::dvAppSetup(bool graphResult)
|
||||
{
|
||||
int appWidth;
|
||||
int appHeight;
|
||||
|
||||
if(!graphResult)
|
||||
{
|
||||
message("No DV camcorder devices detected");
|
||||
mHaveDevice=false;
|
||||
mToolBar->show(SW_HIDE);
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_REFRESH_MODE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_DECODE_SIZE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
}
|
||||
else
|
||||
{
|
||||
mHaveDevice=true;
|
||||
|
||||
mToolBar->show(SW_SHOWNORMAL);
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_REFRESH_MODE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_DECODE_SIZE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
dvRefreshMode();
|
||||
dvStatusText(mCaptureDeviceGraph->getDeviceName().toString());
|
||||
if(!mCaptureDeviceGraph->makePreviewGraph())
|
||||
{
|
||||
message("MakePreviewGraph() Failed.");
|
||||
return;
|
||||
}
|
||||
mCaptureDeviceGraph->getVideoWindowDimensions(mVideoWidth,mVideoHeight);
|
||||
appWidth=mVideoWidth+WidthEdge;
|
||||
appHeight=mVideoHeight+HeightEdge;
|
||||
postMessage(*this,WM_SIZE,SIZE_RESTORED,MAKELONG(appWidth,appHeight));
|
||||
if(!mCaptureDeviceGraph->setNotifyWindow(*this,WM_FGNOTIFY))
|
||||
{
|
||||
message("SetNotifyWindow Failed.");
|
||||
return;
|
||||
}
|
||||
mGraphType=CaptureDeviceGraph::GraphPreview;
|
||||
markGraphModeMenu(DVCAPMENU_MODE_PREVIEW);
|
||||
markToolBarButton(false,true);
|
||||
setPreviewWindow();
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::dvRefreshMode()
|
||||
{
|
||||
CaptureDeviceGraph::DVMode subunitMode;
|
||||
bool returnCode=false;
|
||||
|
||||
if(!mCaptureDeviceGraph.isOkay())return false;
|
||||
subunitMode=mCaptureDeviceGraph->getDVMode();
|
||||
switch(subunitMode)
|
||||
{
|
||||
case CaptureDeviceGraph::CameraMode :
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled));
|
||||
dvStatusText("Camera Mode.");
|
||||
returnCode=true;
|
||||
break;
|
||||
case CaptureDeviceGraph::VCRMode :
|
||||
dvUpdateTapeInfo();
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled));
|
||||
dvStatusText("VCR Mode.");
|
||||
returnCode=true;
|
||||
break;
|
||||
case CaptureDeviceGraph::UnknownMode :
|
||||
dvStatusText("Unknown Mode.");
|
||||
break;
|
||||
}
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
bool MainWindow::dvUpdateTapeInfo()
|
||||
{
|
||||
if(!mCaptureDeviceGraph.isOkay())return false;
|
||||
if(!mCaptureDeviceGraph->getTapeInfo())
|
||||
{
|
||||
dvStatusText("VCR Mode - No tape, or unknown format");
|
||||
return false;
|
||||
}
|
||||
switch(mCaptureDeviceGraph->getVideoFormat())
|
||||
{
|
||||
case DVENCODERVIDEOFORMAT_NTSC :
|
||||
dvStatusText("VCR Mode - NTSC");
|
||||
break;
|
||||
case DVENCODERVIDEOFORMAT_PAL :
|
||||
dvStatusText("VCR Mode - PAL");
|
||||
break;
|
||||
default :
|
||||
dvStatusText("Unsupported or unrecognized tape format type.");
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MainWindow::setPreviewWindow(void)
|
||||
{
|
||||
Rect cliRect;
|
||||
Rect tbRect;
|
||||
|
||||
if(!mCaptureDeviceGraph.isOkay())return false;
|
||||
if(!mCaptureDeviceGraph->putOwner(*this))return false;
|
||||
if(!mCaptureDeviceGraph->putWindowStyle(WS_CHILD|WS_CLIPSIBLINGS))return false;
|
||||
clientRect(cliRect);
|
||||
mToolBar->clientRect(tbRect);
|
||||
if(!mCaptureDeviceGraph->setVideoWindowPosition(0,tbRect.bottom()-tbRect.top(),mVideoWidth,mVideoHeight))return false;
|
||||
if(!mCaptureDeviceGraph->setVideoWindowVisible(true))return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void MainWindow::markGraphModeMenu(int itemID)
|
||||
{
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_PREVIEW,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE_TYPE2,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2,PureMenu::ItemUnchecked);
|
||||
mAppMenu.checkMenuItem(itemID,PureMenu::ItemChecked);
|
||||
}
|
||||
|
||||
void MainWindow::markToolBarButton(bool enableRecord,bool enableOthers)
|
||||
{
|
||||
if(true==enableRecord)mToolBar->setState(IDM_RECORD,ToolBar::Enabled);
|
||||
else mToolBar->setState(IDM_RECORD,ToolBar::Indeterminate);
|
||||
if(enableOthers)
|
||||
{
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_REVERSEFASTEST,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_REVERSE,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_FORWARD,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_FORWARDFASTEST,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Enabled);
|
||||
mToolBar->setState(IDM_SEEKATN,ToolBar::Enabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_REVERSEFASTEST,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_REVERSE,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_FORWARD,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_FORWARDFASTEST,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate);
|
||||
mToolBar->setState(IDM_SEEKATN,ToolBar::Indeterminate);
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::dvPutVcrMode(int mode)
|
||||
{
|
||||
if(!mCaptureDeviceGraph.isOkay())return false;
|
||||
return mCaptureDeviceGraph->putIAMExtTransportMode(mode);
|
||||
}
|
||||
|
||||
bool MainWindow::dvSeekAtn(void)
|
||||
{
|
||||
int status=false;
|
||||
int hour;
|
||||
int minute;
|
||||
int second;
|
||||
int frame;
|
||||
|
||||
hour=::GetDlgItemInt(*mToolBar,EditHourID,&status,false);
|
||||
minute=::GetDlgItemInt(*mToolBar,EditMinuteID,&status,false);
|
||||
second=::GetDlgItemInt(*mToolBar,EditSecondID,&status,false);
|
||||
frame=::GetDlgItemInt(*mToolBar,EditFrameID,&status,false);
|
||||
if(!mCaptureDeviceGraph->seekAtn(hour,minute,second,frame))
|
||||
{
|
||||
message("Seek Failed - Time should be :\nHour:Minute:Second:Frame");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// this called through both menu selections and timer callback
|
||||
|
||||
bool MainWindow::dvDisplayTimecode(void)
|
||||
{
|
||||
TIMECODE_SAMPLE tcSample;
|
||||
|
||||
tcSample.timecode.dwFrames=0;
|
||||
tcSample.dwFlags=ED_DEVCAP_TIMECODE_READ;
|
||||
if(!mCaptureDeviceGraph->getTimecode(tcSample))return false;
|
||||
if(mHours!=(tcSample.timecode.dwFrames&0xFF000000)>>24)
|
||||
{
|
||||
::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames&0xFF000000)>>24);
|
||||
::SetDlgItemText(*mToolBar,EditHourID,mStrTimecode.str());
|
||||
}
|
||||
mHours=(tcSample.timecode.dwFrames&0xFF000000)>>24;
|
||||
|
||||
if(mMinutes!=(tcSample.timecode.dwFrames&0x00FF0000)>>16)
|
||||
{
|
||||
::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames&0x00FF0000)>>16);
|
||||
::SetDlgItemText(*mToolBar,EditMinuteID,mStrTimecode.str());
|
||||
}
|
||||
mMinutes=(tcSample.timecode.dwFrames&0x00FF0000)>>16;
|
||||
|
||||
if(mSeconds!=(tcSample.timecode.dwFrames&0x0000FF00)>>8)
|
||||
{
|
||||
::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames&0x0000FF00)>>8);
|
||||
::SetDlgItemText(*mToolBar,EditMinuteID,mStrTimecode.str());
|
||||
}
|
||||
mSeconds=(tcSample.timecode.dwFrames&0x0000FF00)>>8;
|
||||
|
||||
::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames & 0x000000FF));
|
||||
::SetDlgItemText(*mToolBar,EditFrameID,mStrTimecode.str());
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
void MainWindow::disconnect(CaptureDeviceGraph::GraphType graphType)
|
||||
{
|
||||
if(CaptureDeviceGraph::GraphFileToDV==graphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVNoPre==graphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVType2==graphType ||
|
||||
CaptureDeviceGraph::GraphFileToDVNoPreType2==graphType)
|
||||
{
|
||||
mCaptureDeviceGraph->nukeFilters();
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
if (GRAPH_FILE_TO_DV == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE == g_iGraphType ||
|
||||
GRAPH_FILE_TO_DV_TYPE2 == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE_TYPE2 == g_iGraphType)
|
||||
{
|
||||
//DisconnectAll removes only the downstream filters - we need to remove the file filter by hand.
|
||||
g_pGraph->NukeFilters( g_pGraph->m_pInputFileFilter, TRUE);
|
||||
if (g_pGraph->m_pInputFileFilter )
|
||||
{
|
||||
g_pGraph->m_pGraph->RemoveFilter( g_pGraph->m_pInputFileFilter );
|
||||
SAFE_RELEASE( g_pGraph->m_pInputFileFilter );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//DisconnectAll removes only the downstream filters
|
||||
hr = g_pGraph->NukeFilters( g_pGraph->m_pDeviceFilter, TRUE);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
MBOX(TEXT("nukefilters() failed"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// typedef enum GraphType{GraphPreview,GraphDVToFile,GraphDVToFileNoPre,GraphFileToDV,GraphFileToDVNoPre,
|
||||
// GraphDVToFileType2,GraphDVToFileNoPreType2,GraphFileToDVType2,GraphFileToDVNoPreType2};
|
||||
|
||||
/*
|
||||
}
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user