約 5,006,472 件
https://w.atwiki.jp/shogi_algo/pages/18.html
void Kyokumen InitControl(void); 概要 kyokumen.cppにて定義 controlS, controlE の初期化 (controlS, controlEは利きを保持する、とコメントにあるが意味不明) 引数 なし 実装 controlSとcontrolEをゼロ初期化 ループ(全位置) (以下、後で再確認。意味不明) 敵駒なら ループ(駒ジャンプ種類) →CanJump[駒ジャンプ種類][ban[駒位置]]が真なら →→ループ(駒の周囲、駒があるところ) →→→controlE[位置] |= bj; →CanMove[駒ジャンプ種類][ban[駒位置]]が真なら →→controlE[dan + suji + Direct[i]] |= b; 自駒なら controlSについて上記と同じ処理 呼出元
https://w.atwiki.jp/soyjoynice/pages/20.html
【AngularJS】 JavaScriptの、どのfunctionを使うか、みたいな。 ex) script type="text/javascript" function SettingController() { this.name = "John"; } SettingController.prototype = { greet function() { alert(this.name); } }; /script div ng controller="SettingController" Name input type="text" name="name" / [ a href="" ng click="greet()" greet /a ] br / /div * * * 結果: Name 【テキストボックス(初期値:「John」)】[ greet(←押せる)] 「greet」を押すと「John」と書かれたアラートボックスが出る。 SettingController という関数で独自に内容をつくり、 divタグに ng controller="SettingController" と書くことで、 div /div で囲まれたところの中で使う関数としてSettingControllerを指定。
https://w.atwiki.jp/sampleisbest/pages/68.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 PortChecker アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode PortChecker.iniの例 [General] file=D \etc\morse params=-l200 "トラ" PortChecker.cpp // インポート ライブラリ #pragma comment(lib, "ws2_32.lib") #include tchar.h #include WinSock2.h #include Windows.h #include CommCtrl.h #include "resource.h" #define SAFE_FREE(p)if (p) { free((void*)p); p = NULL; } #define SEC_GEN_T("General") // 関数プロトタイプ宣言 int GetIniFileName(void); INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg); void OnDestroy(HWND hDlg); void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue); void OnTimer(HWND hDlg); void OnOK(HWND hDlg); void StopTimer(HWND hDlg); void EnableCtrl(HWND hDlg, BOOL bEnable); int CheckPort(void); // グローバル変数 TCHARg_atcIniFile[_MAX_PATH] = _T(""); HWNDg_hProgress; HWNDg_hLabel; HBRUSHg_hBrush; UINTg_uiIDEvent = 0; charg_acHost[256]; intg_iPort; intg_iInterval; intg_iTimer; LPCTSTR lpFile = NULL; LPCTSTR lpParams = NULL; //============================================================================== int APIENTRY _tWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPTSTRlpCmdLine, intnCmdShow) { WSADATAwsaData; intiRet; // WinSockDLLの初期化 iRet = WSAStartup(MAKEWORD(2, 2), wsaData); if (iRet != 0) { return 0; } if (GetIniFileName()) { return 0; } DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, DialogProc); WSACleanup(); return 0; } //------------------------------------------------------------------------------ int GetIniFileName(void) { TCHARatcPath[_MAX_PATH]; TCHARatcDrive[_MAX_DRIVE]; TCHARatcDir[_MAX_DIR]; TCHARatcFName[_MAX_FNAME]; TCHARatcExt[_MAX_EXT]; if (GetModuleFileName(NULL, atcPath, _countof(atcPath)) == 0) { return -1; } if (_tsplitpath_s(atcPath, atcDrive, atcDir, atcFName, atcExt) != 0) { return -1; } if (_tmakepath_s(g_atcIniFile, atcDrive, atcDir, atcFName, _T("ini")) != 0) { return -1; } return 0; } //------------------------------------------------------------------------------ INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTRiRetVal = TRUE;// メッセージを処理した switch (uMsg) { case WM_TIMER OnTimer(hDlg); break; case WM_CTLCOLORSTATIC iRetVal = FALSE; if ((HWND)lParam == g_hLabel) { iRetVal = (INT_PTR)g_hBrush; } break; case WM_COMMAND switch (LOWORD(wParam)) { case IDOK OnOK(hDlg); break; case IDCANCEL // タイマー停止 StopTimer(hDlg); break; } break; case WM_INITDIALOG OnInitDialog(hDlg); SetFocus(GetDlgItem(hDlg, IDOK)); iRetVal = FALSE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE // タイマー停止 StopTimer(hDlg); EndDialog(hDlg, 0); break; case WM_DESTROY OnDestroy(hDlg); break; default iRetVal = FALSE;// メッセージを処理しなかった } return iRetVal; } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { TCHARatcStr[256]; intiX; intiY; iX = GetPrivateProfileInt(SEC_GEN, _T("iX"), 0, g_atcIniFile); iY = GetPrivateProfileInt(SEC_GEN, _T("iY"), 0, g_atcIniFile); SetWindowPos(hDlg, HWND_TOP, iX, iY, 0, 0, SWP_NOSIZE); GetPrivateProfileString(SEC_GEN, _T("url"), _T(""), atcStr, _countof(atcStr), g_atcIniFile); SetDlgItemText(hDlg, IDC_EDIT_URL, atcStr); g_iInterval = GetPrivateProfileInt(SEC_GEN, _T("iInterval"), 0, g_atcIniFile); _stprintf_s(atcStr, _T("%d"), g_iInterval); SetDlgItemText(hDlg, IDC_EDIT_INTERVAL, atcStr); GetPrivateProfileString(SEC_GEN, _T("file"), _T(""), atcStr, _countof(atcStr), g_atcIniFile); lpFile = _tcsdup(atcStr); GetPrivateProfileString(SEC_GEN, _T("params"), _T(""), atcStr, _countof(atcStr), g_atcIniFile); lpParams = _tcsdup(atcStr); g_hProgress = GetDlgItem(hDlg, IDC_PROGRESS); g_hLabel = GetDlgItem(hDlg, IDC_LABEL); g_hBrush = CreateSolidBrush(RGB(0xFF,0x00,0x00)); ShowWindow(g_hLabel, SW_HIDE); } //------------------------------------------------------------------------------ void OnDestroy(HWND hDlg) { RECTrc; TCHARatcStr[256]; GetWindowRect(hDlg, rc); WriteIniFileInt(SEC_GEN, _T("iX"), rc.left); WriteIniFileInt(SEC_GEN, _T("iY"), rc.top); GetDlgItemText(hDlg, IDC_EDIT_URL, atcStr, _countof(atcStr)); WritePrivateProfileString(SEC_GEN, _T("url"), atcStr, g_atcIniFile); WriteIniFileInt(SEC_GEN, _T("iInterval"), g_iInterval); SAFE_FREE(lpFile); SAFE_FREE(lpParams); DeleteObject(g_hBrush); } //------------------------------------------------------------------------------ void WriteIniFileInt(TCHAR* ptcSec, TCHAR* ptcKey, int iValue) { TCHARatcBuf[16]; _stprintf_s(atcBuf, _T("%d"), iValue); WritePrivateProfileString(ptcSec, ptcKey, atcBuf, g_atcIniFile); } //------------------------------------------------------------------------------ void OnTimer(HWND hDlg) { intiRet; // タイマーを1減らす g_iTimer--; SendMessage(g_hProgress, PBM_SETPOS, g_iTimer, 0); ShowWindow(g_hLabel, (g_iTimer 1) ? SW_SHOWNA SW_HIDE); if (0 g_iTimer) { return; } // タイマーが0になったら処理を行う iRet = CheckPort(); if (iRet 0) { StopTimer(hDlg); MessageBox(hDlg, _T("IPアドレスの取得に失敗しました"), NULL, MB_OK); return; } if (0 iRet) { StopTimer(hDlg); ShellExecute(hDlg, NULL, lpFile, lpParams, NULL, SW_SHOWNORMAL); MessageBox(hDlg, _T("サーバーへの接続に成功しました"), _T("通知"), MB_OK); return; } g_iTimer = g_iInterval; //SendMessage(g_hProgress, PBM_SETPOS, g_iTimer, 0); } //------------------------------------------------------------------------------ void OnOK(HWND hDlg) { TCHARatcStr[256]; TCHAR*ptcHost; TCHAR*ptcPort; TCHAR*ptc; size_tsize; // インターバル秒数の取得 GetDlgItemText(hDlg, IDC_EDIT_INTERVAL, atcStr, _countof(atcStr)); g_iInterval = _tstoi(atcStr); // URL GetDlgItemText(hDlg, IDC_EDIT_URL, atcStr, _countof(atcStr)); // ホスト ptc = _tcsstr(atcStr, _T(" //")); if (ptc == NULL) { ptcHost = atcStr; } else { ptcHost = ptc + 3; ptc[2] = _T( \0 ); } // ポート ptc = _tcspbrk(ptcHost, _T(" ")); if (ptc == NULL) { MessageBox(hDlg, _T("ポート番号がありません"), NULL, MB_OK); return; } else { ptc[0] = _T( \0 ); ptcPort = ptc + 1; } wcstombs_s( size, g_acHost, ptcHost, 256); g_iPort = _tstoi(ptcPort); // コントロール無効化 EnableCtrl(hDlg, FALSE); // タイマー発行 g_uiIDEvent = SetTimer(hDlg, 1, 1000, NULL); g_iTimer = 1; SendMessage(g_hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, g_iInterval)); SendMessage(g_hProgress, PBM_SETPOS, g_iTimer, 0); } //------------------------------------------------------------------------------ // タイマー停止 void StopTimer(HWND hDlg) { if (g_uiIDEvent != 0) { KillTimer(hDlg, g_uiIDEvent); g_uiIDEvent = 0; } SendMessage(g_hProgress, PBM_SETPOS, 0, 0); ShowWindow(g_hLabel, SW_HIDE); // コントロール有効化 EnableCtrl(hDlg, TRUE); } void EnableCtrl(HWND hDlg, BOOL bEnable) { EnableWindow(GetDlgItem(hDlg, IDC_EDIT_URL), bEnable); EnableWindow(GetDlgItem(hDlg, IDC_EDIT_INTERVAL), bEnable); EnableWindow(GetDlgItem(hDlg, IDOK), bEnable); } //------------------------------------------------------------------------------ int CheckPort(void) { HOSTENT*phe; SOCKADDR_INname; SOCKETsock = INVALID_SOCKET; intiFlgConnect = 0; intiRet; // IPアドレスの取得 phe = gethostbyname(g_acHost); if (phe == NULL) { return -1; } // サーバーに接続 sock = socket(AF_INET, SOCK_STREAM, 0); name.sin_family= AF_INET; name.sin_port= htons(g_iPort); name.sin_addr= *((IN_ADDR*)phe- h_addr); iRet = connect(sock, (SOCKADDR*) name, sizeof name); if (iRet != 0) { goto Exit; } iFlgConnect = 1; Exit if (iFlgConnect) { shutdown(sock, SD_BOTH); } if (sock != INVALID_SOCKET) { closesocket(sock); } return iFlgConnect; } resource.h #define IDD_MAIN_DIALOG100 #define IDC_STATIC-1 #define IDC_EDIT_URL1000 #define IDC_EDIT_INTERVAL1001 #define IDC_PROGRESS1002 #define IDC_LABEL1003 PortChecker.rc // リソーススクリプト #include windows.h #include "resource.h" IDD_MAIN_DIALOG DIALOGEX 0, 0, 240, 100 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "Port Checker" FONT 9, "MS Pゴシック" BEGIN LTEXT"URL( U) ",IDC_STATIC,8,8,32,12 EDITTEXTIDC_EDIT_URL,40,8,192,12,ES_AUTOHSCROLL LTEXT"間隔( I) ",IDC_STATIC,8,28,32,12 EDITTEXTIDC_EDIT_INTERVAL,40,28,24,12 LTEXT"秒",IDC_STATIC,68,28,12,12 LTEXT"http //host port\nhost port",IDC_STATIC,100,24,100,24 CONTROL"",IDC_PROGRESS,"msctls_progress32",WS_BORDER,8,48,224,12 LTEXT"",IDC_LABEL,8,68,32,12 DEFPUSHBUTTON"開始( S)",IDOK,132,76,48,16 PUSHBUTTON"中止( C)",IDCANCEL,184,76,48,16 END
https://w.atwiki.jp/xbox360score/pages/1790.html
Flight Control 項目数:16 総ポイント:200 ☆Windows Phone7用タイトル Get Around Play on each map at least once. 5 Air Wolf Land more than 10 helicopters in a single game. 5 Impatience is a Virtue Land more than 10 jets in a single game. 5 Medic! Have 5 emergency planes land in a single game. 5 Rush Hour Land 5 planes within 5 seconds. 10 Top-Gun Land over 50 planes on the Aircraft Carrier. 10 Holding Pattern After landing the first plane, keep the same plane on screen for more than 5 minutes. 15 No Pressure Play for more than 10 minutes in a single round. 15 No Fly Zone After landing the first plane, land no planes for two minutes. 15 Danger Zone Have more than 15 planes on screen at once. 20 Catastrophic Failure Have 3 separate collisions occur at the same time. 20 Crikey Land over 100 planes on a single map. 20 Fundamentals Land a cumulative total of 10 planes. 5 Centurion Land a cumulative total of 100 planes. 10 Millenial Man Land a cumulative total of 1000 planes. 15 Over Nine Thousand! Land a cumulative total of 10,000 planes. 25
https://w.atwiki.jp/intensity/pages/25.html
//----------------------------------------------------------------------------- // $Id DecklinkCaptureDlg.h,v 1.5 2006/04/11 01 11 07 ivanr Exp $ // // Desc DirectShow capture sample // // Copyright (c) Blackmagic Design 2005. All rights reserved. //----------------------------------------------------------------------------- #pragma once #include "afxwin.h" #include "Utils.h" // CDecklinkCaptureDlg dialog class CDecklinkCaptureDlg public CDialog { // Construction public CDecklinkCaptureDlg(CWnd* pParent = NULL);// standard constructor // Dialog Data enum { IDD = IDD_DECKLINKCAPTURE_DIALOG }; protected virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support afx_msg void OnCbnSelchangeComboVideodevice(); afx_msg void OnCbnSelchangeComboAudiodevice(); afx_msg void OnCbnSelchangeComboVideoformats(); afx_msg void OnCbnSelchangeComboAudioformats(); afx_msg void OnBnClickedCheckAudiomute(); afx_msg void OnBnClickedButtonBrowse(); afx_msg void OnBnClickedButtonCapture(); afx_msg void OnBnClickedButtonStop(); afx_msg void OnCbnSelchangeComboCompression(); // Implementation protected HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); virtual BOOL DestroyWindow(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); void HandleGraphEvent(); private IGraphBuilder* m_pGraph; IBaseFilter* m_pVideoCapture; IBaseFilter* m_pAudioCapture; IBaseFilter* m_pVideoRenderer; IBaseFilter* m_pSmartT; IMediaControl* m_pControl; IVideoWindow* m_pIVW;// for the preview window IMediaEventEx* m_pMediaEvent;// for the preview window DWORD m_ROTRegister; CComboBox m_videoDeviceCtrl; CComboBox m_audioDeviceCtrl; CComboBox m_videoFormatCtrl; CComboBox m_audioFormatCtrl; CComboBox m_compressionCtrl; CStatic m_preview; BOOL m_bAudioMute; int m_compressor; BOOL m_bEnableCompressionCtrl; enum { ENC_NONE, ENC_DV, ENC_WM }; CString m_captureFile; CEdit m_captureFileCtrl; VIDEOINFOHEADER m_vihDefault; WAVEFORMATEX m_wfexDefault; CRegUtils m_regUtils; HRESULT CreatePreviewGraph(); HRESULT CreateCaptureGraph(); HRESULT CreateUncompressedCaptureGraph(); HRESULT CreateDVCaptureGraph(); HRESULT CreateWMCaptureGraph(); HRESULT ConfigureWMEncoder(IBaseFilter* pASFWriter); HRESULT DestroyGraph(); void InitialiseVideoPreview(void); HRESULT PopulateDeviceControl(const GUID* pCategory, CComboBox* pCtrl); HRESULT PopulateVideoControl(); HRESULT PopulateAudioControl(); HRESULT PopulateCompressionControl(); void EnableControls(void); void DisableControls(void); void QueryRegistry(void); };
https://w.atwiki.jp/bmd_intensity/pages/26.html
//----------------------------------------------------------------------------- // $Id DecklinkCaptureDlg.cpp,v 1.9 2006/04/11 01 11 07 ivanr Exp $ // // Desc DirectShow capture sample // // Copyright (c) Blackmagic Design 2005. All rights reserved. //----------------------------------------------------------------------------- #include "stdafx.h" #include "DecklinkCapture.h" #include "DecklinkCaptureDlg.h" #include initguid.h // TODO move this to a lib #include "DecklinkSample_uuids.h" #undef lstrlenW #ifdef _DEBUG #define new DEBUG_NEW #endif #define WM_GRAPHNOTIFYWM_APP+1// for Filter Graph event notification //----------------------------------------------------------------------------- // CAboutDlg //----------------------------------------------------------------------------- // CAboutDlg dialog used for App About class CAboutDlg public CDialog { public CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected DECLARE_MESSAGE_MAP() }; CAboutDlg CAboutDlg() CDialog(CAboutDlg IDD) { } void CAboutDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg dialog //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Constructor // CDecklinkCaptureDlg CDecklinkCaptureDlg(CWnd* pParent /*=NULL*/) CDialog(CDecklinkCaptureDlg IDD, pParent) , m_pIVW(NULL) { m_hIcon = AfxGetApp()- LoadIcon(IDR_MAINFRAME); } //----------------------------------------------------------------------------- // DoDataExchange // void CDecklinkCaptureDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_VIDEOFORMATS, m_videoFormatCtrl); DDX_Control(pDX, IDC_COMBO_AUDIOFORMATS, m_audioFormatCtrl); DDX_Control(pDX, IDC_STATIC_PREVIEW, m_preview); DDX_Control(pDX, IDC_EDIT_CAPTUREFILE, m_captureFileCtrl); DDX_Control(pDX, IDC_COMBO_COMPRESSION, m_compressionCtrl); DDX_Control(pDX, IDC_COMBO_VIDEODEVICE, m_videoDeviceCtrl); DDX_Control(pDX, IDC_COMBO_AUDIODEVICE, m_audioDeviceCtrl); } BEGIN_MESSAGE_MAP(CDecklinkCaptureDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_CBN_SELCHANGE(IDC_COMBO_VIDEOFORMATS, OnCbnSelchangeComboVideoformats) ON_CBN_SELCHANGE(IDC_COMBO_AUDIOFORMATS, OnCbnSelchangeComboAudioformats) ON_BN_CLICKED(IDC_CHECK_AUDIOMUTE, OnBnClickedCheckAudiomute) ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnBnClickedButtonBrowse) ON_BN_CLICKED(IDC_BUTTON_CAPTURE, OnBnClickedButtonCapture) ON_BN_CLICKED(IDC_BUTTON_STOP, OnBnClickedButtonStop) ON_CBN_SELCHANGE(IDC_COMBO_COMPRESSION, OnCbnSelchangeComboCompression) ON_CBN_SELCHANGE(IDC_COMBO_VIDEODEVICE, OnCbnSelchangeComboVideodevice) ON_CBN_SELCHANGE(IDC_COMBO_AUDIODEVICE, OnCbnSelchangeComboAudiodevice) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg message handlers //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // OnInitDialog // Called before the dialog is displayed, use this message handler to initialise // our app BOOL CDecklinkCaptureDlg OnInitDialog() { CDialog OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu- AppendMenu(MF_SEPARATOR); pSysMenu- AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application s main window is not a dialog SetIcon(m_hIcon, TRUE);// Set big icon SetIcon(m_hIcon, FALSE);// Set small icon // create a basic capture graph and preview the incoming video m_pGraph = NULL; m_pVideoCapture = NULL; m_pAudioCapture = NULL; m_pVideoRenderer = NULL; m_pSmartT = NULL; m_pControl = NULL; m_pIVW = NULL; m_pMediaEvent = NULL; m_ROTRegister = 0; m_bAudioMute = FALSE; m_compressor = 0; m_bEnableCompressionCtrl = TRUE; m_captureFile = " Select File "; // initialise default video media type ZeroMemory( m_vihDefault, sizeof(m_vihDefault)); m_vihDefault.AvgTimePerFrame = 333667; m_vihDefault.bmiHeader.biWidth = 720; m_vihDefault.bmiHeader.biHeight = 486; m_vihDefault.bmiHeader.biBitCount = 16; m_vihDefault.bmiHeader.biCompression = YVYU ; // initialise default audio media type ZeroMemory( m_wfexDefault, sizeof(m_wfexDefault)); m_wfexDefault.nChannels = 2;// the only field of interest // retrieve last state QueryRegistry(); m_captureFileCtrl.SetWindowText(m_captureFile); EnableControls(); // create a preview graph // add the filters that will be used by all the graphs; preview, uncompressed capture, dv capture, // mpeg capture and windows media capture HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, reinterpret_cast void** ( m_pGraph)); if (SUCCEEDED(hr)) { #ifdef _DEBUG hr = CDSUtils AddGraphToRot(m_pGraph, m_ROTRegister); #endif hr = m_pGraph- QueryInterface(IID_IMediaControl, reinterpret_cast void** ( m_pControl)); if (SUCCEEDED(hr)) { // locate the video capture devices hr = PopulateDeviceControl( CLSID_VideoInputDeviceCategory, m_videoDeviceCtrl); if (SUCCEEDED(hr)) { hr = PopulateDeviceControl( CLSID_AudioInputDeviceCategory, m_audioDeviceCtrl); if (SUCCEEDED(hr)) { PWSTR pVideoName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.SetCurSel(0)); PWSTR pAudioName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.SetCurSel(0)); if (pVideoName pAudioName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pVideoName, m_pVideoCapture); if (SUCCEEDED(hr)) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pAudioName, m_pAudioCapture); if (SUCCEEDED(hr)) { PopulateVideoControl();// populate the video format control with the video formats of the currently selected device PopulateAudioControl();// populate the audio format control with the audio formats of the currently selected device PopulateCompressionControl(); // locate video screen renderer for the preview window hr = CDSUtils AddFilter(m_pGraph, CLSID_VideoRendererDefault, L"Video Renderer", m_pVideoRenderer); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); } } } } } } } } return TRUE; // return TRUE unless you set the focus to a control } //----------------------------------------------------------------------------- // DestroyWindow // Called when the window is being destroyed, clean up and free all resources. BOOL CDecklinkCaptureDlg DestroyWindow() { m_regUtils.Close(); #ifdef _DEBUG CDSUtils RemoveGraphFromRot(m_ROTRegister); #endif DestroyGraph(); SAFE_RELEASE(m_pControl); // Hide Video Window and remove owner. This has to be done prior to // destroying any window that displays video/still. if (m_pIVW) { m_pIVW- put_Visible(OAFALSE); m_pIVW- put_Owner(NULL); } SAFE_RELEASE(m_pIVW); SAFE_RELEASE(m_pMediaEvent); SAFE_RELEASE(m_pVideoRenderer); SAFE_RELEASE(m_pAudioCapture); SAFE_RELEASE(m_pVideoCapture); SAFE_RELEASE(m_pGraph); // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } count = m_audioFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } // release the device names attached to the item s data count = m_videoDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(item); delete [] pName; } count = m_audioDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(item); delete [] pName; } return CDialog DestroyWindow(); } //----------------------------------------------------------------------------- // OnSysCommand // void CDecklinkCaptureDlg OnSysCommand(UINT nID, LPARAM lParam) { if ((nID 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog OnSysCommand(nID, lParam); } } //----------------------------------------------------------------------------- // OnPaint // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CDecklinkCaptureDlg OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast WPARAM (dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog OnPaint(); } } //----------------------------------------------------------------------------- // HandleGraphEvent // At the moment we just read the event, discard it and release memory used to store it. void CDecklinkCaptureDlg HandleGraphEvent(void) { LONG lEventCode, lEventParam1, lEventParam2; if (!m_pMediaEvent) { return; } while (SUCCEEDED(m_pMediaEvent- GetEvent( lEventCode, reinterpret_cast LONG_PTR * ( lEventParam1), reinterpret_cast LONG_PTR * ( lEventParam2), 0))) { // just free memory associated with event m_pMediaEvent- FreeEventParams(lEventCode, lEventParam1, lEventParam2); } } //----------------------------------------------------------------------------- // WindowProc // Have to add our own message handling loop to handle events from the preview video // window and to pass Window events onto it - this is so it redraws itself correctly etc. LRESULT CDecklinkCaptureDlg WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_GRAPHNOTIFY HandleGraphEvent(); break; } // Pass all msgs to video window. vid window exists as child of static // picture frame. This ensures video window redraws itself etc. if (m_pIVW) { m_pIVW- NotifyOwnerMessage(reinterpret_cast LONG_PTR (m_hWnd) /* from me */, message, wParam, lParam); } return CDialog WindowProc(message, wParam, lParam); } //----------------------------------------------------------------------------- // OnQueryDragIcon // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CDecklinkCaptureDlg OnQueryDragIcon() { return static_cast HCURSOR (m_hIcon); } //----------------------------------------------------------------------------- // CreatePreviewGraph // Create a graph to preview the input // NOTE There are many ways of building graphs, you could opt for the ICaptureGraphBuilder interface which would // make things are lot simpler, however it doesn t always build the most efficient graphs. HRESULT CDecklinkCaptureDlg CreatePreviewGraph() { HRESULT hr = S_OK; if (m_pGraph) { // locate smart-T // NOTE The smart-T appears to hold references to its upstream connections even when its input pin // is diconnected. The smart-T has to be removed from the graph in order to clear these references which // is why the filter is enumerated and added every time the preview graph is built and removed whenever // it is destroyed. ASSERT(NULL == m_pSmartT); hr = CDSUtils AddFilter(m_pGraph, CLSID_SmartTee, L"Smart Tee", m_pSmartT); if (SUCCEEDED(hr)) { // DV preview is slightly different to all other previews if (ENC_DV != m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { // uncompressed, mpeg and wm preview // create the following // // Decklink Video Capture - Smart-T - AVI Decompressor - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // render the preview pin on the smart-T filter // first connect the Decklink video capture pin to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // now connect the preview pin of the smart-T to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", m_pVideoRenderer, NULL); } } else { // DV Preview // create the following // // Decklink Video Capture - AVI Decompressor - Smart-T - Colour Space Converter - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // this is a more efficient graph than created by the ICaptureGraphBuilder2 interface // add the AVI decompressor and colour space converter filters CComPtr IBaseFilter pAVIDecompressor = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AVIDec, L"AVI Decompressor", pAVIDecompressor); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pColourSpaceConverter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_Colour, L"Color Space Converter", pColourSpaceConverter); if (SUCCEEDED(hr)) { // conect the Decklink video capture pin to the AVI decompressor hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, pAVIDecompressor, NULL); if (SUCCEEDED(hr)) { // connect AVI decompressor to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, pAVIDecompressor, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // connect the preview pin of the smart-T to the colour space converter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", pColourSpaceConverter, NULL); if (SUCCEEDED(hr)) { // connect the colour space converter to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, pColourSpaceConverter, NULL, m_pVideoRenderer, NULL); } } } } } } } } else { hr = E_POINTER; } if (SUCCEEDED(hr)) { // the video path has been connected, initialise the preview window InitialiseVideoPreview(); // optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils RenderFilter(m_pGraph, m_pAudioCapture, L"Capture"); } // run the graph so that we can preview the input video if (m_pControl) { hr = m_pControl- Run(); } else { hr = E_POINTER; } } return hr; } //----------------------------------------------------------------------------- // CreateCaptureGraph // Create a graph to capture the input HRESULT CDecklinkCaptureDlg CreateCaptureGraph() { HRESULT hr = S_OK; // tack the file writer onto the preview graph if (m_pGraph m_pControl) { // stop the graph as we are about to modify it m_pControl- Stop(); // remove the default audio renderer so the Decklink audio capture filter // can be connected to the AVI mux, we will not preview audio whilst capturing CComPtr IPin pIPinOutput = NULL; hr = CDSUtils GetPin(m_pAudioCapture, L"Capture", pIPinOutput); if (SUCCEEDED(hr)) { // to disconnect both pins must be disconnected // find the pin connected to the Decklink audio capture pin CComPtr IPin pIPinConnection = NULL; hr = pIPinOutput- ConnectedTo( pIPinConnection); if (SUCCEEDED(hr)) { // disconnect the pins hr = m_pGraph- Disconnect(pIPinOutput); hr = m_pGraph- Disconnect(pIPinConnection); // get the owning filter of the downstream pin and remove it from the graph PIN_INFO pinInfo = {0}; hr = pIPinConnection- QueryPinInfo( pinInfo); if (SUCCEEDED(hr)) { if (pinInfo.pFilter) { hr = m_pGraph- RemoveFilter(pinInfo.pFilter); pinInfo.pFilter- Release(); } } } } // retrieve the capture filename m_captureFileCtrl.GetWindowText(m_captureFile); // store filename USES_CONVERSION; WCHAR captureFile[MAX_PATH]; wcsncpy(captureFile, A2W(m_captureFile), MAX_PATH); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetString("CaptureFile", reinterpret_cast const BYTE* (captureFile), sizeof(captureFile))); // decide the type of capture graph to build switch (m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { default case ENC_NONE hr = CreateUncompressedCaptureGraph(); break; case ENC_DV hr = CreateDVCaptureGraph(); break; case ENC_WM hr = CreateWMCaptureGraph(); break; } if (FAILED(hr)) { // there was a problem building the capture graph, issue a message // and rebuild preview graph char buffer[128]; StringCbPrintfA(buffer, sizeof(buffer), "The error 0x%08lx was detected when creating the capture graph with the following file name \r\n\r\n %s ", hr, m_captureFile); MessageBox(buffer, _T("Error"), MB_ICONERROR); OnBnClickedButtonStop();// destroy broken capture graph, build preview graph and enable controls } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // CreateUncompressedCaptureGraph // Create an optimum uncompressed capture graph HRESULT CDecklinkCaptureDlg CreateUncompressedCaptureGraph() { HRESULT hr = S_OK; // uncompressed capture // locate the AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateDVCaptureGraph // Create an optimum DV capture graph // NOTE that this will only work for SD HRESULT CDecklinkCaptureDlg CreateDVCaptureGraph() { HRESULT hr = S_OK; // locate the DV encoder, AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pDVEncoder = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DVVideoEnc, L"DV Video Encoder", pDVEncoder); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // configure the DV encoder CComQIPtr IDVEnc, IID_IDVEnc pIDV = pDVEncoder; if (pIDV) { // located a DV compression filter, set the format int videoFormat, dvFormat, resolution; hr = pIDV- get_IFormatResolution( videoFormat, dvFormat, resolution, FALSE, NULL); if (SUCCEEDED(hr)) { ASSERT(DVENCODERFORMAT_DVSD == dvFormat); ASSERT(DVENCODERRESOLUTION_720x480 == resolution); if ((DVENCODERVIDEOFORMAT_NTSC == videoFormat) (576 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to PAL if its NTSC videoFormat = DVENCODERVIDEOFORMAT_PAL; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } else if ((DVENCODERVIDEOFORMAT_PAL == videoFormat) (486 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to NTSC if its PAL videoFormat = DVENCODERVIDEOFORMAT_NTSC; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } } } if (SUCCEEDED(hr)) { // if the format is PAL, insert the Decklink field swap filter, PAL DV is the opposite // field order to PAL SD if (576 == m_vihDefault.bmiHeader.biHeight) { CComPtr IBaseFilter pPALFieldSwap = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DecklinkFieldSwap, L"Decklink PAL Field Swap", pPALFieldSwap); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the PAL field swap filter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pPALFieldSwap, NULL); if (SUCCEEDED(hr)) { // connect the field swap filter to the DV encoder hr = CDSUtils ConnectFilters(m_pGraph, pPALFieldSwap, NULL, pDVEncoder, NULL); } } } else { // connect the smart-T capture pin to the DV Encoder hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pDVEncoder, NULL); } if (SUCCEEDED(hr)) { // connect the DV encoder output to the AVI mux hr = CDSUtils ConnectFilters(m_pGraph, pDVEncoder, NULL, pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateWMCaptureGraph // Create an optimum Windows Media capture graph HRESULT CDecklinkCaptureDlg CreateWMCaptureGraph() { HRESULT hr = S_OK; // locate the asf writer filter and add it to the graph CComPtr IBaseFilter pASFWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_WMAsfWriter, L"WM ASF Writer", pASFWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pASFWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { hr = ConfigureWMEncoder(pASFWriter); } } if (SUCCEEDED(hr)) { if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, pASFWriter, MEDIATYPE_Audio); } if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, pASFWriter, MEDIATYPE_Video); if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } return hr; } //----------------------------------------------------------------------------- // ConfigureWMEncoder // Configure the Windows Media encoder HRESULT CDecklinkCaptureDlg ConfigureWMEncoder(IBaseFilter* pASFWriter) { HRESULT hr = S_OK; // modify the video output resolution of a system profile if (pASFWriter) { // simple system profile encoding CComQIPtr IConfigAsfWriter, IID_IConfigAsfWriter pICW = pASFWriter; if (pICW) { //NOTE You could just use the following for a default system profile //hr = pICW- ConfigureFilterUsingProfileGuid(WMProfile_XXX);// RE wmsysprf.h //NOTE If you want video only capture you must modify the profile to remove the audio // otherwise encoding will fail // Load a system profile and modify the resolution of the video output // NOTE The scope of the encoding is enormous, this just demonstrates how to change // the output video resolution from 320x240 to something larger. // Changing the resolution affects coding performance, it is likely that the encoder will // start to drop frames after a while. Using WM9 codecs will probably improve performance // and that has been left to the reader... ;o) // // get a profile manager CComPtr IWMProfileManager pIWMProfileManager = NULL; hr = WMCreateProfileManager( pIWMProfileManager); if (SUCCEEDED(hr)) { // load a system profile to modify CComPtr IWMProfile pIWMProfile = NULL; // NOTE Any WMProfile_XXX could be used here, or create a custom profile from scratch hr = pIWMProfileManager- LoadProfileByID(WMProfile_V80_FAIRVBRVideo, pIWMProfile); if (SUCCEEDED(hr)) { // search the streams for the video stream and attempt to modify the video size DWORD cbStreams = 0; hr = pIWMProfile- GetStreamCount( cbStreams); if (SUCCEEDED(hr)) { IWMStreamConfig* pIWMStreamConfig = NULL; GUID streamType = {0}; DWORD stream; if (m_bAudioMute) { // remove the audio stream for video only capture for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr)) { if (MEDIATYPE_Audio == streamType) { if (SUCCEEDED(pIWMProfile- RemoveStream(pIWMStreamConfig))) { --cbStreams; } SAFE_RELEASE(pIWMStreamConfig); break; } } } } } for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr) (MEDIATYPE_Video == streamType)) { // found the video stream CComQIPtr IWMMediaProps, IID_IWMMediaProps pIWMMediaProps = pIWMStreamConfig; if (pIWMMediaProps) { // get the size of the media type WM_MEDIA_TYPE* pMediaType = NULL; DWORD cbMediaType = 0; hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { pMediaType = (WM_MEDIA_TYPE*)new char [cbMediaType]; if (pMediaType) { hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { BITMAPINFOHEADER* pbmih = NULL; if (WMFORMAT_VideoInfo == pMediaType- formattype) { WMVIDEOINFOHEADER* pvih = (WMVIDEOINFOHEADER*)pMediaType- pbFormat; pbmih = pvih- bmiHeader; } else if (WMFORMAT_MPEG2Video == pMediaType- formattype) { WMVIDEOINFOHEADER2* pvih = (WMVIDEOINFOHEADER2*) ((WMMPEG2VIDEOINFO*)pMediaType- pbFormat)- hdr; pbmih = pvih- bmiHeader; } if (pbmih) { // modify the video dimensions, set the property, reconfigure the stream // and then configure the ASF writer with this modified profile pbmih- biWidth = 640;// was 320; pbmih- biHeight = 480;// was 240; pbmih- biSizeImage = pbmih- biWidth * pbmih- biHeight * pbmih- biBitCount / 8;// NOTE This calculation is not correct for all bit depths hr = pIWMMediaProps- SetMediaType(pMediaType); if (SUCCEEDED(hr)) { // config the ASF writer filter to use this modified system profile hr = pIWMProfile- ReconfigStream(pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pICW- ConfigureFilterUsingProfile(pIWMProfile); } } } } delete [] (char*)pMediaType; } } } } SAFE_RELEASE(pIWMStreamConfig); } } } } } /* // modify other ASF writer properties IServiceProvider* pProvider = NULL; hr = pASFWriter- QueryInterface(IID_IServiceProvider, reinterpret_cast void** ( pProvider)); if (SUCCEEDED(hr)) { IID_IWMWriterAdvanced2* pWMWA2 = NULL; hr = pProvider- QueryService(IID_IID_IWMWriterAdvanced2, IID_IID_IWMWriterAdvanced2, reinterpret_cast void** ( pWMWA2)); if (SUCCEEDED(hr)) { // set the deinterlace mode pWMWA2- GetInputSetting(...); SAFE_RELEASE(pWMWA2); } SAFE_RELEASE(pProvider); } */ } } else { hr = E_INVALIDARG; } return hr; } //----------------------------------------------------------------------------- // DestroyGraph // Remove all intermediate filters, keep any Decklink and video render filters as // these are used by all the graphs. HRESULT CDecklinkCaptureDlg DestroyGraph() { HRESULT hr = S_OK; if (m_pGraph m_pControl) { m_pControl- Stop(); // release our outstanding reference on this filter so it can be removed from the graph SAFE_RELEASE(m_pSmartT); // retrieve the name of the capture device, don t remove it in this method PWSTR pNameVideoCapture = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); PWSTR pNameAudioCapture = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); CComPtr IEnumFilters pEnum = NULL; hr = m_pGraph- EnumFilters( pEnum); if (SUCCEEDED(hr)) { IBaseFilter* pFilter = NULL; while (S_OK == pEnum- Next(1, pFilter, NULL)) { FILTER_INFO filterInfo = {0}; hr = pFilter- QueryFilterInfo( filterInfo); if (SUCCEEDED(hr)) { SAFE_RELEASE(filterInfo.pGraph); if ((NULL == wcsstr(filterInfo.achName, pNameVideoCapture)) (NULL == wcsstr(filterInfo.achName, pNameAudioCapture)) (NULL == wcsstr(filterInfo.achName, L"Video Renderer"))) { hr = m_pGraph- RemoveFilter(pFilter); if (SUCCEEDED(hr)) { hr = pEnum- Reset(); } } } SAFE_RELEASE(pFilter); } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // InitialiseVideoPreview // In short get the video screen renderer to draw into the picture control, which is our preview window // the following code sets this up, in addition to adding the HandleGraphEvent and WindowProc methods // read the DXSDK docos for more detailed information void CDecklinkCaptureDlg InitialiseVideoPreview(void) { // modify the preview window if (m_pVideoRenderer) { if (NULL == m_pIVW) { if (SUCCEEDED(m_pVideoRenderer- QueryInterface(IID_IVideoWindow, reinterpret_cast void** ( m_pIVW)))) { // get the window to handle redraws, etc // Set msg drain of VideoWindow to point to our dialog window. The dialog s // window procedure then handles events from the VideoWindow. HRESULT hr = m_pIVW- put_MessageDrain(reinterpret_cast OAHWND (m_hWnd)); if (NULL == m_pMediaEvent) { // Make graph send WM_GRAPHNOTIFY when it wants our attention see "Learning // When an Event Occurs" in the DX9 documentation. hr = m_pGraph- QueryInterface(IID_IMediaEventEx, reinterpret_cast void** ( m_pMediaEvent)); if (SUCCEEDED(hr)) { hr = m_pMediaEvent- SetNotifyWindow(reinterpret_cast OAHWND (m_hWnd), WM_GRAPHNOTIFY, 0); } // object created for it. RECT rc; m_preview.GetClientRect( rc); m_pIVW- SetWindowPosition(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); // VideoWindow is a child window of the bounding rect hr = m_pIVW- put_WindowStyle(WS_CHILD); hr = m_pIVW- put_Owner(reinterpret_cast OAHWND (m_preview.GetSafeHwnd())); hr = m_pIVW- SetWindowForeground(-1); } } } } } //----------------------------------------------------------------------------- // PopulateDeviceControl // Fill device combo box with available devices of the specified category HRESULT CDecklinkCaptureDlg PopulateDeviceControl(const GUID* pCategory, CComboBox* pCtrl) { HRESULT hr = S_OK; if (pCategory pCtrl) { // first enumerate the system devices for the specifed class and filter name CComPtr ICreateDevEnum pSysDevEnum = NULL; hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast void** ( pSysDevEnum)); if (SUCCEEDED(hr)) { CComPtr IEnumMoniker pEnumCat = NULL; hr = pSysDevEnum- CreateClassEnumerator(*pCategory, pEnumCat, 0); if (S_OK == hr) { IMoniker* pMoniker = NULL; bool Loop = true; while ((S_OK == pEnumCat- Next(1, pMoniker, NULL)) Loop) { IPropertyBag* pPropBag = NULL; hr = pMoniker- BindToStorage(0, 0, IID_IPropertyBag, reinterpret_cast void** ( pPropBag)); if (SUCCEEDED(hr)) { VARIANT varName; VariantInit( varName); hr = pPropBag- Read(L"FriendlyName", varName, 0); if (SUCCEEDED(hr)) { size_t len = wcslen(varName.bstrVal) + 1; PWSTR pName = new WCHAR [len]; StringCchCopyW(pName, len, varName.bstrVal); CW2AEX buf(varName.bstrVal); pCtrl- SetItemData(pCtrl- AddString(buf), (DWORD)pName); } VariantClear( varName); // contained within a loop, decrement the reference count SAFE_RELEASE(pPropBag); } SAFE_RELEASE(pMoniker); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateVideoControl // Fill video format combo box with supported video formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateVideoControl() { HRESULT hr = S_OK; if (m_pVideoCapture) { // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } m_videoFormatCtrl.ResetContent(); } // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (video formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(VIDEO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; VIDEO_STREAM_CONFIG_CAPS vscc; VIDEOINFOHEADER* pvih = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( vscc)); if (SUCCEEDED(hr)) { char buffer[128]; WORD PixelFormat; float FrameRate; ZeroMemory(buffer, sizeof(buffer)); pvih = (VIDEOINFOHEADER*)pmt- pbFormat; char* pPixelFormatLUT[] = {"4 2 2", "4 4 4"}; if (pvih- bmiHeader.biBitCount == 16) PixelFormat = 8; else if (pvih- bmiHeader.biBitCount == 20) PixelFormat = 10; else PixelFormat = pvih- bmiHeader.biBitCount; // provide a useful description of the formats if (486 == pvih- bmiHeader.biHeight) { if (417083 == pvih- AvgTimePerFrame) { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s (3 2 pulldown removal)", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if (576 == pvih- bmiHeader.biHeight) { StringCbPrintfA(buffer, sizeof(buffer), "PAL %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { char* pFrameRateFormat[] = {"%.2f", "%.0f"}; FrameRate = (float)(long)UNITS / pvih- AvgTimePerFrame; if ((720 == pvih- bmiHeader.biHeight) (59.94 FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((720 == pvih- bmiHeader.biHeight) (59.94 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((1080 == pvih- bmiHeader.biHeight) (50.00 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } } // add the item description to combo box int n = m_videoFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_videoFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pvih- AvgTimePerFrame == m_vihDefault.AvgTimePerFrame) (pvih- bmiHeader.biWidth == m_vihDefault.bmiHeader.biWidth) (pvih- bmiHeader.biHeight == m_vihDefault.bmiHeader.biHeight) (pvih- bmiHeader.biBitCount == m_vihDefault.bmiHeader.biBitCount)) { m_videoFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_videoFormatCtrl.AddString("ERROR Unable to retrieve video formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateAudioControl // Fill audio format combo box with supported audio formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateAudioControl() { HRESULT hr = S_OK; if (m_pAudioCapture) { // free mediatypes attached to format controls int count = m_audioFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } m_audioFormatCtrl.ResetContent(); } // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (audio formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(AUDIO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; AUDIO_STREAM_CONFIG_CAPS ascc; WAVEFORMATEX* pwfex = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( ascc)); if (SUCCEEDED(hr)) { char buffer[32]; ZeroMemory(buffer, sizeof(buffer)); pwfex = (WAVEFORMATEX*)pmt- pbFormat; // provide a useful description of the formats if (1 == pwfex- nChannels) { StringCbPrintfA(buffer, sizeof(buffer), "%d channel, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } else { StringCbPrintfA(buffer, sizeof(buffer), "%d channels, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } // add the item description to combo box int n = m_audioFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_audioFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pwfex- wFormatTag == m_wfexDefault.wFormatTag) (pwfex- nChannels == m_wfexDefault.nChannels) (pwfex- nSamplesPerSec == m_wfexDefault.nSamplesPerSec) (pwfex- nAvgBytesPerSec == m_wfexDefault.nAvgBytesPerSec)) { m_audioFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_audioFormatCtrl.AddString("ERROR Unable to retrieve audio formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateCompressionControl // Fill compression control with a selection of video compressors, locate the // encoders and add them to the combo box if they exist. HRESULT CDecklinkCaptureDlg PopulateCompressionControl() { int n = m_compressionCtrl.AddString("Uncompressed"); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_NONE); // search for the DV encoder, MPEG encoder and WM encoder IBaseFilter* pFilter = NULL; HRESULT hr = CoCreateInstance(CLSID_DVVideoEnc, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("DV Video Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_DV); SAFE_RELEASE(pFilter); } hr = CoCreateInstance(CLSID_WMAsfWriter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("Windows Media Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_WM); SAFE_RELEASE(pFilter); } m_compressionCtrl.SetCurSel(m_compressor); return S_OK; } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboVideodevice() { SAFE_RELEASE(m_pVideoCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // rebuild graph with new capture device selection PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pName, m_pVideoCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_vihDefault = *(VIDEOINFOHEADER*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateVideoControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudiodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboAudiodevice() { SAFE_RELEASE(m_pAudioCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pName, m_pAudioCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_wfexDefault = *(WAVEFORMATEX*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateAudioControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideoformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboVideoformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(m_videoFormatCtrl.GetCurSel()); m_vihDefault = *(VIDEOINFOHEADER*)pmt- pbFormat; ASSERT(sizeof(VIDEOINFOHEADER) = pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); // update compression control, we don t have an HD compression filter so disable compression for HD formats if (576 m_vihDefault.bmiHeader.biHeight) { m_compressor = 0; m_compressionCtrl.SetCurSel(m_compressor); // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); m_bEnableCompressionCtrl = FALSE; } else { m_bEnableCompressionCtrl = TRUE; } EnableControls(); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudioformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboAudioformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(m_audioFormatCtrl.GetCurSel()); m_wfexDefault = *(WAVEFORMATEX*)pmt- pbFormat; ASSERT(sizeof(WAVEFORMATEX) == pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboCompression // Rebuild preview graph if compression selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboCompression() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state m_compressor = m_compressionCtrl.GetCurSel(); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); // rebuild the graph hr = CreatePreviewGraph(); } } //----------------------------------------------------------------------------- // OnBnClickedCheckAudiomute // Rebuild the capture graph to reflect the new audio setting void CDecklinkCaptureDlg OnBnClickedCheckAudiomute() { CButton* pCheck = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); if (pCheck) { m_bAudioMute = pCheck- GetState() 0x0003; HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); // rebuild the graph which reflects the new audio setting hr = CreatePreviewGraph(); } } } //----------------------------------------------------------------------------- // OnBnClickedButtonBrowse // Create a file open dialog to browse for a file location void CDecklinkCaptureDlg OnBnClickedButtonBrowse() { char BASED_CODE szFilters[] = "Windows Media Files|*.avi;*.asf;*.wmv|All Files (*.*)|*.*||"; char* pExt[] = {"*.avi", "*.avi", "*.asf;*.wmv"}; CFileDialog FileDlg(TRUE, "Windows Media Files", pExt[m_compressor], 0, szFilters, this); if (FileDlg.DoModal() == IDOK) { m_captureFile = FileDlg.GetPathName(); m_captureFileCtrl.SetWindowText(m_captureFile); } } //----------------------------------------------------------------------------- // OnBnClickedButtonCapture // Create a capture graph a start capture void CDecklinkCaptureDlg OnBnClickedButtonCapture() { HRESULT hr = CreateCaptureGraph(); if (SUCCEEDED(hr)) { if (m_pControl) { hr = m_pControl- Run(); if (SUCCEEDED(hr)) { DisableControls(); } } } } //----------------------------------------------------------------------------- // OnBnClickedButtonStop // Stop capture and revert to preview void CDecklinkCaptureDlg OnBnClickedButtonStop() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); if (SUCCEEDED(hr)) { EnableControls(); } } } //----------------------------------------------------------------------------- // EnableControls // void CDecklinkCaptureDlg EnableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); m_bEnableCompressionCtrl = (576 m_vihDefault.bmiHeader.biHeight) ? FALSE TRUE;// don t have an HDV codec do disable compression control for HD formats pWnd- EnableWindow(m_bEnableCompressionCtrl); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(FALSE); } //----------------------------------------------------------------------------- // DisableControls // void CDecklinkCaptureDlg DisableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(TRUE); } //----------------------------------------------------------------------------- // QueryRegistry // retrieve previous media formats from registry void CDecklinkCaptureDlg QueryRegistry(void) { if (ERROR_SUCCESS == m_regUtils.Open("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoFormat", reinterpret_cast LPBYTE ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioFormat", reinterpret_cast LPBYTE ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioMute", reinterpret_cast LPBYTE ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoCompressor", reinterpret_cast LPBYTE ( m_compressor), sizeof(m_compressor))); WCHAR captureFile[MAX_PATH]; ZeroMemory(captureFile, sizeof(captureFile)); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetString("CaptureFile", reinterpret_cast LPBYTE (captureFile), sizeof(captureFile))); m_captureFile = captureFile; } else { // create the key and registry values if (ERROR_SUCCESS == m_regUtils.Create("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); } } // update mute audio check box control CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); pButton- SetCheck(m_bAudioMute); }
https://w.atwiki.jp/hmiku/pages/43524.html
【登録タグ GUMI MAIKA T VOCALOID YZYX 曲】 作詞:YZYX 作曲:YZYX 編曲:YZYX 唄:GUMI・MAIKA 曲紹介 Yes, this is a Wadanohara and The Great Blue Sea's song. YZYX氏ボカロPデビュー曲。 kuromoon氏の声で「MDML2」(C86)でリリースされた、Mogeko(海底囚人)氏のゲーム(漫画)「大海原と大海原」を基に作られた曲。 声の担当は、メインボイスはGUMI、笑い声とセリフはMAIKAである。 動画はHikusa氏が、イラストはRevanche7th氏、Rene Elric氏、Gehirnkaeter氏が手掛ける。 歌詞 (動画より書き起こし) I'm the witch who protects your sweet dreams. Trust in me, I just want to see, My loved world In harmony. All began like any other day, Everything in a normal way, Hear the waves, it's the sound from the sea, bringing calm when I see it, I wish knew about the destiny Gaze at fate with clarity A heartbeat, an inkling of something, Suddenly commences to invade a strange feeling What can be? I don't know. It's like a picture of a fate, But all turned red. Red will make you happy, don't you see? Is incredible how gullible you are. Just open your eyes. It's a vision from an uncertain existence, Submerged in a crimson sea the hopes rest don't surrender I ll show the strength of my heart, how my yearning never falls, I will raise my magic power, I will protect everyone I'm the witch who protects your sweet dreams. Trust in me, I just want to see, My loved world In harmony. In a blink, many things never seen, That appear in front of me. Can't believe, make damage is the aim, I wish it was just a game. In seconds the heartless intentions, Leaving all the reflections, In my way I met the wickedness, And this mind got dominated completely by fears. Why am I so weak? I feel powerless, This depresses, It's a sad problem, You're really easy to trick. You're a powerless witch. Just open your eyes. Darkness, conceals all the sentiments, all the blames, The sadness from all my friends, I don't want more it must be stopped I ll show the strength of my heart, how my yearning never falls, I will raise my magic power, I will protect everyone I'm the witch who protects your sweet dreams. Trust in me, I just want to see, My loved world In harmony. コメント 名前 コメント
https://w.atwiki.jp/mtg2384/pages/1528.html
開催日:2012 / 06 / 24 参加人数:208名 フォーマット:レガシー(~AVR) Live Coverage of StarCityGames.com Open Series Detroit autolink 優勝:Lands 準優勝:Elves‐Gw 第3位:Elves‐Gw 第4位:URG Tempo‐Canadian 第5位:Maverick 第7位:Affinity 第8位:Dredge 第9位:Maverick 第10位:UW Control‐Stoneforge 第11位:Blue Control‐CounterTop BtB 第12位:Elves‐Gw 第13位:UW Control‐Terminus CounterTop +r 第14位:URG Tempo 第15位:Metalworker 第16位:Maverick 優勝:Lands 使用者:Bobby Kovacs Main Deck 1《森/Forest》 2《Bayou》 1《ボジューカの沼/Bojuka Bog》 2《忍び寄るタール坑/Creeping Tar Pit》 1《幽霊街/Ghost Quarter》 1《Glacial Chasm》 4《Maze of Ith》 1《霧深い雨林/Misty Rainforest》 4《リシャーダの港/Rishadan Port》 3《トレイリア西部/Tolaria West》 3《平穏な茂み/Tranquil Thicket》 3《Tropical Island》 1《新緑の地下墓地/Verdant Catacombs》 4《不毛の大地/Wasteland》 1《吹きさらしの荒野/Windswept Heath》 1《アカデミーの廃墟/Academy Ruins》 1《Karakas》 1《The Tabernacle at Pendrell Vale》 1《ヨーグモスの墳墓、アーボーグ/Urborg, Tomb of Yawgmoth》 1《世界のるつぼ/Crucible of Worlds》 1《仕組まれた爆薬/Engineered Explosives》 1《罠の橋/Ensnaring Bridge》 4《モックス・ダイアモンド/Mox Diamond》 1《忘却石/Oblivion Stone》 1《Zuran Orb》 4《踏査/Exploration》 2《マナ結合/Manabond》 3《直観/Intuition》 4《壌土からの生命/Life from the Loam》 3《カラスの罪/Raven s Crime》 Sideboard 4《虚空の杯/Chalice of the Void》 1《呪われたトーテム像/Cursed Totem》 1《仕組まれた爆薬/Engineered Explosives》 2《三なる宝球/Trinisphere》 4《闇の腹心/Dark Confidant》 3《クローサの掌握/Krosan Grip》 準優勝:Elves‐Gw 使用者:Caleb Durward Main Deck 3《森/Forest》 1《地平線の梢/Horizon Canopy》 2《霧深い雨林/Misty Rainforest》 2《Savannah》 4《新緑の地下墓地/Verdant Catacombs》 1《樹木茂る山麓/Wooded Foothills》 1《ドライアドの東屋/Dryad Arbor》 2《ガイアの揺籃の地/Gaea s Cradle》 1《ペンデルヘイヴン/Pendelhaven》 3《樺の知識のレインジャー/Birchlore Rangers》 4《エルフの幻想家/Elvish Visionary》 2《Fyndhorn Elves》 4《遺産のドルイド/Heritage Druid》 4《ラノワールのエルフ/Llanowar Elves》 2《鏡の精体/Mirror Entity》 4《イラクサの歩哨/Nettle Sentinel》 3《ティタニアの僧侶/Priest of Titania》 2《クウィリーオン・レインジャー/Quirion Ranger》 1《威厳の魔力/Regal Force》 1《ヴィリジアンのシャーマン/Viridian Shaman》 4《ワイアウッドの共生虫/Wirewood Symbiote》 1《輪作/Crop Rotation》 4《垣間見る自然/Glimpse of Nature》 4《緑の太陽の頂点/Green Sun s Zenith》 Sideboard 1《弱者の石/Meekstone》 1《迫撃鞘/Mortarpod》 2《アメジストのとげ/Thorn of Amethyst》 4《フェアリーの忌み者/Faerie Macabre》 1《クァーサルの群れ魔道士/Qasali Pridemage》 1《漁る軟泥/Scavenging Ooze》 2《謙虚/Humility》 1《梅澤の十手/Umezawa s Jitte》 1《ガドック・ティーグ/Gaddock Teeg》 1《スレイベンの守護者、サリア/Thalia, Guardian of Thraben》 第3位:Elves‐Gw 使用者:Christoffer Andersen Main Deck 4《森/Forest》 2《霧深い雨林/Misty Rainforest》 2《Savannah》 4《新緑の地下墓地/Verdant Catacombs》 1《樹木茂る山麓/Wooded Foothills》 1《ドライアドの東屋/Dryad Arbor》 2《ガイアの揺籃の地/Gaea s Cradle》 1《ペンデルヘイヴン/Pendelhaven》 3《樺の知識のレインジャー/Birchlore Rangers》 4《エルフの幻想家/Elvish Visionary》 4《Fyndhorn Elves》 4《遺産のドルイド/Heritage Druid》 3《ラノワールのエルフ/Llanowar Elves》 2《鏡の精体/Mirror Entity》 4《イラクサの歩哨/Nettle Sentinel》 3《ティタニアの僧侶/Priest of Titania》 2《クウィリーオン・レインジャー/Quirion Ranger》 1《威厳の魔力/Regal Force》 1《ヴィリジアンのシャーマン/Viridian Shaman》 4《ワイアウッドの共生虫/Wirewood Symbiote》 1《輪作/Crop Rotation》 4《垣間見る自然/Glimpse of Nature》 4《緑の太陽の頂点/Green Sun s Zenith》 Sideboard 3《弱者の石/Meekstone》 1《迫撃鞘/Mortarpod》 4《アメジストのとげ/Thorn of Amethyst》 4《フェアリーの忌み者/Faerie Macabre》 1《クァーサルの群れ魔道士/Qasali Pridemage》 1《漁る軟泥/Scavenging Ooze》 1《ガドック・ティーグ/Gaddock Teeg》 第4位:URG Tempo‐Canadian 使用者:Jeremy Stowe Main Deck 4《霧深い雨林/Misty Rainforest》 4《沸騰する小湖/Scalding Tarn》 1《Taiga》 3《Tropical Island》 3《Volcanic Island》 4《不毛の大地/Wasteland》 4《秘密を掘り下げる者/Delver of Secrets》 4《敏捷なマングース/Nimble Mongoose》 1《漁る軟泥/Scavenging Ooze》 3《タルモゴイフ/Tarmogoyf》 4《渦まく知識/Brainstorm》 3《目くらまし/Daze》 4《Force of Will》 4《稲妻/Lightning Bolt》 2《呪文貫き/Spell Pierce》 4《もみ消し/Stifle》 2《思考掃き/Thought Scour》 2《二股の稲妻/Forked Bolt》 4《思案/Ponder》 Sideboard 1《墓掘りの檻/Grafdigger s Cage》 1《真髄の針/Pithing Needle》 2《トーモッドの墓所/Tormod s Crypt》 2《精神支配/Mind Harness》 3《赤霊破/Red Elemental Blast》 4《水没/Submerge》 1《外科的摘出/Surgical Extraction》 1《壌土からの生命/Life from the Loam》 第5位:Maverick 使用者:Deshaun Blaylock Main Deck 2《森/Forest》 1《平地/Plains》 1《ボジューカの沼/Bojuka Bog》 2《魂の洞窟/Cavern of Souls》 1《地平線の梢/Horizon Canopy》 1《Maze of Ith》 1《霧深い雨林/Misty Rainforest》 4《Savannah》 4《不毛の大地/Wasteland》 4《吹きさらしの荒野/Windswept Heath》 1《ドライアドの東屋/Dryad Arbor》 2《Karakas》 1《エイヴンの思考検閲者/Aven Mindcensor》 2《獣相のシャーマン/Fauna Shaman》 4《聖遺の騎士/Knight of the Reliquary》 4《ルーンの母/Mother of Runes》 4《貴族の教主/Noble Hierarch》 2《クァーサルの群れ魔道士/Qasali Pridemage》 3《漁る軟泥/Scavenging Ooze》 1《スクリブのレインジャー/Scryb Ranger》 1《ガドック・ティーグ/Gaddock Teeg》 3《スレイベンの守護者、サリア/Thalia, Guardian of Thraben》 4《剣を鍬に/Swords to Plowshares》 2《梅澤の十手/Umezawa s Jitte》 4《緑の太陽の頂点/Green Sun s Zenith》 1《壌土からの生命/Life from the Loam》 Sideboard 1《罠の橋/Ensnaring Bridge》 1《トーモッドの墓所/Tormod s Crypt》 1《エーテル宣誓会の法学者/Ethersworn Canonist》 1《ファイレクシアの破棄者/Phyrexian Revoker》 1《エメリアの天使/Emeria Angel》 1《調和スリヴァー/Harmonic Sliver》 2《窒息/Choke》 2《輪作/Crop Rotation》 2《悟りの教示者/Enlightened Tutor》 1《流刑への道/Path to Exile》 1《静寂の守り手、リンヴァーラ/Linvala, Keeper of Silence》 1《スレイベンの守護者、サリア/Thalia, Guardian of Thraben》 第7位:Affinity 使用者:David Goldfarb Main Deck 4《古えの居住地/Ancient Den》 4《教議会の座席/Seat of the Synod》 4《囁きの大霊堂/Vault of Whispers》 4《墨蛾の生息地/Inkmoth Nexus》 3《刻まれた勇者/Etched Champion》 4《金属ガエル/Frogmite》 4《メムナイト/Memnite》 4《信号の邪魔者/Signal Pest》 4《大霊堂のスカージ/Vault Skirge》 3《石鍛冶の神秘家/Stoneforge Mystic》 4《頭蓋囲い/Cranial Plating》 4《バネ葉の太鼓/Springleaf Drum》 4《急送/Dispatch》 4《オパールのモックス/Mox Opal》 4《物読み/Thoughtcast》 2《ボーラスの工作員、テゼレット/Tezzeret, Agent of Bolas》 Sideboard 3《墓掘りの檻/Grafdigger s Cage》 1《刻まれた勇者/Etched Champion》 4《エーテル宣誓会の法学者/Ethersworn Canonist》 4《呪文貫き/Spell Pierce》 1《強迫/Duress》 2《思考囲い/Thoughtseize》 第8位:Dredge 使用者:Justin Haas Main Deck 4《セファリッドの円形競技場/Cephalid Coliseum》 4《真鍮の都/City of Brass》 4《宝石鉱山/Gemstone Mine》 2《知られざる楽園/Undiscovered Paradise》 4《ゴルガリの墓トロール/Golgari Grave-Troll》 4《ゴルガリの凶漢/Golgari Thug》 3《イチョリッド/Ichorid》 4《ナルコメーバ/Narcomoeba》 4《朽ちゆくインプ/Putrid Imp》 4《臭い草のインプ/Stinkweed Imp》 4《ライオンの瞳のダイアモンド/Lion s Eye Diamond》 4《黄泉からの橋/Bridge from Below》 2《打開/Breakthrough》 4《陰謀団式療法/Cabal Therapy》 4《入念な研究/Careful Study》 1《戦慄の復活/Dread Return》 4《信仰無き物あさり/Faithless Looting》 Sideboard 1《魅力的な執政官/Blazing Archon》 1《炎の血族の盲信者/Flame-Kin Zealot》 1《憎悪縛りの剥ぎ取り/Flayer of the Hatebound》 2《冥界の影/Nether Shadow》 2《蒸気の連鎖/Chain of Vapor》 3《炎の嵐/Firestorm》 3《自然の要求/Nature s Claim》 1《グリセルブランド/Griselbrand》 1《戦慄の復活/Dread Return》 第9位:Maverick 使用者:teresa buss Main Deck 2《森/Forest》 1《平地/Plains》 2《魂の洞窟/Cavern of Souls》 1《地平線の梢/Horizon Canopy》 1《Maze of Ith》 2《霧深い雨林/Misty Rainforest》 4《Savannah》 1《活発な野生林/Stirring Wildwood》 3《不毛の大地/Wasteland》 4《吹きさらしの荒野/Windswept Heath》 1《ドライアドの東屋/Dryad Arbor》 1《Karakas》 1《ヤヴィマヤのうろ穴/Yavimaya Hollow》 2《エイヴンの思考検閲者/Aven Mindcensor》 1《獣相のシャーマン/Fauna Shaman》 1《台所の嫌がらせ屋/Kitchen Finks》 4《聖遺の騎士/Knight of the Reliquary》 4《ルーンの母/Mother of Runes》 4《貴族の教主/Noble Hierarch》 2《クァーサルの群れ魔道士/Qasali Pridemage》 2《漁る軟泥/Scavenging Ooze》 1《石鍛冶の神秘家/Stoneforge Mystic》 3《スレイベンの守護者、サリア/Thalia, Guardian of Thraben》 1《火と氷の剣/Sword of Fire and Ice》 1《森の知恵/Sylvan Library》 4《剣を鍬に/Swords to Plowshares》 1《梅澤の十手/Umezawa s Jitte》 4《緑の太陽の頂点/Green Sun s Zenith》 1《遍歴の騎士、エルズペス/Elspeth, Knight-Errant》 Sideboard 2《漸増爆弾/Ratchet Bomb》 1《饗宴と飢餓の剣/Sword of Feast and Famine》 1《トーモッドの墓所/Tormod s Crypt》 2《エーテル宣誓会の法学者/Ethersworn Canonist》 2《窒息/Choke》 2《流刑への道/Path to Exile》 1《墓場の浄化/Purify the Grave》 1《ガドック・ティーグ/Gaddock Teeg》 1《静寂の守り手、リンヴァーラ/Linvala, Keeper of Silence》 1《最後のトロール、スラーン/Thrun, the Last Troll》 1《ボジューカの沼/Bojuka Bog》 第10位:UW Control‐Stoneforge 使用者:Robert Holt Main Deck 4《島/Island》 1《平地/Plains》 4《溢れかえる岸辺/Flooded Strand》 3《ミシュラの工廠/Mishra s Factory》 4《汚染された三角州/Polluted Delta》 4《Tundra》 3《不毛の大地/Wasteland》 4《瞬唱の魔道士/Snapcaster Mage》 4《石鍛冶の神秘家/Stoneforge Mystic》 3《ヴェンディリオン三人衆/Vendilion Clique》 1《殴打頭蓋/Batterskull》 4《渦まく知識/Brainstorm》 4《Force of Will》 3《マナ漏出/Mana Leak》 4《呪文貫き/Spell Pierce》 4《剣を鍬に/Swords to Plowshares》 1《梅澤の十手/Umezawa s Jitte》 2《思案/Ponder》 3《精神を刻む者、ジェイス/Jace, the Mind Sculptor》 Sideboard 2《解呪/Disenchant》 2《狼狽の嵐/Flusterstorm》 2《流刑への道/Path to Exile》 2《墓場の浄化/Purify the Grave》 3《外科的摘出/Surgical Extraction》 1《梅澤の十手/Umezawa s Jitte》 1《ヴェンディリオン三人衆/Vendilion Clique》 2《神の怒り/Wrath of God》 第11位:Blue Control‐CounterTop BtB 使用者:Dan Musser Main Deck 16《島/Island》 3《霧深い雨林/Misty Rainforest》 3《沸騰する小湖/Scalding Tarn》 2《粗石の魔道士/Trinket Mage》 3《ヴェンディリオン三人衆/Vendilion Clique》 1《殴打頭蓋/Batterskull》 1《仕組まれた爆薬/Engineered Explosives》 1《真髄の針/Pithing Needle》 1《大祖始の遺産/Relic of Progenitus》 4《師範の占い独楽/Sensei s Divining Top》 2《ヴィダルケンの枷/Vedalken Shackles》 3《基本に帰れ/Back to Basics》 4《相殺/Counterbalance》 4《エネルギー・フィールド/Energy Field》 4《渦まく知識/Brainstorm》 2《狼狽の嵐/Flusterstorm》 4《Force of Will》 2《壊滅的大潮/Devastation Tide》 Sideboard 1《墓掘りの檻/Grafdigger s Cage》 2《弱者の石/Meekstone》 2《真髄の針/Pithing Needle》 2《トーモッドの墓所/Tormod s Crypt》 2《金粉のドレイク/Gilded Drake》 1《誘惑蒔き/Sower of Temptation》 2《誤った指図/Misdirection》 2《呪文貫き/Spell Pierce》 1《セファリッドの女帝ラワン/Llawan, Cephalid Empress》 第12位:Elves‐Gw 使用者:Jon Johnson Main Deck 4《森/Forest》 3《霧深い雨林/Misty Rainforest》 2《Savannah》 3《新緑の地下墓地/Verdant Catacombs》 1《樹木茂る山麓/Wooded Foothills》 1《ドライアドの東屋/Dryad Arbor》 2《ガイアの揺籃の地/Gaea s Cradle》 1《ペンデルヘイヴン/Pendelhaven》 3《樺の知識のレインジャー/Birchlore Rangers》 4《エルフの幻想家/Elvish Visionary》 2《Fyndhorn Elves》 4《遺産のドルイド/Heritage Druid》 4《ラノワールのエルフ/Llanowar Elves》 2《鏡の精体/Mirror Entity》 4《イラクサの歩哨/Nettle Sentinel》 3《ティタニアの僧侶/Priest of Titania》 2《クウィリーオン・レインジャー/Quirion Ranger》 1《威厳の魔力/Regal Force》 1《ヴィリジアンのシャーマン/Viridian Shaman》 4《ワイアウッドの共生虫/Wirewood Symbiote》 1《輪作/Crop Rotation》 4《垣間見る自然/Glimpse of Nature》 4《緑の太陽の頂点/Green Sun s Zenith》 Sideboard 3《弱者の石/Meekstone》 1《迫撃鞘/Mortarpod》 4《アメジストのとげ/Thorn of Amethyst》 4《フェアリーの忌み者/Faerie Macabre》 1《クァーサルの群れ魔道士/Qasali Pridemage》 1《漁る軟泥/Scavenging Ooze》 1《ガドック・ティーグ/Gaddock Teeg》 第13位:UW Control‐Terminus CounterTop +r 使用者:Bryan Hockey Main Deck 4《島/Island》 1《平地/Plains》 4《溢れかえる岸辺/Flooded Strand》 1《氷河の城砦/Glacial Fortress》 3《霧深い雨林/Misty Rainforest》 1《沸騰する小湖/Scalding Tarn》 3《Tundra》 1《Volcanic Island》 3《不毛の大地/Wasteland》 1《Karakas》 4《瞬唱の魔道士/Snapcaster Mage》 4《師範の占い独楽/Sensei s Divining Top》 1《ヴィダルケンの枷/Vedalken Shackles》 4《相殺/Counterbalance》 4《渦まく知識/Brainstorm》 2《対抗呪文/Counterspell》 4《Force of Will》 2《呪文貫き/Spell Pierce》 4《剣を鍬に/Swords to Plowshares》 2《天使への願い/Entreat the Angels》 3《終末/Terminus》 1《遍歴の騎士、エルズペス/Elspeth, Knight-Errant》 3《精神を刻む者、ジェイス/Jace, the Mind Sculptor》 Sideboard 1《仕組まれた爆薬/Engineered Explosives》 3《大祖始の遺産/Relic of Progenitus》 2《翻弄する魔道士/Meddling Mage》 2《謙虚/Humility》 2《解呪/Disenchant》 1《悟りの教示者/Enlightened Tutor》 1《紅蓮破/Pyroblast》 1《赤霊破/Red Elemental Blast》 2《呪文貫き/Spell Pierce》 第14位:URG Tempo 使用者:Nick Edgerle Main Deck 4《溢れかえる岸辺/Flooded Strand》 4《汚染された三角州/Polluted Delta》 4《Tropical Island》 3《Volcanic Island》 4《不毛の大地/Wasteland》 4《秘密を掘り下げる者/Delver of Secrets》 4《敏捷なマングース/Nimble Mongoose》 1《漁る軟泥/Scavenging Ooze》 4《タルモゴイフ/Tarmogoyf》 4《渦まく知識/Brainstorm》 4《目くらまし/Daze》 1《四肢切断/Dismember》 4《Force of Will》 3《稲妻/Lightning Bolt》 4《呪文貫き/Spell Pierce》 2《思考掃き/Thought Scour》 2《二股の稲妻/Forked Bolt》 4《思案/Ponder》 Sideboard 2《金粉のドレイク/Gilded Drake》 1《漁る軟泥/Scavenging Ooze》 2《古えの遺恨/Ancient Grudge》 1《青霊破/Blue Elemental Blast》 1《紅蓮破/Pyroblast》 1《赤霊破/Red Elemental Blast》 4《水没/Submerge》 2《外科的摘出/Surgical Extraction》 1《壌土からの生命/Life from the Loam》 第15位:Metalworker 使用者:Kelson Reiter Main Deck 4《ダークスティールの城塞/Darksteel Citadel》 4《古えの墳墓/Ancient Tomb》 4《魂の洞窟/Cavern of Souls》 4《裏切り者の都/City of Traitors》 4《不毛の大地/Wasteland》 1《荒廃鋼の巨像/Blightsteel Colossus》 4《カルドーサの鍛冶場主/Kuldotha Forgemaster》 4《磁石のゴーレム/Lodestone Golem》 4《金属細工師/Metalworker》 1《マイアの戦闘球/Myr Battlesphere》 1《ファイレクシアの変形者/Phyrexian Metamorph》 1《白金の帝像/Platinum Emperion》 1《鋼のヘルカイト/Steel Hellkite》 1《隔離するタイタン/Sundering Titan》 3《ワームとぐろエンジン/Wurmcoil Engine》 4《虚空の杯/Chalice of the Void》 1《永遠溢れの杯/Everflowing Chalice》 4《厳かなモノリス/Grim Monolith》 1《稲妻のすね当て/Lightning Greaves》 2《モックス・ダイアモンド/Mox Diamond》 1《千年霊薬/Thousand-Year Elixir》 3《三なる宝球/Trinisphere》 1《オパールのモックス/Mox Opal》 2《解放された者、カーン/Karn Liberated》 Sideboard 1《伝染病エンジン/Contagion Engine》 1《世界のるつぼ/Crucible of Worlds》 1《罠の橋/Ensnaring Bridge》 2《漸増爆弾/Ratchet Bomb》 2《抵抗の宝球/Sphere of Resistance》 1《イシュ・サーの背骨/Spine of Ish Sah》 2《トーモッドの墓所/Tormod s Crypt》 1《魔女封じの宝珠/Witchbane Orb》 1《映し身人形/Duplicant》 2《ファイレクシアの破棄者/Phyrexian Revoker》 1《貪欲な罠/Ravenous Trap》 第16位:Maverick 使用者:Raymond Perez Jr Main Deck 1《森/Forest》 1《平地/Plains》 1《Bayou》 3《魂の洞窟/Cavern of Souls》 1《Maze of Ith》 3《Savannah》 1《Scrubland》 2《新緑の地下墓地/Verdant Catacombs》 4《不毛の大地/Wasteland》 4《吹きさらしの荒野/Windswept Heath》 1《ドライアドの東屋/Dryad Arbor》 1《ガイアの揺籃の地/Gaea s Cradle》 1《Karakas》 1《エイヴンの思考検閲者/Aven Mindcensor》 4《闇の腹心/Dark Confidant》 1《獣相のシャーマン/Fauna Shaman》 4《聖遺の騎士/Knight of the Reliquary》 4《ルーンの母/Mother of Runes》 4《貴族の教主/Noble Hierarch》 2《クァーサルの群れ魔道士/Qasali Pridemage》 2《漁る軟泥/Scavenging Ooze》 1《スクリブのレインジャー/Scryb Ranger》 1《ガドック・ティーグ/Gaddock Teeg》 3《スレイベンの守護者、サリア/Thalia, Guardian of Thraben》 4《剣を鍬に/Swords to Plowshares》 2《梅澤の十手/Umezawa s Jitte》 3《緑の太陽の頂点/Green Sun s Zenith》 Sideboard 2《トーモッドの墓所/Tormod s Crypt》 1《ウルヴェンワルドの足跡追い/Ulvenwald Tracker》 2《窒息/Choke》 1《忘却の輪/Oblivion Ring》 2《悟りの教示者/Enlightened Tutor》 1《静寂の守り手、リンヴァーラ/Linvala, Keeper of Silence》 1《スレイベンの守護者、サリア/Thalia, Guardian of Thraben》 1《遍歴の騎士、エルズペス/Elspeth, Knight-Errant》 3《思考囲い/Thoughtseize》 1《ボジューカの沼/Bojuka Bog》
https://w.atwiki.jp/pfwiki/pages/99.html
あこがれの一発屋で流れた挿入歌。 ベスト・ソング・カウントダウンの1位の曲でExtended Versionが流れた。 http //www.nicovideo.jp/watch/sm16552577 前 挿入歌 次 My Undead Mummy Gitchee Gitchee Goo He s a Bully It s Going So Badly 前 ベスト・ソング・カウントダウン 次 My Name is Doof Gitchee Gitchee Goo 無し 歌詞 通常バージョン フィニアス:バウチカバワウ キャンディス:耳を澄まそう フィニアス:マウマウマウ キャンディス:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:そうさ バウチカバワウ キャンディス:耳を澄まそう フィニアス:マウマウマウ キャンディス:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス:止まらない みんな:ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは 愛してる ベイビー ベイビー ベイビー ファーブ:べイビベイビベイビベイビ みんな:ギチ・ギチ・グーは愛してる! Extended Versio フィニアス:バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:赤ちゃん言葉で話しかけてくる 可愛いベイビー 喜ぶってわかってるのかな? もちろんメロメロさ! たまに思うこともある ファーベッツ:ウー フィニアス:なんて言ってんだろう?って でも不思議と伝わってくるんだ キャンディス、ファーベッツ:くるんだ 今こんなこと言ったよ みんな:教えてあげる フィニアス:バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:言葉は違っても キャンディス:違っても フィニアス:心は通じてる キャンディス:通じてる フィニアス:僕 アイラブユー ファーベッツ:アイラブユー フィニアス:ベイビー ギチ・ギチ・グー ユートゥー キャンディス、ファーベッツ:ギチ・ギチ・グー ユートゥー フィニアス:ベイビー ギチ・ギチ・グー ユートゥー キャンディス、ファーベッツ:ギチ・ギチ・グー ユートゥー フィニアス:辞書はいらない フィニアス:バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:楽しいよ みんな:ギチ・ギチ・グーは愛してる フィニアス:そうさ バウチカバワウ キャンディス、ファーべッツ:耳を澄まそう フィニアス:マウマウマウ キャンディス、ファーベッツ:赤ちゃんの言葉に フィニアス:チキチキチューワップ キャンディス、ファーベッツ:止まらない みんな:ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは愛してる ギチ・ギチ・グーは 愛してる ベイビー ベイビー ベイビー ファーブ:べイビベイビベイビベイビ みんな:ギチ・ギチ・グーは愛してる!
https://w.atwiki.jp/nicoratch/pages/1169.html
概要 ジョグホイールに圧力検出センサーを搭載した2chDJコントローラー。DJUCEDTM DJ software同梱。 DJ Control Instinct +スペック表・DJ Control Instinct TECHNICAL SPECIFICATIONS DJUCEDTM DJ software Function-rich software for both beginners and advanced DJs User-friendly Get started mixing in just minutes the controller and the software fit perfectly together Instantly view the beats, track lengths, and which songs fit well for the next track to be played Rewarding Set the pitch intuitively or sync automatically for smooth transitions Customize your songs with loops, effects and samples Creative Create your own sound with filters or the step sequencer Save your mix in audio files you can share with your friends DJ control surface Born to mix Intuitive The mixer and deck areas are clearly differentiated The structure has the look and feel of 2 DJ CD players and a mixer Powerful Scratch tracks with no latency on pressure-detecting jog wheels Tweak your songs with hot cue, samples, loops and effects keys Stylish Gorgeous design glossy decks, brushed mixer, rubber on caps Orange backlights show the status of the controls DJ audio interface Mix and previewing outputs Play the mix on the rear panel outputs 2 formats for the mix 2 RCA and a 1/8" stereo mini-jack output Powerful enough for both hi-fi systems and PA system speakers Since both output formats play simultaneously, you can connect the RCA outputs to a PA system and the 1/8" mini-jack to DJ booth speakers Preview output on front panel 1/8" stereo mini-jack output for headphones Headphone controls on the controller cue select and volume Compatible with headphones from 32 to 600 ohms BOX CONTENTS Hercules DJControl Instinct Installation CD-ROM (PC/Mac) with PC/Mac DJ software Paper quick guide + online manual MINIMUM CONFIGURATION Computer CPU 1.5 GHz or faster 1 GB RAM or more (2 GB in 64-bit OS) Powered USB port 100 MB available hard disk space CD/DVD-ROM drive Internet access Amplified stereo speakers and headphones Operating system (32/64-bit) MS Windows® XP/Vista/7/8 or Mac OS® 10.6/10.7/10.8 (Core Duo) Drivers Mac OS® MIDI for controls Core Audio for audio playback Windows® MIDI for controls WDM and ASIO for audio playback Sampling rate 16-bit / 44.1 kHz stereo DJ Control Instinct http //www.hercules.com/uk/legacy/bdd/p/187/djcontrol-instinct/ DJControl Instinct S Series DJ Control Instinctのマイナーチェンジ版。 +スペック表・DJControl Instinct S Series TECHNICAL SPECIFICATIONS 2-deck control surface Pressure-detecting jog wheels Mixer controls in the center, and individual deck controls on the left and right Compact design Controller with built-in audio 4-channel playback For playing the mix 2 RCA outputs + 1/8" / 3.5 mm stereo mini-jack output for powered speakers 1/8" / 3.5 mm stereo mini-jack output for previewing tracks on headphones MINIMUM CONFIGURATION Minimum system requirements 2 GHz processor or faster 1 GB of RAM or more Powered USB port 100 MB hard drive space CD/DVD-ROM drive and/or Internet access Amplified stereo speakers and headphones Operating system Microsoft Windows® Vista / 7 / 8 / 8.1 or Mac OS® 10.7 / 10.8 / 10.9 / 10.10 on Mac Core Duo Drivers Mac OS® MIDI for controls Core Audio for audio playback Windows® MIDI for controls WDM and ASIO for audio playback Sample rate 16-bit / 44.1 kHz stereo 価格 £69.99 DJControl Instinct S Series http //www.hercules.com/uk/leisure-controllers/bdd/p/248/djcontrol-instinct-s-series/ DJControl Instinct P8 DJ Control Instinctのアップデートバージョン。パッドかマルチカラーになった。 +スペック表・DJControl Instinct P8 TECHNICAL SPECIFICATIONS Dual-deck DJ controller Built-in audio interface (mixing + preview outputs) 2 sets of 4 performance pads Included software DJUCEDTM 40° for Mac®/PC BOX CONTENTS DJControl Instinct P8 Printed Quick Start Guide USB cable MINIMUM CONFIGURATION DJUCEDTM 40° PC / MAC 2 GHz CPU or faster 2 GB RAM or more Windows 7 and higher (32 and 64-bit) Mac OS X 10.8 and higher (32 and 64-bit) Download DJUCEDTM 40° Optional drivers are available for download on Hercules website (ASIO and product firmware update) 価格 £ 89.99 DJControl Instinct P8 http //www.hercules.com/uk/leisure-controllers/bdd/p/261/djcontrol-instinct-p8/ DJControl Instinct for iPad iPadと接続が可能になった。(別途カメラコネクションキット等接続アダプタが必要のため注意) +スペック表・DJControl Instinct for iPad TECHNICAL SPECIFICATIONS Technical specifications USB DJ controller with audio outputs 2-deck DJ control surface •Pressure-detecting jog wheels •Compact size Built-in audio 4-channel playback •Mix output 2 RCA + 1/8" stereo mini-jack for active speakers •1/8" stereo mini-jack output for headphone previewing DJUCED DJ software •Intuitive, powerful software •Mix 2 audio tracks on the fly •Save the mix in an audio file Mechanical specifications •Casing 10.4 x 7.4" / 26.5 x 18.7 cm •Audio connectors mix (speakers) out on rear, headphones on front •Weight 2.2 lbs. / 1 kg •USB cable attached BOX CONTENTS Hercules DJControl Instinct for iPad Installation CD-ROM (PC/Mac) with PC/Mac DJ software Paper quick guide + online manual Extra cable for iPad Camera adapter and for power adapter with setup guide Apple® Lightning to USB Camera Adapter MINIMUM CONFIGURATION iPad® with Retina Display (with lightning connector) iPad® mini •Lightning to USB Camera Adapter (included) •iPad® Power Adapter (included with your iPad®) •iOS 6.1 and above iPad® 2, 3 •Camera Connection kit (not included) •iPad® Power Adapter •iOS 6.1 and above PC •MS XP, Vista, 7 and 8 32 64 bits •CPU 1.6GHz and faster / 2GB RAM MAC •Core Duo CPU •OSX 10.6, 10.7 10.8 32 64bits 価格 £99.99 DJControl Instinct for iPad http //www.hercules.com/uk/leisure-controllers/bdd/p/233/djcontrol-instinct-for-ipad/