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 >
Wrap
C/C++ Source or Header
|
2001-02-09
|
99KB
|
2,226 lines
//======================================================================
// -- ChildFrm.cpp --
//
// MVR-D2000
// マルチ サンプルプログラム
// Multi sample program
//
// Copyright (C) 2000 Canopus Co., Ltd. All rights reserved.
//======================================================================
//
// -- サンプルプログラムをご使用になる前に --
// -- Before use this sample program... --
//
// このサンプルプログラムは、カノープス製品を使うためにご使用ください。
// Please use this sample progeam to use products of canopus.
//
//======================================================================
// ChildFrm.cpp : CChildFrame クラスの動作の定義を行います。
//
#include "stdafx.h"
#include "Multi.h"
#include "ChildFrm.h"
#include "InitializeDlg.h"
#include "BoardInfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChildFrame
IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
//{{AFX_MSG_MAP(CChildFrame)
ON_COMMAND(IDM_MODE_ENCODE, OnModeEncode)
ON_UPDATE_COMMAND_UI(IDM_MODE_ENCODE, OnUpdateModeEncode)
ON_COMMAND(IDM_MODE_DECODE, OnModeDecode)
ON_UPDATE_COMMAND_UI(IDM_MODE_DECODE, OnUpdateModeDecode)
ON_COMMAND(IDM_USE_OVERLAY, OnUseOverlay)
ON_UPDATE_COMMAND_UI(IDM_USE_OVERLAY, OnUpdateUseOverlay)
ON_WM_MOVE()
ON_WM_SIZE()
ON_COMMAND(IDM_ENCODE_PS, OnEncodePs)
ON_COMMAND(IDM_ENCODE_AV, OnEncodeAv)
ON_COMMAND(IDM_ENCODE_VIDEO, OnEncodeVideo)
ON_COMMAND(IDM_ENCODE_AUDIO, OnEncodeAudio)
ON_UPDATE_COMMAND_UI(IDM_ENCODE_PS, OnUpdateEncodePs)
ON_UPDATE_COMMAND_UI(IDM_ENCODE_AV, OnUpdateEncodeAv)
ON_UPDATE_COMMAND_UI(IDM_ENCODE_VIDEO, OnUpdateEncodeVideo)
ON_UPDATE_COMMAND_UI(IDM_ENCODE_AUDIO, OnUpdateEncodeAudio)
ON_COMMAND(IDM_ENCODE_STOP, OnEncodeStop)
ON_UPDATE_COMMAND_UI(IDM_ENCODE_STOP, OnUpdateEncodeStop)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(IDM_DECODE_PLAY, OnDecodePlay)
ON_UPDATE_COMMAND_UI(IDM_DECODE_PLAY, OnUpdateDecodePlay)
ON_COMMAND(IDM_DECODE_PAUSE, OnDecodePause)
ON_UPDATE_COMMAND_UI(IDM_DECODE_PAUSE, OnUpdateDecodePause)
ON_COMMAND(IDM_DECODE_STOP, OnDecodeStop)
ON_UPDATE_COMMAND_UI(IDM_DECODE_STOP, OnUpdateDecodeStop)
ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
ON_COMMAND(IDM_DECODE_REPEAT, OnDecodeRepeat)
ON_UPDATE_COMMAND_UI(IDM_DECODE_REPEAT, OnUpdateDecodeRepeat)
ON_WM_DESTROY()
ON_COMMAND(IDM_TERMINATE, OnTerminate)
ON_COMMAND(IDM_BOARD_INFO, OnBoardInfo)
ON_COMMAND(IDM_SET_NUMBER, OnSetNumber)
ON_UPDATE_COMMAND_UI(IDM_SET_NUMBER, OnUpdateSetNumber)
ON_UPDATE_COMMAND_UI(IDM_TERMINATE, OnUpdateTerminate)
ON_WM_SETFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChildFrame クラスの構築/消滅
static UINT g_nID = 0;
CChildFrame::CChildFrame()
{
m_bEncode = FALSE;
m_bDecode = FALSE;
m_bUseOverlay = FALSE;
m_nID = g_nID++;
}
CChildFrame::~CChildFrame()
{
}
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs の設定を行って、Window クラスまたは
// スタイルを変更してください。
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CChildFrame クラスの診断
#ifdef _DEBUG
void CChildFrame::AssertValid() const
{
CMDIChildWnd::AssertValid();
}
void CChildFrame::Dump(CDumpContext& dc) const
{
CMDIChildWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CChildFrame クラスのメッセージハンドラ
//----------------------------------------------------------------------
// #[ CChildFrame::OnDestroy ]
//
// 機能 ウィンドウを破棄します
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnDestroy ]
//
// Function: Destroy window
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnDestroy()
{
CMDIChildWnd::OnDestroy();
if(m_bEncode)
{
// エンコーダの終了処理を行う
// Terminate encoder
EncodeTerminate(m_nID);
m_bEncode = FALSE;
}
if(m_bDecode)
{
// デコーダの終了処理を行う
// Terminate decoder
DecodeTerminate(m_nID);
m_bDecode = FALSE;
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnModeEncode ]
//
// 機能 エンコードの準備を行います
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnModeEncode ]
//
// Function: Initializez encode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnModeEncode()
{
if(m_bEncode)
return;
else if(m_bDecode)
{
// デコーダの終了処理を行う
// Terminate decoder
DecodeTerminate(m_nID);
m_bDecode = FALSE;
}
// エンコーダの初期化
// Initialize encoder
m_bEncode = EncodeInitialize(m_nID);
CMenu *p;
CWnd *pMain = AfxGetMainWnd();
p = pMain->GetMenu();
p->EnableMenuItem(2,MF_BYPOSITION | MF_ENABLED);
p->EnableMenuItem(3,MF_BYPOSITION | MF_GRAYED);
pMain->DrawMenuBar();
// モニター出力を開始する
// Start output monitor
ENC_Start_Monitor(m_nID);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateModeEncode ]
//
// 機能 エンコードの項目のチェックを更新します
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateModeEncode ]
//
// Function: Check the menu item
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateModeEncode(CCmdUI* pCmdUI)
{
CMenu *p;
CMenu *pSub;
CWnd *pMain = AfxGetMainWnd();
p = pMain->GetMenu();
pSub = p->GetSubMenu(1);
if(m_bEncode || m_bDecode)
pSub->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
else
pSub->EnableMenuItem(0,MF_BYPOSITION | MF_ENABLED);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnModeDecode ]
//
// 機能 デコードの準備を行います
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnModeDecode ]
//
// Function: Initialize decode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnModeDecode()
{
if(m_bEncode)
{
// エンコーダの終了処理を行う
// Terminate encode
EncodeTerminate(m_nID);
m_bEncode = FALSE;
}
else if(m_bDecode)
return;
// デコーダの初期化
// Initialize decode
m_bDecode = DecodeInitialize(m_nID);
CMenu *p;
CWnd *pMain = AfxGetMainWnd();
p = pMain->GetMenu();
p->EnableMenuItem(3,MF_BYPOSITION | MF_ENABLED);
p->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
pMain->DrawMenuBar();
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateModeDecode ]
//
// 機能 デコードの項目のチェックを更新します
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateModeDecode ]
//
// Function: Check the menu item
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateModeDecode(CCmdUI* pCmdUI)
{
CMenu *p;
CMenu *pSub;
CWnd *pMain = AfxGetMainWnd();
p = pMain->GetMenu();
pSub = p->GetSubMenu(1);
if(m_bEncode || m_bDecode)
pSub->EnableMenuItem(0,MF_BYPOSITION | MF_GRAYED);
else
pSub->EnableMenuItem(0,MF_BYPOSITION | MF_ENABLED);
}
//----------------------------------------------------------------------
// #[ CChildFrame::EncodeInitialize ]
//
// 機能 初期化を行います(エンコード)
//
// 引数: UINT nID
//
// 戻り値: BOOL TRUE; 成功
// FALSE; 失敗
//
//----------------------------------------------------------------------
// #[ CChildFrame::EncodeInitialize ]
//
// Function: Initialize (Encode mode)
//
// Parameters: UINT nID
//
// Return value: BOOL TRUE; succeed
// FALSE; fail
//
//----------------------------------------------------------------------
BOOL CChildFrame::EncodeInitialize(UINT nID)
{
ENC_RETURN enc_return;
CString strText;
enc_return = ENC_Can_Initialize(nID);
if(enc_return != ENC_SUCCESS)
return FALSE;
enc_return = ENC_Initialize(nID);
if(enc_return == ENC_SUCCESS)
{
// コールバックの設定
// Set CallbackProc
ENC_Set_Callback(nID, EncStatusProc, ErrorProc, TmapProc, NULL, NULL);
return TRUE;
}
else
{
strText.LoadString(IDS_ERROR_INITIALIZE);
AfxMessageBox(strText);
return FALSE;
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::EncodeTerminate ]
//
// 機能 終了処理を行います(エンコード)
//
// 引数: UINT nID
//
// 戻り値: BOOL TRUE; 成功
// FALSE; 失敗
//
//----------------------------------------------------------------------
// #[ CChildFrame::EncodeTerminate]
//
// Function: Terminate (Encode mode)
//
// Parameters: UINT nID
//
// Return value: BOOL TRUE; succeed
// FALSE; fail
//
//----------------------------------------------------------------------
void CChildFrame::EncodeTerminate(UINT nID)
{
if(m_bUseOverlay)
{
ENC_Destroy_Overlay_Window(nID);
m_bUseOverlay = FALSE;
}
// モニター出力を止める
// Stop output monitor
ENC_Stop_Monitor(nID);
ENC_Terminate(nID);
}
//----------------------------------------------------------------------
// #[ CChildFrame::DecodeInitialize ]
//
// 機能 初期化を行います(デコード)
//
// 引数: UINT nID
//
// 戻り値: BOOL TRUE; 成功
// FALSE; 失敗
//
//----------------------------------------------------------------------
// #[ CChildFrame::DecodeInitialize ]
//
// Function: Initialize (Decode mode)
//
// Parameters: UINT nID
//
// Return value: BOOL TRUE; succeed
// FALSE; fail
//
//----------------------------------------------------------------------
BOOL CChildFrame::DecodeInitialize(UINT nID)
{
DEC_RETURN dec_return;
CString strText;
dec_return = DEC_Can_Initialize(nID);
if(dec_return != DEC_SUCCESS)
return FALSE;
dec_return = DEC_Initialize(nID);
if(dec_return == DEC_SUCCESS)
{
// コールバックの設定
// Set CallbackProc
DEC_Set_Callback(m_nID, DecStatusProc, ErrorProc);
// モニター出力を開始する
// Start output monitor
DEC_Start_Monitor(m_nID);
return TRUE;
}
else
{
strText.LoadString(IDS_ERROR_INITIALIZE);
AfxMessageBox(strText);
return FALSE;
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::DecodeTerminate ]
//
// 機能 終了処理を行います(デコード)
//
// 引数: UINT nID
//
// 戻り値: BOOL TRUE; 成功
// FALSE; 失敗
//
//----------------------------------------------------------------------
// #[ CChildFrame::DecodeTerminate]
//
// Function: Terminate (Decode mode)
//
// Parameters: UINT nID
//
// Return value: BOOL TRUE; succeed
// FALSE; fail
//
//----------------------------------------------------------------------
void CChildFrame::DecodeTerminate(UINT nID)
{
if(m_bUseOverlay)
{
DEC_Destroy_Overlay_Window(nID);
m_bUseOverlay = FALSE;
}
// モニター出力を止める
// Stop output monitor
DEC_Stop_Monitor(nID);
DEC_Terminate(nID);
}
//----------------------------------------------------------------------
// #[ CChildFrame::AutoDetect ]
//
// 機能 入力ソースの自動検出
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::AutoDetect ]
//
// Function: Detect input source
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::AutoDetect()
{
ENC_RETURN enc_return;
ENC_VIDEO_PARAMETER enc_video_param;
int nInputSource;
CString strMessage;
// 現在の設定値を取得する
// Get video parameter
ENC_Get_Video_Parameter(m_nID, &enc_video_param);
enc_return = ENC_Detect_Video_Input_Source(m_nID, &nInputSource);
if(enc_return == ENC_SUCCESS)
{
// 入力ソースを設定する
// Set input source
enc_video_param.fInputSource = nInputSource;
}
// 新しい値を設定する
// Set video parameters
ENC_Set_Video_Parameter(m_nID, &enc_video_param);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodePs ]
//
// 機能 エンコード(プログラムストリーム)
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodePs ]
//
// Function: Program stream encode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnEncodePs()
{
ENC_RETURN enc_return;
CString strMessage;
CString strFileName;
char szFile[MAX_PATH];
char szFilter[] = {"Mpeg2 Program Stream(*,m2p)|*.m2p|Mpeg1 System Stream(*.mpg)|*.mpg||"};
// ダイアログの設定
// Initialize dialog
CFileDialog dlg(FALSE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
// ファイル名の取得
// Get file name
enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_PS, szFile);
if(enc_return == ENC_SUCCESS)
dlg.m_ofn.lpstrFile = szFile;
if(dlg.DoModal() == IDOK)
{
strFileName = dlg.GetPathName();
lstrcpy(szFile, strFileName);
SetWindowText(szFile);
// ファイル名の取得
// Get file name
enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_PS, szFile);
if(enc_return == ENC_SUCCESS)
{
enc_return = ENC_Init_Movie(m_nID);
if(enc_return == ENC_SUCCESS)
{
strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
MessageBox(strMessage);
enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_PS);
if(enc_return != ENC_SUCCESS)
{
strMessage.LoadString(IDC_ERROR_START_CAPTURE);
MessageBox(strMessage);
return;
}
}
}
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeAv ]
//
// 機能 エンコード(オーディオ+ビデオ)
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeAv ]
//
// Function: Audio and video encode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnEncodeAv()
{
ENC_RETURN enc_return;
CString strMessage;
CString strFileName;
char szFile[MAX_PATH];
char szVideoFilter[] = {"Mpeg2 Video(*,m2v)|*.m2v|Mpeg1 Video(*.mpv)|*.mpv||"};
char szAudioFilter[] = {"Mpeg2 Audio(*,m2a)|*.m2a|Mpeg1 Audio(*.mpa)|*.mpa||"};
char szVideoExt[] = {"m2v"};
char szAudioExt[] = {"m2a"};
// ダイアログの設定
// Initialize dialog
CFileDialog vdlg(FALSE, szVideoExt, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szVideoFilter);
// ファイル名の取得
// Get video file name
enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
if(enc_return == ENC_SUCCESS)
vdlg.m_ofn.lpstrFile = szFile;
if(vdlg.DoModal() == IDOK)
{
strFileName = vdlg.GetPathName();
lstrcpy(szFile, strFileName);
SetWindowText(szFile);
// ファイル名を設定する
// Set video encode file name
enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
}
else
return;
CFileDialog adlg(FALSE, szAudioExt, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szAudioFilter);
// ファイル名の取得
// Get file name
enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
if(enc_return == ENC_SUCCESS)
adlg.m_ofn.lpstrFile = szFile;
if(adlg.DoModal() == IDOK)
{
// ファイル名を設定する
// Set audio encode file name
enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
enc_return = ENC_Init_Movie(m_nID);
if(enc_return == ENC_SUCCESS)
{
strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
MessageBox(strMessage);
enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_AUDIO | ENC_RECORD_VIDEO);
if(enc_return != ENC_SUCCESS)
{
strMessage.LoadString(IDC_ERROR_START_CAPTURE);
MessageBox(strMessage);
return;
}
}
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeVideo ]
//
// 機能 エンコード(ビデオ)
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeVideo ]
//
// Function: Video encode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnEncodeVideo()
{
ENC_RETURN enc_return;
CString strMessage;
CString strFileName;
char szFile[MAX_PATH];
char szFilter[] = {"Mpeg2 Video(*,m2v)|*.m2v|Mpeg1 Video(*.mpv)|*.mpv||"};
// ダイアログの設定
// Initialize dialog
CFileDialog dlg(FALSE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
// ファイル名の取得
// Get file name
enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
if(enc_return == ENC_SUCCESS)
dlg.m_ofn.lpstrFile = szFile;
if(dlg.DoModal() == IDOK)
{
strFileName = dlg.GetPathName();
lstrcpy(szFile, strFileName);
SetWindowText(szFile);
// ファイル名を設定する
// Set audio encode file name
enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_VIDEO, szFile);
if(enc_return == ENC_SUCCESS)
{
enc_return = ENC_Init_Movie(m_nID);
if(enc_return == ENC_SUCCESS)
{
strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
MessageBox(strMessage);
enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_VIDEO);
if(enc_return != ENC_SUCCESS)
{
strMessage.LoadString(IDC_ERROR_START_CAPTURE);
MessageBox(strMessage);
return;
}
}
}
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeAudio ]
//
// 機能 エンコード(オーディオ)
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeAudio ]
//
// Function: Audio encode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnEncodeAudio()
{
ENC_RETURN enc_return;
CString strMessage;
CString strFileName;
char szFile[MAX_PATH];
char szFilter[] = {"Mpeg2 Audio(*,m2a)|*.m2a|Mpeg1 Audio(*.mpa)|*.mpa||"};
// ダイアログの設定
// Initialize dialog
CFileDialog dlg(FALSE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
// ファイル名の取得
// Get file name
enc_return = ENC_Get_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
if(enc_return == ENC_SUCCESS)
dlg.m_ofn.lpstrFile = szFile;
if(dlg.DoModal() == IDOK)
{
strFileName = dlg.GetPathName();
lstrcpy(szFile, strFileName);
SetWindowText(szFile);
// ファイル名を設定する
// Set audio encode file name
enc_return = ENC_Set_Movie_File(m_nID, ENC_RECORD_AUDIO, szFile);
if(enc_return == ENC_SUCCESS)
{
enc_return = ENC_Init_Movie(m_nID);
if(enc_return == ENC_SUCCESS)
{
strMessage.LoadString(IDC_MESSAGE_START_CAPTURE);
MessageBox(strMessage);
enc_return = ENC_Record_Movie(m_nID, ENC_RECORD_AUDIO);
if(enc_return != ENC_SUCCESS)
{
strMessage.LoadString(IDC_ERROR_START_CAPTURE);
MessageBox(strMessage);
return;
}
}
}
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeStop ]
//
// 機能 エンコードを停止する
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnEncodeStop ]
//
// Function: Stop the encode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnEncodeStop()
{
ENC_RETURN enc_return;
CString strMessage;
enc_return = ENC_Stop(m_nID);
if(enc_return != ENC_SUCCESS)
{
strMessage.LoadString(IDC_ERROR_STOP_CAPTURE);
MessageBox(strMessage);
return;
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodePs ]
//
// 機能 エンコード中は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodePs ]
//
// Function: If encoder is working, user cannot select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateEncodePs(CCmdUI* pCmdUI)
{
ENC_STATUS enc_status;
if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
{
pCmdUI->Enable(FALSE);
return;
}
ENC_Get_Status(m_nID, &enc_status);
pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeAv ]
//
// 機能 エンコード中は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeAv ]
//
// Function: If encoder is working, user cannot select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateEncodeAv(CCmdUI* pCmdUI)
{
ENC_STATUS enc_status;
if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
{
pCmdUI->Enable(FALSE);
return;
}
ENC_Get_Status(m_nID, &enc_status);
pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeVideo ]
//
// 機能 エンコード中は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeVideo ]
//
// Function: If encoder is working, user cannot select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateEncodeVideo(CCmdUI* pCmdUI)
{
ENC_STATUS enc_status;
if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
{
pCmdUI->Enable(FALSE);
return;
}
ENC_Get_Status(m_nID, &enc_status);
pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeAudio ]
//
// 機能 エンコード中は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeAudio ]
//
// Function: If encoder is working, user cannot select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateEncodeAudio(CCmdUI* pCmdUI)
{
ENC_STATUS enc_status;
if(ENC_Can_Record(m_nID) != ENC_SUCCESS)
{
pCmdUI->Enable(FALSE);
return;
}
ENC_Get_Status(m_nID, &enc_status);
pCmdUI->Enable(enc_status == ENC_STATUS_STOP ? TRUE : FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeStop ]
//
// 機能 エンコード中以外は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateEncodeStop ]
//
// Function: If encoder is working, user can select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateEncodeStop(CCmdUI* pCmdUI)
{
ENC_STATUS enc_status;
ENC_Get_Status(m_nID, &enc_status);
pCmdUI->Enable(enc_status == ENC_STATUS_MOVIE ? TRUE : FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnFileOpen ]
//
// 機能 ファイルを開く
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnFileOpen ]
//
// Function: Open a file
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnFileOpen()
{
CFileDialog dlg(TRUE, NULL, NULL,
OFN_HIDEREADONLY |
OFN_FILEMUSTEXIST |
OFN_PATHMUSTEXIST,
NULL, this);
DEC_RETURN dec_return;
DEC_TYPE dec_type;
CString strMessage;
CString strFile;
CString szType;
char szText[MAX_PATH];
char szFile[MAX_PATH];
// ファイル名の取得
// Get file name
dec_return = DEC_Get_Movie_File(m_nID, szFile);
if(dec_return == DEC_SUCCESS)
dlg.m_ofn.lpstrFile = szFile;
// ファイルを開く
// Open file dialog
if(dlg.DoModal() == IDOK)
{
strFile = dlg.GetFileName();
lstrcpy(szFile, strFile);
dec_return = DEC_Set_Movie_File(m_nID, szFile);
if(dec_return != DEC_SUCCESS)
{
strMessage.LoadString(IDS_ERROR_OPEN_FILE);
MessageBox(strMessage);
return;
}
dec_return = DEC_Get_File_Type(m_nID, szFile, &dec_type);
if(dec_return == DEC_SUCCESS)
{
switch(dec_type)
{
case DEC_TYPE_MPEG1_AUDIO:
szType = "MPEG1 Audio";
break;
case DEC_TYPE_MPEG1_VIDEO:
szType = "MPEG1 Video";
break;
case DEC_TYPE_MPEG1_SYSTEM_STREAM:
szType = "MPEG1 System stream";
break;
case DEC_TYPE_MPEG2_AUDIO:
szType = "MPEG2 Audio";
break;
case DEC_TYPE_MPEG2_VIDEO:
szType = "MPEG2 Video";
break;
case DEC_TYPE_MPEG2_PROGRAM_STREAM:
szType = "MPEG2 Program Stream";
break;
default:
szType = "unknown";
break;
}
wsprintf(szText, "[%s] : %s", szType, szFile);
}
else
{
wsprintf(szText, "%s", szFile);
}
SetWindowText(szText);
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateFileOpen ]
//
// 機能 デコード以外は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateFileOpen ]
//
// Function: If you select decode mode, you can select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateFileOpen(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bDecode);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodePlay ]
//
// 機能 デコードを開始します
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodePlay ]
//
// Function: Decode starts
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnDecodePlay()
{
DEC_STATUS dec_status;
CString strMessage;
// デコード開始
// Start Decode
DEC_Get_Status(m_nID, &dec_status);
if(dec_status == DEC_STATUS_PAUSE)
{
// 一時停止解除
// Resume
DEC_Resume(m_nID);
}
else if(dec_status == DEC_STATUS_STOP)
{
// 再生
// Play
DEC_Play(m_nID);
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodePlay ]
//
// 機能 ファイルが選択されていない場合や
// エンコード中は選択できないようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodePlay ]
//
// Function: User can't select item when a file is not selected,
// or when it is decoding.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateDecodePlay(CCmdUI* pCmdUI)
{
DEC_RETURN dec_return;
DEC_STATUS dec_status;
DWORD dwTime;
// 停止状態か一時停止状態でなければ選択できないようにする
// If decoder is stopped or paused, user can select the item.
dec_return = DEC_Get_Status(m_nID, &dec_status);
if(dec_return == DEC_SUCCESS)
pCmdUI->Enable(TRUE);
else
{
pCmdUI->Enable(FALSE);
return;
}
if(dec_status == DEC_STATUS_STOP || dec_status == DEC_STATUS_PAUSE)
pCmdUI->Enable(TRUE);
else
{
pCmdUI->Enable(FALSE);
return;
}
dec_return = DEC_Get_Playback_Time(m_nID, &dwTime);
if(dec_return == DEC_SUCCESS && dwTime != 0)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodePause ]
//
// 機能 デコードを一時停止します
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodePause ]
//
// Function: Pause decode
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnDecodePause()
{
DEC_RETURN dec_return;
CString strMessage;
dec_return = DEC_Pause(m_nID);
if(dec_return != DEC_SUCCESS)
{
strMessage.LoadString(IDS_ERROR_PAUSE_DECODE);
MessageBox(strMessage);
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodePause ]
//
// 機能 再生中のみ選択できるようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodePause ]
//
// Function: If decoder is playing, user can select the item.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: nonr
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateDecodePause(CCmdUI* pCmdUI)
{
DEC_STATUS dec_status;
DEC_Get_Status(m_nID, &dec_status);
if(dec_status == DEC_STATUS_PLAY)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodeStop ]
//
// 機能 デコードを停止します
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodeStop ]
//
// Function: Decode stops
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnDecodeStop()
{
DEC_RETURN dec_return;
CString strMessage;
dec_return = DEC_Stop(m_nID);
if(dec_return != DEC_SUCCESS)
{
strMessage.LoadString(IDS_ERROR_STOP_DECODE);
MessageBox(strMessage);
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodeStop ]
//
// 機能 再生、一時停止中のみ選択できるようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodeStop ]
//
// Function: User can select the item only during playback or pause.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateDecodeStop(CCmdUI* pCmdUI)
{
DEC_STATUS dec_status;
DEC_Get_Status(m_nID, &dec_status);
if(dec_status == DEC_STATUS_PLAY || dec_status == DEC_STATUS_PAUSE)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodeRepeat ]
//
// 機能 リピート
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnDecodeRepeat ]
//
// Function: Repeat
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnDecodeRepeat()
{
DEC_RETURN dec_return;
UINT nRepeat;
dec_return = DEC_Get_Repeat(m_nID, &nRepeat);
if(dec_return == DEC_SUCCESS)
DEC_Set_Repeat(m_nID, !nRepeat);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodeRepeat ]
//
// 機能 リピートにチェックマークをつける
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateDecodeRepeat ]
//
// Function: Check the item
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateDecodeRepeat(CCmdUI* pCmdUI)
{
UINT nRepeat;
if(DEC_Can_Playback(m_nID) != ENC_SUCCESS)
{
pCmdUI->Enable(FALSE);
return;
}
pCmdUI->SetCheck(FALSE);
if(DEC_Get_Repeat(m_nID, &nRepeat) != DEC_SUCCESS)
{
pCmdUI->Enable(FALSE);
return;
}
else
pCmdUI->Enable(TRUE);
pCmdUI->SetCheck(nRepeat);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUseOverlay ]
//
// 機能 オーバーレイウィンドウを作成・破棄する
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUseOverlay ]
//
// Function: Create or destroy an overlay window
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUseOverlay()
{
HWND hWndOverlay;
RECT rc;
UINT fMonitor;
GetClientRect(&rc);
if(m_bDecode)
{
// モニターの状態の取得
// Get monitor state
if (DEC_Get_Monitor_Status(m_nID, &fMonitor) == DEC_SUCCESS)
{
if (fMonitor)
{
// モニター出力を止める
// Stop output monitor
DEC_Stop_Monitor(m_nID);
}
}
if(m_bUseOverlay == FALSE)
{
if(DEC_Create_Overlay_Window( m_nID, m_hWnd, &hWndOverlay,
rc.left, rc.top, rc.right, rc.bottom) == DEC_SUCCESS)
{
DEC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
m_bUseOverlay = TRUE;
}
}
else
{
DEC_Destroy_Overlay_Window(m_nID);
m_bUseOverlay = FALSE;
}
if(fMonitor)
{
// モニター出力を開始する
// Start output monitor
DEC_Start_Monitor(m_nID);
}
}
else if(m_bEncode)
{
// モニターの状態の取得
// Get monitor state
if (ENC_Get_Monitor_Status(m_nID, &fMonitor) == ENC_SUCCESS)
{
if (fMonitor)
{
// モニター出力を止める
// Stop output monitor
ENC_Stop_Monitor(m_nID);
}
}
if(m_bUseOverlay == FALSE)
{
if(ENC_Create_Overlay_Window( m_nID, m_hWnd, &hWndOverlay,
rc.left, rc.top, rc.right, rc.bottom) == ENC_SUCCESS)
{
AutoDetect();
ENC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
m_bUseOverlay = TRUE;
}
}
else
{
ENC_Destroy_Overlay_Window(m_nID);
m_bUseOverlay = FALSE;
}
if(fMonitor)
{
// モニター出力を開始する
// Start output monitor
ENC_Start_Monitor(m_nID);
}
}
else
m_bUseOverlay = FALSE;
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateUseOverlay ]
//
// 機能 チェックマークをつける
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateUseOverlay ]
//
// Function: Check the item
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateUseOverlay(CCmdUI* pCmdUI)
{
RECT rc;
DEC_STATUS dec_status;
ENC_STATUS enc_status;
pCmdUI->SetCheck(m_bUseOverlay);
if(m_bDecode)
{
DEC_Get_Status(m_nID, &dec_status);
if(dec_status == DEC_STATUS_STOP)
pCmdUI->Enable(TRUE);
else
{
pCmdUI->Enable(FALSE);
return;
}
}
else
{
ENC_Get_Status(m_nID, &enc_status);
if(enc_status == ENC_STATUS_STOP)
pCmdUI->Enable(TRUE);
else
{
pCmdUI->Enable(FALSE);
return;
}
}
if(!m_bUseOverlay)
{
GetClientRect(&rc);
if(m_bDecode)
{
if(DEC_Can_Overlay_Window(m_nID, NULL, rc.right - rc.left, rc.bottom - rc.top) != DEC_SUCCESS)
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
else
{
if(ENC_Can_Overlay_Window(m_nID, NULL, rc.right - rc.left, rc.bottom - rc.top) != DEC_SUCCESS)
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnMove ]
//
// 機能 オーバーレイウィンドウの位置の移動
//
// 引数: int x
// int y
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnMove ]
//
// Function: Move the overlay window.
//
// Parameters: int x
// int y
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnMove(int x, int y)
{
CMDIChildWnd::OnMove(x, y);
RECT rc;
GetClientRect(&rc);
ClientToScreen(&rc);
if(m_bUseOverlay)
{
if(m_bDecode)
DEC_Move_Overlay_Window(m_nID, rc.left, rc.top);
else
ENC_Move_Overlay_Window(m_nID, rc.left, rc.top);
}
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnSize ]
//
// 機能 オーバーレイウィンドウのサイズ変更
//
// 引数: UINT nType
// int cx
// int cy
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnSize ]
//
// Function: Resize the overlay window.
//
// Parameters: UINT nType
// int cx
// int cy
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);
RECT rc;
GetClientRect(&rc);
if(m_bUseOverlay)
{
if(m_bDecode)
DEC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
else
ENC_Resize_Overlay_Window(m_nID, rc.right - rc.left, rc.bottom - rc.top);
}
}
//----------------------------------------------------------------------
// #[ ErrorProc ]
//
// 機能 コールバック関数(エラー)
//
// 引数: UINT dec_id
// ULONG error
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ ErrorProc ]
//
// Function: Callback function(error)
//
// Parameters: UINT dec_id
// ULONG error
//
// Return value: none
//
//----------------------------------------------------------------------
void CALLBACK ErrorProc(UINT dec_id, ULONG error)
{
CString strText;
switch (error)
{
case MVR_ERROR_SUCCESS:
strText = "MVR_ERROR_SUCCESS";
break;
case MVR_ERROR_PENDING:
strText = "MVR_ERROR_PENDING";
break;
case MVR_ERROR_SYSTEM_ERROR:
strText = "MVR_ERROR_SYSTEM_ERROR";
break;
case MVR_ERROR_NOT_PENDING:
strText = "MVR_ERROR_NOT_PENDING";
break;
case MVR_ERROR_INVALID_ASYNCOP:
strText = "MVR_ERROR_INVALID_ASYNCOP";
break;
case MVR_ERROR_UNSUPPORTED:
strText = "MVR_ERROR_UNSUPPORTED";
break;
case MVR_ERROR_INVALID_TYPE:
strText = "MVR_ERROR_INVALID_TYPE";
break;
case MVR_ERROR_INVALID_OPTION:
strText = "MVR_ERROR_INVALID_OPTION";
break;
case MVR_ERROR_INVALID_ADDRESS:
strText = "MVR_ERROR_INVALID_ADDRESS";
break;
case MVR_ERROR_LIMIT_EXCEEDED:
strText = "MVR_ERROR_LIMIT_EXCEEDED";
break;
case MVR_ERROR_INVALID_HANDLE:
strText = "MVR_ERROR_INVALID_HANDLE";
break;
case MVR_ERROR_INVALID_STREAM:
strText = "MVR_ERROR_INVALID_STREAM";
break;
case MVR_ERROR_INVALID_BUFFER:
strText = "MVR_ERROR_INVALID_BUFFER";
break;
case MVR_ERROR_INVALID_MESSAGE:
strText = "MVR_ERROR_INVALID_MESSAGE";
break;
case MVR_ERROR_CANCELED:
strText = "MVR_ERROR_CANCELED";
break;
case MVR_ERROR_BUSY:
strText = "MVR_ERROR_BUSY";
break;
case MVR_ERROR_BUFFER_ERROR:
strText = "MVR_ERROR_BUFFER_ERROR";
break;
case MVR_ERROR_MESSAGE_ERROR:
strText = "MVR_ERROR_MESSAGE_ERROR";
break;
case MVR_ERROR_BAD_PARAM:
strText = "MVR_ERROR_BAD_PARAM";
break;
case MVR_ERROR_HARDWARE_ERROR:
strText = "MVR_ERROR_HARDWARE_ERROR";
break;
case MVR_ERROR_ALLOC_FAILURE:
strText = "MVR_ERROR_ALLOC_FAILURE";
break;
case MVR_ERROR_INVALID_EVENT:
strText = "MVR_ERROR_INVALID_EVENT";
break;
case MVR_ERROR_INVALID_STATE:
strText = "MVR_ERROR_INVALID_STATE";
break;
case MVR_ERROR_CURRENT_STATE:
strText = "MVR_ERROR_CURRENT_STATE";
break;
case MVR_ERROR_INVALID_FRAME_TYPE:
strText = "MVR_ERROR_INVALID_FRAME_TYPE";
break;
case MVR_ERROR_INSUFFICIENT_BUFFERS:
strText = "MVR_ERROR_INSUFFICIENT_BUFFERS";
break;
case MVR_ERROR_TIMEOUT:
strText = "MVR_ERROR_TIMEOUT";
break;
case MVR_ERROR_INVALID_CODEC_STATE:
strText = "MVR_ERROR_INVALID_CODEC_STATE";
break;
case MVR_ERROR_INVALID_FORMAT:
strText = "MVR_ERROR_INVALID_FORMAT";
break;
case MVR_ERROR_INVALID_OPERATION:
strText = "MVR_ERROR_INVALID_OPERATION";
break;
case MVR_ERROR_OVERFLOW:
strText = "MVR_ERROR_OVERFLOW";
break;
case MVR_ERROR_UNDERFLOW:
strText = "MVR_ERROR_UNDERFLOW";
break;
case MVR_ERROR_SESSION_CANCELED:
strText = "MVR_ERROR_SESSION_CANCELED";
break;
case MVR_ERROR_UCODE_NOT_FOUND:
strText = "MVR_ERROR_UCODE_NOT_FOUND";
break;
case MVR_ERROR_AUDIO_UCODE_NOT_FOUND:
strText = "MVR_ERROR_AUDIO_UCODE_NOT_FOUND";
break;
case MVR_ERROR_PARSE_ERROR:
strText = "MVR_ERROR_PARSE_ERROR";
break;
case MVR_ERROR_END_OF_STREAM:
strText = "MVR_ERROR_END_OF_STREAM";
break;
case MVR_ERROR_DISK_FULL:
strText = "MVR_ERROR_DISK_FULL";
break;
case MVR_ERROR_STREAMS_CLOSED:
strText = "MVR_ERROR_STREAMS_CLOSED";
break;
case MVR_ERROR_INTERNAL_ERROR:
strText = "MVR_ERROR_INTERNAL_ERROR";
break;
case MVR_ERROR_INVALID_SHORT_BUFFER:
strText = "MVR_ERROR_INVALID_SHORT_BUFFER";
break;
case MVR_ERROR_EVENT_DATA_OVERRUN:
strText = "MVR_ERROR_EVENT_DATA_OVERRUN";
break;
case MVR_ERROR_EVENT_DATA_UNDERRUN:
strText = "MVR_ERROR_EVENT_DATA_UNDERRUN";
break;
case MVR_ERROR_EVENT_DEVICE_ERROR:
strText = "MVR_ERROR_EVENT_DEVICE_ERROR";
break;
case MVR_ERROR_EVENT_LOSS_OF_VIDEO:
strText = "MVR_ERROR_EVENT_LOSS_OF_VIDEO";
break;
case MVR_ERROR_EVENT_EVENT_LOSS:
strText = "MVR_ERROR_EVENT_EVENT_LOSS";
break;
case MVR_ERROR_EVENT_UNRECOVERABLE_ERROR:
strText = "MVR_ERROR_EVENT_UNRECOVERABLE_ERROR";
break;
default:
strText = "????";
break;
}
AfxMessageBox(strText);
}
//----------------------------------------------------------------------
// #[ DecStatusProc ]
//
// 機能 コールバック関数
//
// 引数: UINT dec_id
// DEC_STATUS_NOTIFY dec_state
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ DecStatusProc ]
//
// Function: Callback function
//
// Parameters: UINT dec_id
// DEC_STATUS_NOTIFY dec_state
//
// Return value: none
//
//----------------------------------------------------------------------
void CALLBACK DecStatusProc(UINT dec_id, DEC_STATUS_NOTIFY dec_state)
{
DEC_TYPE dec_type;
CString strType;
CString strText;
if(dec_state == DEC_NOTIFY_STOP)
{
DEC_Get_Type(dec_id, &dec_type);
switch(dec_type)
{
case DEC_TYPE_MPEG1_AUDIO:
strType = "MPEG1 Audio";
break;
case DEC_TYPE_MPEG1_VIDEO:
strType = "MPEG1 Video";
break;
case DEC_TYPE_MPEG1_SYSTEM_STREAM:
strType = "MPEG1 System Stream";
break;
case DEC_TYPE_MPEG2_AUDIO:
strType = "MPEG2 Audio";
break;
case DEC_TYPE_MPEG2_VIDEO:
strType = "MPEG2 Video";
break;
case DEC_TYPE_MPEG2_PROGRAM_STREAM:
strType = "MPEG2 Program Stream";
break;
default:
strType = "unknown";
break;
}
strText.LoadString(IDS_MESSAGE_STOP_DECODE);
::MessageBox(AfxGetMainWnd()->GetSafeHwnd(), strText, strType, MB_OK);
}
}
//----------------------------------------------------------------------
// #[ EncStatusProc ]
//
// 機能 コールバック関数
//
// 引数: UINT enc_id
// ENC_STATUS_NOTIFY enc_state
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ EncStatusProc ]
//
// Function: Callback function
//
// Paraneters: UINT enc_id
// ENC_STATUS_NOTIFY enc_state
//
// Return value: none
//
//----------------------------------------------------------------------
void CALLBACK EncStatusProc(UINT enc_id, ENC_STATUS_NOTIFY enc_state)
{
UINT count;
double time;
char szText[MAX_PATH];
if(enc_state == ENC_NOTIFY_STOP)
{
ENC_Get_Frame_Count(enc_id, &count);
ENC_Get_Time(enc_id, &time);
sprintf(szText,"Encode Frame : %ld\nEncode Time : %.2f[sec]", count, time);
AfxMessageBox(szText);
}
}
//----------------------------------------------------------------------
// #[ TmapProc ]
//
// 機能 コールバック関数
//
// 引数: UINT enc_id
// ENC_VOBU_ENT_INFO *tmap
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ TmapProc ]
//
// Function: Callback function
//
// Parameters: UINT enc_id
// ENC_VOBU_ENT_INFO *tmap
//
// Return value: none
//
//----------------------------------------------------------------------
void CALLBACK TmapProc(UINT enc_id, ENC_VOBU_ENT_INFO *tmap, UINT)
{
char szText[256];
TRACE("TmapProc (ID = %d)\n", enc_id);
wsprintf(szText, "VOBU size = %d, 1st reference picture = %d, playback = %d",
tmap->Vobu_Sz, tmap->Fstref_Sz, tmap->Vobu_Pb_Tm);
::SetWindowText(AfxGetMainWnd()->GetSafeHwnd(), szText);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnTerminate ]
//
// 機能 エンコーダ・デコーダの破棄
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnTerminate ]
//
// Function: Terminate decoder(encoder).
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnTerminate()
{
if(m_bEncode)
{
// エンコーダの終了処理を行う
EncodeTerminate(m_nID);
m_bEncode = FALSE;
}
else if(m_bDecode)
{
// デコーダの終了処理を行う
DecodeTerminate(m_nID);
m_bDecode = FALSE;
}
CMenu *p;
CWnd *pMain = AfxGetMainWnd();
p = pMain->GetMenu();
p->EnableMenuItem(3,MF_BYPOSITION | MF_GRAYED);
p->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
pMain->DrawMenuBar();
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnSetNumber ]
//
// 機能 ボード番号の設定
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnSetNumber ]
//
// Function: Set board number.
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnSetNumber()
{
CInitializeDlg dlg;
DEC_CONFIG config;
dlg.m_edit_ID = 0;
config.CodecNumber = 0;
DEC_Get_Codec_Config(m_nID, &config);
if(dlg.DoModal() == IDOK)
config.CodecNumber = (unsigned)dlg.m_edit_ID;
else
return;
if((unsigned)dlg.m_edit_ID != 0)
{
DEC_Get_Codec_Config(m_nID, &config);
if(config.CurrentUtilization == TRUE)
return;
}
// 使用するボード番号を指定する
// Select card number
DEC_Set_Codec_Number(m_nID, (unsigned)dlg.m_edit_ID);
ENC_Set_Codec_Number(m_nID, (unsigned)dlg.m_edit_ID);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnBoardInfo ]
//
// 機能 ボードの情報
//
// 引数: なし
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnBoardInfo ]
//
// Function: Borad info.
//
// Parameters: none
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnBoardInfo()
{
CBoardInfoDlg dlg;
dlg.DoModal();
return;
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateSetNumber ]
//
// 機能 初期化前のみ選択できるようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateSetNumber ]
//
// Function: User can select only before initialized.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateSetNumber(CCmdUI* pCmdUI)
{
if(m_bEncode || m_bDecode)
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateTerminate ]
//
// 機能 初期化後のみ選択できるようにする
//
// 引数: CCmdUI* pCmdUI
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnUpdateTerminate ]
//
// Function: User can select only after initialized.
//
// Parameters: CCmdUI* pCmdUI
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnUpdateTerminate(CCmdUI* pCmdUI)
{
if(m_bEncode || m_bDecode)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//----------------------------------------------------------------------
// #[ CChildFrame::OnSetFocus ]
//
// 機能 メニューバーの更新
//
// 引数: CWnd* pOldWnd
//
// 戻り値: なし
//
//----------------------------------------------------------------------
// #[ CChildFrame::OnSetFocus ]
//
// Function: Update menu bar.
//
// Parameters: CWnd* pOldWnd
//
// Return value: none
//
//----------------------------------------------------------------------
void CChildFrame::OnSetFocus(CWnd* pOldWnd)
{
CMDIChildWnd::OnSetFocus(pOldWnd);
CMenu *p;
CWnd *pMain = AfxGetMainWnd();
p = pMain->GetMenu();
p->EnableMenuItem(2,MF_BYPOSITION | MF_GRAYED);
p->EnableMenuItem(3,MF_BYPOSITION | MF_GRAYED);
if(m_bEncode)
p->EnableMenuItem(2,MF_BYPOSITION | MF_ENABLED);
else if(m_bDecode)
p->EnableMenuItem(3,MF_BYPOSITION | MF_ENABLED);
pMain->DrawMenuBar();
}