| 1 |
#include "stdafx.h" |
| 2 |
#include "Capture.h" |
| 3 |
#include "CSkinPlugin.h" |
| 4 |
#include "CVideoMode.h" |
| 5 |
#include "CConfigMode.h" |
| 6 |
|
| 7 |
// 内部定数 |
| 8 |
const int WW = 512, WH = 384; // 窓サイズ |
| 9 |
|
| 10 |
// 内部グローバル |
| 11 |
char *g_VideoStateString[2] = {lang(Paused), lang(Recording)}; |
| 12 |
|
| 13 |
/* |
| 14 |
* コンストラクタ |
| 15 |
*/ |
| 16 |
CVideoMode::CVideoMode(){ |
| 17 |
int wide = WW-TILE_UNIT*2, win = wide-TILE_UNIT*2; |
| 18 |
m_VideoWindow.Init((g_DispWidth-WW)/2-TILE_UNIT, (g_DispHeight-WH)/2, |
| 19 |
WW, WH, lang(Video), &m_Interface, true); |
| 20 |
|
| 21 |
m_PictureGroup.Init(TILE_UNIT, TILE_UNIT*2, |
| 22 |
wide, TILE_UNIT*5, lang(CaptureScreenShot), &m_VideoWindow); |
| 23 |
m_PictureExpr.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, wide-TILE_UNIT*2, TILE_UNIT, |
| 24 |
FlashIn("%s F11: %s / F12: %s", lang(Kome), lang(ChangeCapMode), |
| 25 |
lang(CaptureScreenShot)), &m_PictureGroup, 0, 1); |
| 26 |
m_PictureInfo.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, |
| 27 |
wide-TILE_UNIT*2, TILE_UNIT, "", &m_PictureGroup, 0, 1); |
| 28 |
int i, trw = WW-TILE_UNIT*12; |
| 29 |
m_QualityLabel.Init(TILE_UNIT, TILE_UNIT*3+TILE_QUAD, TILE_UNIT*8, TILE_UNIT, |
| 30 |
lang(PictureQuality), &m_PictureGroup, 0, 1); |
| 31 |
string qtystr[4] = {lang(Quality1), lang(Quality2), lang(Quality4), lang(Quality8)}; |
| 32 |
for(i = 0; i<4; i++) m_Quality[i].Init( |
| 33 |
TILE_UNIT*9+trw*i/4, TILE_UNIT*3+TILE_QUAD, |
| 34 |
trw*(i+1)/4-trw*i/4-TILE_HALF, TILE_UNIT, |
| 35 |
(char *)qtystr[i].c_str(), &m_PictureGroup, i ? &m_Quality[i-1] : NULL); |
| 36 |
|
| 37 |
m_VideoGroup.Init(TILE_UNIT, TILE_UNIT*8, |
| 38 |
wide, TILE_UNIT*9, lang(RecordVideo), &m_VideoWindow); |
| 39 |
m_VideoExpr.Init(TILE_UNIT, TILE_UNIT+TILE_QUAD, wide-TILE_UNIT*2, TILE_UNIT, |
| 40 |
FlashIn("%s Ctrl + F12: %s / Ctrl + Shift + F12: %s", lang(Kome), |
| 41 |
lang(BeginRecording), lang(StopRecording)), &m_VideoGroup, 0, 1); |
| 42 |
m_VideoInfo.Init(TILE_UNIT, TILE_UNIT*2+TILE_QUAD, |
| 43 |
wide-TILE_UNIT*2, TILE_UNIT, "", &m_VideoGroup, 0, 1); |
| 44 |
m_StartButton.Init(TILE_UNIT, TILE_UNIT*3+TILE_HALF+TILE_QUAD, |
| 45 |
TILE_UNIT*5, TILE_UNIT, lang(BeginRecording), &m_VideoGroup); |
| 46 |
m_StartButton.SetSound(false); |
| 47 |
m_StopButton.Init(TILE_UNIT*6+TILE_HALF, TILE_UNIT*3+TILE_HALF+TILE_QUAD, |
| 48 |
TILE_UNIT*5, TILE_UNIT, lang(StopRecording), &m_VideoGroup); |
| 49 |
m_StopButton.SetSound(false); |
| 50 |
m_RewindButton.Init(TILE_UNIT*11+TILE_HALF*2, TILE_UNIT*3+TILE_HALF+TILE_QUAD, |
| 51 |
TILE_UNIT*5, TILE_UNIT, lang(Rewind), &m_VideoGroup); |
| 52 |
m_ForwardButton.Init(TILE_UNIT*16+TILE_HALF*3, TILE_UNIT*3+TILE_HALF+TILE_QUAD, |
| 53 |
TILE_UNIT*5, TILE_UNIT, lang(Forward), &m_VideoGroup); |
| 54 |
int tw = wide-TILE_UNIT*2+TILE_HALF; |
| 55 |
m_ExceptPause.Init(TILE_UNIT, TILE_UNIT*5+TILE_QUAD, |
| 56 |
tw/2-TILE_HALF, TILE_UNIT, lang(DontRecordWhilePaused), &m_VideoGroup); |
| 57 |
m_OnlyPhotoMode.Init(TILE_UNIT+tw/2, TILE_UNIT*5+TILE_QUAD, |
| 58 |
tw-tw/2-TILE_HALF, TILE_UNIT, lang(RecordOnlyInRecordingMode), &m_VideoGroup); |
| 59 |
m_ExceptPause.SetCheck(1); |
| 60 |
m_OnlyPhotoMode.SetCheck(1); |
| 61 |
m_DownsampleLabel.Init(TILE_UNIT, TILE_UNIT*6+TILE_QUAD, TILE_UNIT*8, TILE_UNIT, |
| 62 |
"Downsample", &m_VideoGroup, 0, 1); |
| 63 |
string dnsplstr[3] = {"None", "1/2", "1/4"}; |
| 64 |
for(i = 0; i<3; i++) m_Downsample[i].Init( |
| 65 |
TILE_UNIT*9+trw*i/3, TILE_UNIT*6+TILE_QUAD, |
| 66 |
trw*(i+1)/3-trw*i/3-TILE_HALF, TILE_UNIT, |
| 67 |
(char *)dnsplstr[i].c_str(), &m_VideoGroup, i ? &m_Downsample[i-1] : NULL); |
| 68 |
m_FormatLabel.Init(TILE_UNIT, TILE_UNIT*7+TILE_QUAD, TILE_UNIT*8, TILE_UNIT, |
| 69 |
"VideoFormat", &m_VideoGroup, 0, 1); |
| 70 |
string vfmtstr[3] = {"BMP", "AVI"}; |
| 71 |
for(i = 0; i<2; i++) m_Format[i].Init( |
| 72 |
TILE_UNIT*9+trw*i/2, TILE_UNIT*7+TILE_QUAD, |
| 73 |
trw*(i+1)/2-trw*i/2-TILE_HALF, TILE_UNIT, |
| 74 |
(char *)vfmtstr[i].c_str(), &m_VideoGroup, i ? &m_Format[i-1] : NULL); |
| 75 |
// m_VideoSound.Init(TILE_UNIT, TILE_UNIT*8+TILE_QUAD, |
| 76 |
// tw/2-TILE_HALF, TILE_UNIT, "VideoSound (AVI only)", &m_VideoGroup); |
| 77 |
// m_VideoSound.SetCheck(1); |
| 78 |
} |
| 79 |
|
| 80 |
/* |
| 81 |
* 設定読込 |
| 82 |
*/ |
| 83 |
char *CVideoMode::LoadInterfaceSetting( |
| 84 |
char *str // 対象文字列 |
| 85 |
){ |
| 86 |
char *eee; |
| 87 |
int picturequality = 2; |
| 88 |
bool exceptpause = true, onlyphotomode = true; |
| 89 |
if(str && g_ConfigVersion>=2.03f){ |
| 90 |
if(!(str = BeginBlock(eee = str, "VideoMode"))) throw CSynErr(eee); |
| 91 |
if(!(str = AsgnInteger(eee = str, "PictureQuality", &picturequality))) throw CSynErr(eee); |
| 92 |
if(!(str = AsgnYesNo(eee = str, "ExceptPause", &exceptpause))) throw CSynErr(eee); |
| 93 |
if(!(str = AsgnYesNo(eee = str, "OnlyPhotoMode", &onlyphotomode))) throw CSynErr(eee); |
| 94 |
if(!(str = EndBlock(eee = str))) throw CSynErr(eee, ERR_ENDBLOCK); |
| 95 |
} |
| 96 |
m_Quality[picturequality].SetCheck(); |
| 97 |
m_ExceptPause.SetCheck(exceptpause); |
| 98 |
m_OnlyPhotoMode.SetCheck(onlyphotomode); |
| 99 |
return str; |
| 100 |
} |
| 101 |
|
| 102 |
/* |
| 103 |
* 設定保存 |
| 104 |
*/ |
| 105 |
void CVideoMode::SaveInterfaceSetting( |
| 106 |
FILE *file // ファイル |
| 107 |
){ |
| 108 |
fprintf(file, "VideoMode{\n"); |
| 109 |
fprintf(file, "\tPictureQuality = %d;\n", m_Quality->GetNumber()); |
| 110 |
fprintf(file, "\tExceptPause = %s;\n", YESNO[m_ExceptPause.GetCheck()]); |
| 111 |
fprintf(file, "\tOnlyPhotoMode = %s;\n", YESNO[m_OnlyPhotoMode.GetCheck()]); |
| 112 |
fprintf(file, "}\n\n"); |
| 113 |
} |
| 114 |
|
| 115 |
/* |
| 116 |
* モードを有効化 |
| 117 |
*/ |
| 118 |
void CVideoMode::EnterInterface(){ |
| 119 |
ms_ModeLabel = lang(Video); |
| 120 |
m_PictureInfo.SetText(""); |
| 121 |
m_VideoInfo.SetText(""); |
| 122 |
} |
| 123 |
|
| 124 |
/* |
| 125 |
* 入力チェック |
| 126 |
*/ |
| 127 |
void CVideoMode::ScanInputInterface(){ |
| 128 |
m_Interface.ScanInput(); |
| 129 |
if(m_VideoWindow.CheckClose()){ |
| 130 |
SetNeutral(); |
| 131 |
return; |
| 132 |
} |
| 133 |
if(m_StartButton.IsPushed()) StartVideoCapture(); |
| 134 |
if(m_StopButton.IsPushed()) StopVideoCapture(); |
| 135 |
if(m_RewindButton.IsPushed()) g_VideoFrame = 0; |
| 136 |
if(m_ForwardButton.IsPushed()) CountVideoBMP(); |
| 137 |
m_PictureInfo.SetText(FlashIn("%s: %d", lang(Count), g_PictureCount)); |
| 138 |
m_VideoInfo.SetText(FlashIn("%s: %d / %s", lang(Frame), |
| 139 |
g_VideoFrame, g_VideoStateString[g_VideoState])); |
| 140 |
} |
| 141 |
|
| 142 |
/* |
| 143 |
* 撮影画質取得 |
| 144 |
*/ |
| 145 |
int CVideoMode::GetPictureQuality(){ |
| 146 |
return 1<<m_Quality->GetNumber(); |
| 147 |
} |