📄 fileinfodialog.cpp
字号:
//this file is part of eMule
// added by quekky
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// FileInfoDialog.cpp : implementation file
#include "stdafx.h"
#include "eMule.h"
#include "FileInfoDialog.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
// CFileInfoDialog dialog
IMPLEMENT_DYNAMIC(CFileInfoDialog, CDialog)
CFileInfoDialog::CFileInfoDialog(CPartFile* pfile)
: CDialog(CFileInfoDialog::IDD, 0)
, ARoundBitrate(FALSE)
{
m_file = pfile;
}
BOOL CFileInfoDialog::OnInitDialog(){
CDialog::OnInitDialog();
ARoundBitrate = 1;
CDialog::UpdateData(FALSE);
Localize();
UpdateData();
return true;
}
void CFileInfoDialog::UpdateData(){
CFile* file = &m_file->m_hpartfile;
try{
char stemp[5];
CString buffer;
uint32 u32;
uint16 u16;
if(!file)
return;
file->Seek(8, CFile::begin);
file->Read(stemp, 4);
stemp[4] = 0;
if(strcmp(stemp, "AVI ")) // not avi
return;
// filesize
long size;
file->Seek(4, CFile::begin);
file->Read(&size, 4);
buffer.Format("%.2f MB",((float)size / 1024 / 1024));
GetDlgItem(IDC_FILESIZE)->SetWindowText(buffer);
// header sizes
long Aviheadersize,Vheadersize;
file->Seek(28, CFile::begin);
file->Read(&Aviheadersize, 4);
long Aviheaderstart = 32;
long Vheaderstart = Aviheaderstart + Aviheadersize + 20;
// misc
long Microsec;
file->Seek(Aviheaderstart, CFile::begin);
file->Read(&Microsec, 4);
long LengthInFrames;
file->Seek(Aviheaderstart + 16, CFile::begin);
file->Read(&LengthInFrames, 4);
// fps
double fps = (double)1000000 / (double)Microsec;
buffer.Format("%.2f", fps);
GetDlgItem(IDC_VFPS)->SetWindowText(buffer);
// length
long LengthInSec = (long)(LengthInFrames / fps);
GetDlgItem(IDC_LENGTH)->SetWindowText(CastSecondsToHM(LengthInSec));
// video width
file->Seek(Aviheaderstart + 32, CFile::begin);
file->Read(&u32, 4);
buffer.Format("%d", u32);
GetDlgItem(IDC_VWIDTH)->SetWindowText(buffer);
// video height
file->Seek(Aviheaderstart + 36, CFile::begin);
file->Read(&u32, 4);
buffer.Format("%d", u32);
GetDlgItem(IDC_VHEIGHT)->SetWindowText(buffer);
// video codec
file->Seek(Vheaderstart + 4, CFile::begin);
file->Read(stemp, 4);
stemp[4] = 0;
if(!strcmp(stemp, "div3") || !strcmp(stemp, "DIV3"))
GetDlgItem(IDC_VCODEC)->SetWindowText("DivX;-) MPEG4 v3");
else if(!strcmp(stemp, "div4") || !strcmp(stemp, "DIV4"))
GetDlgItem(IDC_VCODEC)->SetWindowText("DivX;-) MPEG4 v4");
else if(!strcmp(stemp, "divx") || !strcmp(stemp, "DIVX"))
GetDlgItem(IDC_VCODEC)->SetWindowText("DivX 4/5");
else if(!strcmp(stemp, "div2") || !strcmp(stemp, "DIV2"))
GetDlgItem(IDC_VCODEC)->SetWindowText("MS MPEG4 v2");
else if(!strcmp(stemp, "mp43"))
GetDlgItem(IDC_VCODEC)->SetWindowText("Microcrap MPEG4 v3");
else
GetDlgItem(IDC_VCODEC)->SetWindowText(stemp);
// header sizes
file->Seek(Aviheaderstart + Aviheadersize + 4, CFile::begin);
file->Read(&Vheadersize, 4);
long Aheaderstart = Vheaderstart + Vheadersize + 8; //first databyte of audio header
long Astrhsize;
file->Seek(Aheaderstart - 4, CFile::begin);
file->Read(&Astrhsize, 4);
// audio codec
file->Seek(Aheaderstart + Astrhsize + 8, CFile::begin);
file->Read(&u16, 2);
switch(u16)
{
case 0:
case 1:
GetDlgItem(IDC_ACODEC)->SetWindowText("PCM");
break;
case 353:
GetDlgItem(IDC_ACODEC)->SetWindowText("DivX;-) Audio");
break;
case 85:
GetDlgItem(IDC_ACODEC)->SetWindowText("MPEG Layer 3");
break;
case 8192:
GetDlgItem(IDC_ACODEC)->SetWindowText("AC3-Digital");
break;
default:
buffer.Format("Unknown (%d)", u16);
GetDlgItem(IDC_ACODEC)->SetWindowText(buffer);
break;
}
// audio channel
file->Seek(Aheaderstart + 2 + Astrhsize + 8, CFile::begin);
file->Read(&u16, 2);
switch(u16)
{
case 1:
GetDlgItem(IDC_ACHANNEL)->SetWindowText("1 (mono)");
break;
case 2:
GetDlgItem(IDC_ACHANNEL)->SetWindowText("2 (stereo)");
break;
case 5:
GetDlgItem(IDC_ACHANNEL)->SetWindowText("5.1 (surround)");
break;
default:
buffer.Format("%d", u16);
GetDlgItem(IDC_ACHANNEL)->SetWindowText(buffer);
break;
}
// audio samplerate
file->Seek(Aheaderstart + 4 + Astrhsize + 8, CFile::begin);
file->Read(&u32, 2);
buffer.Format("%d", u32);
GetDlgItem(IDC_ASAMPLERATE)->SetWindowText(buffer);
// audio bitrate
file->Seek(Aheaderstart + 8 + Astrhsize + 8, CFile::begin);
file->Read(&Abitrate, 4);
OnBnClickedRoundbit();
// video bitrate
buffer.Format("%d Kbit/s", (size / LengthInSec - Abitrate) / 128);
GetDlgItem(IDC_VBITRATE)->SetWindowText(buffer);
}
catch(CFileException* error){
OUTPUT_DEBUG_TRACE();
error->Delete(); //memleak fix
return;
}
}
CFileInfoDialog::~CFileInfoDialog()
{
}
void CFileInfoDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_ROUNDBIT, ARoundBitrate);
}
BEGIN_MESSAGE_MAP(CFileInfoDialog, CDialog)
ON_BN_CLICKED(IDC_ROUNDBIT, OnBnClickedRoundbit)
END_MESSAGE_MAP()
// CFileInfoDialog message handlers
void CFileInfoDialog::OnBnClickedRoundbit()
{
char buffer[100];
if(Abitrate != 0)
{
CDialog::UpdateData();
if(ARoundBitrate)
{
long t = Abitrate / (1024 / 8);
if(t>=246 && t<=260)
GetDlgItem(IDC_ABITRATE)->SetWindowText("256 Kbit/s");
else if(t>=216 && t<=228)
GetDlgItem(IDC_ABITRATE)->SetWindowText("224 Kbit/s");
else if(t>=187 && t<=196)
GetDlgItem(IDC_ABITRATE)->SetWindowText("192 Kbit/s");
else if(t>=156 && t<=164)
GetDlgItem(IDC_ABITRATE)->SetWindowText("160 Kbit/s");
else if(t>=124 && t<=132)
GetDlgItem(IDC_ABITRATE)->SetWindowText("128 Kbit/s");
else if(t>=108 && t<=116)
GetDlgItem(IDC_ABITRATE)->SetWindowText("112 Kbit/s");
else if(t>=92 && t<=100)
GetDlgItem(IDC_ABITRATE)->SetWindowText("96 Kbit/s");
else if(t>=60 && t<=68)
GetDlgItem(IDC_ABITRATE)->SetWindowText("64 Kbit/s");
else
{
sprintf(buffer, "%d Kbit/s", t);
GetDlgItem(IDC_ABITRATE)->SetWindowText(buffer);
}
}
else
{
sprintf(buffer, "%d Kbit/s", Abitrate / (1024 / 8));
GetDlgItem(IDC_ABITRATE)->SetWindowText(buffer);
}
}
else
GetDlgItem(IDC_ABITRATE)->SetWindowText("");
}
void CFileInfoDialog::Localize(){
GetDlgItem(IDC_FD_XI1)->SetWindowText(GetResString(IDS_FD_SIZE));
GetDlgItem(IDC_FD_XI2)->SetWindowText(GetResString(IDS_LENGTH)+":");
GetDlgItem(IDC_FD_XI3)->SetWindowText(GetResString(IDS_VIDEO));
GetDlgItem(IDC_FD_XI4)->SetWindowText(GetResString(IDS_AUDIO));
GetDlgItem(IDOK)->SetWindowText( GetResString(IDS_FD_CLOSE));
GetDlgItem(IDC_FD_XI5)->SetWindowText( GetResString(IDS_CODEC)+":");
GetDlgItem(IDC_FD_XI6)->SetWindowText( GetResString(IDS_CODEC)+":");
GetDlgItem(IDC_FD_XI7)->SetWindowText( GetResString(IDS_BITRATE)+":");
GetDlgItem(IDC_FD_XI8)->SetWindowText( GetResString(IDS_BITRATE)+":");
GetDlgItem(IDC_FD_XI9)->SetWindowText( GetResString(IDS_WIDTH)+":");
GetDlgItem(IDC_FD_XI11)->SetWindowText( GetResString(IDS_HEIGHT)+":");
GetDlgItem(IDC_FD_XI13)->SetWindowText( GetResString(IDS_FPS)+":");
GetDlgItem(IDC_FD_XI10)->SetWindowText( GetResString(IDS_CHANNELS)+":");
GetDlgItem(IDC_FD_XI12)->SetWindowText( GetResString(IDS_SAMPLERATE)+":");
GetDlgItem(IDC_ROUNDBIT)->SetWindowText( GetResString(IDS_ROUNDBITRATE)+":");
CString title=GetResString(IDS_FILEINFO); title.Remove('&');
SetWindowText(title);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -