home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 July / VPR0107B.BIN / DRIVER / CANOPUS / MVR32 / mvr32.exe / data1.cab / Development_Kit / Vc / Samples / Multi / ChildFrm.cpp < prev    next >
C/C++ Source or Header  |  2001-02-09  |  99KB  |  2,226 lines

  1. //======================================================================
  2. // -- ChildFrm.cpp --                                                   
  3. //                                                                      
  4. //  MVR-D2000                                                           
  5. //                                  マルチ      サンプルプログラム      
  6. //                                  Multi       sample program          
  7. //                                                                      
  8. // Copyright (C) 2000 Canopus Co., Ltd. All rights reserved.            
  9. //======================================================================
  10. //                                                                      
  11. // -- サンプルプログラムをご使用になる前に --                           
  12. // -- Before use this sample program... --                              
  13. //                                                                      
  14. // このサンプルプログラムは、カノープス製品を使うためにご使用ください。 
  15. //  Please use this sample progeam to use products of canopus.          
  16. //                                                                      
  17. //======================================================================
  18. // ChildFrm.cpp : CChildFrame クラスの動作の定義を行います。
  19. //
  20.  
  21. #include "stdafx.h"
  22. #include "Multi.h"
  23.  
  24. #include "ChildFrm.h"
  25. #include "InitializeDlg.h"
  26. #include "BoardInfoDlg.h"
  27.  
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #undef THIS_FILE
  31. static char THIS_FILE[] = __FILE__;
  32. #endif
  33.  
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CChildFrame
  36.  
  37. IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
  38.  
  39. BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
  40.     //{{AFX_MSG_MAP(CChildFrame)
  41.     ON_COMMAND(IDM_MODE_ENCODE, OnModeEncode)
  42.     ON_UPDATE_COMMAND_UI(IDM_MODE_ENCODE, OnUpdateModeEncode)
  43.     ON_COMMAND(IDM_MODE_DECODE, OnModeDecode)
  44.     ON_UPDATE_COMMAND_UI(IDM_MODE_DECODE, OnUpdateModeDecode)
  45.     ON_COMMAND(IDM_USE_OVERLAY, OnUseOverlay)
  46.     ON_UPDATE_COMMAND_UI(IDM_USE_OVERLAY, OnUpdateUseOverlay)
  47.     ON_WM_MOVE()
  48.     ON_WM_SIZE()
  49.     ON_COMMAND(IDM_ENCODE_PS, OnEncodePs)
  50.     ON_COMMAND(IDM_ENCODE_AV, OnEncodeAv)
  51.     ON_COMMAND(IDM_ENCODE_VIDEO, OnEncodeVideo)
  52.     ON_COMMAND(IDM_ENCODE_AUDIO, OnEncodeAudio)
  53.     ON_UPDATE_COMMAND_UI(IDM_ENCODE_PS, OnUpdateEncodePs)
  54.     ON_UPDATE_COMMAND_UI(IDM_ENCODE_AV, OnUpdateEncodeAv)
  55.     ON_UPDATE_COMMAND_UI(IDM_ENCODE_VIDEO, OnUpdateEncodeVideo)
  56.     ON_UPDATE_COMMAND_UI(IDM_ENCODE_AUDIO, OnUpdateEncodeAudio)
  57.     ON_COMMAND(IDM_ENCODE_STOP, OnEncodeStop)
  58.     ON_UPDATE_COMMAND_UI(IDM_ENCODE_STOP, OnUpdateEncodeStop)
  59.     ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  60.     ON_COMMAND(IDM_DECODE_PLAY, OnDecodePlay)
  61.     ON_UPDATE_COMMAND_UI(IDM_DECODE_PLAY, OnUpdateDecodePlay)
  62.     ON_COMMAND(IDM_DECODE_PAUSE, OnDecodePause)
  63.     ON_UPDATE_COMMAND_UI(IDM_DECODE_PAUSE, OnUpdateDecodePause)
  64.     ON_COMMAND(IDM_DECODE_STOP, OnDecodeStop)
  65.     ON_UPDATE_COMMAND_UI(IDM_DECODE_STOP, OnUpdateDecodeStop)
  66.     ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
  67.     ON_COMMAND(IDM_DECODE_REPEAT, OnDecodeRepeat)
  68.     ON_UPDATE_COMMAND_UI(IDM_DECODE_REPEAT, OnUpdateDecodeRepeat)
  69.     ON_WM_DESTROY()
  70.     ON_COMMAND(IDM_TERMINATE, OnTerminate)
  71.     ON_COMMAND(IDM_BOARD_INFO, OnBoardInfo)
  72.     ON_COMMAND(IDM_SET_NUMBER, OnSetNumber)
  73.     ON_UPDATE_COMMAND_UI(IDM_SET_NUMBER, OnUpdateSetNumber)
  74.     ON_UPDATE_COMMAND_UI(IDM_TERMINATE, OnUpdateTerminate)
  75.     ON_WM_SETFOCUS()
  76.     //}}AFX_MSG_MAP
  77. END_MESSAGE_MAP()
  78.  
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CChildFrame クラスの構築/消滅
  81.  
  82. static  UINT    g_nID = 0;
  83.  
  84. CChildFrame::CChildFrame()
  85. {
  86.     m_bEncode       = FALSE;
  87.     m_bDecode       = FALSE;
  88.     m_bUseOverlay   = FALSE;
  89.     m_nID           = g_nID++;
  90. }
  91.  
  92. CChildFrame::~CChildFrame()
  93. {
  94. }
  95.  
  96. BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
  97. {
  98.     // TODO: この位置で CREATESTRUCT cs の設定を行って、Window クラスまたは
  99.     //       スタイルを変更してください。
  100.  
  101.     if( !CMDIChildWnd::PreCreateWindow(cs) )
  102.         return FALSE;
  103.  
  104.     return TRUE;
  105. }
  106.  
  107.  
  108.  
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CChildFrame クラスの診断
  111.  
  112. #ifdef _DEBUG
  113. void CChildFrame::AssertValid() const
  114. {
  115.     CMDIChildWnd::AssertValid();
  116. }
  117.  
  118. void CChildFrame::Dump(CDumpContext& dc) const
  119. {
  120.     CMDIChildWnd::Dump(dc);
  121. }
  122.  
  123. #endif //_DEBUG
  124.  
  125. /////////////////////////////////////////////////////////////////////////////
  126. // CChildFrame クラスのメッセージハンドラ
  127.  
  128.  
  129. //----------------------------------------------------------------------
  130. // #[ CChildFrame::OnDestroy ]                                          
  131. //                                                                      
  132. // 機能     ウィンドウを破棄します                                      
  133. //                                                                      
  134. //  引数:      なし                                                    
  135. //                                                                      
  136. //  戻り値:    なし                                                    
  137. //                                                                      
  138. //----------------------------------------------------------------------
  139. // #[ CChildFrame::OnDestroy ]                                          
  140. //                                                                      
  141. //  Function:   Destroy window                                          
  142. //                                                                      
  143. //      Parameters:     none                                            
  144. //                                                                      
  145. //      Return value:   none                                            
  146. //                                                                      
  147. //----------------------------------------------------------------------
  148. void CChildFrame::OnDestroy() 
  149. {
  150.     CMDIChildWnd::OnDestroy();
  151.     
  152.     if(m_bEncode)
  153.     {
  154.         // エンコーダの終了処理を行う
  155.         // Terminate encoder
  156.         EncodeTerminate(m_nID);
  157.         m_bEncode = FALSE;
  158.     }
  159.  
  160.     if(m_bDecode)
  161.     {
  162.         // デコーダの終了処理を行う
  163.         // Terminate decoder
  164.         DecodeTerminate(m_nID);
  165.         m_bDecode = FALSE;
  166.     }
  167. }
  168.  
  169. //----------------------------------------------------------------------
  170. // #[ CChildFrame::OnModeEncode ]                                       
  171. //                                                                      
  172. // 機能     エンコードの準備を行います                                  
  173. //                                                                      
  174. //  引数:      なし                                                    
  175. //                                                                      
  176. //  戻り値:    なし                                                    
  177. //                                                                      
  178. //----------------------------------------------------------------------
  179. // #[ CChildFrame::OnModeEncode ]                                       
  180. //                                                                      
  181. //  Function:   Initializez encode                                      
  182. //                                                                      
  183. //      Parameters:     none                                            
  184. //                                                                      
  185. //      Return value:   none                                            
  186. //                                                                      
  187. //----------------------------------------------------------------------
  188. void CChildFrame::OnModeEncode() 
  189. {
  190.     if(m_bEncode)
  191.         return;
  192.     else if(m_bDecode)
  193.     {
  194.         // デコーダの終了処理を行う
  195.         // Terminate decoder
  196.         DecodeTerminate(m_nID);
  197.         m_bDecode = FALSE;
  198.     }
  199.  
  200.     // エンコーダの初期化
  201.     // Initialize encoder
  202.     m_bEncode = EncodeInitialize(m_nID);
  203.  
  204.     CMenu   *p;
  205.     CWnd    *pMain = AfxGetMainWnd();
  206.     
  207.     p = pMain->GetMenu();
  208.     p->EnableMenuItem(2,MF_BYPOSITION | MF_ENABLED);
  209.     p->EnableMenuItem(3,MF_BYPOSITION | MF_GRAYED);
  210.     pMain->DrawMenuBar();
  211.  
  212.     // モニター出力を開始する
  213.     // Start output monitor
  214.     ENC_Start_Monitor(m_nID);
  215. }
  216.  
  217.  
  218. //----------------------------------------------------------------------
  219. // #[ CChildFrame::OnUpdateModeEncode ]                                 
  220. //                                                                      
  221. // 機能     エンコードの項目のチェックを更新します                      
  222. //                                                                      
  223. //  引数:      CCmdUI* pCmdUI                                          
  224. //                                                                      
  225. //  戻り値:    なし                                                    
  226. //                                                                      
  227. //----------------------------------------------------------------------
  228. // #[ CChildFrame::OnUpdateModeEncode ]                                 
  229. //                                                                      
  230. //  Function:    Check the menu item                                    
  231. //                                                                      
  232. //      Parameters:     CCmdUI* pCmdUI                                  
  233. //                                                                      
  234. //      Return value:   none                                            
  235. //                                                                      
  236. //----------------------------------------------------------------------
  237. void CChildFrame::OnUpdateModeEncode(CCmdUI* pCmdUI) 
  238. {
  239.     CMenu   *p;
  240.     CMenu   *pSub;
  241.     CWnd    *pMain = AfxGetMainWnd();
  242.     
  243.     p = pMain->GetMenu();
  244.     pSub = p->GetSubMenu(1);
  245.     if(m_bEncode || m_bDecode)
  246.         pSub->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
  247.     else
  248.         pSub->EnableMenuItem(0,MF_BYPOSITION | MF_ENABLED);
  249. }
  250.  
  251.  
  252. //----------------------------------------------------------------------
  253. // #[ CChildFrame::OnModeDecode ]                                       
  254. //                                                                      
  255. // 機能     デコードの準備を行います                                    
  256. //                                                                      
  257. //  引数:      なし                                                    
  258. //                                                                      
  259. //  戻り値:    なし                                                    
  260. //                                                                      
  261. //----------------------------------------------------------------------
  262. // #[ CChildFrame::OnModeDecode ]                                       
  263. //                                                                      
  264. //  Function:   Initialize decode                                                                                
  265. //                                                                      
  266. //      Parameters:     none                                            
  267. //                                                                      
  268. //      Return value:   none                                            
  269. //                                                                      
  270. //----------------------------------------------------------------------
  271. void CChildFrame::OnModeDecode() 
  272. {
  273.     if(m_bEncode)
  274.     {
  275.         // エンコーダの終了処理を行う
  276.         // Terminate encode
  277.         EncodeTerminate(m_nID);
  278.         m_bEncode = FALSE;
  279.     }
  280.     else if(m_bDecode)
  281.         return;
  282.  
  283.     // デコーダの初期化
  284.     // Initialize decode
  285.     m_bDecode = DecodeInitialize(m_nID);
  286.  
  287.     CMenu   *p;
  288.     CWnd    *pMain = AfxGetMainWnd();
  289.     
  290.     p = pMain->GetMenu();
  291.     p->EnableMenuItem(3,MF_BYPOSITION | MF_ENABLED);
  292.     p->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
  293.     pMain->DrawMenuBar();
  294. }
  295.  
  296.  
  297. //----------------------------------------------------------------------
  298. // #[ CChildFrame::OnUpdateModeDecode ]                                 
  299. //                                                                      
  300. // 機能     デコードの項目のチェックを更新します                        
  301. //                                                                      
  302. //  引数:      CCmdUI* pCmdUI                                          
  303. //                                                                      
  304. //  戻り値:    なし                                                    
  305. //                                                                      
  306. //----------------------------------------------------------------------
  307. // #[ CChildFrame::OnUpdateModeDecode ]                                 
  308. //                                                                      
  309. //  Function:    Check the menu item                                    
  310. //                                                                      
  311. //      Parameters:     CCmdUI* pCmdUI                                  
  312. //                                                                      
  313. //      Return value:   none                                            
  314. //                                                                      
  315. //----------------------------------------------------------------------
  316. void CChildFrame::OnUpdateModeDecode(CCmdUI* pCmdUI) 
  317. {
  318.     CMenu   *p;
  319.     CMenu   *pSub;
  320.     CWnd    *pMain = AfxGetMainWnd();
  321.     
  322.     p = pMain->GetMenu();
  323.     pSub = p->GetSubMenu(1);
  324.     if(m_bEncode || m_bDecode)
  325.         pSub->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
  326.     else
  327.         pSub->EnableMenuItem(0,MF_BYPOSITION | MF_ENABLED);
  328. }
  329.  
  330.  
  331. //----------------------------------------------------------------------
  332. // #[ CChildFrame::EncodeInitialize ]                                   
  333. //                                                                      
  334. // 機能     初期化を行います(エンコード)                                
  335. //                                                                      
  336. //  引数:      UINT    nID                                             
  337. //                                                                      
  338. //  戻り値:    BOOL    TRUE;   成功                                    
  339. //                      FALSE;  失敗                                    
  340. //                                                                      
  341. //----------------------------------------------------------------------
  342. // #[ CChildFrame::EncodeInitialize ]                                   
  343. //                                                                      
  344. //  Function:    Initialize (Encode mode)                               
  345. //                                                                      
  346. //      Parameters:     UINT    nID                                     
  347. //                                                                      
  348. //      Return value:   BOOL    TRUE;   succeed                         
  349. //                              FALSE;  fail                            
  350. //                                                                      
  351. //----------------------------------------------------------------------
  352. BOOL CChildFrame::EncodeInitialize(UINT nID)
  353. {
  354.     ENC_RETURN  enc_return;
  355.     CString     strText;
  356.  
  357.     enc_return = ENC_Can_Initialize(nID);
  358.     if(enc_return != ENC_SUCCESS)
  359.         return FALSE;
  360.  
  361.     enc_return = ENC_Initialize(nID);
  362.     
  363.     if(enc_return == ENC_SUCCESS)
  364.     {
  365.         // コールバックの設定
  366.         // Set CallbackProc
  367.         ENC_Set_Callback(nID, EncStatusProc, ErrorProc, TmapProc, NULL, NULL);
  368.         return TRUE;
  369.     }
  370.     else
  371.     {
  372.         strText.LoadString(IDS_ERROR_INITIALIZE);
  373.         AfxMessageBox(strText);
  374.         return FALSE;
  375.     }
  376. }
  377.  
  378.  
  379. //----------------------------------------------------------------------
  380. // #[ CChildFrame::EncodeTerminate ]                                    
  381. //                                                                      
  382. // 機能     終了処理を行います(エンコード)                              
  383. //                                                                      
  384. //  引数:      UINT    nID                                             
  385. //                                                                      
  386. //  戻り値:    BOOL    TRUE;   成功                                    
  387. //                      FALSE;  失敗                                    
  388. //                                                                      
  389. //----------------------------------------------------------------------
  390. // #[ CChildFrame::EncodeTerminate]                                     
  391. //                                                                      
  392. //  Function:    Terminate (Encode mode)                                
  393. //                                                                      
  394. //      Parameters:     UINT    nID                                     
  395. //                                                                      
  396. //      Return value:   BOOL    TRUE;   succeed                         
  397. //                              FALSE;  fail                            
  398. //                                                                      
  399. //----------------------------------------------------------------------
  400. void CChildFrame::EncodeTerminate(UINT nID)
  401. {
  402.     if(m_bUseOverlay)
  403.     {
  404.         ENC_Destroy_Overlay_Window(nID);
  405.         m_bUseOverlay = FALSE;
  406.     }
  407.  
  408.     // モニター出力を止める
  409.     // Stop output monitor
  410.     ENC_Stop_Monitor(nID);
  411.  
  412.     ENC_Terminate(nID);
  413. }
  414.  
  415.  
  416. //----------------------------------------------------------------------
  417. // #[ CChildFrame::DecodeInitialize ]                                   
  418. //                                                                      
  419. // 機能     初期化を行います(デコード)                                  
  420. //                                                                      
  421. //  引数:      UINT    nID                                             
  422. //                                                                      
  423. //  戻り値:    BOOL    TRUE;   成功                                    
  424. //                      FALSE;  失敗                                    
  425. //                                                                      
  426. //----------------------------------------------------------------------
  427. // #[ CChildFrame::DecodeInitialize ]                                   
  428. //                                                                      
  429. //  Function:    Initialize (Decode mode)                               
  430. //                                                                      
  431. //      Parameters:     UINT    nID                                     
  432. //                                                                      
  433. //      Return value:   BOOL    TRUE;   succeed                         
  434. //                              FALSE;  fail                            
  435. //                                                                      
  436. //----------------------------------------------------------------------
  437. BOOL CChildFrame::DecodeInitialize(UINT nID)
  438. {
  439.     DEC_RETURN  dec_return;
  440.     CString     strText;
  441.  
  442.     dec_return = DEC_Can_Initialize(nID);
  443.     if(dec_return != DEC_SUCCESS)
  444.         return FALSE;
  445.  
  446.     dec_return = DEC_Initialize(nID);
  447.     if(dec_return == DEC_SUCCESS)
  448.     {
  449.         // コールバックの設定
  450.         // Set CallbackProc
  451.         DEC_Set_Callback(m_nID, DecStatusProc, ErrorProc);
  452.  
  453.         // モニター出力を開始する
  454.         // Start output monitor
  455.         DEC_Start_Monitor(m_nID);
  456.  
  457.         return TRUE;
  458.     }
  459.     else
  460.     {
  461.         strText.LoadString(IDS_ERROR_INITIALIZE);
  462.         AfxMessageBox(strText);
  463.         return FALSE;
  464.     }
  465. }
  466.  
  467.  
  468. //----------------------------------------------------------------------
  469. // #[ CChildFrame::DecodeTerminate ]                                    
  470. //                                                                      
  471. // 機能     終了処理を行います(デコード)                                
  472. //                                                                      
  473. //  引数:      UINT    nID                                             
  474. //                                                                      
  475. //  戻り値:    BOOL    TRUE;   成功                                    
  476. //                      FALSE;  失敗                                    
  477. //                                                                      
  478. //----------------------------------------------------------------------
  479. // #[ CChildFrame::DecodeTerminate]                                     
  480. //                                                                      
  481. //  Function:    Terminate (Decode mode)                                
  482. //                                                                      
  483. //      Parameters:     UINT    nID                                     
  484. //                                                                      
  485. //      Return value:   BOOL    TRUE;   succeed                         
  486. //                              FALSE;  fail                            
  487. //                                                                      
  488. //----------------------------------------------------------------------
  489. void CChildFrame::DecodeTerminate(UINT nID)
  490. {
  491.     if(m_bUseOverlay)
  492.     {
  493.         DEC_Destroy_Overlay_Window(nID);
  494.         m_bUseOverlay = FALSE;
  495.     }
  496.  
  497.     // モニター出力を止める
  498.     // Stop output monitor
  499.     DEC_Stop_Monitor(nID);
  500.  
  501.     DEC_Terminate(nID);
  502. }
  503.  
  504.  
  505. //----------------------------------------------------------------------
  506. // #[ CChildFrame::AutoDetect ]                                         
  507. //                                                                      
  508. // 機能     入力ソースの自動検出                                        
  509. //                                                                      
  510. //  引数:      なし                                                    
  511. //                                                                      
  512. //  戻り値:    なし                                                    
  513. //                                                                      
  514. //----------------------------------------------------------------------
  515. // #[ CChildFrame::AutoDetect ]                                         
  516. //                                                                      
  517. //  Function:   Detect input source                                     
  518. //                                                                      
  519. //      Parameters:     none                                            
  520. //                                                                      
  521. //      Return value:   none                                            
  522. //                                                                      
  523. //----------------------------------------------------------------------
  524. void CChildFrame::AutoDetect()
  525. {
  526.     ENC_RETURN  enc_return;
  527.     ENC_VIDEO_PARAMETER enc_video_param;
  528.     int         nInputSource;
  529.     CString     strMessage;
  530.     
  531.     // 現在の設定値を取得する
  532.     // Get video parameter
  533.     ENC_Get_Video_Parameter(m_nID, &enc_video_param);
  534.  
  535.     enc_return = ENC_Detect_Video_Input_Source(m_nID, &nInputSource);
  536.     if(enc_return == ENC_SUCCESS)
  537.     {
  538.         // 入力ソースを設定する
  539.         // Set input source
  540.         enc_video_param.fInputSource = nInputSource;
  541.     }
  542.  
  543.     // 新しい値を設定する
  544.     // Set video parameters
  545.     ENC_Set_Video_Parameter(m_nID, &enc_video_param);
  546. }
  547.  
  548.  
  549. //----------------------------------------------------------------------
  550. // #[ CChildFrame::OnEncodePs ]                                         
  551. //                                                                      
  552. // 機能     エンコード(プログラムストリーム)                          
  553. //                                                                      
  554. //  引数:      なし                                                    
  555. //                                                                      
  556. //  戻り値:    なし                                                    
  557. //                                                                      
  558. //----------------------------------------------------------------------
  559. // #[ CChildFrame::OnEncodePs ]                                         
  560. //                                                                      
  561. //  Function:   Program stream encode                                   
  562. //                                                                      
  563. //      Parameters:     none                                            
  564. //                                                                      
  565. //      Return value:   none                                            
  566. //                                                                      
  567. //----------------------------------------------------------------------
  568. void CChildFrame::OnEncodePs() 
  569. {
  570.     ENC_RETURN  enc_return;
  571.     CString strMessage;
  572.     CString strFileName;
  573.     char    szFile[MAX_PATH];
  574.     char    szFilter[] = {"Mpeg2 Program Stream(*,m2p)|*.m2p|Mpeg1 System Stream(*.mpg)|*.mpg||"};
  575.  
  576.     // ダイアログの設定
  577.     // Initialize dialog
  578.     CFileDialog dlg(FALSE, NULL, NULL,
  579.                     OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
  580.  
  581.     // ファイル名の取得
  582.     // Get file name
  583.     enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_PS, szFile);
  584.     if(enc_return == ENC_SUCCESS)
  585.         dlg.m_ofn.lpstrFile = szFile;
  586.  
  587.     if(dlg.DoModal() == IDOK)
  588.     {
  589.         strFileName = dlg.GetPathName();
  590.         lstrcpy(szFile, strFileName);
  591.  
  592.         SetWindowText(szFile);
  593.  
  594.         // ファイル名の取得
  595.         // Get file name
  596.         enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_PS, szFile);
  597.         if(enc_return == ENC_SUCCESS)
  598.         {
  599.             enc_return = ENC_Init_Movie(m_nID);
  600.             if(enc_return == ENC_SUCCESS)
  601.             {
  602.                 strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
  603.                 MessageBox(strMessage);
  604.                 enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_PS);
  605.                 if(enc_return != ENC_SUCCESS)
  606.                 {
  607.                     strMessage.LoadString(IDC_ERROR_START_CAPTURE);
  608.                     MessageBox(strMessage);
  609.                     return;
  610.                 }
  611.             }
  612.         }
  613.     }
  614. }
  615.  
  616.  
  617. //----------------------------------------------------------------------
  618. // #[ CChildFrame::OnEncodeAv ]                                         
  619. //                                                                      
  620. // 機能     エンコード(オーディオ+ビデオ)                            
  621. //                                                                      
  622. //  引数:      なし                                                    
  623. //                                                                      
  624. //  戻り値:    なし                                                    
  625. //                                                                      
  626. //----------------------------------------------------------------------
  627. // #[ CChildFrame::OnEncodeAv ]                                         
  628. //                                                                      
  629. //  Function:   Audio and video encode                                  
  630. //                                                                      
  631. //      Parameters:     none                                            
  632. //                                                                      
  633. //      Return value:   none                                            
  634. //                                                                      
  635. //----------------------------------------------------------------------
  636. void CChildFrame::OnEncodeAv() 
  637. {
  638.     ENC_RETURN  enc_return;
  639.     CString strMessage;
  640.     CString strFileName;
  641.     char    szFile[MAX_PATH];
  642.     char    szVideoFilter[] = {"Mpeg2 Video(*,m2v)|*.m2v|Mpeg1 Video(*.mpv)|*.mpv||"};
  643.     char    szAudioFilter[] = {"Mpeg2 Audio(*,m2a)|*.m2a|Mpeg1 Audio(*.mpa)|*.mpa||"};
  644.     char    szVideoExt[] = {"m2v"};
  645.     char    szAudioExt[] = {"m2a"};
  646.  
  647.     // ダイアログの設定
  648.     // Initialize dialog
  649.     CFileDialog vdlg(FALSE, szVideoExt, NULL,
  650.                     OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szVideoFilter);
  651.  
  652.     // ファイル名の取得
  653.     // Get video file name
  654.     enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
  655.     if(enc_return == ENC_SUCCESS)
  656.         vdlg.m_ofn.lpstrFile = szFile;
  657.  
  658.     if(vdlg.DoModal() == IDOK)
  659.     {
  660.         strFileName = vdlg.GetPathName();
  661.         lstrcpy(szFile, strFileName);
  662.  
  663.         SetWindowText(szFile);
  664.  
  665.         // ファイル名を設定する
  666.         // Set video encode file name
  667.         enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
  668.     }
  669.     else
  670.         return;
  671.  
  672.     CFileDialog adlg(FALSE, szAudioExt, NULL,
  673.                     OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szAudioFilter);
  674.  
  675.     // ファイル名の取得
  676.     // Get file name
  677.     enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
  678.     if(enc_return == ENC_SUCCESS)
  679.         adlg.m_ofn.lpstrFile = szFile;
  680.  
  681.     if(adlg.DoModal() == IDOK)
  682.     {
  683.         // ファイル名を設定する
  684.         // Set audio encode file name
  685.         enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
  686.  
  687.         enc_return = ENC_Init_Movie(m_nID);
  688.         if(enc_return == ENC_SUCCESS)
  689.         {
  690.             strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
  691.             MessageBox(strMessage);
  692.             enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_AUDIO | ENC_RECORD_VIDEO);
  693.             if(enc_return != ENC_SUCCESS)
  694.             {
  695.                 strMessage.LoadString(IDC_ERROR_START_CAPTURE);
  696.                 MessageBox(strMessage);
  697.                 return;
  698.             }
  699.         }
  700.     }
  701. }
  702.  
  703.  
  704. //----------------------------------------------------------------------
  705. // #[ CChildFrame::OnEncodeVideo ]                                      
  706. //                                                                      
  707. // 機能     エンコード(ビデオ)                                        
  708. //                                                                      
  709. //  引数:      なし                                                    
  710. //                                                                      
  711. //  戻り値:    なし                                                    
  712. //                                                                      
  713. //----------------------------------------------------------------------
  714. // #[ CChildFrame::OnEncodeVideo ]                                      
  715. //                                                                      
  716. //  Function:   Video encode                                            
  717. //                                                                      
  718. //      Parameters:     none                                            
  719. //                                                                      
  720. //      Return value:   none                                            
  721. //                                                                      
  722. //----------------------------------------------------------------------
  723. void CChildFrame::OnEncodeVideo() 
  724. {
  725.     ENC_RETURN  enc_return;
  726.     CString strMessage;
  727.     CString strFileName;
  728.     char    szFile[MAX_PATH];
  729.     char    szFilter[] = {"Mpeg2 Video(*,m2v)|*.m2v|Mpeg1 Video(*.mpv)|*.mpv||"};
  730.  
  731.     // ダイアログの設定
  732.     // Initialize dialog
  733.     CFileDialog dlg(FALSE, NULL, NULL,
  734.                     OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
  735.  
  736.     // ファイル名の取得
  737.     // Get file name
  738.     enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
  739.     if(enc_return == ENC_SUCCESS)
  740.         dlg.m_ofn.lpstrFile = szFile;
  741.  
  742.     if(dlg.DoModal() == IDOK)
  743.     {
  744.         strFileName = dlg.GetPathName();
  745.         lstrcpy(szFile, strFileName);
  746.  
  747.         SetWindowText(szFile);
  748.  
  749.         // ファイル名を設定する
  750.         // Set audio encode file name
  751.         enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
  752.         if(enc_return == ENC_SUCCESS)
  753.         {
  754.             enc_return = ENC_Init_Movie(m_nID);
  755.             if(enc_return == ENC_SUCCESS)
  756.             {
  757.                 strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
  758.                 MessageBox(strMessage);
  759.                 enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_VIDEO);
  760.                 if(enc_return != ENC_SUCCESS)
  761.                 {
  762.                     strMessage.LoadString(IDC_ERROR_START_CAPTURE);
  763.                     MessageBox(strMessage);
  764.                     return;
  765.                 }
  766.             }
  767.         }
  768.     }
  769. }
  770.  
  771.  
  772. //----------------------------------------------------------------------
  773. // #[ CChildFrame::OnEncodeAudio ]                                      
  774. //                                                                      
  775. // 機能     エンコード(オーディオ)                                    
  776. //                                                                      
  777. //  引数:      なし                                                    
  778. //                                                                      
  779. //  戻り値:    なし                                                    
  780. //                                                                      
  781. //----------------------------------------------------------------------
  782. // #[ CChildFrame::OnEncodeAudio ]                                      
  783. //                                                                      
  784. //  Function:   Audio encode                                            
  785. //                                                                      
  786. //      Parameters:     none                                            
  787. //                                                                      
  788. //      Return value:   none                                            
  789. //                                                                      
  790. //----------------------------------------------------------------------
  791. void CChildFrame::OnEncodeAudio() 
  792. {
  793.     ENC_RETURN  enc_return;
  794.     CString strMessage;
  795.     CString strFileName;
  796.     char    szFile[MAX_PATH];
  797.     char    szFilter[] = {"Mpeg2 Audio(*,m2a)|*.m2a|Mpeg1 Audio(*.mpa)|*.mpa||"};
  798.  
  799.     // ダイアログの設定
  800.     // Initialize dialog
  801.     CFileDialog dlg(FALSE, NULL, NULL,
  802.                     OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
  803.  
  804.     // ファイル名の取得
  805.     // Get file name
  806.     enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
  807.     if(enc_return == ENC_SUCCESS)
  808.         dlg.m_ofn.lpstrFile = szFile;
  809.  
  810.     if(dlg.DoModal() == IDOK)
  811.     {
  812.         strFileName = dlg.GetPathName();
  813.         lstrcpy(szFile, strFileName);
  814.  
  815.         SetWindowText(szFile);
  816.  
  817.         // ファイル名を設定する
  818.         // Set audio encode file name
  819.         enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
  820.         if(enc_return == ENC_SUCCESS)
  821.         {
  822.             enc_return = ENC_Init_Movie(m_nID);
  823.             if(enc_return == ENC_SUCCESS)
  824.             {
  825.                 strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
  826.                 MessageBox(strMessage);
  827.                 enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_AUDIO);
  828.                 if(enc_return != ENC_SUCCESS)
  829.                 {
  830.                     strMessage.LoadString(IDC_ERROR_START_CAPTURE);
  831.                     MessageBox(strMessage);
  832.                     return;
  833.                 }
  834.             }
  835.         }
  836.     }
  837. }
  838.  
  839.  
  840. //----------------------------------------------------------------------
  841. // #[ CChildFrame::OnEncodeStop ]                                       
  842. //                                                                      
  843. // 機能     エンコードを停止する                                        
  844. //                                                                      
  845. //  引数:      なし                                                    
  846. //                                                                      
  847. //  戻り値:    なし                                                    
  848. //                                                                      
  849. //----------------------------------------------------------------------
  850. // #[ CChildFrame::OnEncodeStop ]                                       
  851. //                                                                      
  852. //  Function:   Stop the encode                                         
  853. //                                                                      
  854. //      Parameters:     none                                            
  855. //                                                                      
  856. //      Return value:   none                                            
  857. //                                                                      
  858. //----------------------------------------------------------------------
  859. void CChildFrame::OnEncodeStop() 
  860. {
  861.     ENC_RETURN  enc_return;
  862.     CString     strMessage;
  863.  
  864.     enc_return = ENC_Stop(m_nID);
  865.     if(enc_return != ENC_SUCCESS)
  866.     {
  867.         strMessage.LoadString(IDC_ERROR_STOP_CAPTURE);
  868.         MessageBox(strMessage);
  869.         return;
  870.     }
  871. }
  872.  
  873.  
  874. //----------------------------------------------------------------------
  875. // #[ CChildFrame::OnUpdateEncodePs ]                                   
  876. //                                                                      
  877. // 機能     エンコード中は選択できないようにする                        
  878. //                                                                      
  879. //  引数:      CCmdUI* pCmdUI                                          
  880. //                                                                      
  881. //  戻り値:    なし                                                    
  882. //                                                                      
  883. //----------------------------------------------------------------------
  884. // #[ CChildFrame::OnUpdateEncodePs ]                                   
  885. //                                                                      
  886. //  Function:   If encoder is working, user cannot select the item.     
  887. //                                                                      
  888. //      Parameters:     CCmdUI* pCmdUI                                  
  889. //                                                                      
  890. //      Return value:   none                                            
  891. //                                                                      
  892. //----------------------------------------------------------------------
  893. void CChildFrame::OnUpdateEncodePs(CCmdUI* pCmdUI) 
  894. {
  895.     ENC_STATUS  enc_status;
  896.  
  897.     if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
  898.     {
  899.         pCmdUI->Enable(FALSE);
  900.         return;
  901.     }
  902.  
  903.     ENC_Get_Status(m_nID, &enc_status);
  904.     pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
  905. }
  906.  
  907.  
  908. //----------------------------------------------------------------------
  909. // #[ CChildFrame::OnUpdateEncodeAv ]                                   
  910. //                                                                      
  911. // 機能     エンコード中は選択できないようにする                        
  912. //                                                                      
  913. //  引数:      CCmdUI* pCmdUI                                          
  914. //                                                                      
  915. //  戻り値:    なし                                                    
  916. //                                                                      
  917. //----------------------------------------------------------------------
  918. // #[ CChildFrame::OnUpdateEncodeAv ]                                   
  919. //                                                                      
  920. //  Function:   If encoder is working, user cannot select the item.     
  921. //                                                                      
  922. //      Parameters:     CCmdUI* pCmdUI                                  
  923. //                                                                      
  924. //      Return value:   none                                            
  925. //                                                                      
  926. //----------------------------------------------------------------------
  927. void CChildFrame::OnUpdateEncodeAv(CCmdUI* pCmdUI) 
  928. {
  929.     ENC_STATUS  enc_status;
  930.  
  931.     if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
  932.     {
  933.         pCmdUI->Enable(FALSE);
  934.         return;
  935.     }
  936.  
  937.     ENC_Get_Status(m_nID, &enc_status);
  938.     pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
  939. }
  940.  
  941.  
  942. //----------------------------------------------------------------------
  943. // #[ CChildFrame::OnUpdateEncodeVideo ]                                
  944. //                                                                      
  945. // 機能     エンコード中は選択できないようにする                        
  946. //                                                                      
  947. //  引数:      CCmdUI* pCmdUI                                          
  948. //                                                                      
  949. //  戻り値:    なし                                                    
  950. //                                                                      
  951. //----------------------------------------------------------------------
  952. // #[ CChildFrame::OnUpdateEncodeVideo ]                                
  953. //                                                                      
  954. //  Function:   If encoder is working, user cannot select the item.     
  955. //                                                                      
  956. //      Parameters:     CCmdUI* pCmdUI                                  
  957. //                                                                      
  958. //      Return value:   none                                            
  959. //                                                                      
  960. //----------------------------------------------------------------------
  961. void CChildFrame::OnUpdateEncodeVideo(CCmdUI* pCmdUI) 
  962. {
  963.     ENC_STATUS  enc_status;
  964.  
  965.     if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
  966.     {
  967.         pCmdUI->Enable(FALSE);
  968.         return;
  969.     }
  970.  
  971.     ENC_Get_Status(m_nID, &enc_status);
  972.     pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
  973. }
  974.  
  975.  
  976. //----------------------------------------------------------------------
  977. // #[ CChildFrame::OnUpdateEncodeAudio ]                                
  978. //                                                                      
  979. // 機能     エンコード中は選択できないようにする                        
  980. //                                                                      
  981. //  引数:      CCmdUI* pCmdUI                                          
  982. //                                                                      
  983. //  戻り値:    なし                                                    
  984. //                                                                      
  985. //----------------------------------------------------------------------
  986. // #[ CChildFrame::OnUpdateEncodeAudio ]                                
  987. //                                                                      
  988. //  Function:   If encoder is working, user cannot select the item.     
  989. //                                                                      
  990. //      Parameters:     CCmdUI* pCmdUI                                  
  991. //                                                                      
  992. //      Return value:   none                                            
  993. //                                                                      
  994. //----------------------------------------------------------------------
  995. void CChildFrame::OnUpdateEncodeAudio(CCmdUI* pCmdUI) 
  996. {
  997.     ENC_STATUS  enc_status;
  998.  
  999.     if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
  1000.     {
  1001.         pCmdUI->Enable(FALSE);
  1002.         return;
  1003.     }
  1004.  
  1005.     ENC_Get_Status(m_nID, &enc_status);
  1006.     pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
  1007. }
  1008.  
  1009.  
  1010. //----------------------------------------------------------------------
  1011. // #[ CChildFrame::OnUpdateEncodeStop ]                                 
  1012. //                                                                      
  1013. // 機能     エンコード中以外は選択できないようにする                    
  1014. //                                                                      
  1015. //  引数:      CCmdUI* pCmdUI                                          
  1016. //                                                                      
  1017. //  戻り値:    なし                                                    
  1018. //                                                                      
  1019. //----------------------------------------------------------------------
  1020. // #[ CChildFrame::OnUpdateEncodeStop ]                                 
  1021. //                                                                      
  1022. //  Function:   If encoder is working, user can select the item.        
  1023. //                                                                      
  1024. //      Parameters:     CCmdUI* pCmdUI                                  
  1025. //                                                                      
  1026. //      Return value:   none                                            
  1027. //                                                                      
  1028. //----------------------------------------------------------------------
  1029. void CChildFrame::OnUpdateEncodeStop(CCmdUI* pCmdUI) 
  1030. {
  1031.     ENC_STATUS  enc_status;
  1032.  
  1033.     ENC_Get_Status(m_nID, &enc_status);
  1034.     pCmdUI->Enable(enc_status == ENC_STATUS_MOVIE ? TRUE : FALSE);
  1035. }
  1036.  
  1037.  
  1038. //----------------------------------------------------------------------
  1039. // #[ CChildFrame::OnFileOpen ]                                         
  1040. //                                                                      
  1041. // 機能     ファイルを開く                                              
  1042. //                                                                      
  1043. //  引数:      なし                                                    
  1044. //                                                                      
  1045. //  戻り値:    なし                                                    
  1046. //                                                                      
  1047. //----------------------------------------------------------------------
  1048. // #[ CChildFrame::OnFileOpen ]                                         
  1049. //                                                                      
  1050. //  Function:   Open a file                                             
  1051. //                                                                      
  1052. //      Parameters:     none                                            
  1053. //                                                                      
  1054. //      Return value:   none                                            
  1055. //                                                                      
  1056. //----------------------------------------------------------------------
  1057. void CChildFrame::OnFileOpen() 
  1058. {
  1059.     CFileDialog dlg(TRUE, NULL, NULL,
  1060.                     OFN_HIDEREADONLY |
  1061.                     OFN_FILEMUSTEXIST |
  1062.                     OFN_PATHMUSTEXIST,
  1063.                     NULL, this);
  1064.     DEC_RETURN  dec_return;
  1065.     DEC_TYPE    dec_type;
  1066.     CString     strMessage;
  1067.     CString     strFile;
  1068.     CString     szType;
  1069.     char        szText[MAX_PATH];
  1070.     char        szFile[MAX_PATH];
  1071.  
  1072.     // ファイル名の取得
  1073.     // Get file name
  1074.     dec_return = DEC_Get_Movie_File(m_nID, szFile);
  1075.     if(dec_return == DEC_SUCCESS)
  1076.         dlg.m_ofn.lpstrFile = szFile;
  1077.  
  1078.     // ファイルを開く
  1079.     // Open file dialog
  1080.     if(dlg.DoModal() == IDOK)
  1081.     {
  1082.         strFile = dlg.GetFileName();
  1083.         lstrcpy(szFile, strFile);
  1084.  
  1085.         dec_return = DEC_Set_Movie_File(m_nID, szFile);
  1086.         if(dec_return != DEC_SUCCESS)
  1087.         {
  1088.             strMessage.LoadString(IDS_ERROR_OPEN_FILE);
  1089.             MessageBox(strMessage);
  1090.             return;
  1091.         }
  1092.  
  1093.         dec_return = DEC_Get_File_Type(m_nID, szFile, &dec_type);
  1094.         if(dec_return == DEC_SUCCESS)
  1095.         {
  1096.             switch(dec_type)
  1097.             {
  1098.             case DEC_TYPE_MPEG1_AUDIO:
  1099.                 szType = "MPEG1 Audio";
  1100.                 break;
  1101.             case DEC_TYPE_MPEG1_VIDEO:
  1102.                 szType = "MPEG1 Video";
  1103.                 break;
  1104.             case DEC_TYPE_MPEG1_SYSTEM_STREAM:
  1105.                 szType = "MPEG1 System stream";
  1106.                 break;
  1107.             case DEC_TYPE_MPEG2_AUDIO:
  1108.                 szType = "MPEG2 Audio";
  1109.                 break;
  1110.             case DEC_TYPE_MPEG2_VIDEO:
  1111.                 szType = "MPEG2 Video";
  1112.                 break;
  1113.             case DEC_TYPE_MPEG2_PROGRAM_STREAM:
  1114.                 szType = "MPEG2 Program Stream";
  1115.                 break;
  1116.             default:
  1117.                 szType = "unknown";
  1118.                 break;
  1119.             }
  1120.             wsprintf(szText, "[%s] : %s", szType, szFile);
  1121.         }
  1122.         else
  1123.         {
  1124.             wsprintf(szText, "%s", szFile);
  1125.         }
  1126.  
  1127.         SetWindowText(szText);
  1128.     }
  1129. }
  1130.  
  1131.  
  1132. //----------------------------------------------------------------------
  1133. // #[ CChildFrame::OnUpdateFileOpen ]                                   
  1134. //                                                                      
  1135. // 機能     デコード以外は選択できないようにする                        
  1136. //                                                                      
  1137. //  引数:      CCmdUI* pCmdUI                                          
  1138. //                                                                      
  1139. //  戻り値:    なし                                                    
  1140. //                                                                      
  1141. //----------------------------------------------------------------------
  1142. // #[ CChildFrame::OnUpdateFileOpen ]                                   
  1143. //                                                                      
  1144. //  Function:   If you select decode mode, you can select the item.     
  1145. //                                                                      
  1146. //      Parameters:     CCmdUI* pCmdUI                                  
  1147. //                                                                      
  1148. //      Return value:   none                                            
  1149. //                                                                      
  1150. //----------------------------------------------------------------------
  1151. void CChildFrame::OnUpdateFileOpen(CCmdUI* pCmdUI) 
  1152. {
  1153.     pCmdUI->Enable(m_bDecode);
  1154. }
  1155.  
  1156.  
  1157. //----------------------------------------------------------------------
  1158. // #[ CChildFrame::OnDecodePlay ]                                       
  1159. //                                                                      
  1160. // 機能     デコードを開始します                                        
  1161. //                                                                      
  1162. //  引数:      なし                                                    
  1163. //                                                                      
  1164. //  戻り値:    なし                                                    
  1165. //                                                                      
  1166. //----------------------------------------------------------------------
  1167. // #[ CChildFrame::OnDecodePlay ]                                       
  1168. //                                                                      
  1169. //  Function:   Decode starts                                           
  1170. //                                                                      
  1171. //      Parameters:     none                                            
  1172. //                                                                      
  1173. //      Return value:   none                                            
  1174. //                                                                      
  1175. //----------------------------------------------------------------------
  1176. void CChildFrame::OnDecodePlay() 
  1177. {
  1178.     DEC_STATUS  dec_status;
  1179.     CString     strMessage;
  1180.  
  1181.     // デコード開始
  1182.     // Start Decode
  1183.     DEC_Get_Status(m_nID, &dec_status);
  1184.     if(dec_status == DEC_STATUS_PAUSE)
  1185.     {
  1186.         // 一時停止解除
  1187.         // Resume
  1188.         DEC_Resume(m_nID);
  1189.     }
  1190.     else if(dec_status == DEC_STATUS_STOP)
  1191.     {
  1192.         // 再生
  1193.         // Play
  1194.         DEC_Play(m_nID);
  1195.     }
  1196. }
  1197.  
  1198.  
  1199. //----------------------------------------------------------------------
  1200. // #[ CChildFrame::OnUpdateDecodePlay ]                                 
  1201. //                                                                      
  1202. // 機能     ファイルが選択されていない場合や                            
  1203. //          エンコード中は選択できないようにする                        
  1204. //                                                                      
  1205. //  引数:      CCmdUI* pCmdUI                                          
  1206. //                                                                      
  1207. //  戻り値:    なし                                                    
  1208. //                                                                      
  1209. //----------------------------------------------------------------------
  1210. // #[ CChildFrame::OnUpdateDecodePlay ]                                 
  1211. //                                                                      
  1212. //  Function:    User can't select item when a file is not selected,    
  1213. //              or when it is decoding.                                 
  1214. //                                                                      
  1215. //      Parameters:     CCmdUI* pCmdUI                                  
  1216. //                                                                      
  1217. //      Return value:  none                                            
  1218. //                                                                      
  1219. //----------------------------------------------------------------------
  1220. void CChildFrame::OnUpdateDecodePlay(CCmdUI* pCmdUI) 
  1221. {
  1222.     DEC_RETURN  dec_return;
  1223.     DEC_STATUS  dec_status;
  1224.     DWORD       dwTime;
  1225.  
  1226.     // 停止状態か一時停止状態でなければ選択できないようにする
  1227.     // If decoder is stopped or paused, user can select the item.
  1228.     dec_return = DEC_Get_Status(m_nID, &dec_status);
  1229.     if(dec_return == DEC_SUCCESS)
  1230.         pCmdUI->Enable(TRUE);
  1231.     else
  1232.     {
  1233.         pCmdUI->Enable(FALSE);
  1234.         return;
  1235.     }
  1236.  
  1237.     if(dec_status == DEC_STATUS_STOP || dec_status == DEC_STATUS_PAUSE)
  1238.         pCmdUI->Enable(TRUE);
  1239.     else
  1240.     {
  1241.         pCmdUI->Enable(FALSE);
  1242.         return;
  1243.     }
  1244.  
  1245.     dec_return = DEC_Get_Playback_Time(m_nID, &dwTime);
  1246.     if(dec_return == DEC_SUCCESS && dwTime != 0)
  1247.         pCmdUI->Enable(TRUE);
  1248.     else
  1249.         pCmdUI->Enable(FALSE);
  1250. }
  1251.  
  1252.  
  1253. //----------------------------------------------------------------------
  1254. // #[ CChildFrame::OnDecodePause ]                                      
  1255. //                                                                      
  1256. // 機能     デコードを一時停止します                                    
  1257. //                                                                      
  1258. //  引数:      なし                                                    
  1259. //                                                                      
  1260. //  戻り値:    なし                                                    
  1261. //                                                                      
  1262. //----------------------------------------------------------------------
  1263. // #[ CChildFrame::OnDecodePause ]                                      
  1264. //                                                                      
  1265. //  Function:   Pause decode                                            
  1266. //                                                                      
  1267. //      Parameters:     none                                            
  1268. //                                                                      
  1269. //      Return value:   none                                            
  1270. //                                                                      
  1271. //----------------------------------------------------------------------
  1272. void CChildFrame::OnDecodePause() 
  1273. {
  1274.     DEC_RETURN  dec_return;
  1275.     CString     strMessage;
  1276.  
  1277.     dec_return = DEC_Pause(m_nID);
  1278.     if(dec_return != DEC_SUCCESS)
  1279.     {
  1280.         strMessage.LoadString(IDS_ERROR_PAUSE_DECODE);
  1281.         MessageBox(strMessage);
  1282.     }
  1283. }
  1284.  
  1285.  
  1286. //----------------------------------------------------------------------
  1287. // #[ CChildFrame::OnUpdateDecodePause ]                                
  1288. //                                                                      
  1289. // 機能     再生中のみ選択できるようにする                              
  1290. //                                                                      
  1291. //  引数:      CCmdUI* pCmdUI                                          
  1292. //                                                                      
  1293. //  戻り値:    なし                                                    
  1294. //                                                                      
  1295. //----------------------------------------------------------------------
  1296. // #[ CChildFrame::OnUpdateDecodePause ]                                
  1297. //                                                                      
  1298. //  Function:   If decoder is playing, user can select the item.        
  1299. //                                                                      
  1300. //      Parameters:     CCmdUI* pCmdUI                                  
  1301. //                                                                      
  1302. //      Return value:   nonr                                            
  1303. //                                                                      
  1304. //----------------------------------------------------------------------
  1305. void CChildFrame::OnUpdateDecodePause(CCmdUI* pCmdUI) 
  1306. {
  1307.     DEC_STATUS  dec_status;
  1308.  
  1309.     DEC_Get_Status(m_nID, &dec_status);
  1310.     if(dec_status == DEC_STATUS_PLAY)
  1311.         pCmdUI->Enable(TRUE);
  1312.     else
  1313.         pCmdUI->Enable(FALSE);
  1314. }
  1315.  
  1316.  
  1317. //----------------------------------------------------------------------
  1318. // #[ CChildFrame::OnDecodeStop ]                                       
  1319. //                                                                      
  1320. // 機能     デコードを停止します                                        
  1321. //                                                                      
  1322. //  引数:      なし                                                    
  1323. //                                                                      
  1324. //  戻り値:    なし                                                    
  1325. //                                                                      
  1326. //----------------------------------------------------------------------
  1327. // #[ CChildFrame::OnDecodeStop ]                                       
  1328. //                                                                      
  1329. //  Function:   Decode stops                                            
  1330. //                                                                      
  1331. //      Parameters:     none                                            
  1332. //                                                                      
  1333. //      Return value:   none                                            
  1334. //                                                                      
  1335. //----------------------------------------------------------------------
  1336. void CChildFrame::OnDecodeStop() 
  1337. {
  1338.     DEC_RETURN  dec_return;
  1339.     CString     strMessage;
  1340.  
  1341.     dec_return = DEC_Stop(m_nID);
  1342.     if(dec_return != DEC_SUCCESS)
  1343.     {
  1344.         strMessage.LoadString(IDS_ERROR_STOP_DECODE);
  1345.         MessageBox(strMessage);
  1346.     }
  1347. }
  1348.  
  1349.  
  1350. //----------------------------------------------------------------------
  1351. // #[ CChildFrame::OnUpdateDecodeStop ]                                 
  1352. //                                                                      
  1353. // 機能     再生、一時停止中のみ選択できるようにする                    
  1354. //                                                                      
  1355. //  引数:      CCmdUI* pCmdUI                                          
  1356. //                                                                      
  1357. //  戻り値:    なし                                                    
  1358. //                                                                      
  1359. //----------------------------------------------------------------------
  1360. // #[ CChildFrame::OnUpdateDecodeStop ]                                 
  1361. //                                                                      
  1362. //  Function:    User can select the item only during playback or pause.
  1363. //                                                                      
  1364. //      Parameters:     CCmdUI* pCmdUI                                  
  1365. //                                                                      
  1366. //      Return value:   none                                            
  1367. //                                                                      
  1368. //----------------------------------------------------------------------
  1369. void CChildFrame::OnUpdateDecodeStop(CCmdUI* pCmdUI) 
  1370. {
  1371.     DEC_STATUS  dec_status;
  1372.  
  1373.     DEC_Get_Status(m_nID, &dec_status);
  1374.     if(dec_status == DEC_STATUS_PLAY || dec_status == DEC_STATUS_PAUSE)
  1375.         pCmdUI->Enable(TRUE);
  1376.     else
  1377.         pCmdUI->Enable(FALSE);
  1378. }
  1379.  
  1380.  
  1381. //----------------------------------------------------------------------
  1382. // #[ CChildFrame::OnDecodeRepeat ]                                     
  1383. //                                                                      
  1384. // 機能     リピート                                                    
  1385. //                                                                      
  1386. //  引数:      なし                                                    
  1387. //                                                                      
  1388. //  戻り値:    なし                                                    
  1389. //                                                                      
  1390. //----------------------------------------------------------------------
  1391. // #[ CChildFrame::OnDecodeRepeat ]                                     
  1392. //                                                                      
  1393. //  Function:   Repeat                                                  
  1394. //                                                                      
  1395. //      Parameters:     none                                            
  1396. //                                                                      
  1397. //      Return value:   none                                            
  1398. //                                                                      
  1399. //----------------------------------------------------------------------
  1400. void CChildFrame::OnDecodeRepeat() 
  1401. {
  1402.     DEC_RETURN  dec_return;
  1403.     UINT        nRepeat;
  1404.  
  1405.     dec_return = DEC_Get_Repeat(m_nID, &nRepeat);
  1406.     if(dec_return == DEC_SUCCESS)
  1407.         DEC_Set_Repeat(m_nID, !nRepeat);
  1408. }
  1409.  
  1410.  
  1411. //----------------------------------------------------------------------
  1412. // #[ CChildFrame::OnUpdateDecodeRepeat ]                               
  1413. //                                                                      
  1414. // 機能     リピートにチェックマークをつける                            
  1415. //                                                                      
  1416. //  引数:      CCmdUI* pCmdUI                                          
  1417. //                                                                      
  1418. //  戻り値:    なし                                                    
  1419. //                                                                      
  1420. //----------------------------------------------------------------------
  1421. // #[ CChildFrame::OnUpdateDecodeRepeat ]                               
  1422. //                                                                      
  1423. //  Function:   Check the item                                          
  1424. //                                                                      
  1425. //      Parameters:     CCmdUI* pCmdUI                                  
  1426. //                                                                      
  1427. //      Return value:   none                                            
  1428. //                                                                      
  1429. //----------------------------------------------------------------------
  1430. void CChildFrame::OnUpdateDecodeRepeat(CCmdUI* pCmdUI) 
  1431. {
  1432.     UINT    nRepeat;
  1433.  
  1434.     if(DEC_Can_Playback(m_nID) != ENC_SUCCESS)
  1435.     {
  1436.         pCmdUI->Enable(FALSE);
  1437.         return;
  1438.     }
  1439.  
  1440.     pCmdUI->SetCheck(FALSE);
  1441.  
  1442.     if(DEC_Get_Repeat(m_nID, &nRepeat) != DEC_SUCCESS)
  1443.     {
  1444.         pCmdUI->Enable(FALSE);
  1445.         return;
  1446.     }
  1447.     else
  1448.         pCmdUI->Enable(TRUE);
  1449.  
  1450.     pCmdUI->SetCheck(nRepeat);
  1451. }
  1452.  
  1453.  
  1454. //----------------------------------------------------------------------
  1455. // #[ CChildFrame::OnUseOverlay ]                                       
  1456. //                                                                      
  1457. // 機能     オーバーレイウィンドウを作成・破棄する                      
  1458. //                                                                      
  1459. //  引数:      なし                                                    
  1460. //                                                                      
  1461. //  戻り値:    なし                                                    
  1462. //                                                                      
  1463. //----------------------------------------------------------------------
  1464. // #[ CChildFrame::OnUseOverlay ]                                       
  1465. //                                                                      
  1466. //  Function:   Create or destroy an overlay window                     
  1467. //                                                                      
  1468. //      Parameters:     none                                            
  1469. //                                                                      
  1470. //      Return value:   none                                            
  1471. //                                                                      
  1472. //----------------------------------------------------------------------
  1473. void CChildFrame::OnUseOverlay() 
  1474. {
  1475.     HWND    hWndOverlay;
  1476.     RECT    rc;
  1477.     UINT fMonitor;
  1478.  
  1479.     GetClientRect(&rc);
  1480.  
  1481.     if(m_bDecode)
  1482.     {
  1483.         // モニターの状態の取得
  1484.         // Get monitor state
  1485.         if (DEC_Get_Monitor_Status(m_nID, &fMonitor) == DEC_SUCCESS)
  1486.         {
  1487.             if (fMonitor)
  1488.             {
  1489.                 // モニター出力を止める
  1490.                 // Stop output monitor
  1491.                 DEC_Stop_Monitor(m_nID);
  1492.             }
  1493.         }
  1494.         if(m_bUseOverlay == FALSE)
  1495.         {
  1496.             if(DEC_Create_Overlay_Window(   m_nID, m_hWnd, &hWndOverlay,
  1497.                                             rc.left, rc.top, rc.right, rc.bottom) == DEC_SUCCESS)
  1498.             {
  1499.                 DEC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
  1500.                 m_bUseOverlay = TRUE;
  1501.             }
  1502.         }
  1503.         else
  1504.         {
  1505.             DEC_Destroy_Overlay_Window(m_nID);
  1506.             m_bUseOverlay = FALSE;
  1507.         }
  1508.         if(fMonitor)
  1509.         {
  1510.             // モニター出力を開始する
  1511.             // Start output monitor
  1512.             DEC_Start_Monitor(m_nID);
  1513.         }
  1514.     }
  1515.     else if(m_bEncode)
  1516.     {
  1517.         // モニターの状態の取得
  1518.         // Get monitor state
  1519.         if (ENC_Get_Monitor_Status(m_nID, &fMonitor) == ENC_SUCCESS)
  1520.         {
  1521.             if (fMonitor)
  1522.             {
  1523.                 // モニター出力を止める
  1524.                 // Stop output monitor
  1525.                 ENC_Stop_Monitor(m_nID);
  1526.             }
  1527.         }
  1528.         if(m_bUseOverlay == FALSE)
  1529.         {
  1530.             if(ENC_Create_Overlay_Window(   m_nID, m_hWnd, &hWndOverlay,
  1531.                                             rc.left, rc.top, rc.right, rc.bottom) == ENC_SUCCESS)
  1532.             {
  1533.                 AutoDetect();
  1534.                 ENC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
  1535.                 m_bUseOverlay = TRUE;
  1536.             }
  1537.         }
  1538.         else
  1539.         {
  1540.             ENC_Destroy_Overlay_Window(m_nID);
  1541.             m_bUseOverlay = FALSE;
  1542.         }
  1543.         if(fMonitor)
  1544.         {
  1545.             // モニター出力を開始する
  1546.             // Start output monitor
  1547.             ENC_Start_Monitor(m_nID);
  1548.         }
  1549.     }
  1550.     else
  1551.         m_bUseOverlay = FALSE;
  1552. }
  1553.  
  1554.  
  1555. //----------------------------------------------------------------------
  1556. // #[ CChildFrame::OnUpdateUseOverlay ]                                 
  1557. //                                                                      
  1558. // 機能     チェックマークをつける                                      
  1559. //                                                                      
  1560. //  引数:      CCmdUI* pCmdUI                                          
  1561. //                                                                      
  1562. //  戻り値:    なし                                                    
  1563. //                                                                      
  1564. //----------------------------------------------------------------------
  1565. // #[ CChildFrame::OnUpdateUseOverlay ]                                 
  1566. //                                                                      
  1567. //  Function:   Check the item                                          
  1568. //                                                                      
  1569. //      Parameters:     CCmdUI* pCmdUI                                  
  1570. //                                                                      
  1571. //      Return value:   none                                            
  1572. //                                                                      
  1573. //----------------------------------------------------------------------
  1574. void CChildFrame::OnUpdateUseOverlay(CCmdUI* pCmdUI) 
  1575. {
  1576.     RECT    rc;
  1577.     DEC_STATUS  dec_status;
  1578.     ENC_STATUS  enc_status;
  1579.  
  1580.     pCmdUI->SetCheck(m_bUseOverlay);
  1581.  
  1582.     if(m_bDecode)
  1583.     {
  1584.         DEC_Get_Status(m_nID, &dec_status);
  1585.         if(dec_status == DEC_STATUS_STOP)
  1586.             pCmdUI->Enable(TRUE);
  1587.         else
  1588.         {
  1589.             pCmdUI->Enable(FALSE);
  1590.             return;
  1591.         }
  1592.     }
  1593.     else
  1594.     {
  1595.         ENC_Get_Status(m_nID, &enc_status);
  1596.         if(enc_status == ENC_STATUS_STOP)
  1597.             pCmdUI->Enable(TRUE);
  1598.         else
  1599.         {
  1600.             pCmdUI->Enable(FALSE);
  1601.             return;
  1602.         }
  1603.     }
  1604.  
  1605.     if(!m_bUseOverlay)
  1606.     {
  1607.         GetClientRect(&rc);
  1608.  
  1609.         if(m_bDecode)
  1610.         {
  1611.             if(DEC_Can_Overlay_Window(m_nID, NULL, rc.right - rc.left, rc.bottom - rc.top) != DEC_SUCCESS)
  1612.                 pCmdUI->Enable(FALSE);
  1613.             else
  1614.                 pCmdUI->Enable(TRUE);
  1615.         }
  1616.         else
  1617.         {
  1618.             if(ENC_Can_Overlay_Window(m_nID, NULL, rc.right - rc.left, rc.bottom - rc.top) != DEC_SUCCESS)
  1619.                 pCmdUI->Enable(FALSE);
  1620.             else
  1621.                 pCmdUI->Enable(TRUE);
  1622.         }
  1623.     }
  1624. }
  1625.  
  1626.  
  1627. //----------------------------------------------------------------------
  1628. // #[ CChildFrame::OnMove ]                                             
  1629. //                                                                      
  1630. // 機能     オーバーレイウィンドウの位置の移動                          
  1631. //                                                                      
  1632. //  引数:      int     x                                               
  1633. //              int     y                                               
  1634. //                                                                      
  1635. //  戻り値:    なし                                                    
  1636. //                                                                      
  1637. //----------------------------------------------------------------------
  1638. // #[ CChildFrame::OnMove ]                                             
  1639. //                                                                      
  1640. //  Function:   Move the overlay window.                                
  1641. //                                                                      
  1642. //      Parameters:     int     x                                       
  1643. //                      int     y                                       
  1644. //                                                                      
  1645. //      Return value:   none                                            
  1646. //                                                                      
  1647. //----------------------------------------------------------------------
  1648. void CChildFrame::OnMove(int x, int y) 
  1649. {
  1650.     CMDIChildWnd::OnMove(x, y);
  1651.     
  1652.     RECT    rc;
  1653.  
  1654.     GetClientRect(&rc);
  1655.     ClientToScreen(&rc);
  1656.  
  1657.     if(m_bUseOverlay)
  1658.     {
  1659.         if(m_bDecode)
  1660.             DEC_Move_Overlay_Window(m_nID, rc.left, rc.top);
  1661.         else
  1662.             ENC_Move_Overlay_Window(m_nID, rc.left, rc.top);
  1663.     }
  1664. }
  1665.  
  1666.  
  1667. //----------------------------------------------------------------------
  1668. // #[ CChildFrame::OnSize ]                                             
  1669. //                                                                      
  1670. // 機能     オーバーレイウィンドウのサイズ変更                          
  1671. //                                                                      
  1672. //  引数:      UINT    nType                                           
  1673. //              int     cx                                              
  1674. //              int     cy                                              
  1675. //                                                                      
  1676. //  戻り値:    なし                                                    
  1677. //                                                                      
  1678. //----------------------------------------------------------------------
  1679. // #[ CChildFrame::OnSize ]                                             
  1680. //                                                                      
  1681. //  Function:   Resize the overlay window.                              
  1682. //                                                                      
  1683. //      Parameters:     UINT    nType                                   
  1684. //                      int     cx                                      
  1685. //                      int     cy                                      
  1686. //                                                                      
  1687. //      Return value:   none                                            
  1688. //                                                                      
  1689. //----------------------------------------------------------------------
  1690. void CChildFrame::OnSize(UINT nType, int cx, int cy) 
  1691. {
  1692.     CMDIChildWnd::OnSize(nType, cx, cy);
  1693.  
  1694.     RECT    rc;
  1695.  
  1696.     GetClientRect(&rc);
  1697.  
  1698.     if(m_bUseOverlay)
  1699.     {
  1700.         if(m_bDecode)
  1701.             DEC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
  1702.         else
  1703.             ENC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
  1704.     }
  1705. }
  1706.  
  1707. //----------------------------------------------------------------------
  1708. // #[ ErrorProc ]                                                       
  1709. //                                                                      
  1710. // 機能     コールバック関数(エラー)                                  
  1711. //                                                                      
  1712. //  引数:      UINT        dec_id                                      
  1713. //              ULONG       error                                       
  1714. //                                                                      
  1715. //  戻り値:    なし                                                    
  1716. //                                                                      
  1717. //----------------------------------------------------------------------
  1718. // #[ ErrorProc ]                                                       
  1719. //                                                                      
  1720. //  Function:   Callback function(error)                                
  1721. //                                                                      
  1722. //      Parameters:     UINT        dec_id                              
  1723. //                      ULONG       error                               
  1724. //                                                                      
  1725. //      Return value:   none                                            
  1726. //                                                                      
  1727. //----------------------------------------------------------------------
  1728. void CALLBACK ErrorProc(UINT dec_id, ULONG error)
  1729. {
  1730.     CString strText;
  1731.     switch (error)
  1732.     {
  1733.     case MVR_ERROR_SUCCESS:
  1734.         strText = "MVR_ERROR_SUCCESS";
  1735.         break;
  1736.     case MVR_ERROR_PENDING:
  1737.         strText = "MVR_ERROR_PENDING";
  1738.         break;
  1739.     case MVR_ERROR_SYSTEM_ERROR:
  1740.         strText = "MVR_ERROR_SYSTEM_ERROR";
  1741.         break;
  1742.     case MVR_ERROR_NOT_PENDING:
  1743.         strText = "MVR_ERROR_NOT_PENDING";
  1744.         break;
  1745.     case MVR_ERROR_INVALID_ASYNCOP:
  1746.         strText = "MVR_ERROR_INVALID_ASYNCOP";
  1747.         break;
  1748.     case MVR_ERROR_UNSUPPORTED:
  1749.         strText = "MVR_ERROR_UNSUPPORTED";
  1750.         break;
  1751.     case MVR_ERROR_INVALID_TYPE:
  1752.         strText = "MVR_ERROR_INVALID_TYPE";
  1753.         break;
  1754.     case MVR_ERROR_INVALID_OPTION:
  1755.         strText = "MVR_ERROR_INVALID_OPTION";
  1756.         break;
  1757.     case MVR_ERROR_INVALID_ADDRESS:
  1758.         strText = "MVR_ERROR_INVALID_ADDRESS";
  1759.         break;
  1760.     case MVR_ERROR_LIMIT_EXCEEDED:
  1761.         strText = "MVR_ERROR_LIMIT_EXCEEDED";
  1762.         break;
  1763.     case MVR_ERROR_INVALID_HANDLE:
  1764.         strText = "MVR_ERROR_INVALID_HANDLE";
  1765.         break;
  1766.     case MVR_ERROR_INVALID_STREAM:
  1767.         strText = "MVR_ERROR_INVALID_STREAM";
  1768.         break;
  1769.     case MVR_ERROR_INVALID_BUFFER:
  1770.         strText = "MVR_ERROR_INVALID_BUFFER";
  1771.         break;
  1772.     case MVR_ERROR_INVALID_MESSAGE:
  1773.         strText = "MVR_ERROR_INVALID_MESSAGE";
  1774.         break;
  1775.     case MVR_ERROR_CANCELED:
  1776.         strText = "MVR_ERROR_CANCELED";
  1777.         break;
  1778.     case MVR_ERROR_BUSY:
  1779.         strText = "MVR_ERROR_BUSY";
  1780.         break;
  1781.     case MVR_ERROR_BUFFER_ERROR:
  1782.         strText = "MVR_ERROR_BUFFER_ERROR";
  1783.         break;
  1784.     case MVR_ERROR_MESSAGE_ERROR:
  1785.         strText = "MVR_ERROR_MESSAGE_ERROR";
  1786.         break;
  1787.     case MVR_ERROR_BAD_PARAM:
  1788.         strText = "MVR_ERROR_BAD_PARAM";
  1789.         break;
  1790.     case MVR_ERROR_HARDWARE_ERROR:
  1791.         strText = "MVR_ERROR_HARDWARE_ERROR";
  1792.         break;
  1793.     case MVR_ERROR_ALLOC_FAILURE:
  1794.         strText = "MVR_ERROR_ALLOC_FAILURE";
  1795.         break;
  1796.     case MVR_ERROR_INVALID_EVENT:
  1797.         strText = "MVR_ERROR_INVALID_EVENT";
  1798.         break;
  1799.     case MVR_ERROR_INVALID_STATE:
  1800.         strText = "MVR_ERROR_INVALID_STATE";
  1801.         break;
  1802.     case MVR_ERROR_CURRENT_STATE:
  1803.         strText = "MVR_ERROR_CURRENT_STATE";
  1804.         break;
  1805.     case MVR_ERROR_INVALID_FRAME_TYPE:
  1806.         strText = "MVR_ERROR_INVALID_FRAME_TYPE";
  1807.         break;
  1808.     case MVR_ERROR_INSUFFICIENT_BUFFERS:
  1809.         strText = "MVR_ERROR_INSUFFICIENT_BUFFERS";
  1810.         break;
  1811.     case MVR_ERROR_TIMEOUT:
  1812.         strText = "MVR_ERROR_TIMEOUT";
  1813.         break;
  1814.     case MVR_ERROR_INVALID_CODEC_STATE:
  1815.         strText = "MVR_ERROR_INVALID_CODEC_STATE";
  1816.         break;
  1817.     case MVR_ERROR_INVALID_FORMAT:
  1818.         strText = "MVR_ERROR_INVALID_FORMAT";
  1819.         break;
  1820.     case MVR_ERROR_INVALID_OPERATION:
  1821.         strText = "MVR_ERROR_INVALID_OPERATION";
  1822.         break;
  1823.     case MVR_ERROR_OVERFLOW:
  1824.         strText = "MVR_ERROR_OVERFLOW";
  1825.         break;
  1826.     case MVR_ERROR_UNDERFLOW:
  1827.         strText = "MVR_ERROR_UNDERFLOW";
  1828.         break;
  1829.     case MVR_ERROR_SESSION_CANCELED:
  1830.         strText = "MVR_ERROR_SESSION_CANCELED";
  1831.         break;
  1832.     case MVR_ERROR_UCODE_NOT_FOUND:
  1833.         strText = "MVR_ERROR_UCODE_NOT_FOUND";
  1834.         break;
  1835.     case MVR_ERROR_AUDIO_UCODE_NOT_FOUND:
  1836.         strText = "MVR_ERROR_AUDIO_UCODE_NOT_FOUND";
  1837.         break;
  1838.     case MVR_ERROR_PARSE_ERROR:
  1839.         strText = "MVR_ERROR_PARSE_ERROR";
  1840.         break;
  1841.     case MVR_ERROR_END_OF_STREAM:
  1842.         strText = "MVR_ERROR_END_OF_STREAM";
  1843.         break;
  1844.     case MVR_ERROR_DISK_FULL:
  1845.         strText = "MVR_ERROR_DISK_FULL";
  1846.         break;
  1847.     case MVR_ERROR_STREAMS_CLOSED:
  1848.         strText = "MVR_ERROR_STREAMS_CLOSED";
  1849.         break;
  1850.     case MVR_ERROR_INTERNAL_ERROR:
  1851.         strText = "MVR_ERROR_INTERNAL_ERROR";
  1852.         break;
  1853.     case MVR_ERROR_INVALID_SHORT_BUFFER:
  1854.         strText = "MVR_ERROR_INVALID_SHORT_BUFFER";
  1855.         break;
  1856.     case MVR_ERROR_EVENT_DATA_OVERRUN:
  1857.         strText = "MVR_ERROR_EVENT_DATA_OVERRUN";
  1858.         break;
  1859.     case MVR_ERROR_EVENT_DATA_UNDERRUN:
  1860.         strText = "MVR_ERROR_EVENT_DATA_UNDERRUN";
  1861.         break;
  1862.     case MVR_ERROR_EVENT_DEVICE_ERROR:
  1863.         strText = "MVR_ERROR_EVENT_DEVICE_ERROR";
  1864.         break;
  1865.     case MVR_ERROR_EVENT_LOSS_OF_VIDEO:
  1866.         strText = "MVR_ERROR_EVENT_LOSS_OF_VIDEO";
  1867.         break;
  1868.     case MVR_ERROR_EVENT_EVENT_LOSS:
  1869.         strText = "MVR_ERROR_EVENT_EVENT_LOSS";
  1870.         break;
  1871.     case MVR_ERROR_EVENT_UNRECOVERABLE_ERROR:
  1872.         strText = "MVR_ERROR_EVENT_UNRECOVERABLE_ERROR";
  1873.         break;
  1874.     default:
  1875.         strText = "????";
  1876.         break;
  1877.     }
  1878.     AfxMessageBox(strText);
  1879. }
  1880.  
  1881.  
  1882. //----------------------------------------------------------------------
  1883. // #[ DecStatusProc ]                                                   
  1884. //                                                                      
  1885. // 機能     コールバック関数                                            
  1886. //                                                                      
  1887. //  引数:      UINT                dec_id                              
  1888. //              DEC_STATUS_NOTIFY   dec_state                           
  1889. //                                                                      
  1890. //  戻り値:    なし                                                    
  1891. //                                                                      
  1892. //----------------------------------------------------------------------
  1893. // #[ DecStatusProc ]                                                   
  1894. //                                                                      
  1895. //  Function:   Callback function                                       
  1896. //                                                                      
  1897. //      Parameters:     UINT                dec_id                      
  1898. //                      DEC_STATUS_NOTIFY   dec_state                   
  1899. //                                                                      
  1900. //      Return value:   none                                            
  1901. //                                                                      
  1902. //----------------------------------------------------------------------
  1903. void CALLBACK DecStatusProc(UINT dec_id, DEC_STATUS_NOTIFY dec_state)
  1904. {
  1905.     DEC_TYPE    dec_type;
  1906.     CString     strType;
  1907.     CString     strText;
  1908.  
  1909.     if(dec_state == DEC_NOTIFY_STOP)
  1910.     {
  1911.         DEC_Get_Type(dec_id, &dec_type);
  1912.  
  1913.         switch(dec_type)
  1914.         {
  1915.         case DEC_TYPE_MPEG1_AUDIO:
  1916.             strType = "MPEG1 Audio";
  1917.             break;
  1918.         case DEC_TYPE_MPEG1_VIDEO:
  1919.             strType = "MPEG1 Video";
  1920.             break;
  1921.         case DEC_TYPE_MPEG1_SYSTEM_STREAM:
  1922.             strType = "MPEG1 System Stream";
  1923.             break;
  1924.         case DEC_TYPE_MPEG2_AUDIO:
  1925.             strType = "MPEG2 Audio";
  1926.             break;
  1927.         case DEC_TYPE_MPEG2_VIDEO:
  1928.             strType = "MPEG2 Video";
  1929.             break;
  1930.         case DEC_TYPE_MPEG2_PROGRAM_STREAM:
  1931.             strType = "MPEG2 Program Stream";
  1932.             break;
  1933.         default:
  1934.             strType = "unknown";
  1935.             break;
  1936.         }
  1937.  
  1938.         strText.LoadString(IDS_MESSAGE_STOP_DECODE);
  1939.         ::MessageBox(AfxGetMainWnd()->GetSafeHwnd(), strText, strType, MB_OK);
  1940.     }
  1941. }
  1942.  
  1943.  
  1944. //----------------------------------------------------------------------
  1945. // #[ EncStatusProc ]                                                   
  1946. //                                                                      
  1947. // 機能     コールバック関数                                            
  1948. //                                                                      
  1949. //  引数:      UINT                enc_id                              
  1950. //              ENC_STATUS_NOTIFY   enc_state                           
  1951. //                                                                      
  1952. //  戻り値:    なし                                                    
  1953. //                                                                      
  1954. //----------------------------------------------------------------------
  1955. // #[ EncStatusProc ]                                                   
  1956. //                                                                      
  1957. //  Function:   Callback function                                       
  1958. //                                                                      
  1959. //      Paraneters:     UINT                enc_id                      
  1960. //                      ENC_STATUS_NOTIFY   enc_state                   
  1961. //                                                                      
  1962. //      Return value:   none                                            
  1963. //                                                                      
  1964. //----------------------------------------------------------------------
  1965. void CALLBACK EncStatusProc(UINT enc_id, ENC_STATUS_NOTIFY enc_state)
  1966. {
  1967.     UINT        count;
  1968.     double      time;
  1969.     char        szText[MAX_PATH];
  1970.  
  1971.     if(enc_state == ENC_NOTIFY_STOP)
  1972.     {
  1973.         ENC_Get_Frame_Count(enc_id, &count);
  1974.         ENC_Get_Time(enc_id, &time);
  1975.         sprintf(szText,"Encode Frame : %ld\nEncode Time   : %.2f[sec]", count, time);
  1976.  
  1977.         AfxMessageBox(szText);
  1978.     }
  1979. }
  1980.  
  1981.  
  1982. //----------------------------------------------------------------------
  1983. // #[ TmapProc ]                                                        
  1984. //                                                                      
  1985. // 機能     コールバック関数                                            
  1986. //                                                                      
  1987. //  引数:      UINT        enc_id                                      
  1988. //              ENC_VOBU_ENT_INFO   *tmap                               
  1989. //                                                                      
  1990. //  戻り値:    なし                                                    
  1991. //                                                                      
  1992. //----------------------------------------------------------------------
  1993. // #[ TmapProc ]                                                        
  1994. //                                                                      
  1995. //  Function:   Callback function                                       
  1996. //                                                                      
  1997. //      Parameters:     UINT        enc_id                              
  1998. //                      ENC_VOBU_ENT_INFO   *tmap                       
  1999. //                                                                      
  2000. //      Return value:   none                                            
  2001. //                                                                      
  2002. //----------------------------------------------------------------------
  2003. void CALLBACK TmapProc(UINT enc_id, ENC_VOBU_ENT_INFO *tmap, UINT)
  2004. {
  2005.     char    szText[256];
  2006.     TRACE("TmapProc (ID = %d)\n", enc_id);
  2007.     wsprintf(szText, "VOBU size = %d, 1st reference picture = %d, playback = %d", 
  2008.                 tmap->Vobu_Sz, tmap->Fstref_Sz, tmap->Vobu_Pb_Tm);
  2009.     ::SetWindowText(AfxGetMainWnd()->GetSafeHwnd(), szText);
  2010. }
  2011.  
  2012.  
  2013. //----------------------------------------------------------------------
  2014. // #[ CChildFrame::OnTerminate ]                                        
  2015. //                                                                      
  2016. // 機能     エンコーダ・デコーダの破棄                                  
  2017. //                                                                      
  2018. //  引数:      なし                                                    
  2019. //                                                                      
  2020. //  戻り値:    なし                                                    
  2021. //                                                                      
  2022. //----------------------------------------------------------------------
  2023. // #[ CChildFrame::OnTerminate ]                                        
  2024. //                                                                      
  2025. //  Function:   Terminate decoder(encoder).                             
  2026. //                                                                      
  2027. //      Parameters:     none                                            
  2028. //                                                                      
  2029. //      Return value:   none                                            
  2030. //                                                                      
  2031. //----------------------------------------------------------------------
  2032. void CChildFrame::OnTerminate() 
  2033. {
  2034.     if(m_bEncode)
  2035.     {
  2036.         // エンコーダの終了処理を行う
  2037.         EncodeTerminate(m_nID);
  2038.         m_bEncode = FALSE;
  2039.     }
  2040.     else if(m_bDecode)
  2041.     {
  2042.         // デコーダの終了処理を行う
  2043.         DecodeTerminate(m_nID);
  2044.         m_bDecode = FALSE;
  2045.     }
  2046.  
  2047.     CMenu   *p;
  2048.     CWnd    *pMain = AfxGetMainWnd();
  2049.     
  2050.     p = pMain->GetMenu();
  2051.     p->EnableMenuItem(3,MF_BYPOSITION | MF_GRAYED);
  2052.     p->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
  2053.     pMain->DrawMenuBar();
  2054. }
  2055.  
  2056.  
  2057. //----------------------------------------------------------------------
  2058. // #[ CChildFrame::OnSetNumber ]                                        
  2059. //                                                                      
  2060. // 機能     ボード番号の設定                                            
  2061. //                                                                      
  2062. //  引数:      なし                                                    
  2063. //                                                                      
  2064. //  戻り値:    なし                                                    
  2065. //                                                                      
  2066. //----------------------------------------------------------------------
  2067. // #[ CChildFrame::OnSetNumber ]                                        
  2068. //                                                                      
  2069. //  Function:   Set board number.                                       
  2070. //                                                                      
  2071. //      Parameters:     none                                            
  2072. //                                                                      
  2073. //      Return value:   none                                            
  2074. //                                                                      
  2075. //----------------------------------------------------------------------
  2076. void CChildFrame::OnSetNumber() 
  2077. {
  2078.     CInitializeDlg  dlg;
  2079.     DEC_CONFIG      config;
  2080.  
  2081.     dlg.m_edit_ID = 0;
  2082.     config.CodecNumber = 0;
  2083.     DEC_Get_Codec_Config(m_nID, &config);
  2084.  
  2085.     if(dlg.DoModal() == IDOK)
  2086.         config.CodecNumber = (unsigned)dlg.m_edit_ID;
  2087.     else
  2088.         return;
  2089.  
  2090.     if((unsigned)dlg.m_edit_ID != 0)
  2091.     {
  2092.         DEC_Get_Codec_Config(m_nID, &config);
  2093.  
  2094.         if(config.CurrentUtilization == TRUE)
  2095.             return;
  2096.     }
  2097.  
  2098.     // 使用するボード番号を指定する
  2099.     // Select card number
  2100.     DEC_Set_Codec_Number(m_nID, (unsigned)dlg.m_edit_ID);
  2101.     ENC_Set_Codec_Number(m_nID, (unsigned)dlg.m_edit_ID);
  2102. }
  2103.  
  2104.  
  2105. //----------------------------------------------------------------------
  2106. // #[ CChildFrame::OnBoardInfo ]                                        
  2107. //                                                                      
  2108. // 機能     ボードの情報                                                
  2109. //                                                                      
  2110. //  引数:      なし                                                    
  2111. //                                                                      
  2112. //  戻り値:    なし                                                    
  2113. //                                                                      
  2114. //----------------------------------------------------------------------
  2115. // #[ CChildFrame::OnBoardInfo ]                                        
  2116. //                                                                      
  2117. //  Function:   Borad info.                                             
  2118. //                                                                      
  2119. //      Parameters:     none                                            
  2120. //                                                                      
  2121. //      Return value:   none                                            
  2122. //                                                                      
  2123. //----------------------------------------------------------------------
  2124. void CChildFrame::OnBoardInfo() 
  2125. {
  2126.     CBoardInfoDlg   dlg;
  2127.     dlg.DoModal();
  2128.     return;
  2129. }
  2130.  
  2131.  
  2132. //----------------------------------------------------------------------
  2133. // #[ CChildFrame::OnUpdateSetNumber ]                                  
  2134. //                                                                      
  2135. // 機能     初期化前のみ選択できるようにする                            
  2136. //                                                                      
  2137. //  引数:      CCmdUI* pCmdUI                                          
  2138. //                                                                      
  2139. //  戻り値:    なし                                                    
  2140. //                                                                      
  2141. //----------------------------------------------------------------------
  2142. // #[ CChildFrame::OnUpdateSetNumber ]                                  
  2143. //                                                                      
  2144. //  Function:    User can select only before initialized.               
  2145. //                                                                      
  2146. //      Parameters:     CCmdUI* pCmdUI                                  
  2147. //                                                                      
  2148. //      Return value:   none                                            
  2149. //                                                                      
  2150. //----------------------------------------------------------------------
  2151. void CChildFrame::OnUpdateSetNumber(CCmdUI* pCmdUI) 
  2152. {
  2153.     if(m_bEncode || m_bDecode)
  2154.         pCmdUI->Enable(FALSE);
  2155.     else
  2156.         pCmdUI->Enable(TRUE);
  2157. }
  2158.  
  2159.  
  2160. //----------------------------------------------------------------------
  2161. // #[ CChildFrame::OnUpdateTerminate ]                                  
  2162. //                                                                      
  2163. // 機能     初期化後のみ選択できるようにする                            
  2164. //                                                                      
  2165. //  引数:      CCmdUI* pCmdUI                                          
  2166. //                                                                      
  2167. //  戻り値:    なし                                                    
  2168. //                                                                      
  2169. //----------------------------------------------------------------------
  2170. // #[ CChildFrame::OnUpdateTerminate ]                                  
  2171. //                                                                      
  2172. //  Function:    User can select only after initialized.                
  2173. //                                                                      
  2174. //      Parameters:     CCmdUI* pCmdUI                                  
  2175. //                                                                      
  2176. //      Return value:   none                                            
  2177. //                                                                      
  2178. //----------------------------------------------------------------------
  2179. void CChildFrame::OnUpdateTerminate(CCmdUI* pCmdUI) 
  2180. {
  2181.     if(m_bEncode || m_bDecode)
  2182.         pCmdUI->Enable(TRUE);
  2183.     else
  2184.         pCmdUI->Enable(FALSE);
  2185. }
  2186.  
  2187.  
  2188. //----------------------------------------------------------------------
  2189. // #[ CChildFrame::OnSetFocus ]                                         
  2190. //                                                                      
  2191. // 機能     メニューバーの更新                                          
  2192. //                                                                      
  2193. //  引数:      CWnd* pOldWnd                                           
  2194. //                                                                      
  2195. //  戻り値:    なし                                                    
  2196. //                                                                      
  2197. //----------------------------------------------------------------------
  2198. // #[ CChildFrame::OnSetFocus ]                                         
  2199. //                                                                      
  2200. //  Function:    Update menu bar.                                       
  2201. //                                                                      
  2202. //      Parameters:     CWnd* pOldWnd                                   
  2203. //                                                                      
  2204. //      Return value:   none                                            
  2205. //                                                                      
  2206. //----------------------------------------------------------------------
  2207. void CChildFrame::OnSetFocus(CWnd* pOldWnd) 
  2208. {
  2209.     CMDIChildWnd::OnSetFocus(pOldWnd);
  2210.     
  2211.     CMenu   *p;
  2212.     CWnd    *pMain = AfxGetMainWnd();
  2213.     
  2214.     p = pMain->GetMenu();
  2215.  
  2216.     p->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
  2217.     p->EnableMenuItem(3,MF_BYPOSITION | MF_GRAYED);
  2218.  
  2219.     if(m_bEncode)
  2220.         p->EnableMenuItem(2,MF_BYPOSITION | MF_ENABLED);
  2221.     else if(m_bDecode)
  2222.         p->EnableMenuItem(3,MF_BYPOSITION | MF_ENABLED);
  2223.  
  2224.     pMain->DrawMenuBar();
  2225. }
  2226.