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 / Encode / VideoEncDlg.cpp < prev    next >
C/C++ Source or Header  |  2001-02-09  |  12KB  |  308 lines

  1. //======================================================================
  2. // -- VideoEncDlg.cpp --                                                
  3. //                                                                      
  4. //  MVR-D2000                                                           
  5. //                                  エンコード  サンプルプログラム      
  6. //                                  Encode      sample program          
  7. //                                                                      
  8. // Copyright (C) 1999-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. // VideoEncDlg.cpp : インプリメンテーション ファイル
  19. //
  20.  
  21. #include "stdafx.h"
  22. #include "Encode.h"
  23. #include "VideoEncDlg.h"
  24.  
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30.  
  31. extern    int    ENC_ID;
  32.  
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CVideoEncDlg ダイアログ
  35.  
  36.  
  37. CVideoEncDlg::CVideoEncDlg(CWnd* pParent /*=NULL*/)
  38.     : CDialog(CVideoEncDlg::IDD, pParent)
  39. {
  40.     //{{AFX_DATA_INIT(CVideoEncDlg)
  41.         // メモ - ClassWizard はこの位置にマッピング用のマクロを追加または削除します。
  42.     //}}AFX_DATA_INIT
  43. }
  44.  
  45.  
  46. void CVideoEncDlg::DoDataExchange(CDataExchange* pDX)
  47. {
  48.     CDialog::DoDataExchange(pDX);
  49.     //{{AFX_DATA_MAP(CVideoEncDlg)
  50.     DDX_Control(pDX, IDC_EDIT_WIDTH, m_Edit_Width);
  51.     DDX_Control(pDX, IDC_EDIT_TOP, m_Edit_Top);
  52.     DDX_Control(pDX, IDC_EDIT_LEFT, m_Edit_Left);
  53.     DDX_Control(pDX, IDC_EDIT_HEIGHT, m_Edit_Height);
  54.     DDX_Control(pDX, IDC_EDIT_BITRATE, m_Edit_Bitrate);
  55.     //}}AFX_DATA_MAP
  56. }
  57.  
  58.  
  59. BEGIN_MESSAGE_MAP(CVideoEncDlg, CDialog)
  60.     //{{AFX_MSG_MAP(CVideoEncDlg)
  61.     //}}AFX_MSG_MAP
  62. END_MESSAGE_MAP()
  63.  
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CVideoEncDlg メッセージ ハンドラ
  66.  
  67. //----------------------------------------------------------------------
  68. // #[ CVideoEncDlg::OnInitDialog ]                                      
  69. //                                                                      
  70. // 機能     ビデオエンコードパラメータの設定                            
  71. //                                                                      
  72. //  引数:      なし                                                    
  73. //                                                                      
  74. //  戻り値:    BOOL    TRUE                                            
  75. //                      FALSE                                           
  76. //                                                                      
  77. //----------------------------------------------------------------------
  78. // #[ CVideoEncDlg::OnInitDialog ]                                      
  79. //                                                                      
  80. //  Function:   Initialize video encode dialog                          
  81. //                                                                      
  82. //      Parameters:     none                                            
  83. //                                                                      
  84. //      Return value:   BOOL    TRUE                                    
  85. //                              FALSE                                   
  86. //                                                                      
  87. //----------------------------------------------------------------------
  88. BOOL CVideoEncDlg::OnInitDialog() 
  89. {
  90.     ENC_VIDEO_ENCODE_PARAMETER  enc_video_param;
  91.     ENC_RETURN  enc_return;
  92.     CString     strMessage;
  93.     char    szText[32];
  94.  
  95.     CDialog::OnInitDialog();
  96.  
  97.     // ビデオエンコードパラメータの取得
  98.     // Get video encode parameters
  99.     enc_return = ENC_Get_Video_Encode_Parameter(ENC_ID, &enc_video_param);
  100.     if(enc_return != ENC_SUCCESS)
  101.     {
  102.         strMessage.LoadString(IDC_ERROR_GET_PARAMETER);
  103.         MessageBox(strMessage);
  104.         return FALSE;
  105.     }
  106.  
  107.     // MPEG
  108.     switch(enc_video_param.V_CodingMode)
  109.     {
  110.     case ENCVEPARAM_V_CODING_MODE_MPEG1:
  111.         CheckRadioButton(IDC_RADIO_MPEG1, IDC_RADIO_MPEG2, IDC_RADIO_MPEG1);
  112.         break;
  113.     default:
  114.         CheckRadioButton(IDC_RADIO_MPEG1, IDC_RADIO_MPEG2, IDC_RADIO_MPEG2);
  115.         break;
  116.     }
  117.  
  118.     // プロファイルとレベルの設定
  119.     // Set Profile and Level
  120.     switch(enc_video_param.fProfileAndLevel)
  121.     {
  122.     case ENCVEPARAM_PROFILE_AND_LEVEL_MP_ML:
  123.         CheckRadioButton(IDC_RADIO_MPML, IDC_RADIO_SPML, IDC_RADIO_MPML);
  124.         break;
  125.     case ENCVEPARAM_PROFILE_AND_LEVEL_MP_LL:
  126.         CheckRadioButton(IDC_RADIO_MPML, IDC_RADIO_SPML, IDC_RADIO_MPLL);
  127.         break;
  128.     case ENCVEPARAM_PROFILE_AND_LEVEL_SP_ML:
  129.         CheckRadioButton(IDC_RADIO_MPML, IDC_RADIO_SPML, IDC_RADIO_SPML);
  130.         break;
  131.     default:
  132.         break;
  133.     }
  134.  
  135.     // ビデオフォーマットの設定
  136.     // Set video format
  137.     switch(enc_video_param.fConvertType)
  138.     {
  139.     case ENCVEPARAM_CONVERT_TYPE_STANDARD:
  140.         CheckRadioButton(IDC_RADIO_STANDARD, IDC_RADIO_HALFD1, IDC_RADIO_STANDARD);
  141.         break;
  142.     case ENCVEPARAM_CONVERT_TYPE_SIF:
  143.         CheckRadioButton(IDC_RADIO_STANDARD, IDC_RADIO_HALFD1, IDC_RADIO_SIF);
  144.         break;
  145.     case ENCVEPARAM_CONVERT_TYPE_HALF_D1:
  146.         CheckRadioButton(IDC_RADIO_STANDARD, IDC_RADIO_HALFD1, IDC_RADIO_HALFD1);
  147.         break;
  148.     default:
  149.         break;
  150.     }
  151.  
  152.     // CBR / VBR の設定
  153.     // CBR or VBR...
  154.     switch(enc_video_param.EncodeType)
  155.     {
  156.     case ENCVEPARAM_ENCODE_TYPE_CBR:
  157.         CheckRadioButton(IDC_RADIO_CBR, IDC_RADIO_VBR, IDC_RADIO_CBR);
  158.         break;
  159.     default:
  160.         CheckRadioButton(IDC_RADIO_CBR, IDC_RADIO_VBR, IDC_RADIO_VBR);
  161.         break;
  162.     }
  163.  
  164.     // GOP パターンの設定
  165.     // Set GOP Pattern
  166.     switch(enc_video_param.GopPattern)
  167.     {
  168.     case ENCVEPARAM_GOP_PATTERN_IFRAME:
  169.         CheckRadioButton(IDC_RADIO_IFRAME, IDC_RADIO_IBBP, IDC_RADIO_IFRAME);
  170.         break;
  171.     default:
  172.         CheckRadioButton(IDC_RADIO_IFRAME, IDC_RADIO_IBBP, IDC_RADIO_IBBP);
  173.         break;
  174.     }
  175.  
  176.     // Set Edit box...
  177.     wsprintf(szText, "%ld", enc_video_param.wImageLeft);
  178.     m_Edit_Left.SetWindowText(szText);
  179.     wsprintf(szText, "%ld", enc_video_param.wImageTop);
  180.     m_Edit_Top.SetWindowText(szText);
  181.     wsprintf(szText, "%ld", enc_video_param.wImageWidth);
  182.     m_Edit_Width.SetWindowText(szText);
  183.     wsprintf(szText, "%ld", enc_video_param.wImageHeight);
  184.     m_Edit_Height.SetWindowText(szText);
  185.     wsprintf(szText, "%ld", enc_video_param.dwBitrate);
  186.     m_Edit_Bitrate.SetWindowText(szText);
  187.  
  188.     return TRUE;  // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
  189.                   // 例外: OCX プロパティ ページの戻り値は FALSE となります
  190. }
  191.  
  192. //----------------------------------------------------------------------
  193. // #[ CVideoEncDlg::OnOK ]                                              
  194. //                                                                      
  195. // 機能     ビデオエンコードパラメータの設定を有効にする                
  196. //                                                                      
  197. //  引数:      なし                                                    
  198. //                                                                      
  199. //  戻り値:    なし                                                    
  200. //                                                                      
  201. //----------------------------------------------------------------------
  202. // #[ CVideoEncDlg::OnOK ]                                              
  203. //                                                                      
  204. //  Function:   Set video encode parameters                             
  205. //                                                                      
  206. //      Parameters:     none                                            
  207. //                                                                      
  208. //      Return value:   none                                            
  209. //                                                                      
  210. //----------------------------------------------------------------------
  211. void CVideoEncDlg::OnOK() 
  212. {
  213.     ENC_VIDEO_ENCODE_PARAMETER  enc_video_param;
  214.     ENC_RETURN  enc_return;
  215.     CString     strMessage;
  216.     char    szText[32];
  217.     int     nID;
  218.  
  219.     // ビデオエンコードパラメータの取得
  220.     // Get video encode parameters
  221.     enc_return = ENC_Get_Video_Encode_Parameter(ENC_ID, &enc_video_param);
  222.     if(enc_return != ENC_SUCCESS)
  223.     {
  224.         strMessage.LoadString(IDC_ERROR_GET_PARAMETER);
  225.         MessageBox(strMessage);
  226.         return;
  227.     }
  228.  
  229.     // MPEG
  230.     nID = GetCheckedRadioButton(IDC_RADIO_MPEG1, IDC_RADIO_MPEG2);
  231.     if(nID == IDC_RADIO_MPEG1)
  232.         enc_video_param.V_CodingMode = ENCVEPARAM_V_CODING_MODE_MPEG1;
  233.     else
  234.         enc_video_param.V_CodingMode = ENCVEPARAM_V_CODING_MODE_MPEG2;
  235.  
  236.     // プロファイルとレベルの設定
  237.     // Set Profile and Level
  238.     nID = GetCheckedRadioButton(IDC_RADIO_MPML, IDC_RADIO_SPML);
  239.     switch(nID)
  240.     {
  241.     case IDC_RADIO_MPML:
  242.         enc_video_param.fProfileAndLevel = ENCVEPARAM_PROFILE_AND_LEVEL_MP_ML;
  243.         break;
  244.     case IDC_RADIO_MPLL:
  245.         enc_video_param.fProfileAndLevel = ENCVEPARAM_PROFILE_AND_LEVEL_MP_LL;
  246.         break;
  247.     default:
  248.         enc_video_param.fProfileAndLevel = ENCVEPARAM_PROFILE_AND_LEVEL_SP_ML;
  249.         break;
  250.     }
  251.  
  252.     // ビデオフォーマットの設定
  253.     // Set video format
  254.     nID = GetCheckedRadioButton(IDC_RADIO_STANDARD, IDC_RADIO_HALFD1);
  255.     switch(nID)
  256.     {
  257.     case IDC_RADIO_STANDARD:
  258.         enc_video_param.fConvertType = ENCVEPARAM_CONVERT_TYPE_STANDARD;
  259.         break;
  260.     case IDC_RADIO_SIF:
  261.         enc_video_param.fConvertType = ENCVEPARAM_CONVERT_TYPE_SIF;
  262.         break;
  263.     default:
  264.         enc_video_param.fConvertType = ENCVEPARAM_CONVERT_TYPE_HALF_D1;
  265.         break;
  266.     }
  267.  
  268.     // CBR / VBR の設定
  269.     // CBR or VBR...
  270.     nID = GetCheckedRadioButton(IDC_RADIO_CBR, IDC_RADIO_VBR);
  271.     if(nID == IDC_RADIO_CBR)
  272.         enc_video_param.EncodeType = ENCVEPARAM_ENCODE_TYPE_CBR;
  273.     else
  274.         enc_video_param.EncodeType = ENCVEPARAM_ENCODE_TYPE_VBR;
  275.  
  276.     // GOP パターンの設定
  277.     // Set GOP pattern
  278.     nID = GetCheckedRadioButton(IDC_RADIO_IFRAME, IDC_RADIO_IBBP);
  279.     if(nID == IDC_RADIO_IFRAME)
  280.         enc_video_param.GopPattern = ENCVEPARAM_GOP_PATTERN_IFRAME;
  281.     else
  282.         enc_video_param.GopPattern = ENCVEPARAM_GOP_PATTERN_IBBP;
  283.  
  284.     // Set Edit Box...
  285.     m_Edit_Left.GetWindowText(szText,sizeof(szText));
  286.     enc_video_param.wImageLeft = atoi(szText);
  287.     m_Edit_Top.GetWindowText(szText,sizeof(szText));
  288.     enc_video_param.wImageTop = atoi(szText);
  289.     m_Edit_Width.GetWindowText(szText,sizeof(szText));
  290.     enc_video_param.wImageWidth = atoi(szText);
  291.     m_Edit_Height.GetWindowText(szText,sizeof(szText));
  292.     enc_video_param.wImageHeight = atoi(szText);
  293.     m_Edit_Bitrate.GetWindowText(szText,sizeof(szText));
  294.     enc_video_param.dwBitrate = atol(szText);
  295.  
  296.     //  ビデオエンコードパラメータの設定
  297.     //  Set video encode parameters
  298.     enc_return = ENC_Set_Video_Encode_Parameter(ENC_ID, &enc_video_param);
  299.     if(enc_return != ENC_SUCCESS)
  300.     {
  301.         strMessage.LoadString(IDC_ERROR_SET_PARAMETER);
  302.         MessageBox(strMessage);
  303.         return;
  304.     }
  305.  
  306.     CDialog::OnOK();
  307. }
  308.