博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectShowNet 使用摄像头录像+录音
阅读量:6916 次
发布时间:2019-06-27

本文共 87685 字,大约阅读时间需要 292 分钟。

http://www.cnblogs.com/endv/p/6052511.html

1 // ------------------------------------------------------------------   2 // CaptureTest.cs   3 // Sample application to show the DirectX.Capture class library.   4 //   5 // History:   6 //    2003-Jan-25        BL        - created   7 //   8 // Copyright (c) 2003 Brian Low   9 // ------------------------------------------------------------------  10   11 using DirectShowLib;  12 using DirectX.Capture;  13 using System;  14 using System.Diagnostics;  15 using System.Drawing;  16 using System.Runtime.InteropServices;  17 using System.Text;  18 using System.Windows.Forms;  19   20 namespace CaptureTest  21 {  22     public class CaptureTest : System.Windows.Forms.Form  23     {  24         ///   25         /// 应用程序的主要入口点   26         ///   27         [STAThread]  28         static void Main()  29         {  30             AppDomain currentDomain = AppDomain.CurrentDomain;  31             Application.Run(new CaptureTest());  32             GC.Collect();  33             GC.WaitForPendingFinalizers();  34         }  35   36         // kernel32.dll是Windows9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,  37         // 当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域  38         [DllImport("kernel32.dll")]  39         static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName);  40   41         [DllImport("kernel32.dll")]  42         static extern uint WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);  43   44         const int WM_GRAPHNOTIFY = 0x8000 + 1;  45         private long iDroppedBefore = 0;  46         private DateTime dtBefore;  47         private IMediaEventEx mediaEvent = null;  48         private int CaptureResult;  49         private 捕获 capture = null;  50         private Filters filters = new Filters();  51         private Size m_FrameSize; // Reading the value from capture.Framesize derenders the graph  52   53         public CaptureTest()  54         {  55             InitializeComponent(); // 所需的窗体设计器支持  56   57             LoadDevices();//负载设备  58   59             if (capture != null)  60             {  61                 LoadDeviceSettings();//加载设备设置  62                 LoadCompressors();//加载压缩机  63             }  64   65             // 更新主菜单中的许多有趣的工作,这个示例发生在这里  66             try { updateMenu(); } catch { }  67   68             // 由于压缩机设置不在菜单上,不需要再做 updatemenu 。  69             // 已后要做的 updatemenu 由于其中一个调用重置这些。  70   71             if (capture != null)  72             {  73                 LoadCompressorSettings();//加载压缩机设置  74             }  75         }  76   77   78         #region 加载  79         //加载设备  80         protected void LoadDevices()  81         {  82             int x;  83             int iVideoDeviceIndex = -1;  84             int iAudioDeviceIndex = -1;  85             StringBuilder sbOut = new StringBuilder(500);  86   87             string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini";  88   89             GetPrivateProfileString("Devices", "VideoDevice", "", sbOut, 500, sConfigFile);  90   91             if (sbOut.Length > 0)  92             {  93                 for (x = 0; x < filters.VideoInputDevices.Count; x++)  94                 {  95                     if (filters.VideoInputDevices[x].Name == sbOut.ToString())  96                     {  97                         iVideoDeviceIndex = x;  98                         break;  99                     } 100                 } 101             } 102  103             GetPrivateProfileString("Devices", "AudioDevice", "", sbOut, 500, sConfigFile); 104  105  106             if (sbOut.Length > 0) 107             { 108                 for (x = 0; x < filters.AudioInputDevices.Count; x++) 109                 { 110                     if (filters.AudioInputDevices[x].Name == sbOut.ToString()) 111                     { 112                         iAudioDeviceIndex = x; 113                         break; 114                     } 115                 } 116             } 117  118             if ((iVideoDeviceIndex >= 0) || (iAudioDeviceIndex >= 0)) 119             { 120                 Filter i, j; 121  122                 if (iVideoDeviceIndex >= 0) 123                     i = filters.VideoInputDevices[iVideoDeviceIndex]; 124                 else 125                     i = null; 126  127                 if (iAudioDeviceIndex >= 0) 128                     j = filters.AudioInputDevices[iAudioDeviceIndex]; 129                 else 130                     j = null; 131  132                 capture = new 捕获(i, j); 133  134                 capture.CaptureComplete += new EventHandler(OnCaptureComplete); 135  136                 if (iVideoDeviceIndex >= 0) 137                 { 138                     GetPrivateProfileString("Devices", "VideoSource", "", sbOut, 500, sConfigFile); 139  140                     for (x = 0; x < capture.VideoSources.Count; x++) 141                     { 142                         if (capture.VideoSources[x].Name == sbOut.ToString()) 143                         { 144                             capture.VideoSource = capture.VideoSources[x]; 145                             break; 146                         } 147                     } 148                 } 149  150                 if (iAudioDeviceIndex >= 0) 151                 { 152                     GetPrivateProfileString("Devices", "AudioSource", "", sbOut, 500, sConfigFile); 153  154                     for (x = 0; x < capture.AudioSources.Count; x++) 155                     { 156                         if (capture.AudioSources[x].Name == sbOut.ToString()) 157                         { 158                             capture.AudioSource = capture.AudioSources[x]; 159                             break; 160                         } 161                     } 162                 } 163             } 164         } 165  166         //加载设备设置 167         protected void LoadDeviceSettings() 168         { 169             StringBuilder sbOut = new StringBuilder(500); 170             string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 171  172             if (capture.VideoDevice != null) 173             { 174                 GetPrivateProfileString("DeviceSettings", "FrameRate", "", sbOut, 500, sConfigFile); 175                 if (sbOut.Length > 0) 176                     capture.FrameRate = Convert.ToDouble(sbOut.ToString()); 177  178                 GetPrivateProfileString("DeviceSettings", "VideoWidth", "", sbOut, 500, sConfigFile); 179                 if (sbOut.Length > 0) 180                 { 181                     Size size = new Size(Convert.ToInt32(sbOut.ToString()), 0); 182  183                     GetPrivateProfileString("DeviceSettings", "VideoHeight", "", sbOut, 500, sConfigFile); 184                     if (sbOut.Length > 0) 185                     { 186                         size.Height = Convert.ToInt32(sbOut.ToString()); 187                         capture.FrameSize = size; 188                     } 189                 } 190             } 191  192             if (capture.AudioDevice != null) 193             { 194                 GetPrivateProfileString("DeviceSettings", "AudioChannel", "", sbOut, 500, sConfigFile); 195                 if (sbOut.Length > 0) 196                 { 197                     capture.AudioChannels = Convert.ToInt16(sbOut.ToString()); 198                 } 199  200                 GetPrivateProfileString("DeviceSettings", "AudioRate", "", sbOut, 500, sConfigFile); 201                 if (sbOut.Length > 0) 202                 { 203                     capture.AudioSamplingRate = Convert.ToInt32(sbOut.ToString()); 204                 } 205  206                 GetPrivateProfileString("DeviceSettings", "AudioSize", "", sbOut, 500, sConfigFile); 207                 if (sbOut.Length > 0) 208                 { 209                     capture.AudioSampleSize = Convert.ToInt16(sbOut.ToString()); 210                 } 211  212                 GetPrivateProfileString("DeviceSettings", "AudioChannel", "", sbOut, 500, sConfigFile); 213                 if (sbOut.Length > 0) 214                 { 215                     capture.AudioChannels = Convert.ToInt16(sbOut.ToString()); 216                 } 217             } 218  219         } 220         //加载压缩机 221         protected void LoadCompressors() 222         { 223             int x; 224             StringBuilder sbOut = new StringBuilder(500); 225             string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 226  227             if (capture.VideoDevice != null) 228             { 229                 GetPrivateProfileString("Compressor", "VideoCompressor", "", sbOut, 500, sConfigFile); 230  231                 if (sbOut.Length > 0) 232                 { 233                     for (x = 0; x < filters.VideoCompressors.Count; x++) 234                     { 235                         if (filters.VideoCompressors[x].Name == sbOut.ToString()) 236                         { 237                             capture.VideoCompressor = filters.VideoCompressors[x]; 238                             break; 239                         } 240                     } 241                 } 242             } 243  244             if (capture.AudioDevice != null) 245             { 246                 GetPrivateProfileString("Compressor", "AudioCompressor", "", sbOut, 500, sConfigFile); 247  248                 for (x = 0; x < filters.AudioCompressors.Count; x++) 249                 { 250                     if (filters.AudioCompressors[x].Name == sbOut.ToString()) 251                     { 252                         capture.AudioCompressor = filters.AudioCompressors[x]; 253                         break; 254                     } 255                 } 256             } 257         } 258         //加载压缩机设置 259         protected void LoadCompressorSettings() 260         { 261             StringBuilder sbOut = new StringBuilder(500); 262             string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 263  264             if (capture.VideoCompressor != null) 265             { 266                 try 267                 { 268                     VideoCompressorCaps i = capture.VideoCompressorCaps; 269  270                     GetPrivateProfileString("Compressor", "KeyFrameRate", "", sbOut, 500, sConfigFile); 271                     if (sbOut.Length > 0) 272                         i.KeyFrameRate = Convert.ToInt32(sbOut.ToString()); 273  274                     GetPrivateProfileString("Compressor", "PFrames", "", sbOut, 500, sConfigFile); 275                     if (sbOut.Length > 0) 276                         i.PFramesPerKeyFrame = Convert.ToInt32(sbOut.ToString()); 277  278                     GetPrivateProfileString("Compressor", "WindowSize", "", sbOut, 500, sConfigFile); 279                     if (sbOut.Length > 0) 280                         i.WindowSize = Convert.ToInt64(sbOut.ToString()); 281  282                     GetPrivateProfileString("Compressor", "Quality", "", sbOut, 500, sConfigFile); 283                     if (sbOut.Length > 0) 284                         i.Quality = Convert.ToInt32(sbOut.ToString()); 285                 } 286                 catch { } 287             } 288         } 289  290         //保存默认设置  "\\..\\Config.ini" 291         protected void SaveDefaults() 292         { 293             string sConfigFile = Application.LocalUserAppDataPath + "\\..\\Config.ini"; 294  295             if (capture != null) 296             { 297                 if (capture.VideoDevice != null) 298                 { 299                     WritePrivateProfileString("Devices", "VideoDevice", capture.VideoDevice.Name, sConfigFile); 300                     WritePrivateProfileString("DeviceSettings", "FrameRate", capture.FrameRate.ToString(), sConfigFile); 301                     WritePrivateProfileString("DeviceSettings", "VideoWidth", capture.FrameSize.Width.ToString(), sConfigFile); 302                     WritePrivateProfileString("DeviceSettings", "VideoHeight", capture.FrameSize.Height.ToString(), sConfigFile); 303                 } 304                 else 305                 { 306                     WritePrivateProfileString("Devices", "VideoDevice", "", sConfigFile); 307                     WritePrivateProfileString("DeviceSettings", "FrameRate", "", sConfigFile); 308                     WritePrivateProfileString("DeviceSettings", "VideoWidth", "", sConfigFile); 309                     WritePrivateProfileString("DeviceSettings", "VideoHeight", "", sConfigFile); 310                 } 311                 if (capture.AudioDevice != null) 312                 { 313                     WritePrivateProfileString("Devices", "AudioDevice", capture.AudioDevice.Name, sConfigFile); 314                     WritePrivateProfileString("DeviceSettings", "AudioChannel", capture.AudioChannels.ToString(), sConfigFile); 315                     WritePrivateProfileString("DeviceSettings", "AudioRate", capture.AudioSamplingRate.ToString(), sConfigFile); 316                     WritePrivateProfileString("DeviceSettings", "AudioSize", capture.AudioSampleSize.ToString(), sConfigFile); 317                 } 318                 else 319                 { 320                     WritePrivateProfileString("Devices", "AudioDevice", "", sConfigFile); 321                     WritePrivateProfileString("DeviceSettings", "AudioChannel", "", sConfigFile); 322                     WritePrivateProfileString("DeviceSettings", "AudioRate", "", sConfigFile); 323                     WritePrivateProfileString("DeviceSettings", "AudioSize", "", sConfigFile); 324                 } 325                 if (capture.VideoCompressor != null) 326                 { 327                     WritePrivateProfileString("Compressor", "VideoCompressor", capture.VideoCompressor.Name, sConfigFile); 328  329                     CompressionCaps i = CompressionCaps.None; 330  331                     try 332                     { 333                         i = capture.VideoCompressorCaps.GetCaps; 334                     } 335                     catch { } 336  337                     if ((i & CompressionCaps.CanKeyFrame) > 0) 338                         WritePrivateProfileString("Compressor", "KeyFrameRate", capture.VideoCompressorCaps.KeyFrameRate.ToString(), sConfigFile); 339  340                     if ((i & CompressionCaps.CanBFrame) > 0) 341                         WritePrivateProfileString("Compressor", "PFrames", capture.VideoCompressorCaps.PFramesPerKeyFrame.ToString(), sConfigFile); 342  343                     if ((i & CompressionCaps.CanWindow) > 0) 344                         WritePrivateProfileString("Compressor", "WindowSize", capture.VideoCompressorCaps.WindowSize.ToString(), sConfigFile); 345  346                     if ((i & CompressionCaps.CanQuality) > 0) 347                         WritePrivateProfileString("Compressor", "Quality", capture.VideoCompressorCaps.Quality.ToString(), sConfigFile); 348  349                 } 350                 else 351                 { 352                     WritePrivateProfileString("Compressor", "VideoCompressor", "", sConfigFile); 353                     WritePrivateProfileString("Compressor", "KeyFrameRate", "", sConfigFile); 354                     WritePrivateProfileString("Compressor", "PFrames", "", sConfigFile); 355                     WritePrivateProfileString("Compressor", "WindowSize", "", sConfigFile); 356                     WritePrivateProfileString("Compressor", "Quality", "", sConfigFile); 357                 } 358                 if (capture.AudioCompressor != null) 359                 { 360                     WritePrivateProfileString("Compressor", "AudioCompressor", capture.AudioCompressor.Name, sConfigFile); 361                 } 362                 else 363                 { 364                     WritePrivateProfileString("Compressor", "AudioCompressor", "", sConfigFile); 365                 } 366                 if (capture.VideoSource != null) 367                 { 368                     WritePrivateProfileString("Devices", "VideoSource", capture.VideoSource.Name, sConfigFile); 369                 } 370                 else 371                 { 372                     WritePrivateProfileString("Devices", "VideoSource", "", sConfigFile); 373                 } 374                 if (capture.AudioSource != null) 375                 { 376                     WritePrivateProfileString("Devices", "AudioSource", capture.AudioSource.Name, sConfigFile); 377                 } 378                 else 379                 { 380                     WritePrivateProfileString("Devices", "AudioSource", "", sConfigFile); 381                 } 382  383 #if DEBUG 384                 foreach (PropertyPage p in capture.PropertyPages) 385                 { 386                     if (p.SupportsPersisting) 387                     { 388                         // Doesn't seem to work right 389                         Debug.WriteLine(p.Name); 390                     } 391                 } 392 #endif 393             } 394         } 395  396  397         //更新主菜单中的许多有趣的工作,这个示例发生在这里 398         private void updateMenu() 399         { 400             MenuItem m; 401             Filter f; 402             Source s; 403             Source current;//当前 404             PropertyPage p; 405             Control oldPreviewWindow = null; 406  407             // 正确的长宽比 Correct aspect ratio 408             if ((capture != null) && (capture.VideoDevice != null)) 409             { 410                 //帧大小 411                 m_FrameSize = capture.FrameSize; 412                 VideoWindowResize(); 413             } 414  415             // Give our window handle to the NotifyWindow so we'll get called about 416             // events of interest 417             if (capture != null) 418             { 419                 mediaEvent = capture.MediaEventEx; 420                 int hr = mediaEvent.SetNotifyWindow(this.Handle, WM_GRAPHNOTIFY, IntPtr.Zero); 421             } 422  423             btnCue.Enabled = capture != null; 424             btnStart.Enabled = capture != null; 425  426             // Disable preview to avoid additional flashes (optional) 427             if (capture != null) 428             { 429                 oldPreviewWindow = capture.PreviewWindow; 430                 capture.PreviewWindow = null; 431             } 432  433             // Load video devices 434             Filter videoDevice = null; 435             if (capture != null) 436                 videoDevice = capture.VideoDevice; 437             mnuVideoDevices.MenuItems.Clear(); 438             m = new MenuItem("(None)", new EventHandler(mnuVideoDevices_Click)); 439             m.Checked = (videoDevice == null); 440             mnuVideoDevices.MenuItems.Add(m); 441             for (int c = 0; c < filters.VideoInputDevices.Count; c++) 442             { 443                 f = filters.VideoInputDevices[c]; 444                 m = new MenuItem(f.Name, new EventHandler(mnuVideoDevices_Click)); 445                 m.Checked = (videoDevice == f); 446                 mnuVideoDevices.MenuItems.Add(m); 447             } 448             mnuVideoDevices.Enabled = (filters.VideoInputDevices.Count > 0); 449  450             // Load audio devices 451             Filter audioDevice = null; 452             if (capture != null) 453                 audioDevice = capture.AudioDevice; 454             mnuAudioDevices.MenuItems.Clear(); 455             m = new MenuItem("(None)", new EventHandler(mnuAudioDevices_Click)); 456             m.Checked = (audioDevice == null); 457             mnuAudioDevices.MenuItems.Add(m); 458             for (int c = 0; c < filters.AudioInputDevices.Count; c++) 459             { 460                 f = filters.AudioInputDevices[c]; 461                 m = new MenuItem(f.Name, new EventHandler(mnuAudioDevices_Click)); 462                 m.Checked = (audioDevice == f); 463                 mnuAudioDevices.MenuItems.Add(m); 464             } 465             mnuAudioDevices.Enabled = (filters.AudioInputDevices.Count > 0); 466  467  468             // Load video compressors 469             try 470             { 471                 mnuVideoCompressors.MenuItems.Clear(); 472                 m = new MenuItem("(None)", new EventHandler(mnuVideoCompressors_Click)); 473                 m.Checked = (capture.VideoCompressor == null); 474                 mnuVideoCompressors.MenuItems.Add(m); 475                 for (int c = 0; c < filters.VideoCompressors.Count; c++) 476                 { 477                     f = filters.VideoCompressors[c]; 478                     m = new MenuItem(f.Name, new EventHandler(mnuVideoCompressors_Click)); 479                     m.Checked = (capture.VideoCompressor == f); 480                     mnuVideoCompressors.MenuItems.Add(m); 481                 } 482                 mnuVideoCompressors.Enabled = ((capture.VideoDevice != null) && (filters.VideoCompressors.Count > 0)); 483             } 484             catch { mnuVideoCompressors.Enabled = false; } 485  486             try 487             { 488                 // Only enable the video compression menu option if the compressor 489                 // supports at least one setting 如果选择菜单视频压缩压缩至少一个端口设置。允许 490                 mnuCompressionProps.Enabled = (capture.VideoCompressorCaps.GetCaps & 491                     (CompressionCaps.CanBFrame | 492                     CompressionCaps.CanKeyFrame | 493                     CompressionCaps.CanQuality | 494                     CompressionCaps.CanWindow)) > 0; 495             } 496             catch 497             { 498                 mnuCompressionProps.Enabled = false; 499             } 500  501             // Load audio 压缩机(compressors) 502             try 503             { 504                 mnuAudioCompressors.MenuItems.Clear(); 505                 m = new MenuItem("(None)", new EventHandler(mnuAudioCompressors_Click)); 506                 m.Checked = (capture.AudioCompressor == null); 507                 mnuAudioCompressors.MenuItems.Add(m); 508                 for (int c = 0; c < filters.AudioCompressors.Count; c++) 509                 { 510                     f = filters.AudioCompressors[c]; 511                     m = new MenuItem(f.Name, new EventHandler(mnuAudioCompressors_Click)); 512                     m.Checked = (capture.AudioCompressor == f); 513                     mnuAudioCompressors.MenuItems.Add(m); 514                 } 515                 mnuAudioCompressors.Enabled = ((capture.AudioDevice != null) && (filters.AudioCompressors.Count > 0)); 516             } 517             catch { mnuAudioCompressors.Enabled = false; } 518  519             // Load video sources 520             try 521             { 522                 mnuVideoSources.MenuItems.Clear(); 523                 current = capture.VideoSource; 524                 for (int c = 0; c < capture.VideoSources.Count; c++) 525                 { 526                     s = capture.VideoSources[c]; 527                     m = new MenuItem(s.Name, new EventHandler(mnuVideoSources_Click)); 528                     m.Checked = (current == s); 529                     mnuVideoSources.MenuItems.Add(m); 530                 } 531                 mnuVideoSources.Enabled = (capture.VideoSources.Count > 0); 532             } 533             catch { mnuVideoSources.Enabled = false; } 534  535             // Load audio sources 536             try 537             { 538                 mnuAudioSources.MenuItems.Clear(); 539                 current = capture.AudioSource; 540                 for (int c = 0; c < capture.AudioSources.Count; c++) 541                 { 542                     s = capture.AudioSources[c]; 543                     m = new MenuItem(s.Name, new EventHandler(mnuAudioSources_Click)); 544                     m.Checked = (current == s); 545                     mnuAudioSources.MenuItems.Add(m); 546                 } 547                 mnuAudioSources.Enabled = (capture.AudioSources.Count > 0); 548             } 549             catch { mnuAudioSources.Enabled = false; } 550  551             // Load frame rates 552             try 553             { 554                 mnuFrameRates.MenuItems.Clear(); 555                 int frameRate = (int)(capture.FrameRate * 1000); 556                 m = new MenuItem("15 fps", new EventHandler(mnuFrameRates_Click)); 557                 m.Checked = (frameRate == 15000); 558                 mnuFrameRates.MenuItems.Add(m); 559                 m = new MenuItem("24 fps (Film)", new EventHandler(mnuFrameRates_Click)); 560                 m.Checked = (frameRate == 24000); 561                 mnuFrameRates.MenuItems.Add(m); 562                 m = new MenuItem("25 fps (PAL)", new EventHandler(mnuFrameRates_Click)); 563                 m.Checked = (frameRate == 25000); 564                 mnuFrameRates.MenuItems.Add(m); 565                 m = new MenuItem("29.997 fps (NTSC)", new EventHandler(mnuFrameRates_Click)); 566                 m.Checked = (frameRate == 29997) || (frameRate == 29970); 567                 mnuFrameRates.MenuItems.Add(m); 568                 m = new MenuItem("30 fps (~NTSC)", new EventHandler(mnuFrameRates_Click)); 569                 m.Checked = (frameRate == 30000); 570                 mnuFrameRates.MenuItems.Add(m); 571                 m = new MenuItem("59.994 fps (2xNTSC)", new EventHandler(mnuFrameRates_Click)); 572                 m.Checked = (frameRate == 59994); 573                 mnuFrameRates.MenuItems.Add(m); 574                 mnuFrameRates.Enabled = true; 575             } 576             catch { mnuFrameRates.Enabled = false; } 577  578             // Load frame sizes 579             try 580             { 581                 mnuFrameSizes.MenuItems.Clear(); 582                 Size frameSize = capture.FrameSize; 583                 m = new MenuItem("160 x 120", new EventHandler(mnuFrameSizes_Click)); 584                 m.Checked = (frameSize == new Size(160, 120)); 585                 mnuFrameSizes.MenuItems.Add(m); 586                 m = new MenuItem("320 x 240", new EventHandler(mnuFrameSizes_Click)); 587                 m.Checked = (frameSize == new Size(320, 240)); 588                 mnuFrameSizes.MenuItems.Add(m); 589                 m = new MenuItem("640 x 480", new EventHandler(mnuFrameSizes_Click)); 590                 m.Checked = (frameSize == new Size(640, 480)); 591                 mnuFrameSizes.MenuItems.Add(m); 592                 m = new MenuItem("1024 x 768", new EventHandler(mnuFrameSizes_Click)); 593                 m.Checked = (frameSize == new Size(1024, 768)); 594                 mnuFrameSizes.MenuItems.Add(m); 595                 mnuFrameSizes.Enabled = true; 596             } 597             catch { mnuFrameSizes.Enabled = false; } 598  599             // Load audio channels 600             try 601             { 602                 mnuAudioChannels.MenuItems.Clear(); 603                 short audioChannels = capture.AudioChannels; 604                 m = new MenuItem("单声道 Mono", new EventHandler(mnuAudioChannels_Click)); 605                 m.Checked = (audioChannels == 1); 606                 mnuAudioChannels.MenuItems.Add(m); 607                 m = new MenuItem("立体声 Stereo", new EventHandler(mnuAudioChannels_Click)); 608                 m.Checked = (audioChannels == 2); 609                 mnuAudioChannels.MenuItems.Add(m); 610                 mnuAudioChannels.Enabled = true; 611             } 612             catch { mnuAudioChannels.Enabled = false; } 613  614             // Load音频采样率 Load audio sampling rate 615             try 616             { 617                 mnuAudioSamplingRate.MenuItems.Clear(); 618                 int samplingRate = capture.AudioSamplingRate; 619                 m = new MenuItem("8 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 620                 m.Checked = (samplingRate == 8000); 621                 mnuAudioSamplingRate.MenuItems.Add(m); 622                 m = new MenuItem("11.025 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 623                 m.Checked = (capture.AudioSamplingRate == 11025); 624                 mnuAudioSamplingRate.MenuItems.Add(m); 625                 m = new MenuItem("22.05 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 626                 m.Checked = (capture.AudioSamplingRate == 22050); 627                 mnuAudioSamplingRate.MenuItems.Add(m); 628                 m = new MenuItem("44.1 kHz", new EventHandler(mnuAudioSamplingRate_Click)); 629                 m.Checked = (capture.AudioSamplingRate == 44100); 630                 mnuAudioSamplingRate.MenuItems.Add(m); 631                 mnuAudioSamplingRate.Enabled = true; 632             } 633             catch { mnuAudioSamplingRate.Enabled = false; } 634  635             // 加载音频样本大小 Load audio sample sizes 636             try 637             { 638                 mnuAudioSampleSizes.MenuItems.Clear(); 639                 short sampleSize = capture.AudioSampleSize; 640                 m = new MenuItem("8 bit", new EventHandler(mnuAudioSampleSizes_Click)); 641                 m.Checked = (sampleSize == 8); 642                 mnuAudioSampleSizes.MenuItems.Add(m); 643                 m = new MenuItem("16 bit", new EventHandler(mnuAudioSampleSizes_Click)); 644                 m.Checked = (sampleSize == 16); 645                 mnuAudioSampleSizes.MenuItems.Add(m); 646                 mnuAudioSampleSizes.Enabled = true; 647             } 648             catch { mnuAudioSampleSizes.Enabled = false; } 649  650             // 加载属性页 Load property pages 651             try 652             { 653                 mnuPropertyPages.MenuItems.Clear(); 654                 for (int c = 0; c < capture.PropertyPages.Count; c++) 655                 { 656                     p = capture.PropertyPages[c]; 657                     m = new MenuItem(p.Name + "...", new EventHandler(mnuPropertyPages_Click)); 658                     mnuPropertyPages.MenuItems.Add(m); 659                 } 660                 mnuPropertyPages.Enabled = (capture.PropertyPages.Count > 0); 661             } 662             catch { mnuPropertyPages.Enabled = false; } 663  664             // Load TV Tuner channels 665             try 666             { 667                 mnuChannel.MenuItems.Clear(); 668                 int channel = capture.Tuner.Channel; 669                 for (int c = 1; c <= 31; c++) 670                 { 671                     m = new MenuItem(c.ToString(), new EventHandler(mnuChannel_Click)); 672                     m.Checked = (channel == c); 673                     mnuChannel.MenuItems.Add(m); 674                 } 675                 mnuChannel.Enabled = true; 676             } 677             catch { mnuChannel.Enabled = false; } 678  679             // Load TV Tuner input types 680             try 681             { 682                 mnuInputType.MenuItems.Clear(); 683                 m = new MenuItem(DirectX.Capture.TunerInputType.Cable.ToString(), new EventHandler(mnuInputType_Click)); 684                 m.Checked = (capture.Tuner.InputType == DirectX.Capture.TunerInputType.Cable); 685                 mnuInputType.MenuItems.Add(m); 686                 m = new MenuItem(DirectX.Capture.TunerInputType.Antenna.ToString(), new EventHandler(mnuInputType_Click)); 687                 m.Checked = (capture.Tuner.InputType == DirectX.Capture.TunerInputType.Antenna); 688                 mnuInputType.MenuItems.Add(m); 689                 mnuInputType.Enabled = true; 690             } 691             catch { mnuInputType.Enabled = false; } 692  693             // Enable/disable caps 694             mnuVideoCaps.Enabled = ((capture != null) && (capture.VideoCaps != null)); 695             mnuAudioCaps.Enabled = ((capture != null) && (capture.AudioCaps != null)); 696  697             // Check Preview menu option 698             mnuPreview.Checked = (oldPreviewWindow != null); 699             mnuPreview.Enabled = (capture != null); 700  701             // Reenable preview if it was enabled before 702             if (capture != null) 703                 capture.PreviewWindow = oldPreviewWindow; 704         } 705         #endregion 加载 706  707         #region 方法 708  709         private void Stop() 710         { 711             try 712             { 713                 ShowDropped(); 714                 capture.Stop(); 715                 btnCue.Enabled = true; 716                 btnStart.Enabled = true; 717                 btnStop.Enabled = false; 718                 txtFilename.Enabled = true; 719                 btnStart.Select(); 720             } 721             catch (Exception ex) 722             { 723                 MessageBox.Show(ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 724             } 725         } 726  727         private void VideoWindowResize() 728         { 729             if ((capture != null) && (m_FrameSize.Width > 0)) 730             { 731                 Size ns; 732  733                 int iMaxHeight = Math.Min(m_FrameSize.Height, groupBox1.Height - 9); //不要践踏我们的分组框的边界 Don't trample the borders 734                 int iMaxWidth = Math.Min(m_FrameSize.Width, groupBox1.Width - 4);   // of our GroupBox 735  736                 int t2 = (iMaxWidth * m_FrameSize.Height) / m_FrameSize.Width; 737  738                 // Which proportion do we need to limit? 739                 if (t2 > iMaxHeight) 740                 { 741                     int t1 = (iMaxHeight * m_FrameSize.Width) / m_FrameSize.Height; 742                     ns = new Size(t1, iMaxHeight); 743                 } 744                 else 745                 { 746                     ns = new Size(iMaxWidth, t2); 747                 } 748                 panelVideo.Size = ns; 749             } 750         } 751  752         // 更新 捕获/下降/时间字段的查询捕获装置  753         //Update the Capture/Dropped/Duration fields by quering the capture device 754         private void ShowDropped() 755         { 756             TimeSpan duDuration; 757             long iCurDropped = capture.DroppedVideoFrames; 758             long iCaptured = capture.CapturedVideoFrames; 759  760             if (iCurDropped >= 0) 761                 txtDroppedFrames.Text = (iCurDropped - iDroppedBefore).ToString(); 762  763             if (iCaptured > 0) 764                 txtCapturedFrames.Text = iCaptured.ToString(); 765  766             duDuration = DateTime.Now - dtBefore; 767             txtDuration.Text = duDuration.ToString(); 768         } 769  770         #endregion 方法 771  772         #region 菜单事件 773  774  775         private void mnuVideoDevices_Click(object sender, System.EventArgs e) 776         { 777             try 778             { 779                 // 由于视频和音频设备只能通过创建一个新的捕获对象来改变,因此获取当前的设备和处理捕获对象。 780                 // Get current devices and dispose of capture object 781                 // because the video and audio device can only be changed 782                 // by creating a new Capture object. 783                 Filter videoDevice = null; 784                 Filter audioDevice = null; 785                 if (capture != null) 786                 { 787                     videoDevice = capture.VideoDevice; 788                     audioDevice = capture.AudioDevice; 789                     capture.Dispose(); 790                     capture = null; 791                 } 792  793                 // Get new video device 794                 MenuItem m = sender as MenuItem; 795                 videoDevice = (m.Index > 0 ? filters.VideoInputDevices[m.Index - 1] : null); 796  797                 // Create capture object 798                 if ((videoDevice != null) || (audioDevice != null)) 799                 { 800                     capture = new 捕获(videoDevice, audioDevice); 801                     capture.CaptureComplete += new EventHandler(OnCaptureComplete); 802                 } 803  804                 // Update the menu 805                 updateMenu(); 806             } 807             catch (Exception ex) 808             { 809                 MessageBox.Show("视频设备不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 810             } 811         } 812  813         private void mnuAudioDevices_Click(object sender, System.EventArgs e) 814         { 815             try 816             { 817                 // Get current devices and dispose of capture object 818                 // because the video and audio device can only be changed 819                 // by creating a new Capture object. 820                 Filter videoDevice = null; 821                 Filter audioDevice = null; 822                 Filter videoCompressor = null; 823                 if (capture != null) 824                 { 825                     videoDevice = capture.VideoDevice; 826                     audioDevice = capture.AudioDevice; 827                     videoCompressor = capture.VideoCompressor; 828                     capture.Dispose(); 829                     capture = null; 830                 } 831  832                 // Get new audio device 833                 MenuItem m = sender as MenuItem; 834                 audioDevice = (m.Index > 0 ? filters.AudioInputDevices[m.Index - 1] : null); 835  836                 // Create capture object 837                 if ((videoDevice != null) || (audioDevice != null)) 838                 { 839                     capture = new 捕获(videoDevice, audioDevice); 840                     capture.CaptureComplete += new EventHandler(OnCaptureComplete); 841                 } 842  843                 capture.VideoCompressor = videoCompressor; 844  845                 // Update the menu 846                 updateMenu(); 847             } 848             catch (Exception ex) 849             { 850                 MessageBox.Show("音频设备不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 851             } 852         } 853  854         private void mnuVideoCompressors_Click(object sender, System.EventArgs e) 855         { 856             try 857             { 858                 // Change the video compressor 859                 // We subtract 1 from m.Index beacuse the first item is (None) 860                 MenuItem m = sender as MenuItem; 861                 capture.VideoCompressor = (m.Index > 0 ? filters.VideoCompressors[m.Index - 1] : null); 862                 updateMenu(); 863             } 864             catch (Exception ex) 865             { 866                 MessageBox.Show("视频压缩不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 867             } 868  869         } 870  871         private void mnuAudioCompressors_Click(object sender, System.EventArgs e) 872         { 873             try 874             { 875                 // Change the audio compressor 876                 // We subtract 1 from m.Index beacuse the first item is (None) 877                 MenuItem m = sender as MenuItem; 878                 capture.AudioCompressor = (m.Index > 0 ? filters.AudioCompressors[m.Index - 1] : null); 879                 updateMenu(); 880             } 881             catch (Exception ex) 882             { 883                 MessageBox.Show("音频压缩不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 884             } 885         } 886  887         private void mnuVideoSources_Click(object sender, System.EventArgs e) 888         { 889             try 890             { 891                 // Choose the video source 892                 // If the device only has one source, this menu item will be disabled 893                 MenuItem m = sender as MenuItem; 894                 capture.VideoSource = capture.VideoSources[m.Index]; 895                 updateMenu(); 896             } 897             catch (Exception ex) 898             { 899                 MessageBox.Show("无法设置视频源。请提交错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 900             } 901         } 902  903         private void mnuAudioSources_Click(object sender, System.EventArgs e) 904         { 905             try 906             { 907                 // Choose the audio source 908                 // If the device only has one source, this menu item will be disabled 909                 MenuItem m = sender as MenuItem; 910                 capture.AudioSource = capture.AudioSources[m.Index]; 911                 updateMenu(); 912             } 913             catch (Exception ex) 914             { 915                 MessageBox.Show("无法设置音频源。请提交错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 916             } 917         } 918  919  920         private void mnuExit_Click(object sender, System.EventArgs e) 921         { 922             if (capture != null) 923                 capture.Stop(); 924             Application.Exit(); 925         } 926  927         private void mnuFrameSizes_Click(object sender, System.EventArgs e) 928         { 929             try 930             { 931                 // Disable preview to avoid additional flashes (optional) 932                 bool preview = (capture.PreviewWindow != null); 933                 capture.PreviewWindow = null; 934  935                 // Update the frame size 936                 MenuItem m = sender as MenuItem; 937                 string[] s = m.Text.Split('x'); 938                 Size size = new Size(int.Parse(s[0]), int.Parse(s[1])); 939                 capture.FrameSize = size; 940  941                 // Update the menu 942                 updateMenu(); 943  944                 // Restore previous preview setting 945                 capture.PreviewWindow = (preview ? panelVideo : null); 946             } 947             catch (Exception ex) 948             { 949                 MessageBox.Show("帧大小不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 950             } 951         } 952  953         private void mnuFrameRates_Click(object sender, System.EventArgs e) 954         { 955             try 956             { 957                 MenuItem m = sender as MenuItem; 958                 string[] s = m.Text.Split(' '); 959                 capture.FrameRate = double.Parse(s[0]); 960                 updateMenu(); 961             } 962             catch (Exception ex) 963             { 964                 MessageBox.Show("不支持的帧速率.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 965             } 966         } 967  968         private void mnuAudioChannels_Click(object sender, System.EventArgs e) 969         { 970             try 971             { 972                 MenuItem m = sender as MenuItem; 973                 capture.AudioChannels = (short)Math.Pow(2, m.Index); 974                 updateMenu(); 975             } 976             catch (Exception ex) 977             { 978                 MessageBox.Show("不支持的音频信道数.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 979             } 980         } 981  982         private void mnuAudioSamplingRate_Click(object sender, System.EventArgs e) 983         { 984             try 985             { 986                 MenuItem m = sender as MenuItem; 987                 string[] s = m.Text.Split(' '); 988                 int samplingRate = (int)(double.Parse(s[0]) * 1000); 989                 capture.AudioSamplingRate = samplingRate; 990                 updateMenu(); 991             } 992             catch (Exception ex) 993             { 994                 MessageBox.Show("不支持音频采样率.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 995             } 996         } 997  998         private void mnuAudioSampleSizes_Click(object sender, System.EventArgs e) 999         {1000             try1001             {1002                 MenuItem m = sender as MenuItem;1003                 string[] s = m.Text.Split(' ');1004                 short sampleSize = short.Parse(s[0]);1005                 capture.AudioSampleSize = sampleSize;1006                 updateMenu();1007             }1008             catch (Exception ex)1009             {1010                 MessageBox.Show("音频样本大小不支持.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1011             }1012         }1013 1014         private void mnuPreview_Click(object sender, System.EventArgs e)1015         {1016             try1017             {1018                 if (capture.PreviewWindow == null)1019                 {1020                     capture.PreviewWindow = panelVideo;1021                     mnuPreview.Checked = true;1022                 }1023                 else1024                 {1025                     capture.PreviewWindow = null;1026                     mnuPreview.Checked = false;1027                 }1028             }1029             catch (Exception ex)1030             {1031                 MessageBox.Show("无法启用/禁用预览。请提交一个错误报告。\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1032             }1033         }1034 1035         private void mnuPropertyPages_Click(object sender, System.EventArgs e)1036         {1037             try1038             {1039                 MenuItem m = sender as MenuItem;1040                 capture.PropertyPages[m.Index].Show(this);1041                 updateMenu();1042             }1043             catch (Exception ex)1044             {1045                 MessageBox.Show("无法显示属性页。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1046             }1047         }1048 1049         private void mnuChannel_Click(object sender, System.EventArgs e)1050         {1051             try1052             {1053                 MenuItem m = sender as MenuItem;1054                 capture.Tuner.Channel = m.Index + 1;1055                 updateMenu();1056             }1057             catch (Exception ex)1058             {1059                 MessageBox.Show("无法更改通道。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1060             }1061         }1062 1063         private void mnuInputType_Click(object sender, System.EventArgs e)1064         {1065             try1066             {1067                 MenuItem m = sender as MenuItem;1068                 capture.Tuner.InputType = (DirectX.Capture.TunerInputType)m.Index;1069                 updateMenu();1070             }1071             catch (Exception ex)1072             {1073                 MessageBox.Show("无法更改调谐器输入类型。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1074             }1075         }1076 1077         private void mnuVideoCaps_Click(object sender, System.EventArgs e)1078         {1079             try1080             {1081                 string s;1082                 s = String.Format(1083                     "输入尺寸:\t\t{0} x {1}\n" +1084                     "\n" +1085                     "最小帧长度:\t\t{2} x {3}\n" +//最小帧长度1086                     "最大帧长度:\t\t{4} x {5}\n" +//最大帧长度1087                     "帧尺寸粒度 X:\t{6}\n" +//帧大小粒度1088                     "帧尺寸粒度 Y:\t{7}\n" +1089                     "\n" +1090                     "最小帧速率:\t\t{8:0.000} fps\n" +//最小帧速率1091                     "最大帧速率:\t\t{9:0.000} fps\n",1092                     capture.VideoCaps.InputSize.Width, capture.VideoCaps.InputSize.Height,1093                     capture.VideoCaps.MinFrameSize.Width, capture.VideoCaps.MinFrameSize.Height,1094                     capture.VideoCaps.MaxFrameSize.Width, capture.VideoCaps.MaxFrameSize.Height,1095                     capture.VideoCaps.FrameSizeGranularityX,1096                     capture.VideoCaps.FrameSizeGranularityY,1097                     capture.VideoCaps.MinFrameRate,1098                     capture.VideoCaps.MaxFrameRate);1099                 MessageBox.Show(s, "视频设备能力", MessageBoxButtons.OK, MessageBoxIcon.Information);1100 1101             }1102             catch (Exception ex)1103             {1104                 MessageBox.Show("无法显示视频功能。请提交一个错误报告.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1105             }1106         }1107 1108         private void mnuAudioCaps_Click(object sender, System.EventArgs e)1109         {1110             try1111             {1112                 string s;1113                 s = String.Format(1114                     "Min Channels:\t\t{0}\n" +1115                     "Max Channels:\t\t{1}\n" +1116                     "Channels Granularity:\t{2}\n" +1117                     "\n" +1118                     "Min Sample Size:\t\t{3}\n" +1119                     "Max Sample Size:\t\t{4}\n" +1120                     "Sample Size Granularity:\t{5}\n" +1121                     "\n" +1122                     "Min Sampling Rate:\t\t{6}\n" +1123                     "Max Sampling Rate:\t\t{7}\n" +1124                     "Sampling Rate Granularity:\t{8}\n",1125                     capture.AudioCaps.MinimumChannels,1126                     capture.AudioCaps.MaximumChannels,1127                     capture.AudioCaps.ChannelsGranularity,1128                     capture.AudioCaps.MinimumSampleSize,1129                     capture.AudioCaps.MaximumSampleSize,1130                     capture.AudioCaps.SampleSizeGranularity,1131                     capture.AudioCaps.MinimumSamplingRate,1132                     capture.AudioCaps.MaximumSamplingRate,1133                     capture.AudioCaps.SamplingRateGranularity);1134                 MessageBox.Show(s, "音频设备能力", MessageBoxButtons.OK, MessageBoxIcon.Information);1135 1136             }1137             catch (Exception ex)1138             {1139                 MessageBox.Show("Unable display audio capabilities. Please submit a bug report.\n\n" + ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1140             }1141         }1142 1143         // 单击“菜单”选项显示压缩机属性 On clicking the menu option to display Compressor Properties1144         private void mnuCompressionProps_Click(object sender, System.EventArgs e)1145         {1146             // Prepare to show the form1147             CompressionProps m = new CompressionProps();1148 1149             // Read what compression capabilities are available1150             CompressionCaps i = capture.VideoCompressorCaps.GetCaps;1151 1152             bool bSet = (i & CompressionCaps.CanKeyFrame) > 0;1153 1154             // Enable the available keyframe controls1155             m.txtKeyFrame.Enabled = bSet;1156             m.labKeyFrame.Enabled = bSet;1157             m.chkKeyFrame.Enabled = bSet;1158 1159             // copy in the default values1160             if (bSet)1161             {1162                 long v = capture.VideoCompressorCaps.KeyFrameRate;1163 1164                 // Using default?1165                 if (v < 0)1166                 {1167                     m.txtKeyFrame.Text = "";1168                     m.chkKeyFrame.Checked = true;1169                     m.txtKeyFrame.Enabled = false;1170                 }1171                 else1172                 {1173                     m.txtKeyFrame.Text = v.ToString();1174                     m.chkKeyFrame.Checked = false;1175                 }1176             }1177 1178             bSet = (i & CompressionCaps.CanBFrame) > 0;1179 1180             // Enable the available PFrames controls1181             m.txtPFrames.Enabled = bSet;1182             m.labPFrames.Enabled = bSet;1183             m.chkPFrames.Enabled = bSet;1184             if (bSet)1185             {1186                 long v = capture.VideoCompressorCaps.PFramesPerKeyFrame;1187 1188                 // Using default?1189                 if (v < 0)1190                 {1191                     m.txtPFrames.Text = "";1192                     m.chkPFrames.Checked = true;1193                     m.txtPFrames.Enabled = false;1194                 }1195                 else1196                 {1197                     m.txtPFrames.Text = v.ToString();1198                     m.chkPFrames.Checked = false;1199                 }1200             }1201 1202             bSet = (i & CompressionCaps.CanWindow) > 0;1203 1204             // Enable the available WindowSize controls1205             m.txtWindowSize.Enabled = bSet;1206             m.labWindowSize.Enabled = bSet;1207             m.chkWindowSize.Enabled = bSet;1208             m.chkWindowSize.Checked = false;1209 1210             if (bSet)1211             {1212                 m.txtWindowSize.Text = capture.VideoCompressorCaps.WindowSize.ToString();1213             }1214 1215             bSet = (i & CompressionCaps.CanQuality) > 0;1216 1217             // Enable the available Quality controls1218             m.txtQuality.Enabled = bSet;1219             m.trkQuality.Enabled = bSet;1220             m.labQuality.Enabled = bSet;1221             m.chkQuality.Enabled = bSet;1222             if (bSet)1223             {1224                 long v = capture.VideoCompressorCaps.Quality;1225 1226                 // Using default?1227                 if (v < 0)1228                 {1229                     m.txtQuality.Text = "";1230                     m.chkQuality.Checked = true;1231                     m.trkQuality.Value = 0;1232                     m.trkQuality.Enabled = false;1233                     m.txtQuality.Enabled = false;1234                 }1235                 else1236                 {1237                     m.txtQuality.Text = v.ToString();1238                     m.chkQuality.Checked = false;1239                     m.trkQuality.Value = capture.VideoCompressorCaps.Quality;1240                 }1241             }1242 1243             // Display the form1244             DialogResult a = m.ShowDialog(this);1245 1246             // If the user clicked OK, set the values they specified1247             if (DialogResult.OK == a)1248             {1249                 if ((i & CompressionCaps.CanKeyFrame) > 0)1250                 {1251                     int v;1252                     if (m.chkKeyFrame.Checked)1253                     {1254                         // Use default1255                         v = -1;1256                     }1257                     else1258                     {1259                         v = Convert.ToInt32(m.txtKeyFrame.Text);1260                     }1261                     capture.VideoCompressorCaps.KeyFrameRate = v;1262                 }1263 1264                 if ((i & CompressionCaps.CanBFrame) > 0)1265                 {1266                     int v;1267                     if (m.chkPFrames.Checked)1268                     {1269                         // Use default1270                         v = -1;1271                     }1272                     else1273                     {1274                         v = Convert.ToInt32(m.txtPFrames.Text);1275                     }1276                     capture.VideoCompressorCaps.PFramesPerKeyFrame = v;1277                 }1278 1279                 if ((i & CompressionCaps.CanWindow) > 0)1280                 {1281                     long v;1282                     if (m.chkWindowSize.Checked)1283                     {1284                         // Use default1285                         v = 1;1286                     }1287                     else1288                     {1289                         v = Convert.ToInt64(m.txtWindowSize.Text);1290                     }1291                     capture.VideoCompressorCaps.WindowSize = v;1292                 }1293 1294                 if ((i & CompressionCaps.CanQuality) > 0)1295                 {1296                     int v;1297 1298                     if (m.chkQuality.Checked)1299                     {1300                         // Use default1301                         v = -1;1302                     }1303                     else1304                     {1305                         v = Convert.ToInt32(m.txtQuality.Text);1306                     }1307                     capture.VideoCompressorCaps.Quality = v;1308                 }1309             }1310         }1311 1312         #endregion 菜单事件1313 1314         #region 事件1315 1316 1317         private void btnExit_Click(object sender, System.EventArgs e)1318         {1319             if (capture != null)1320             {1321                 capture.Stop();1322                 SaveDefaults();1323             }1324             Application.Exit();1325         }1326 1327         private void btnCue_Click(object sender, System.EventArgs e)1328         {1329             try1330             {1331                 if (capture == null)1332                     throw new ApplicationException("请选择一个视频和/或音频设备.");1333                 if (!capture.Cued)1334                     capture.Filename = txtFilename.Text;1335 1336                 CaptureResult = 0;1337                 txtDroppedFrames.Text = "0";1338                 txtCapturedFrames.Text = "0";1339                 txtDuration.Text = "";1340                 txtFilename.Enabled = false;1341 1342                 capture.Cue();1343                 capture.PreSize(Convert.ToInt64(txtPreSize.Text) * 1024000);1344 1345                 btnCue.Enabled = false;1346                 btnStop.Enabled = true;1347                 //“使用cue() 先于 start() 做的所有准备工作,1348                 //需要做的事开始捕捉。现在,当您单击“开始”时,1349                 //捕获的速度将比您刚刚单击“启动”开始的速度更快。1350                 //使用cue()完全是可选的。使用cue()坏处是预览被禁用,直到捕获开始。1351                 MessageBox.Show("Use Cue() before Start() to " +1352                     "do all the preparation work that needs to be done to start a " +1353                     "capture. Now, when you click Start the capture will begin faster " +1354                     "than if you had just clicked Start. Using Cue() is completely " +1355                     "optional. The downside to using Cue() is the preview is disabled until " +1356                     "the capture begins.", "Ready to Capture", MessageBoxButtons.OK, MessageBoxIcon.Information);1357                 btnStart.Select();1358             }1359             catch (Exception ex)1360             {1361                 MessageBox.Show(ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1362             }1363         }1364 1365         private void btnStart_Click(object sender, System.EventArgs e)1366         {1367             try1368             {1369                 if (capture == null)1370                     throw new ApplicationException("请选择一个视频和/或音频设备。");1371                 if (!capture.Cued)1372                     capture.Filename = txtFilename.Text;1373 1374                 CaptureResult = 0;1375                 iDroppedBefore = capture.DroppedVideoFrames;1376                 dtBefore = DateTime.Now;1377                 txtDroppedFrames.Text = "0";1378                 txtCapturedFrames.Text = "0";1379                 txtDuration.Text = "";1380                 txtFilename.Enabled = false;1381                 capture.Start();1382                 tmrTime1.Enabled = true;1383                 btnCue.Enabled = false;1384                 btnStart.Enabled = false;1385                 btnStop.Enabled = true;1386                 btnStop.Select();1387             }1388             catch (Exception ex)1389             {1390                 MessageBox.Show(ex.Message + "\n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1391             }1392         }1393 1394         private void btnStop_Click(object sender, System.EventArgs e)1395         {1396             Stop();1397         }1398 1399 1400         private void OnCaptureComplete(object sender, EventArgs e)1401         {1402             // 显示捕获捕获完成事件 Demonstrate the Capture.CaptureComplete event.1403             tmrTime1.Enabled = false;1404 1405             // 如果窗口消息处理程序中止了我们… If the windows message handler aborted us...1406             if (CaptureResult != 0)//捕获的结果1407                 MessageBox.Show("Capture Error 0x" + CaptureResult.ToString("x"), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);1408         }1409 1410         // Update the Captured/Dropped fields while capturing1411         private void tmrTime1_Tick(Object myObject, EventArgs myEventArgs)1412         {1413             if (CaptureResult == 0)1414             {1415                 ShowDropped();1416             }1417             else1418             {1419                 Stop();1420             }1421         }1422 1423 1424         private void groupBox1_Resize(object sender, System.EventArgs e)1425         {1426             VideoWindowResize();1427         }1428 1429         #endregion 事件1430         // http://www.cnblogs.com/endv/p/6052511.html1431 1432         #region private1433         private System.Windows.Forms.TextBox txtFilename;1434         private System.Windows.Forms.Label label1;1435         private System.Windows.Forms.Button btnStart;1436         private System.Windows.Forms.Button btnStop;1437         private System.Windows.Forms.Button btnExit;1438         private System.Windows.Forms.MenuItem menuItem1;1439         private System.Windows.Forms.MenuItem menuItem7;1440         private System.Windows.Forms.MainMenu mainMenu;1441         private System.Windows.Forms.MenuItem mnuExit;1442         private System.Windows.Forms.MenuItem mnuDevices;1443         private System.Windows.Forms.MenuItem mnuVideoDevices;1444         private System.Windows.Forms.MenuItem mnuAudioDevices;1445         private System.Windows.Forms.MenuItem mnuVideoCompressors;1446         private System.Windows.Forms.MenuItem mnuAudioCompressors;1447         private System.Windows.Forms.MenuItem mnuVideoSources;1448         private System.Windows.Forms.MenuItem mnuAudioSources;1449         private System.Windows.Forms.Panel panelVideo;1450         private System.Windows.Forms.MenuItem menuItem4;1451         private System.Windows.Forms.MenuItem mnuAudioChannels;1452         private System.Windows.Forms.MenuItem mnuAudioSamplingRate;1453         private System.Windows.Forms.MenuItem mnuAudioSampleSizes;1454         private System.Windows.Forms.MenuItem menuItem5;1455         private System.Windows.Forms.MenuItem mnuFrameSizes;1456         private System.Windows.Forms.MenuItem mnuFrameRates;1457         private System.Windows.Forms.Button btnCue;1458         private System.Windows.Forms.MenuItem menuItem6;1459         private System.Windows.Forms.MenuItem mnuPreview;1460         private System.Windows.Forms.MenuItem menuItem8;1461         private System.Windows.Forms.MenuItem mnuPropertyPages;1462         private System.Windows.Forms.MenuItem mnuVideoCaps;1463         private System.Windows.Forms.MenuItem mnuAudioCaps;1464         private System.Windows.Forms.MenuItem mnuChannel;1465         private System.Windows.Forms.MenuItem menuItem3;1466         private System.Windows.Forms.MenuItem mnuInputType;1467         private System.Windows.Forms.TextBox txtDroppedFrames;1468         private System.Windows.Forms.Label label2;1469         private System.Windows.Forms.Timer tmrTime1;1470         private System.Windows.Forms.Label label3;1471         private System.Windows.Forms.TextBox txtDuration;1472         private System.Windows.Forms.Label label4;1473         private System.Windows.Forms.TextBox txtCapturedFrames;1474         private System.Windows.Forms.MenuItem mnuCompressionProps;1475         private System.Windows.Forms.GroupBox groupBox1;1476         private System.Windows.Forms.Label label5;1477         private System.Windows.Forms.TextBox txtPreSize;1478         private System.ComponentModel.IContainer components;1479         #endregion private1480 1481         /// 1482         /// Clean up any resources being used.1483         /// 1484         protected override void Dispose(bool disposing)1485         {1486             if (disposing)1487             {1488                 if (components != null)1489                 {1490                     components.Dispose();1491                 }1492             }1493             base.Dispose(disposing);1494         }1495         // 媒体事件发送使用Windows消息 Media events are sent to use as windows messages1496         protected override void WndProc(ref Message m)1497         {1498             switch (m.Msg)1499             {1500                 // If this is a windows media message1501                 case WM_GRAPHNOTIFY:1502                     EventCode eventCode;//捕获已中止?1503                     IntPtr p1, p2;1504                     int hr;1505 1506                     hr = mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);1507                     while (hr == 0)1508                     {1509                         // 处理事件 1510                         // 捕获已中止 The capture has been aborted1511                         if (eventCode == EventCode.ErrorAbort)1512                         {1513                             CaptureResult = p1.ToInt32();1514                         }1515 1516                         // 释放参数  1517                         mediaEvent.FreeEventParams(eventCode, p1, p2);1518 1519                         // 1520                         // 检查附加事件 check for additional events1521                         hr = mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);1522                     }1523                     break;1524 1525                 // 所有其它的消息 All other messages1526                 default:1527                     // 未经处理的窗口消息 unhandled window message1528                     base.WndProc(ref m);1529                     break;1530             }1531         }1532 1533 1534         #region Windows Form Designer generated code1535         /// 1536         /// Required method for Designer support - do not modify1537         /// the contents of this method with the code editor.1538         /// 1539         private void InitializeComponent()1540         { // http://www.cnblogs.com/endv/p/6052511.html1541 1542             this.components = new System.ComponentModel.Container();1543             this.txtFilename = new System.Windows.Forms.TextBox();1544             this.label1 = new System.Windows.Forms.Label();1545             this.btnStart = new System.Windows.Forms.Button();1546             this.btnStop = new System.Windows.Forms.Button();1547             this.btnExit = new System.Windows.Forms.Button();1548             this.mainMenu = new System.Windows.Forms.MainMenu(this.components);1549             this.menuItem1 = new System.Windows.Forms.MenuItem();1550             this.mnuExit = new System.Windows.Forms.MenuItem();1551             this.mnuDevices = new System.Windows.Forms.MenuItem();1552             this.mnuVideoDevices = new System.Windows.Forms.MenuItem();1553             this.mnuAudioDevices = new System.Windows.Forms.MenuItem();1554             this.menuItem4 = new System.Windows.Forms.MenuItem();1555             this.mnuVideoCompressors = new System.Windows.Forms.MenuItem();1556             this.mnuAudioCompressors = new System.Windows.Forms.MenuItem();1557             this.menuItem7 = new System.Windows.Forms.MenuItem();1558             this.mnuVideoSources = new System.Windows.Forms.MenuItem();1559             this.mnuFrameSizes = new System.Windows.Forms.MenuItem();1560             this.mnuFrameRates = new System.Windows.Forms.MenuItem();1561             this.mnuVideoCaps = new System.Windows.Forms.MenuItem();1562             this.menuItem5 = new System.Windows.Forms.MenuItem();1563             this.mnuAudioSources = new System.Windows.Forms.MenuItem();1564             this.mnuAudioChannels = new System.Windows.Forms.MenuItem();1565             this.mnuAudioSamplingRate = new System.Windows.Forms.MenuItem();1566             this.mnuAudioSampleSizes = new System.Windows.Forms.MenuItem();1567             this.mnuAudioCaps = new System.Windows.Forms.MenuItem();1568             this.menuItem3 = new System.Windows.Forms.MenuItem();1569             this.mnuChannel = new System.Windows.Forms.MenuItem();1570             this.mnuInputType = new System.Windows.Forms.MenuItem();1571             this.menuItem6 = new System.Windows.Forms.MenuItem();1572             this.mnuCompressionProps = new System.Windows.Forms.MenuItem();1573             this.mnuPropertyPages = new System.Windows.Forms.MenuItem();1574             this.menuItem8 = new System.Windows.Forms.MenuItem();1575             this.mnuPreview = new System.Windows.Forms.MenuItem();1576             this.panelVideo = new System.Windows.Forms.Panel();1577             this.btnCue = new System.Windows.Forms.Button();1578             this.txtDroppedFrames = new System.Windows.Forms.TextBox();1579             this.label2 = new System.Windows.Forms.Label();1580             this.tmrTime1 = new System.Windows.Forms.Timer(this.components);1581             this.txtDuration = new System.Windows.Forms.TextBox();1582             this.label3 = new System.Windows.Forms.Label();1583             this.label4 = new System.Windows.Forms.Label();1584             this.txtCapturedFrames = new System.Windows.Forms.TextBox();1585             this.groupBox1 = new System.Windows.Forms.GroupBox();1586             this.txtPreSize = new System.Windows.Forms.TextBox();1587             this.label5 = new System.Windows.Forms.Label();1588             this.groupBox1.SuspendLayout();1589             this.SuspendLayout();1590             // 1591             // txtFilename1592             // 1593             this.txtFilename.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1594             this.txtFilename.Location = new System.Drawing.Point(239, 330);1595             this.txtFilename.Name = "txtFilename";1596             this.txtFilename.Size = new System.Drawing.Size(182, 21);1597             this.txtFilename.TabIndex = 0;1598             this.txtFilename.Text = "test.avi";1599             // 1600             // label11601             // 1602             this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1603             this.label1.Location = new System.Drawing.Point(172, 330);1604             this.label1.Name = "label1";1605             this.label1.Size = new System.Drawing.Size(76, 17);1606             this.label1.TabIndex = 1;1607             this.label1.Text = "文件名:";1608             // 1609             // btnStart1610             // 1611             this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1612             this.btnStart.Location = new System.Drawing.Point(258, 364);1613             this.btnStart.Name = "btnStart";1614             this.btnStart.Size = new System.Drawing.Size(77, 26);1615             this.btnStart.TabIndex = 2;1616             this.btnStart.Text = "开始";1617             this.btnStart.Click += new System.EventHandler(this.btnStart_Click);1618             // 1619             // btnStop1620             // 1621             this.btnStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1622             this.btnStop.Enabled = false;1623             this.btnStop.Location = new System.Drawing.Point(344, 364);1624             this.btnStop.Name = "btnStop";1625             this.btnStop.Size = new System.Drawing.Size(77, 26);1626             this.btnStop.TabIndex = 3;1627             this.btnStop.Text = "停止";1628             this.btnStop.Click += new System.EventHandler(this.btnStop_Click);1629             // 1630             // btnExit1631             // 1632             this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1633             this.btnExit.Location = new System.Drawing.Point(440, 364);1634             this.btnExit.Name = "btnExit";1635             this.btnExit.Size = new System.Drawing.Size(87, 26);1636             this.btnExit.TabIndex = 4;1637             this.btnExit.Text = "退出";1638             this.btnExit.Click += new System.EventHandler(this.btnExit_Click);1639             // 1640             // mainMenu1641             // 1642             this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1643             this.menuItem1,1644             this.mnuDevices,1645             this.menuItem7});1646             // 1647             // menuItem11648             // 1649             this.menuItem1.Index = 0;1650             this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1651             this.mnuExit});1652             this.menuItem1.Text = "文件";1653             // 1654             // mnuExit1655             // 1656             this.mnuExit.Index = 0;1657             this.mnuExit.Text = "E&xit";1658             this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);1659             // 1660             // mnuDevices1661             // 1662             this.mnuDevices.Index = 1;1663             this.mnuDevices.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1664             this.mnuVideoDevices,1665             this.mnuAudioDevices,1666             this.menuItem4,1667             this.mnuVideoCompressors,1668             this.mnuAudioCompressors});1669             this.mnuDevices.Text = "设备";1670             // 1671             // mnuVideoDevices1672             // 1673             this.mnuVideoDevices.Index = 0;1674             this.mnuVideoDevices.Text = "视频设备";1675             // 1676             // mnuAudioDevices1677             // 1678             this.mnuAudioDevices.Index = 1;1679             this.mnuAudioDevices.Text = "音频设备";1680             // 1681             // menuItem41682             // 1683             this.menuItem4.Index = 2;1684             this.menuItem4.Text = "-";1685             // 1686             // mnuVideoCompressors1687             // 1688             this.mnuVideoCompressors.Index = 3;1689             this.mnuVideoCompressors.Text = "视频压缩";1690             // 1691             // mnuAudioCompressors1692             // 1693             this.mnuAudioCompressors.Index = 4;1694             this.mnuAudioCompressors.Text = "音频压缩";1695             // 1696             // menuItem71697             // 1698             this.menuItem7.Index = 2;1699             this.menuItem7.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {1700             this.mnuVideoSources,1701             this.mnuFrameSizes,1702             this.mnuFrameRates,1703             this.mnuVideoCaps,1704             this.menuItem5,1705             this.mnuAudioSources,1706             this.mnuAudioChannels,1707             this.mnuAudioSamplingRate,1708             this.mnuAudioSampleSizes,1709             this.mnuAudioCaps,1710             this.menuItem3,1711             this.mnuChannel,1712             this.mnuInputType,1713             this.menuItem6,1714             this.mnuCompressionProps,1715             this.mnuPropertyPages,1716             this.menuItem8,1717             this.mnuPreview});1718             this.menuItem7.Text = "选项";1719             // 1720             // mnuVideoSources1721             // 1722             this.mnuVideoSources.Index = 0;1723             this.mnuVideoSources.Text = "视频源";1724             // 1725             // mnuFrameSizes1726             // 1727             this.mnuFrameSizes.Index = 1;1728             this.mnuFrameSizes.Text = "视频帧的大小";1729             // 1730             // mnuFrameRates1731             // 1732             this.mnuFrameRates.Index = 2;1733             this.mnuFrameRates.Text = "视频的帧速率";1734             this.mnuFrameRates.Click += new System.EventHandler(this.mnuFrameRates_Click);1735             // 1736             // mnuVideoCaps1737             // 1738             this.mnuVideoCaps.Index = 3;1739             this.mnuVideoCaps.Text = "视频特性";1740             this.mnuVideoCaps.Click += new System.EventHandler(this.mnuVideoCaps_Click);1741             // 1742             // menuItem51743             // 1744             this.menuItem5.Index = 4;1745             this.menuItem5.Text = "-";1746             // 1747             // mnuAudioSources1748             // 1749             this.mnuAudioSources.Index = 5;1750             this.mnuAudioSources.Text = "音频源";1751             // 1752             // mnuAudioChannels1753             // 1754             this.mnuAudioChannels.Index = 6;1755             this.mnuAudioChannels.Text = "音频通道";1756             // 1757             // mnuAudioSamplingRate1758             // 1759             this.mnuAudioSamplingRate.Index = 7;1760             this.mnuAudioSamplingRate.Text = "音频采样率";1761             // 1762             // mnuAudioSampleSizes1763             // 1764             this.mnuAudioSampleSizes.Index = 8;1765             this.mnuAudioSampleSizes.Text = "音频样本大小";1766             // 1767             // mnuAudioCaps1768             // 1769             this.mnuAudioCaps.Index = 9;1770             this.mnuAudioCaps.Text = "音频功能...";1771             this.mnuAudioCaps.Click += new System.EventHandler(this.mnuAudioCaps_Click);1772             // 1773             // menuItem31774             // 1775             this.menuItem3.Index = 10;1776             this.menuItem3.Text = "-";1777             // 1778             // mnuChannel1779             // 1780             this.mnuChannel.Index = 11;1781             this.mnuChannel.Text = "TV调谐器频道";1782             // 1783             // mnuInputType1784             // 1785             this.mnuInputType.Index = 12;1786             this.mnuInputType.Text = "TV 调谐器输入类型";1787             this.mnuInputType.Click += new System.EventHandler(this.mnuInputType_Click);1788             // 1789             // menuItem61790             // 1791             this.menuItem6.Index = 13;1792             this.menuItem6.Text = "-";1793             // 1794             // mnuCompressionProps1795             // 1796             this.mnuCompressionProps.Index = 14;1797             this.mnuCompressionProps.Text = "压缩道具...";1798             this.mnuCompressionProps.Click += new System.EventHandler(this.mnuCompressionProps_Click);1799             // 1800             // mnuPropertyPages1801             // 1802             this.mnuPropertyPages.Index = 15;1803             this.mnuPropertyPages.Text = "属性页";1804             // 1805             // menuItem81806             // 1807             this.menuItem8.Index = 16;1808             this.menuItem8.Text = "-";1809             // 1810             // mnuPreview1811             // 1812             this.mnuPreview.Index = 17;1813             this.mnuPreview.Text = "预览";1814             this.mnuPreview.Click += new System.EventHandler(this.mnuPreview_Click);1815             // 1816             // panelVideo1817             // 1818             this.panelVideo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)1819             | System.Windows.Forms.AnchorStyles.Left)1820             | System.Windows.Forms.AnchorStyles.Right)));1821             this.panelVideo.Location = new System.Drawing.Point(2, 8);1822             this.panelVideo.Name = "panelVideo";1823             this.panelVideo.Size = new System.Drawing.Size(735, 303);1824             this.panelVideo.TabIndex = 6;1825             // 1826             // btnCue1827             // 1828             this.btnCue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1829             this.btnCue.Location = new System.Drawing.Point(172, 364);1830             this.btnCue.Name = "btnCue";1831             this.btnCue.Size = new System.Drawing.Size(76, 26);1832             this.btnCue.TabIndex = 1;1833             this.btnCue.Text = "提示";1834             this.btnCue.Click += new System.EventHandler(this.btnCue_Click);1835             // 1836             // txtDroppedFrames1837             // 1838             this.txtDroppedFrames.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1839             this.txtDroppedFrames.CausesValidation = false;1840             this.txtDroppedFrames.Location = new System.Drawing.Point(680, 330);1841             this.txtDroppedFrames.Name = "txtDroppedFrames";1842             this.txtDroppedFrames.ReadOnly = true;1843             this.txtDroppedFrames.Size = new System.Drawing.Size(68, 21);1844             this.txtDroppedFrames.TabIndex = 9;1845             this.txtDroppedFrames.TabStop = false;1846             this.txtDroppedFrames.Text = "0";1847             // 1848             // label21849             // 1850             this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1851             this.label2.Location = new System.Drawing.Point(613, 330);1852             this.label2.Name = "label2";1853             this.label2.Size = new System.Drawing.Size(58, 25);1854             this.label2.TabIndex = 10;1855             this.label2.Text = "丢帧";1856             // 1857             // tmrTime11858             // 1859             this.tmrTime1.Interval = 999;1860             this.tmrTime1.Tick += new System.EventHandler(this.tmrTime1_Tick);1861             // 1862             // txtDuration1863             // 1864             this.txtDuration.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1865             this.txtDuration.Location = new System.Drawing.Point(527, 338);1866             this.txtDuration.Name = "txtDuration";1867             this.txtDuration.ReadOnly = true;1868             this.txtDuration.Size = new System.Drawing.Size(77, 21);1869             this.txtDuration.TabIndex = 11;1870             this.txtDuration.TabStop = false;1871             // 1872             // label31873             // 1874             this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1875             this.label3.Location = new System.Drawing.Point(536, 321);1876             this.label3.Name = "label3";1877             this.label3.Size = new System.Drawing.Size(58, 17);1878             this.label3.TabIndex = 12;1879             this.label3.Text = "持续时间";1880             // 1881             // label41882             // 1883             this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1884             this.label4.Location = new System.Drawing.Point(604, 364);1885             this.label4.Name = "label4";1886             this.label4.Size = new System.Drawing.Size(67, 26);1887             this.label4.TabIndex = 13;1888             this.label4.Text = "捕获帧";1889             // 1890             // txtCapturedFrames1891             // 1892             this.txtCapturedFrames.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1893             this.txtCapturedFrames.Location = new System.Drawing.Point(680, 364);1894             this.txtCapturedFrames.Name = "txtCapturedFrames";1895             this.txtCapturedFrames.ReadOnly = true;1896             this.txtCapturedFrames.Size = new System.Drawing.Size(68, 21);1897             this.txtCapturedFrames.TabIndex = 14;1898             this.txtCapturedFrames.TabStop = false;1899             this.txtCapturedFrames.Text = "0";1900             // 1901             // groupBox11902             // 1903             this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)1904             | System.Windows.Forms.AnchorStyles.Left)1905             | System.Windows.Forms.AnchorStyles.Right)));1906             this.groupBox1.Controls.Add(this.panelVideo);1907             this.groupBox1.Location = new System.Drawing.Point(10, 9);1908             this.groupBox1.Name = "groupBox1";1909             this.groupBox1.Size = new System.Drawing.Size(738, 312);1910             this.groupBox1.TabIndex = 15;1911             this.groupBox1.TabStop = false;1912             this.groupBox1.Resize += new System.EventHandler(this.groupBox1_Resize);1913             // 1914             // txtPreSize1915             // 1916             this.txtPreSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1917             this.txtPreSize.Location = new System.Drawing.Point(440, 338);1918             this.txtPreSize.Name = "txtPreSize";1919             this.txtPreSize.Size = new System.Drawing.Size(77, 21);1920             this.txtPreSize.TabIndex = 16;1921             this.txtPreSize.Text = "0";1922             this.txtPreSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;1923             // 1924             // label51925             // 1926             this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));1927             this.label5.Location = new System.Drawing.Point(431, 321);1928             this.label5.Name = "label5";1929             this.label5.Size = new System.Drawing.Size(96, 17);1930             this.label5.TabIndex = 17;1931             this.label5.Text = "Pre-Size (Meg)";1932             this.label5.TextAlign = System.Drawing.ContentAlignment.TopCenter;1933             // 1934             // CaptureTest1935             // 1936             this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);1937             this.ClientSize = new System.Drawing.Size(757, 404);1938             this.Controls.Add(this.label5);1939             this.Controls.Add(this.txtPreSize);1940             this.Controls.Add(this.groupBox1);1941             this.Controls.Add(this.txtCapturedFrames);1942             this.Controls.Add(this.label4);1943             this.Controls.Add(this.label3);1944             this.Controls.Add(this.txtDuration);1945             this.Controls.Add(this.label2);1946             this.Controls.Add(this.txtDroppedFrames);1947             this.Controls.Add(this.btnCue);1948             this.Controls.Add(this.btnExit);1949             this.Controls.Add(this.btnStop);1950             this.Controls.Add(this.btnStart);1951             this.Controls.Add(this.txtFilename);1952             this.Controls.Add(this.label1);1953             this.Menu = this.mainMenu;1954             this.Name = "CaptureTest";1955             this.Text = "捕捉测试";1956             this.groupBox1.ResumeLayout(false);1957             this.ResumeLayout(false);1958             this.PerformLayout();1959 1960         }1961         #endregion1962 1963     }1964 }

 

你可能感兴趣的文章
Java:java+内存分配及变量存储位置的区别
查看>>
PHP 字符串编码的转换
查看>>
往文件中按行写入数据
查看>>
20. Screen
查看>>
整个站点默认禁用 Session,而某个页面不禁用的做法。
查看>>
ios实例开发精品源码文章推荐(8.22)
查看>>
ElasticSearch 应用场景
查看>>
《数据库技术基础与应用(第2版)》学习笔记——第1章
查看>>
Tomcat性能调优方案
查看>>
Ubuntu12.04上编译PlateGatewayQt
查看>>
(转)UITableView使用详解 相当详细,不错的东东
查看>>
Java中JDK,JRE和JVM之间的关系
查看>>
Python-NLTK环境搭建
查看>>
linux下的usb抓包方法【转】
查看>>
二叉搜索树转换成有序的双向链表
查看>>
内核定时器的使用(好几个例子add_timer)【转】
查看>>
linux中高端内存和低端内存的概念【转】
查看>>
软件整合--硬件整合--平台整合
查看>>
Android 将Activiyt作为Dialog弹出
查看>>
Android 抽屉类SlidingDrawer的使用
查看>>