www.pudn.com > DVDUpdate.rar > DVDUpdateView.cpp
// DVDUpdateView.cpp : implementation of the CDVDUpdateView class
//
#include "stdafx.h"
#include "DVDUpdate.h"
#include "malloc.h"
#include "PackUpdate.h"
#include "DVDUpdateDoc.h"
#include "DVDUpdateView.h"
#include "string.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDVDUpdateView
IMPLEMENT_DYNCREATE(CDVDUpdateView, CFormView)
BEGIN_MESSAGE_MAP(CDVDUpdateView, CFormView)
//{{AFX_MSG_MAP(CDVDUpdateView)
ON_COMMAND(ID_EDIT_STRMDIV, OnEditStrmdiv)
ON_COMMAND(ID_FILE_OPENFL, OnFileOpenfl)
ON_COMMAND(ID_FILE_OPENFLD, OnFileOpenfld)
ON_BN_CLICKED(IDC_RADIO_MIX, OnRadioMix)
ON_BN_CLICKED(IDC_RADIO_PARSE, OnRadioParse)
ON_CBN_SELCHANGE(IDC_COMBO_ADOCODEC, OnSelchangeComboAdocodec)
ON_CBN_SELCHANGE(IDC_COMBO_ADOSTRMID, OnSelchangeComboAdostrmid)
ON_CBN_SELCHANGE(IDC_COMBO_SUBPICSTRMID, OnSelchangeComboSubpicstrmid)
ON_BN_CLICKED(IDC_CHECK_LINKVOBU, OnCheckLinkvobu)
ON_WM_VSCROLL()
ON_BN_CLICKED(IDC_BUTTON_UPDATE, OnButtonUpdate)
ON_NOTIFY(NM_CLICK, IDC_LIST_VOBU, OnClickListVobu)
ON_BN_CLICKED(IDC_RADIO_LOGICAL, OnRadioLogical)
ON_BN_CLICKED(IDC_RADIO_PHYSICAL, OnRadioPhysical)
ON_CBN_SELCHANGE(IDC_COMBO_RANGE, OnSelchangeComboRange)
ON_BN_CLICKED(IDC_CHECK_CELLID, OnCheckCellid)
ON_BN_CLICKED(IDC_CHECK_COUNT, OnCheckCount)
ON_BN_CLICKED(IDC_CHECK_START, OnCheckStart)
ON_BN_CLICKED(IDC_CHECK_VOBID, OnCheckVobid)
ON_EN_CHANGE(IDC_EDIT_VOBUCOUNT, OnChangeEditVobucount)
ON_EN_CHANGE(IDC_EDIT_VOBUSTART, OnChangeEditVobustart)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDVDUpdateView construction/destruction
CDVDUpdateView::CDVDUpdateView()
: CFormView(CDVDUpdateView::IDD)
{
//{{AFX_DATA_INIT(CDVDUpdateView)
m_CheckCellid = FALSE;
m_CheckCount = FALSE;
m_CheckLinkvobu = FALSE;
m_CheckStart = FALSE;
m_CheckVobid = FALSE;
m_EditVobucount = 0;
m_EditVobustart = 0;
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CDVDUpdateView::~CDVDUpdateView()
{
}
void CDVDUpdateView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDVDUpdateView)
DDX_Control(pDX, IDC_SPIN_VOBUSTART, m_SpinVobucstart);
DDX_Control(pDX, IDC_SPIN_VOBUCOUNT, m_SpinVobucount);
DDX_Control(pDX, IDC_RADIO_PHYSICAL, m_RadioPhysical);
DDX_Control(pDX, IDC_RADIO_PARSE, m_RadioParse);
DDX_Control(pDX, IDC_RADIO_MIX, m_RadioMix);
DDX_Control(pDX, IDC_RADIO_LOGICAL, m_RadioLogical);
DDX_Control(pDX, IDC_LIST_VOBU, m_ListVobu);
DDX_Control(pDX, IDC_LIST_VDO, m_ListVdo);
DDX_Control(pDX, IDC_LIST_SUBPIC, m_ListSubpic);
DDX_Control(pDX, IDC_LIST_PACK, m_ListPack);
DDX_Control(pDX, IDC_LIST_ADO, m_ListAdo);
DDX_Control(pDX, IDC_COMBO_SUBPICSTRMID, m_ComboSubpicstrmid);
DDX_Control(pDX, IDC_COMBO_RANGE, m_ComboRange);
DDX_Control(pDX, IDC_COMBO_ADOSTRMID, m_ComboAdostrmid);
DDX_Control(pDX, IDC_COMBO_ADOCODEC, m_ComboAdocodec);
DDX_Control(pDX, IDC_BUTTON_UPDATE, m_ButtonUpdate);
DDX_Check(pDX, IDC_CHECK_CELLID, m_CheckCellid);
DDX_Check(pDX, IDC_CHECK_COUNT, m_CheckCount);
DDX_Check(pDX, IDC_CHECK_LINKVOBU, m_CheckLinkvobu);
DDX_Check(pDX, IDC_CHECK_START, m_CheckStart);
DDX_Check(pDX, IDC_CHECK_VOBID, m_CheckVobid);
DDX_Text(pDX, IDC_EDIT_VOBUCOUNT, m_EditVobucount);
DDX_Text(pDX, IDC_EDIT_VOBUSTART, m_EditVobustart);
//}}AFX_DATA_MAP
}
BOOL CDVDUpdateView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CDVDUpdateView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
this->GetDlgItem(IDC_EDIT_START)->EnableWindow(FALSE);
this->GetDlgItem(IDC_EDIT_COUNT)->EnableWindow(FALSE);
m_RadioParse.SetCheck(1);
m_CheckLinkvobu=FALSE;
m_ComboAdostrmid.SetCurSel(0);
m_ComboAdocodec.SetCurSel(0);
m_ComboSubpicstrmid.SetCurSel(0);
m_ListVobu.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListVobu.SetBkColor(RGB(247,247,255));
m_ListVobu.SetTextColor(RGB(0,0,255));
m_ListVobu.SetTextBkColor(RGB(247,247,255));
m_ListVobu.InsertColumn(0, "Pack", LVCFMT_LEFT,36);
m_ListVdo.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListVdo.SetBkColor(RGB(247,247,255));
m_ListVdo.SetTextColor(RGB(0,0,255));
m_ListVdo.SetTextBkColor(RGB(247,247,255));
m_ListVdo.InsertColumn(0, "Pack", LVCFMT_LEFT,36);
m_ListAdo.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListAdo.SetBkColor(RGB(247,247,255));
m_ListAdo.SetTextColor(RGB(0,0,255));
m_ListAdo.SetTextBkColor(RGB(247,247,255));
m_ListAdo.InsertColumn(0, "Pack", LVCFMT_LEFT,36);
m_ListSubpic.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListSubpic.SetBkColor(RGB(247,247,255));
m_ListSubpic.SetTextColor(RGB(0,0,255));
m_ListSubpic.SetTextBkColor(RGB(247,247,255));
m_ListSubpic.InsertColumn(0, "Pack", LVCFMT_LEFT,36);
m_ListPack.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListPack.SetBkColor(RGB(247,247,255));
m_ListPack.SetTextColor(RGB(0,0,255));
m_ListPack.SetTextBkColor(RGB(247,247,255));
m_ListPack.InsertColumn(0, "Pack", LVCFMT_LEFT,36);
m_ListVobu.InsertColumn(1, "VOB_ID", LVCFMT_LEFT, 50);
m_ListVobu.InsertColumn(2, "CELL_ID", LVCFMT_LEFT, 55);
m_ListVobu.InsertColumn(3, "SCR", LVCFMT_LEFT, 36);
m_ListVdo.InsertColumn(1, "PTS", LVCFMT_LEFT, 36);
m_ListVdo.InsertColumn(2, "DTS", LVCFMT_LEFT, 36);
m_ListVdo.InsertColumn(3, "SCR", LVCFMT_LEFT, 36);
m_ListAdo.InsertColumn(1, "StreamID", LVCFMT_LEFT, 60);
m_ListAdo.InsertColumn(2, "Codec", LVCFMT_LEFT, 45);
m_ListAdo.InsertColumn(3, "PTS", LVCFMT_LEFT, 36);
m_ListAdo.InsertColumn(4, "SCR", LVCFMT_LEFT, 36);
m_ListSubpic.InsertColumn(1, "StreamID", LVCFMT_LEFT, 60);
m_ListSubpic.InsertColumn(2, "PTS", LVCFMT_LEFT, 36);
m_ListSubpic.InsertColumn(3, "SCR", LVCFMT_LEFT, 36);
m_ListPack.InsertColumn(1, "VOB_ID", LVCFMT_LEFT, 50);
m_ListPack.InsertColumn(2, "CELL_ID", LVCFMT_LEFT, 55);
m_ListPack.InsertColumn(3, "SCR", LVCFMT_LEFT, 36);
m_ListPack.InsertColumn(4, "PTS", LVCFMT_LEFT, 36);
m_ListPack.InsertColumn(5, "DTS", LVCFMT_LEFT, 36);
m_ListPack.InsertColumn(6, "StreamID", LVCFMT_LEFT, 60);
m_ListPack.InsertColumn(7, "Codec", LVCFMT_LEFT, 50);
//以下是对旋转框的初始化
CSpinButtonCtrl *pSpin1=(CSpinButtonCtrl *)GetDlgItem(IDC_SPIN_VOBUSTART/*旋转框的ID号*/);
pSpin1->SetRange(0,10000);
pSpin1->SetPos((int)(m_EditVobustart*10.0));
pSpin1->SetBuddy(GetDlgItem(IDC_EDIT_VOBUSTART/*相关联的编辑框的ID号*/));
CSpinButtonCtrl *pSpin2=(CSpinButtonCtrl *)GetDlgItem(IDC_SPIN_VOBUCOUNT);
pSpin2->SetRange(0,10000);
pSpin2->SetPos((int)(m_EditVobucount*10.0));
pSpin2->SetBuddy(GetDlgItem(IDC_EDIT_VOBUCOUNT));
head = (Linklist) malloc (sizeof (Cpack));
head->next = NULL;
head->m_VOBU_ID = 0;
UpdateData(FALSE);
}
/////////////////////////////////////////////////////////////////////////////
// CDVDUpdateView diagnostics
#ifdef _DEBUG
void CDVDUpdateView::AssertValid() const
{
CFormView::AssertValid();
}
void CDVDUpdateView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CDVDUpdateDoc* CDVDUpdateView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDVDUpdateDoc)));
return (CDVDUpdateDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDVDUpdateView message handlers
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnEditStrmdiv()
{
char buf[MAX_PATH];
ZeroMemory(buf, sizeof(buf));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = buf;
bi.lpszTitle = "Please select directory:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, buf))
{
m_SaveFile = buf;
} // TODO: Add your command handler code here
StreamDivide();
CreatLog();
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnFileOpenfl()
{
for (int i=0; i<=9; i++) m_UpdateFiles[i] = "";//清空待处理文件数组
CFileDialog dlg(TRUE,NULL,NULL,NULL,"DVD Data Files (*.vob;*.vro)|*.vob; *.vro||");
if(dlg.DoModal( ) == IDOK)
{
m_OpenFile = dlg.GetPathName();
m_OutputName = dlg.GetFileName();
m_OpenFile.MakeUpper();//转大写
this->m_ComboRange.ResetContent();
this->m_ComboRange.AddString("As Open File");
this->m_ComboRange.SetCurSel(0);//更新组合框
m_UpdateFiles[0] = m_OpenFile;//放入待处理文件数组
LONG flength = 0;
i=0;
while (m_UpdateFiles[i] != "")
{
CFile myfile;
myfile.Open(m_UpdateFiles[i++],CFile::modeRead);
flength += myfile.GetLength();
}
m_MaxPack = flength/2048;
CString tstr;
tstr.Format("/%d",m_MaxPack);
this->GetDlgItem(IDC_STATIC_MAXPACK)->SetWindowText(tstr);
if ( (m_OpenFile.Right(3)) == "VRO" )
{
GetDlgItem(IDC_RADIO_LOGICAL)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_VOBID)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(FALSE);
m_RadioLogical.SetCheck(0);
m_RadioPhysical.SetCheck(1);//若为vro文件,logical range失效
}
else
GetDlgItem(IDC_RADIO_LOGICAL)->EnableWindow(TRUE);
}
// TODO: Add your command handler code here
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnFileOpenfld()
{
for (int i=0; i<=9; i++) m_UpdateFiles[i] = "";//清空待处理文件数组
char buf[MAX_PATH];
ZeroMemory(&buf, sizeof(buf));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = buf;
bi.lpszTitle = "Please select directory:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, buf))
{
m_OpenFolder = buf;
m_OpenFolder.MakeUpper();//转大写
if ( ( m_OpenFolder.Right(8) != "VIDEO_TS" )
&&( m_OpenFolder.Right(8) != "DVD_RTAV" ) )
MessageBox("请重新指定文件夹");
else
if (m_OpenFolder.Right(8) == "DVD_RTAV")//若为record
{
GetDlgItem(IDC_RADIO_LOGICAL)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_VOBID)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(FALSE);//Logical失效
ShowFolderVro(m_OpenFolder);
}
else//为DVD-VIDEO
{
GetDlgItem(IDC_RADIO_LOGICAL)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_VOBID)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(TRUE);
ShowFolderVob(m_OpenFolder);
}
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnRadioMix()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_LIST_VOBU)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LIST_VDO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LIST_ADO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LIST_SUBPIC)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_VOBU)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_VDO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_ADO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_SUBPIC)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_LINKVOBU)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LIST_PACK)->ShowWindow(SW_SHOW);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnRadioParse()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_LIST_VOBU)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LIST_VDO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LIST_ADO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LIST_SUBPIC)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_VOBU)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_VDO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_ADO)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_SUBPIC)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CHECK_LINKVOBU)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LIST_PACK)->ShowWindow(SW_HIDE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnSelchangeComboAdocodec()
{
// TODO: Add your control notification handler code here
UpdateData();//将控件显示的数据传给成员变量
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
if(m_CheckLinkvobu==FALSE){
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
ConditionalView(head, m_EditVobustart,m_EditVobucount, T1, T2, T3);
}
else {
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
CString PackNum=m_ListVobu.GetItemText(0,0);
int i;
int j;
i=atoi(PackNum);
j=GetVOBUNum(head, i);
char buffer[20];
_itoa(j, buffer, 10 );
ConLinkView(head, j, T1, T2, T3);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnSelchangeComboAdostrmid()
{
// TODO: Add your control notification handler code here
UpdateData();//将控件显示的数据传给成员变量
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
if(m_CheckLinkvobu==FALSE){
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
ConditionalView(head, m_EditVobustart,m_EditVobucount, T1, T2, T3);
}
else {
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
CString PackNum=m_ListVobu.GetItemText(0,0);
int i;
int j;
i=atoi(PackNum);
j=GetVOBUNum(head, i);
char buffer[20];
_itoa(j, buffer, 10 );
ConLinkView(head, j, T1, T2, T3);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnSelchangeComboSubpicstrmid()
{
// TODO: Add your control notification handler code here
UpdateData();//将控件显示的数据传给成员变量
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
if(m_CheckLinkvobu==FALSE){
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
ConditionalView(head, m_EditVobustart,m_EditVobucount, T1, T2, T3);
}
else {
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
CString PackNum=m_ListVobu.GetItemText(0,0);
int i;
int j;
i=atoi(PackNum);
j=GetVOBUNum(head, i);
char buffer[20];
_itoa(j, buffer, 10 );
ConLinkView(head, j, T1, T2, T3);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnCheckLinkvobu()
{
// TODO: Add your control notification handler code here
m_ListVobu.SetFocus();
m_ListVobu.SetItemState(0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
m_CheckLinkvobu=!m_CheckLinkvobu;
if(m_CheckLinkvobu==FALSE)
{
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
UpdateData();//将控件显示的数据传给成员变量
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
ConditionalView(head, m_EditVobustart,m_EditVobucount, T1, T2, T3);//调用
}
else if(m_CheckLinkvobu==TRUE)
{
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
CString PackNum=m_ListVobu.GetItemText(0,0);
int i;
int j;
i=atoi(PackNum);
j=GetVOBUNum(head, i);
char buffer[20];
_itoa(j, buffer, 10 );
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
ConLinkView(head, j, T1, T2, T3);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnVScroll(UINT nSBCode,
UINT nPos,
CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
if(nSBCode==SB_ENDSCROLL)
{
return ;
}
if(pScrollBar->GetDlgCtrlID()==IDC_SPIN_VOBUSTART/*此处是VOBU Start的旋转控件的ID*/
||pScrollBar->GetDlgCtrlID()==IDC_SPIN_VOBUCOUNT/*此处是VOBU Count的旋转控件的ID*/)
{
CString strValue;
strValue.Format("%d",(int)nPos);
((CSpinButtonCtrl *)pScrollBar)->GetBuddy()->SetWindowText(strValue);
CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}
UpdateData();//将控件显示的数据传给成员变量
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
if(m_CheckLinkvobu==FALSE){
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
ConditionalView(head, m_EditVobustart,m_EditVobucount, T1, T2, T3);
}
else {
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
SpinView(head, m_EditVobustart,m_EditVobucount);
CString PackNum=m_ListVobu.GetItemText(0,0);
int i;
int j;
i=atoi(PackNum);
j=GetVOBUNum(head, i);
ConLinkView(head, j, T1, T2, T3);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnButtonUpdate()
{
// TODO: Add your control notification handler code here
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
m_CheckLinkvobu=FALSE;
m_ComboAdostrmid.SetCurSel(0);
m_ComboAdocodec.SetCurSel(0);
m_ComboSubpicstrmid.SetCurSel(0);
m_EditVobucount=0;
CString message;
if (this->m_RadioPhysical.GetCheck() == BST_CHECKED)
{
if (m_CheckStart) m_StartPack = GetDlgItemInt(IDC_EDIT_START);
if (m_CheckCount) m_Count = GetDlgItemInt(IDC_EDIT_COUNT);
}
else
if(this->m_RadioLogical.GetCheck() == BST_CHECKED)
{
if (m_CheckVobid) m_Vobid = GetDlgItemInt(IDC_EDIT_VOBID);
if (m_CheckCellid) m_Cellid = GetDlgItemInt(IDC_EDIT_CELLID);
}
else
MessageBox("请指定解析方式!");
// TODO: Add your control notification handler code here
if ( (this->m_RadioPhysical.GetCheck() == BST_CHECKED)
|| (this->m_RadioLogical.GetCheck() == BST_CHECKED))
{
DWORD dwBegin = GetTickCount();
if (m_Vobid == -2 || m_Cellid == -2)
{
if (m_StartPack == -1 && m_Count == -1)
{
PhyUpdate(0, m_MaxPack, m_UpdateFiles);
}
else if (m_StartPack == -1 && m_Count != -1)
{
PhyUpdate(0, m_Count, m_UpdateFiles);
}
else if (m_StartPack != -1 && m_Count == -1)
{
PhyUpdate(m_StartPack, m_MaxPack, m_UpdateFiles);
}
else
PhyUpdate(m_StartPack, m_Count, m_UpdateFiles);
}
if (m_StartPack == -2 || m_Count == -2)
{
LogUpdate(m_Vobid, m_Cellid, m_UpdateFiles);
}
m_EditVobucount=LastPack->m_VOBU_ID;
message.Format("Cost Time : %.3f s",((float)GetTickCount()-dwBegin)/1000);
MessageBox(message);
UpdateData(FALSE);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
void CDVDUpdateView::OnClickListVobu(NMHDR* pNMHDR,
LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION pos = m_ListVobu.GetFirstSelectedItemPosition();
m_nIndex = m_ListVobu.GetNextSelectedItem(pos); // 得到项目索引
*pResult = 0;
if(m_CheckLinkvobu==TRUE){
CString PackNum=m_ListVobu.GetItemText(m_nIndex,0);
int i;
int j;
i=atoi(PackNum);
j=GetVOBUNum(head, i);
char buffer[20];
_itoa(j, buffer, 10 );
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
ConLinkView(head, j, T1, T2, T3);
}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::OnePackView(Linklist L,
int VOBUStart,
int VOBUCount,
CString AStreamID,
CString ACodec,
CString SPStreamID)
{
if(L==NULL)
return(FALSE);
else {
switch(L->m_Pack_Type)
{
case 0:{UpdateData();
VOBUView(L, VOBUStart, VOBUCount);
}break;
case 1:{UpdateData();
VOBUView(L, VOBUStart, VOBUCount);
}break;
case 2:{UpdateData();
VideoView(L, VOBUStart, VOBUCount);
}break;
case 3:{UpdateData();
AudioView(L, AStreamID, ACodec, VOBUStart, VOBUCount);
}break;
case 4:{UpdateData();
SubPView(L, SPStreamID, VOBUStart, VOBUCount);
}break;
case 5:return(TRUE);break;
}
}
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::VOBUView(Linklist L,
int VOBUStart,
int VOBUCount)
{
char buffer0[20];
_itoa(L->m_Pack_ID, buffer0, 10);
char buffer1[20];
_itoa(L->m_Pack_para1, buffer1, 2);
char buffer2[20];
_itoa(L->m_Pack_para2, buffer2, 2);
char buffer3[20];
_itoa(L->m_Pack_para3, buffer3, 2);
if(L==NULL){
return(FALSE);
}
else if(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1){
m_ListVobu.InsertItem(0, buffer0);
m_ListVobu.SetItemText(0, 1 ,buffer1);
m_ListVobu.SetItemText(0, 2 ,buffer2);
m_ListVobu.SetItemText(0, 3 ,buffer3);
m_ListPack.InsertItem(0, buffer0);
m_ListPack.SetItemText(0, 1 ,buffer1);
m_ListPack.SetItemText(0, 2 ,buffer2);
m_ListPack.SetItemText(0, 3 ,buffer3);
m_ListPack.SetItemText(0, 4, "/");
m_ListPack.SetItemText(0, 5, "/");
m_ListPack.SetItemText(0, 6, "/");
m_ListPack.SetItemText(0, 7, "/");
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::ConditionalView(Linklist L,
int VOBUStart,
int VOBUCount,
CString AStreamID,
CString ACodec,
CString SPStreamID)
{
if(L==NULL)
return(FALSE);
else {
switch(L->m_Pack_Type)
{
case 0:{UpdateData();
VOBUView(L, VOBUStart, VOBUCount);
}break;
case 1:{UpdateData();
VOBUView(L, VOBUStart, VOBUCount);
}break;
case 2:{UpdateData();
VideoView(L, VOBUStart, VOBUCount);
}break;
case 3:{UpdateData();
AudioView(L, AStreamID, ACodec, VOBUStart, VOBUCount);
}break;
case 4:{UpdateData();
SubPView(L, SPStreamID, VOBUStart, VOBUCount);
}break;
case 5:return(TRUE);break;
}
L=L->next;
ConditionalView(L, VOBUStart, VOBUCount, AStreamID, ACodec, SPStreamID);
}
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::SubPView(Linklist L,
CString SPStreamID,
int VOBUStart,
int VOBUCount)
{
char buffer0[20];
_itoa(L->m_Pack_para1,buffer0,10);
if(L==NULL){
return(FALSE);
}
else if(((strcmp("ALL",SPStreamID) == 0) &&
(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1))
|| ((strcmp(SPStreamID, buffer0) == 0) &&
(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1)))
{
char buffer1[20];
_itoa(L->m_Pack_ID, buffer1, 10);
char buffer2[20];
_itoa(L->m_Pack_para1, buffer2, 10);
char buffer3[20];
_itoa(L->m_Pack_para2, buffer3, 2);
char buffer4[20];
_itoa(L->m_Pack_para3, buffer4, 2);
m_ListSubpic.InsertItem(0, buffer1);
m_ListSubpic.SetItemText(0, 1 ,buffer2);
m_ListSubpic.SetItemText(0, 2 ,buffer3);
m_ListSubpic.SetItemText(0, 3 ,buffer4);
m_ListPack.InsertItem(0, buffer1);
m_ListPack.SetItemText(0, 1, "/");
m_ListPack.SetItemText(0, 2, "/");
m_ListPack.SetItemText(0, 3, buffer4);
m_ListPack.SetItemText(0, 4, buffer3);
m_ListPack.SetItemText(0, 5, "/");
m_ListPack.SetItemText(0, 6, buffer2);
m_ListPack.SetItemText(0, 7, "/");
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::AudioView(Linklist L,
CString AStreamID,
CString ACodec,
int VOBUStart,
int VOBUCount)
{
char buffer0[20];
_itoa(L->m_Pack_para1, buffer0, 10);
CString t;
switch(L->m_Pack_para2)
{
case 1: t="MPEG";break;
case 2: t="AC3"; break;
case 3: t="DTS"; break;
case 4: t="SDDS"; break;
case 5: t="LinearPCM";break;
}
if(L==NULL){
return(FALSE);
}
else if(((strcmp("ALL", AStreamID) == 0) && (strcmp("ALL", ACodec) == 0) &&
(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1))
|| ((strcmp(AStreamID, buffer0) == 0) &&
(strcmp(ACodec,t) == 0) &&
(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1)) ||
((strcmp(AStreamID, buffer0) == 0) &&
(strcmp("ALL", ACodec) == 0) &&
(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1)) ||
((strcmp(ACodec, t) == 0) &&
(strcmp("ALL", AStreamID) == 0) &&
(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1)))
{
char buffer3[20];
_itoa(L->m_Pack_ID, buffer3, 10 );
char buffer4[20];
_itoa(L->m_Pack_para1, buffer4, 10);
char buffer6[20];
_itoa(L->m_Pack_para3, buffer6, 2 );
char buffer7[20];
_itoa(L->m_Pack_para4, buffer7, 2 );
m_ListAdo.InsertItem(0, buffer3);
m_ListAdo.SetItemText(0, 1 ,buffer4);
m_ListAdo.SetItemText(0, 2 ,t);
m_ListAdo.SetItemText(0, 3 ,buffer6);
m_ListAdo.SetItemText(0, 4 ,buffer7);
m_ListPack.InsertItem(0, buffer3);
m_ListPack.SetItemText(0, 1, "/");
m_ListPack.SetItemText(0, 2, "/");
m_ListPack.SetItemText(0, 3, buffer7);
m_ListPack.SetItemText(0, 4, buffer6);
m_ListPack.SetItemText(0, 5, "/");
m_ListPack.SetItemText(0, 6, buffer4);
m_ListPack.SetItemText(0, 7, t);
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::VideoView(Linklist L,
int VOBUStart,
int VOBUCount)
{
if(L==NULL){
return(FALSE);
}
else if(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1){
char buffer0[20];
_itoa(L->m_Pack_ID, buffer0, 10 );
char buffer1[20];
_itoa(L->m_Pack_para1, buffer1, 2);
char buffer2[20];
_itoa(L->m_Pack_para2, buffer2, 2);
char buffer3[20];
_itoa(L->m_Pack_para3, buffer3, 2);
m_ListVdo.InsertItem(0, buffer0);
m_ListVdo.SetItemText(0, 1 ,buffer1);
m_ListVdo.SetItemText(0, 2 ,buffer2);
m_ListVdo.SetItemText(0, 3 ,buffer3);
m_ListPack.InsertItem(0, buffer0);
m_ListPack.SetItemText(0, 1, "/");
m_ListPack.SetItemText(0, 2, "/");
m_ListPack.SetItemText(0, 3, buffer3);
m_ListPack.SetItemText(0, 4, buffer1);
m_ListPack.SetItemText(0, 5, buffer2);
m_ListPack.SetItemText(0, 6, "/");
m_ListPack.SetItemText(0, 7, "/");
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::ConLinkView(Linklist L,
int VOBUID,
CString AStreamID,
CString ACodec,
CString SPStreamID)
{
if(L==NULL)
return(FALSE);
else {
switch(L->m_Pack_Type)
{
case 2:{UpdateData();
LinkVideoView(L,VOBUID);
}break;
case 3:{UpdateData();
LinkAudioView(L,VOBUID, AStreamID, ACodec);
}break;
case 4:{UpdateData();
LinkSubPView(L,VOBUID, SPStreamID);
}break;
case 5:return(TRUE);break;
}
L=L->next;
ConLinkView(L, VOBUID, AStreamID, ACodec, SPStreamID);
}
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::LinkSubPView(Linklist L,
int VOBUID,
CString SPStreamID)
{
char buffer0[20];
_itoa(L->m_Pack_para1,buffer0,10);
if(L==NULL)
return(FALSE);
else if((L->m_VOBU_ID==VOBUID && (strcmp(SPStreamID,buffer0)==0)) ||
(L->m_VOBU_ID==VOBUID && (strcmp(SPStreamID,"ALL")==0)))
{
char buffer1[20];
_itoa(L->m_Pack_ID, buffer1, 10 );
char buffer2[20];
_itoa(L->m_Pack_para1, buffer2, 10);
char buffer3[20];
_itoa(L->m_Pack_para2, buffer3, 2);
char buffer4[20];
_itoa(L->m_Pack_para3, buffer4, 2);
m_ListSubpic.InsertItem(0, buffer1);
m_ListSubpic.SetItemText(0, 1 ,buffer2);
m_ListSubpic.SetItemText(0, 2 ,buffer3);
m_ListSubpic.SetItemText(0, 3 ,buffer4);
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::LinkAudioView(Linklist L,
int VOBUID,
CString AStreamID,
CString ACodec)
{
char buffer0[20];
_itoa(L->m_Pack_para1,buffer0,10);
CString t;
switch(L->m_Pack_para2)
{
case 1: t="MPEG";break;
case 2: t="AC3"; break;
case 3: t="DTS"; break;
case 4: t="SDDS"; break;
case 5: t="Linear PCM";break;
}
if(L==NULL)
return(FALSE);
else if((L->m_VOBU_ID==VOBUID && (strcmp(AStreamID,buffer0)==0) && (strcmp(ACodec,t)==0)) ||
(L->m_VOBU_ID==VOBUID && (strcmp(AStreamID,"ALL")==0) && (strcmp(ACodec,t)==0)) ||
(L->m_VOBU_ID==VOBUID && (strcmp(AStreamID,buffer0)==0) && (strcmp(ACodec,"ALL")==0)) ||
(L->m_VOBU_ID==VOBUID && (strcmp(AStreamID,"ALL")==0) && (strcmp(ACodec,"ALL")==0)))
{
char buffer2[20];
_itoa(L->m_Pack_ID, buffer2, 10 );
char buffer3[20];
_itoa(L->m_Pack_para1, buffer3, 10);
char buffer5[20];
_itoa(L->m_Pack_para3, buffer5, 2);
char buffer6[20];
_itoa(L->m_Pack_para4, buffer6, 2);
m_ListAdo.InsertItem(0, buffer2);
m_ListAdo.SetItemText(0, 1 ,buffer3);
m_ListAdo.SetItemText(0, 2 ,t);
m_ListAdo.SetItemText(0, 3 ,buffer5);
m_ListAdo.SetItemText(0, 4 ,buffer6);
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::LinkVideoView(Linklist L,
int VOBUID)
{
if(L==NULL)
return(FALSE);
else if(L->m_VOBU_ID==VOBUID)
{
char buffer0[20];
_itoa(L->m_Pack_ID, buffer0, 10 );
char buffer1[20];
_itoa(L->m_Pack_para1, buffer1, 2);
char buffer2[20];
_itoa(L->m_Pack_para2, buffer2, 2);
char buffer3[20];
_itoa(L->m_Pack_para3, buffer3, 2);
m_ListVdo.InsertItem(0, buffer0);
m_ListVdo.SetItemText(0, 1 ,buffer1);
m_ListVdo.SetItemText(0, 2 ,buffer2);
m_ListVdo.SetItemText(0, 3 ,buffer3);
}
else return(TRUE);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::SpinView(Linklist L,
int VOBUStart,
int VOBUCount)
{
if(L==NULL){
return(FALSE);
}
else if(((L->m_Pack_Type==(enum CDVDUpdateView::Cpack::type)0) && (L->m_VOBU_ID >= VOBUStart) && (L->m_VOBU_ID <= VOBUStart + VOBUCount - 1)) ||
((L->m_Pack_Type==(enum CDVDUpdateView::Cpack::type)1) && (L->m_VOBU_ID >= VOBUStart) && (L->m_VOBU_ID <= VOBUStart + VOBUCount - 1))){
char buffer0[20];
_itoa(L->m_Pack_ID, buffer0, 10 );
char buffer1[20];
_itoa(L->m_Pack_para1, buffer1, 2);
char buffer2[20];
_itoa(L->m_Pack_para2, buffer2, 2);
char buffer3[20];
_itoa(L->m_Pack_para3, buffer3, 2);
m_ListVobu.InsertItem(0, buffer0);
m_ListVobu.SetItemText(0, 1 ,buffer1);
m_ListVobu.SetItemText(0, 2 ,buffer2);
m_ListVobu.SetItemText(0, 3 ,buffer3);
}
L=L->next;
SpinView(L, VOBUStart, VOBUCount);
return(TRUE);
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
int CDVDUpdateView::GetVOBUNum(Linklist L,
int PackNum)
{
Linklist p;
p=L;
while(p!=NULL){
if(p->m_Pack_ID==PackNum)
return p->m_VOBU_ID;
else p=p->next;}
}
/********************************************************************************************/
/*
/*
/*
/********************************************************************************************/
bool CDVDUpdateView::LinkVOBUView(Linklist L,
int VOBUStart,
int VOBUCount)
{
if(L==NULL){
return(FALSE);
}
else if(L->m_VOBU_ID >= VOBUStart && L->m_VOBU_ID <= VOBUStart + VOBUCount - 1){
char buffer0[20];
_itoa(L->m_Pack_ID, buffer0, 10 );
char buffer1[20];
_itoa(L->m_Pack_para1, buffer1, 2);
char buffer2[20];
_itoa(L->m_Pack_para2, buffer2, 2);
char buffer3[20];
_itoa(L->m_Pack_para3, buffer3, 2);
m_ListVobu.InsertItem(0, buffer0);
m_ListVobu.SetItemText(0, 1 ,buffer1);
m_ListVobu.SetItemText(0, 2 ,buffer2);
m_ListVobu.SetItemText(0, 3 ,buffer3);
}
return(TRUE);
}
void CDVDUpdateView::OnRadioLogical()
{
// m_CheckStart = FALSE; m_CheckCount = FALSE;
// UpdateData(FALSE);
this->m_RadioPhysical.SetCheck(FALSE);
GetDlgItem(IDC_CHECK_VOBID)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(FALSE);
if (m_CheckVobid)
{
GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(TRUE);
if (m_CheckCellid)
GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(TRUE);
}
GetDlgItem(IDC_CHECK_START)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_COUNT)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_START)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_COUNT)->EnableWindow(FALSE);
m_StartPack = -2; m_Count = -2;
m_Vobid = -1; m_Cellid = -1;
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::OnRadioPhysical()
{
// m_CheckVobid = FALSE; m_CheckCellid = FALSE;
// UpdateData(FALSE);
this->m_RadioLogical.SetCheck(FALSE);
GetDlgItem(IDC_CHECK_START)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_COUNT)->EnableWindow(TRUE);
if (m_CheckStart) GetDlgItem(IDC_EDIT_START)->EnableWindow(TRUE);
if (m_CheckCount) GetDlgItem(IDC_EDIT_COUNT)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_VOBID)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(FALSE);
m_StartPack = -1; m_Count = -1;
m_Vobid = -2; m_Cellid = -2;
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::OnSelchangeComboRange()
{
int sel,i;
for (i=0;i<=8;i++)
m_UpdateFiles[i] = "";
sel = this->m_ComboRange.GetCurSel();
m_OutputName = m_ComboShowFiles[sel];
i = 0;
while (m_ComboShowLinkFiles[sel][i] != "")
{
m_UpdateFiles[i] = m_ComboShowLinkFiles[sel][i];
i++;
}//将用户在组合框中选定的文件放入m_UpdateFiles数组
LONG flength = 0;
i=0;
while ((m_UpdateFiles[i] != "") && (i<=8))
{
CFile myfile;
myfile.Open(m_UpdateFiles[i++],CFile::modeRead);
flength += myfile.GetLength();
}
m_MaxPack = flength/2048;
CString tstr;
tstr.Format("/%d",m_MaxPack);
this->GetDlgItem(IDC_STATIC_MAXPACK)->SetWindowText(tstr);
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::OnCheckCellid()
{
m_CheckCellid = !m_CheckCellid;
if (m_CheckCellid == FALSE)
{
this->GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(FALSE);
m_Cellid = -1;
}
else
this->GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(TRUE);
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::OnCheckCount()
{
m_CheckCount = !m_CheckCount;
if (m_CheckCount == FALSE)
{
this->GetDlgItem(IDC_EDIT_COUNT)->EnableWindow(FALSE);
m_Count = -1;
}
else
this->GetDlgItem(IDC_EDIT_COUNT)->EnableWindow(TRUE);
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::OnCheckStart()
{
m_CheckStart = !m_CheckStart;
if (m_CheckStart == FALSE)
{
this->GetDlgItem(IDC_EDIT_START)->EnableWindow(FALSE);
m_StartPack = -1;
}
else
this->GetDlgItem(IDC_EDIT_START)->EnableWindow(TRUE);
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::OnCheckVobid()
{
m_CheckVobid = !m_CheckVobid;
if (m_CheckVobid == FALSE)
{
this->GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(FALSE);
this->GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(FALSE);
this->GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(FALSE);
m_Vobid = -1; m_Cellid = -1;
}
else
{
this->GetDlgItem(IDC_EDIT_VOBID)->EnableWindow(TRUE);
this->GetDlgItem(IDC_CHECK_CELLID)->EnableWindow(TRUE);
if (m_CheckCellid)
this->GetDlgItem(IDC_EDIT_CELLID)->EnableWindow(TRUE);
}
// TODO: Add your control notification handler code here
}
void CDVDUpdateView::ShowFolderVro(CString foldername)
{
CString tfilename; //temp
CFileFind finder;
BOOL bWorking = finder.FindFile(foldername + "\\*.vro");//遍历vro文件
int i = 0;
this->m_ComboRange.ResetContent();
while (bWorking)
{
bWorking = finder.FindNextFile();
tfilename = finder.GetFileName();
tfilename.MakeUpper();
if ( (tfilename == "VR_MOVIE.VRO") ||
(tfilename == "VR_STILL.VRO") ||
(tfilename == "VR_AUDIO.VRO"))
{
m_ComboShowFiles[i] = (LPCTSTR)finder.GetFileName();
//vro文件没有合并显示情况,文件名直接放入m_ComboShowFiles数组
m_ComboShowLinkFiles[i][0] = (LPCTSTR)finder.GetFilePath();
this->m_ComboRange.AddString(m_ComboShowFiles[i++]);
this->m_ComboRange.SetCurSel(-1);
}
}
}
void CDVDUpdateView::ShowFolderVob(CString foldername)
{
CString files[MAX_PATH],filesname[MAX_PATH];//temp,含路径,不含路径
CFileFind finder;
CString tfilename; //temp
BOOL bWorking = finder.FindFile(foldername + "\\*.vob");
int i = 0; int j,k;
CString tstr,tstr1; char tch;
this->m_ComboRange.ResetContent();
while (bWorking)
{
bWorking = finder.FindNextFile();
tfilename = finder.GetFileName();
tfilename.MakeUpper();
if ((tfilename == "VIDEO_TS.VOB") ||
((tfilename.Left(4) == "VTS_") && (tfilename.Right(6).Left(1) == "_")) )
{
files[i] = finder.GetFilePath();//完整文件名放入临时数组
filesname[i++] = finder.GetFileName();
}
}
i = 0; j = 0; k = 0; //i为filename数组下标,j,k为m_ComboShowLinkFiles数组下标
int m=-1;//合并显示时的统计组别变量
int flag=0;
while (filesname[i] != "")
{
tfilename = filesname[i];
tfilename.MakeUpper();
if ( ( !((48 < filesname[i].Right(5).Left(1)) && (filesname[i].Right(5).Left(1)< 58))) ||
(tfilename == "VIDEO_TS.VOB"))
{
m_ComboShowFiles[j] = filesname[i];
m_ComboShowLinkFiles[j++][0] = files[i++];
}
else//需要合并显示
{
if (flag == 0)
{
tstr = filesname[i].Right(8);
tstr = tstr.Left(2);
m = atoi(tstr);
flag = 1;
}
tstr = filesname[i+1].Right(8);
tstr = tstr.Left(2);//查看下一个文件情况
if (m == atoi(tstr))//与下一个文件是一个系列
{
m_ComboShowLinkFiles[j][k++] = files[i++];
}
else//与下一个文件不是一个系列,m_ComboShowFiles需要更新
{
m_ComboShowLinkFiles[j][k] = files[i];
tstr = filesname[i].Right(8);
tstr = tstr.Left(2);
_itoa(k+1,&tch,10);
tstr1 = ("VTS_"+tstr+"_1-"+tch+".VOB");
m_ComboShowFiles[j++] = (k>0) ? tstr1 : filesname[i];
k = 0;
m = atoi(tstr);
i++;
flag = 0;
}
}
}
i = 0;
while (m_ComboShowFiles[i] != "")
{
this->m_ComboRange.AddString(m_ComboShowFiles[i++]);
this->m_ComboRange.SetCurSel(-1);
}
}
/******************************************************************************
/*
/*
/*
/*
/*
/*****************************************************************************/
bool CDVDUpdateView::StructInitial(Linklist &head, Linklist &lastaddr)
{
Linklist p1;
while(head->next != NULL)
{
p1 = head->next;
head->next = p1->next;
free(p1);
}
lastaddr = head;
return TRUE;
}
/******************************************************************************
/*
/*
/*
/*
/*
/*****************************************************************************/
bool CDVDUpdateView::OnePackUpdate(BYTE *pbdata, Linklist &k)
{
if ( *(pbdata + 2) == 0x01 )
{
switch( *(pbdata + 3) )
{
case 0xBB :
{
k->m_Pack_Type = k->NV_PCK;
k->m_Pack_para1 = *(pbdata + 4)*16*16 + *(pbdata + 5);
k->m_Pack_para2 = *(pbdata + 6)*16*16 + *(pbdata + 7);
k->m_Pack_para3 = *(pbdata + 8)*16*16 + *(pbdata + 9);
break;
}
case 0xBF :
{
k->m_Pack_Type = k->RDI_PCK;
k->m_Pack_para1 = *(pbdata + 4)*16*16 + *(pbdata + 5);
break;
}
case 0xE0 :
{
k->m_Pack_Type = k->V_Pack;
k->m_Pack_para1 = *(pbdata + 4)*16*16 + *(pbdata + 5);
k->m_Pack_para2 = *(pbdata + 6)*16*16 + *(pbdata + 7);
k->m_Pack_para3 = *(pbdata + 8)*16*16 + *(pbdata + 9);
break;
}
case 0xBC :
{
k->m_Pack_Type = k->A_Pack;
k->m_Pack_para1 = *(pbdata + 4)*16*16 + *(pbdata + 5);
k->m_Pack_para2 = *(pbdata + 6)*16*16 + *(pbdata + 7);
k->m_Pack_para3 = *(pbdata + 8)*16*16 + *(pbdata + 9);
k->m_Pack_para4 = *(pbdata + 10)*16*16 + *(pbdata + 11);
break;
}
case 0xD0 :
{
k->m_Pack_Type = k->SP_Pack;
k->m_Pack_para1 = *(pbdata + 4)*16*16 + *(pbdata + 5);
k->m_Pack_para2 = *(pbdata + 6)*16*16 + *(pbdata + 7);
k->m_Pack_para3 = *(pbdata + 8)*16*16 + *(pbdata + 9);
break;
}
default : k->m_Pack_Type = k->Error_Pack;break;
}
}
else k->m_Pack_Type = k->Error_Pack;
return TRUE;
}
/******************************************************************************
/*
/*
/*
/*
/*
/*****************************************************************************/
bool CDVDUpdateView::NewData(Linklist &lastaddr)
{
Linklist p1;
p1 = (Linklist) malloc (sizeof (Cpack));
lastaddr->next = p1;
lastaddr = p1;
lastaddr->next = NULL;
return TRUE;
}
/******************************************************************************
/*
/*
/*
/*
/*
/*****************************************************************************/
bool CDVDUpdateView::PhyUpdate(int Start, int Count, CString filename[9])
{
int i = 0;
int onesize = 0;
int k, packID = -1, VOBUID = -1;
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
StructInitial(head, LastPack);
while (filename[i] != "")
{
HANDLE hFile = CreateFile(filename[i], GENERIC_READ, 0, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, NULL);
onesize = (SetFilePointer(hFile, 0, NULL, FILE_END))/2048;
i++;
if (INVALID_HANDLE_VALUE != hFile)
{
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, "read_event");
BYTE *pbRead = new BYTE[2048];
BYTE *pbBuf = new BYTE[2048];
DWORD dwRead, dwCount = 0;
OVERLAPPED overlap;
overlap.Offset = 0;
overlap.OffsetHigh = 0;
overlap.hEvent = hEvent;
ReadFile(hFile, pbRead, 2048, &dwRead, &overlap);
{
for (k=1; k= Start && packID <= Start + Count)
{
NewData(LastPack);
OnePackUpdate(pbBuf, LastPack);
LastPack->m_Pack_ID = packID;
LastPack->m_VOBU_ID = VOBUID;
OnePackView(LastPack, VOBUID, m_MaxPack, T1, T2, T3);
}
}
WaitForSingleObject(hEvent, INFINITE);
memcpy(pbBuf, pbRead, 2048);
if (*(pbBuf+3) == 0xBB || *(pbBuf+3) == 0xBF)
{
VOBUID = VOBUID + 1;
}
packID = packID + 1;
if (packID >= Start && packID <= Start + Count)
{
NewData(LastPack);
OnePackUpdate(pbBuf, LastPack);
LastPack->m_Pack_ID = packID;
LastPack->m_VOBU_ID = VOBUID;
OnePackView(LastPack, VOBUID, m_MaxPack, T1, T2, T3);
}
}
CloseHandle(hEvent);
CloseHandle(hFile);
delete pbRead;
delete pbBuf;
}
}
return TRUE;
}
/******************************************************************************
/*
/*
/*
/*
/*
/*****************************************************************************/
bool CDVDUpdateView::LogUpdate(int VOBID, int CELLID, CString filename[9])
{
int i = 0;
int onesize = 0;
int k, packID = -1, VOBUID = -1;
bool flag = 0;
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
StructInitial(head, LastPack);
while (filename[i] != "")
{
HANDLE hFile = CreateFile(filename[i], GENERIC_READ, 0, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, NULL);
onesize = (SetFilePointer(hFile, 0, NULL, FILE_END))/2048;
i++;
if (INVALID_HANDLE_VALUE != hFile)
{
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, "read_event");
BYTE *pbRead = new BYTE[2048];
BYTE *pbBuf = new BYTE[2048];
DWORD dwRead, dwCount = 0;
OVERLAPPED overlap;
overlap.Offset = 0;
overlap.OffsetHigh = 0;
overlap.hEvent = hEvent;
ReadFile(hFile, pbRead, 2048, &dwRead, &overlap);
{
for (k=1; km_Pack_ID = packID;
LastPack->m_VOBU_ID = VOBUID;
OnePackView(LastPack, VOBUID, m_MaxPack, T1, T2, T3);
}
}
WaitForSingleObject(hEvent, INFINITE);
memcpy(pbBuf, pbRead, 2048);
if (*(pbBuf+3) == 0xBB || *(pbBuf+3) == 0xBF)
{
VOBUID = VOBUID + 1;
}
packID = packID + 1;
if (OnePackVOBJug(VOBID, CELLID, pbBuf, flag))
{
NewData(LastPack);
OnePackUpdate(pbBuf, LastPack);
LastPack->m_Pack_ID = packID;
LastPack->m_VOBU_ID = VOBUID;
OnePackView(LastPack, VOBUID, m_MaxPack, T1, T2, T3);
}
}
CloseHandle(hEvent);
CloseHandle(hFile);
delete pbRead;
delete pbBuf;
}
}
return TRUE;
}
/******************************************************************************
/*
/*
/*
/*
/*
/*****************************************************************************/
bool CDVDUpdateView::OnePackVOBJug(int VOBID, int CELLID, BYTE *pbdata, bool &flag)
{
if (VOBID == -1 && CELLID == -1)
{
return TRUE;
}
else if (CELLID == -1 && VOBID != -1)
{
if (*(pbdata + 3) == 0xBB)
{
if ( *(pbdata + 4)*16*16+*(pbdata + 5) == VOBID )
{
flag = 1;
}
else flag = 0;
}
if (flag)
{
return TRUE;
}
else return FALSE;
}
else if (CELLID != -1 && VOBID != -1)
{
if (*(pbdata + 3) == 0xBB)
{
if ( *(pbdata + 4)*16*16+*(pbdata + 5) == VOBID &&
*(pbdata + 6)*16*16+*(pbdata + 7) == CELLID )
{
flag = 1;
}
else flag = 0;
}
if (flag)
{
return TRUE;
}
else return FALSE;
}
else return FALSE;
}
/****************************************************************************************/
/* Name : char* CDVDUpdateView::CreatName(int n)
/* Function : create the filename including the file path to save
/* Input : int n , n is Pack ID
/* Return : char *FileName , the name and the path to save
/****************************************************************************************/
char* CDVDUpdateView::CreatName(int n,char* files,CString file)
{
CString filename;
CString name;
CString replace; //declare 3 CString variables to creat the filename
FILE *fp; //file operation pointer
char *h;
char hd[20]; //save the pack head
char *FileName; //filename to save at last
h=hd;
int seek;
int i,length;
if((fp=fopen(files,"rb"))==NULL){ //open the source file
printf("Can't open file!\n");
exit(0);
}
seek=2048*n;
fseek(fp,seek,0);
fread(hd,20,1,fp); //put the first 20 bytes of the source file into hd[20]
switch(*(h+3)){
case -69 : name = ".nv"; break;
case -65 : name = ".rdi"; break;
case -32 : name = ".vid"; break;
case -68 : {
replace = GetReplace(hd); //replace X by the stream ID
if (*(h+7) == 1) { name = ".X.mpg" ; name.Replace("X",replace); }
if (*(h+7) == 2) { name = ".X.ac5" ; name.Replace("X",replace); }
if (*(h+7) == 3) { name = ".X.dts" ; name.Replace("X",replace); }
if (*(h+7) == 4) { name = ".X.sdds" ; name.Replace("X",replace); }
if (*(h+7) == 5) { name = ".X.pcm" ; name.Replace("X",replace); }
}; break ;
case -48 : { name = ".YY.sp" ; replace=GetReplace(hd);
name.Replace("YY",replace); break; } //replace YY by the stream ID
default : name = ".err"; break;
}
filename = m_SaveFile+ "\\" + file + name; //creat the filename(CString)
length=filename.GetLength();
FileName=new char[length];
for(i=0;im_Pack_Type){
case L->NV_PCK:fprintf(fplog,"Pack %d NV_PCK *** VOB_ID:%d CELL_ID:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3);break;
case L->RDI_PCK:fprintf(fplog,"Pack %d RDI_PCK *** SCR:%d \n",k,L->m_Pack_para1);break;
case L->V_Pack:fprintf(fplog,"Pack %d Video Pack *** PTS:%d DTS:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3);break;
case L->A_Pack:fprintf(fplog,
"Pack %d Audio Pack *** StreamID:%d Codec:%d PTS:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3,L->m_Pack_para4);
break;
case L->SP_Pack:fprintf(fplog,"Pack %d Sub-Picture Pack *** StreamID:%d PTS:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3);break;
default : fprintf(fplog,"Pack %d This pack is a wrong pack!\n",k);break;
}
if(fclose(fplog)){
printf("Can not close file!\n");
exit(0);
} //close the log file
}
WaitForSingleObject(hEvent, INFINITE);
memcpy(pbBuf, pbRead, 2048);
if((fplog=fopen(LogFileName,"a+"))==NULL){
printf("can not open file!\n");
exit(0);
}
OnePackUpdate(pbBuf,L);
switch(L->m_Pack_Type){
case L->NV_PCK:fprintf(fplog,"Pack %d NV_PCK *** VOB_ID:%d CELL_ID:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3);break;
case L->RDI_PCK:fprintf(fplog,"Pack %d RDI_PCK *** SCR:%d \n",k,L->m_Pack_para1);break;
case L->V_Pack:fprintf(fplog,"Pack %d Video Pack *** PTS:%d DTS:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3);break;
case L->A_Pack:fprintf(fplog,
"Pack %d Audio Pack *** StreamID:%d Codec:%d PTS:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3,L->m_Pack_para4);
break;
case L->SP_Pack:fprintf(fplog,"Pack %d Sub-Picture Pack *** StreamID:%d PTS:%d SCR:%d \n",
k,L->m_Pack_para1,L->m_Pack_para2,L->m_Pack_para3);break;
default : fprintf(fplog,"Pack %d This pack is a wrong pack!\n",k);break;
}
if(fclose(fplog)){
printf("Can not close file!\n");
exit(0);
} //close the log file
CloseHandle(hEvent);
CloseHandle(hFile);
delete pbRead;
delete pbBuf;
}
i++;
}
free(L);
MessageBox("Output Finished!");
}
void CDVDUpdateView::OnChangeEditVobucount()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CFormView::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
CString tstr;
GetDlgItemText(IDC_EDIT_VOBUCOUNT,tstr);
if (tstr != "")
{
UpdateData(TRUE);
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
ConditionalView(head, m_EditVobustart, m_EditVobucount, T1, T2, T3);
}
}
void CDVDUpdateView::OnChangeEditVobustart()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CFormView::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
CString tstr;
GetDlgItemText(IDC_EDIT_VOBUSTART,tstr);
if (tstr != "")
{
UpdateData(TRUE);
CString T1;
CString T2;
CString T3;
int index1;
int index2;
int index3;
index1=m_ComboAdostrmid.GetCurSel();
m_ComboAdostrmid.GetLBText(index1,T1);
index2=m_ComboAdocodec.GetCurSel();
m_ComboAdocodec.GetLBText(index2,T2);
index3=m_ComboSubpicstrmid.GetCurSel();
m_ComboSubpicstrmid.GetLBText(index3,T3);
m_ListVobu.DeleteAllItems();//清空VOBU List中的所有内容
m_ListVdo.DeleteAllItems();
m_ListAdo.DeleteAllItems();
m_ListSubpic.DeleteAllItems();
m_ListPack.DeleteAllItems();
ConditionalView(head, m_EditVobustart, m_EditVobucount, T1, T2, T3);
}
}