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 / VideoEncExDlg.cpp < prev    next >
C/C++ Source or Header  |  2001-02-09  |  14KB  |  349 lines

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