MediaTypeEditor.pas 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. (*********************************************************************
  2. * DSPack 2.3.3 *
  3. * *
  4. * home page : http://www.progdigy.com *
  5. * email : hgourvest@progdigy.com *
  6. * Thanks to Michael Andersen. (DSVideoWindowEx) *
  7. * *
  8. * date : 21-02-2003 *
  9. * *
  10. * The contents of this file are used with permission, subject to *
  11. * the Mozilla Public License Version 1.1 (the "License"); you may *
  12. * not use this file except in compliance with the License. You may *
  13. * obtain a copy of the License at *
  14. * http://www.mozilla.org/MPL/MPL-1.1.html *
  15. * *
  16. * Software distributed under the License is distributed on an *
  17. * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or *
  18. * implied. See the License for the specific language governing *
  19. * rights and limitations under the License. *
  20. * *
  21. *********************************************************************)
  22. unit MediaTypeEditor;
  23. interface
  24. {$IFDEF VER150}
  25. {$WARN UNSAFE_CODE OFF}
  26. {$WARN UNSAFE_TYPE OFF}
  27. {$WARN UNSAFE_CAST OFF}
  28. {$ENDIF}
  29. uses
  30. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  31. Dialogs, DSUtil, StdCtrls, DirectShow9, Mask;
  32. type
  33. TFormMediaType = class(TForm)
  34. btOK: TButton;
  35. btCancel: TButton;
  36. cbMajorTypes: TComboBox;
  37. cbSubTypes: TComboBox;
  38. Label1: TLabel;
  39. Label2: TLabel;
  40. chkFixedSize: TCheckBox;
  41. chkTempCompress: TCheckBox;
  42. edSampleSize: TEdit;
  43. Label3: TLabel;
  44. cbFormatType: TComboBox;
  45. Label4: TLabel;
  46. Memo1: TMemo;
  47. lblFormatSize: TLabel;
  48. edFormatSize: TEdit;
  49. procedure FormShow(Sender: TObject);
  50. procedure cbMajorTypesChange(Sender: TObject);
  51. procedure cbSubTypesChange(Sender: TObject);
  52. procedure chkFixedSizeClick(Sender: TObject);
  53. procedure chkTempCompressClick(Sender: TObject);
  54. procedure btOKClick(Sender: TObject);
  55. procedure cbFormatTypeChange(Sender: TObject);
  56. procedure edSampleSizeChange(Sender: TObject);
  57. public
  58. MediaType: TMediaType;
  59. procedure RefreshMediaType;
  60. constructor create(AOwner: TComponent); override;
  61. destructor Destroy; override;
  62. end;
  63. TGUIDDescription = record
  64. name: string;
  65. GUID: TGUID;
  66. end;
  67. var
  68. FormMediaType: TFormMediaType;
  69. const
  70. MajorTypes : array[0..15] of TGUIDDescription =
  71. ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'),
  72. (name: 'Video' ; GUID: '{73646976-0000-0010-8000-00AA00389B71}'),
  73. (name: 'Audio' ; GUID: '{73647561-0000-0010-8000-00AA00389B71}'),
  74. (name: 'AnalogAudio' ; GUID: '{0482DEE1-7817-11CF-8A03-00AA006ECB65}'),
  75. (name: 'AnalogVideo' ; GUID: '{0482DDE1-7817-11CF-8A03-00AA006ECB65}'),
  76. (name: 'AUXLine21Data' ; GUID: '{670AEA80-3A82-11D0-B79B-00AA003767A7}'),
  77. (name: 'File' ; GUID: '{656C6966-0000-0010-8000-00AA00389B71}'),
  78. (name: 'Interleaved' ; GUID: '{73766169-0000-0010-8000-00AA00389B71}'),
  79. (name: 'LMRT' ; GUID: '{74726c6d-0000-0010-8000-00aa00389b71}'),
  80. (name: 'Midi' ; GUID: '{7364696D-0000-0010-8000-00AA00389B71}'),
  81. (name: 'MPEG2_PES' ; GUID: '{e06d8020-db46-11cf-b4d1-00805f6cbbea}'),
  82. (name: 'ScriptCommand' ; GUID: '{73636D64-0000-0010-8000-00AA00389B71}'),
  83. (name: 'Stream' ; GUID: '{E436EB83-524F-11CE-9F53-0020AF0BA770}'),
  84. (name: 'Text' ; GUID: '{73747874-0000-0010-8000-00AA00389B71}'),
  85. (name: 'Timecode' ; GUID: '{0482DEE3-7817-11CF-8A03-00AA006ECB65}'),
  86. (name: 'URL_STREAM' ; GUID: '{736c7275-0000-0010-8000-00aa00389b71}'));
  87. SubTypes : array[0..97] of TGUIDDescription =
  88. ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'),
  89. (name: 'MJPG'; GUID: '{47504A4D-0000-0010-8000-00AA00389B71}'),
  90. (name: 'Avi'; GUID: '{E436EB88-524F-11CE-9F53-0020AF0BA770}'),
  91. (name: 'Asf'; GUID: '{3DB80F90-9412-11D1-ADED-0000F8754B99}'),
  92. (name: 'PCM'; GUID: '{00000001-0000-0010-8000-00AA00389B71}'),
  93. (name: 'WAVE'; GUID: '{E436EB8B-524F-11CE-9F53-0020AF0BA770}'),
  94. (name: 'AU'; GUID: '{E436EB8C-524F-11CE-9F53-0020AF0BA770}'),
  95. (name: 'AIFF'; GUID: '{E436EB8D-524F-11CE-9F53-0020AF0BA770}'),
  96. (name: 'DTS'; GUID: '{E06D8033-DB46-11CF-B4D1-00805F6CBBEA}'),
  97. (name: 'DOLBY_AC3'; GUID: '{E06D802C-DB46-11CF-B4D1-00805F6CBBEA}'),
  98. (name: 'RGB1'; GUID: '{E436EB78-524F-11CE-9F53-0020AF0BA770}'),
  99. (name: 'RGB4'; GUID: '{E436EB79-524F-11CE-9F53-0020AF0BA770}'),
  100. (name: 'RGB8'; GUID: '{E436EB7A-524F-11CE-9F53-0020AF0BA770}'),
  101. (name: 'RGB565'; GUID: '{E436EB7B-524F-11CE-9F53-0020AF0BA770}'),
  102. (name: 'RGB555'; GUID: '{E436EB7C-524F-11CE-9F53-0020AF0BA770}'),
  103. (name: 'RGB24'; GUID: '{E436EB7D-524F-11CE-9F53-0020AF0BA770}'),
  104. (name: 'RGB32'; GUID: '{E436EB7E-524F-11CE-9F53-0020AF0BA770}'),
  105. (name: 'ARGB32'; GUID: '{773C9AC0-3274-11D0-B724-00AA006C1A01}'),
  106. (name: 'YUYV'; GUID: '{56595559-0000-0010-8000-00AA00389B71}'),
  107. (name: 'IYUV'; GUID: '{56555949-0000-0010-8000-00AA00389B71}'),
  108. (name: 'YVU9'; GUID: '{39555659-0000-0010-8000-00AA00389B71}'),
  109. (name: 'Y411'; GUID: '{31313459-0000-0010-8000-00AA00389B71}'),
  110. (name: 'Y41P'; GUID: '{50313459-0000-0010-8000-00AA00389B71}'),
  111. (name: 'YUY2'; GUID: '{32595559-0000-0010-8000-00AA00389B71}'),
  112. (name: 'YVYU'; GUID: '{55595659-0000-0010-8000-00AA00389B71}'),
  113. (name: 'UYVY'; GUID: '{59565955-0000-0010-8000-00AA00389B71}'),
  114. (name: 'Y211'; GUID: '{31313259-0000-0010-8000-00AA00389B71}'),
  115. (name: 'YV12'; GUID: '{32315659-0000-0010-8000-00AA00389B71}'),
  116. (name: 'CLPL'; GUID: '{4C504C43-0000-0010-8000-00AA00389B71}'),
  117. (name: 'CLJR'; GUID: '{524A4C43-0000-0010-8000-00AA00389B71}'),
  118. (name: 'IF09'; GUID: '{39304649-0000-0010-8000-00AA00389B71}'),
  119. (name: 'CPLA'; GUID: '{414C5043-0000-0010-8000-00AA00389B71}'),
  120. (name: 'TVMJ'; GUID: '{4A4D5654-0000-0010-8000-00AA00389B71}'),
  121. (name: 'WAKE'; GUID: '{454B4157-0000-0010-8000-00AA00389B71}'),
  122. (name: 'CFCC'; GUID: '{43434643-0000-0010-8000-00AA00389B71}'),
  123. (name: 'IJPG'; GUID: '{47504A49-0000-0010-8000-00AA00389B71}'),
  124. (name: 'Plum'; GUID: '{6D756C50-0000-0010-8000-00AA00389B71}'),
  125. (name: 'DVCS'; GUID: '{53435644-0000-0010-8000-00AA00389B71}'),
  126. (name: 'DVSD'; GUID: '{44535644-0000-0010-8000-00AA00389B71}'),
  127. (name: 'MDVF'; GUID: '{4656444D-0000-0010-8000-00AA00389B71}'),
  128. (name: 'Overlay'; GUID: '{E436EB7F-524F-11CE-9F53-0020AF0BA770}'),
  129. (name: 'MPEG1Packet'; GUID: '{E436EB80-524F-11CE-9F53-0020AF0BA770}'),
  130. (name: 'MPEG1Payload'; GUID: '{E436EB81-524F-11CE-9F53-0020AF0BA770}'),
  131. (name: 'MPEG1AudioPayload'; GUID: '{00000050-0000-0010-8000-00AA00389B71}'),
  132. (name: 'MPEG1System'; GUID: '{E436EB84-524F-11CE-9F53-0020AF0BA770}'),
  133. (name: 'MPEG1VideoCD'; GUID: '{E436EB85-524F-11CE-9F53-0020AF0BA770}'),
  134. (name: 'MPEG1Video'; GUID: '{E436EB86-524F-11CE-9F53-0020AF0BA770}'),
  135. (name: 'MPEG1Audio'; GUID: '{E436EB87-524F-11CE-9F53-0020AF0BA770}'),
  136. (name: 'QTMovie'; GUID: '{E436EB89-524F-11CE-9F53-0020AF0BA770}'),
  137. (name: 'QTRpza'; GUID: '{617A7072-0000-0010-8000-00AA00389B71}'),
  138. (name: 'QTSmc'; GUID: '{20636D73-0000-0010-8000-00AA00389B71}'),
  139. (name: 'QTRle'; GUID: '{20656C72-0000-0010-8000-00AA00389B71}'),
  140. (name: 'QTJpeg'; GUID: '{6765706A-0000-0010-8000-00AA00389B71}'),
  141. (name: 'PCMAudio_Obsolete'; GUID: '{E436EB8A-524F-11CE-9F53-0020AF0BA770}'),
  142. (name: 'dvsd_'; GUID: '{64737664-0000-0010-8000-00AA00389B71}'),
  143. (name: 'dvhd'; GUID: '{64687664-0000-0010-8000-00AA00389B71}'),
  144. (name: 'dvsl'; GUID: '{6C737664-0000-0010-8000-00AA00389B71}'),
  145. (name: 'Line21_BytePair'; GUID: '{6E8D4A22-310C-11D0-B79A-00AA003767A7}'),
  146. (name: 'Line21_GOPPacket'; GUID: '{6E8D4A23-310C-11D0-B79A-00AA003767A7}'),
  147. (name: 'Line21_VBIRawData'; GUID: '{6E8D4A24-310C-11D0-B79A-00AA003767A7}'),
  148. (name: 'DRM_Audio'; GUID: '{00000009-0000-0010-8000-00AA00389B71}'),
  149. (name: 'IEEE_FLOAT'; GUID: '{00000003-0000-0010-8000-00AA00389B71}'),
  150. (name: 'DOLBY_AC3_SPDIF'; GUID: '{00000092-0000-0010-8000-00AA00389B71}'),
  151. (name: 'RAW_SPORT'; GUID: '{00000240-0000-0010-8000-00AA00389B71}'),
  152. (name: 'SPDIF_TAG_241h'; GUID: '{00000241-0000-0010-8000-00AA00389B71}'),
  153. (name: 'DssVideo'; GUID: '{A0AF4F81-E163-11D0-BAD9-00609744111A}'),
  154. (name: 'DssAudio'; GUID: '{A0AF4F82-E163-11D0-BAD9-00609744111A}'),
  155. (name: 'VPVideo'; GUID: '{5A9B6A40-1A22-11D1-BAD9-00609744111A}'),
  156. (name: 'VPVBI'; GUID: '{5A9B6A41-1A22-11D1-BAD9-00609744111A}'),
  157. (name: 'AnalogVideo_NTSC_M'; GUID: '{0482DDE2-7817-11CF-8A03-00AA006ECB65}'),
  158. (name: 'AnalogVideo_PAL_B'; GUID: '{0482DDE5-7817-11CF-8A03-00AA006ECB65}'),
  159. (name: 'AnalogVideo_PAL_D'; GUID: '{0482DDE6-7817-11CF-8A03-00AA006ECB65}'),
  160. (name: 'AnalogVideo_PAL_G'; GUID: '{0482DDE7-7817-11CF-8A03-00AA006ECB65}'),
  161. (name: 'AnalogVideo_PAL_H'; GUID: '{0482DDE8-7817-11CF-8A03-00AA006ECB65}'),
  162. (name: 'AnalogVideo_PAL_I'; GUID: '{0482DDE9-7817-11CF-8A03-00AA006ECB65}'),
  163. (name: 'AnalogVideo_PAL_M'; GUID: '{0482DDEA-7817-11CF-8A03-00AA006ECB65}'),
  164. (name: 'AnalogVideo_PAL_N'; GUID: '{0482DDEB-7817-11CF-8A03-00AA006ECB65}'),
  165. (name: 'AnalogVideo_PAL_N_COMBO'; GUID: '{0482DDEC-7817-11CF-8A03-00AA006ECB65}'),
  166. (name: 'AnalogVideo_SECAM_B'; GUID: '{0482DDF0-7817-11CF-8A03-00AA006ECB65}'),
  167. (name: 'AnalogVideo_SECAM_D'; GUID: '{0482DDF1-7817-11CF-8A03-00AA006ECB65}'),
  168. (name: 'AnalogVideo_SECAM_G'; GUID: '{0482DDF2-7817-11CF-8A03-00AA006ECB65}'),
  169. (name: 'AnalogVideo_SECAM_H'; GUID: '{0482DDF3-7817-11CF-8A03-00AA006ECB65}'),
  170. (name: 'AnalogVideo_SECAM_K'; GUID: '{0482DDF4-7817-11CF-8A03-00AA006ECB65}'),
  171. (name: 'AnalogVideo_SECAM_K1'; GUID: '{0482DDF5-7817-11CF-8A03-00AA006ECB65}'),
  172. (name: 'AnalogVideo_SECAM_L'; GUID: '{0482DDF6-7817-11CF-8A03-00AA006ECB65}'),
  173. (name: 'MPEG2_VIDEO'; GUID: '{E06D8026-DB46-11CF-B4D1-00805F6CBBEA}'),
  174. (name: 'MPEG2_PROGRAM'; GUID: '{E06D8022-DB46-11CF-B4D1-00805F6CBBEA}'),
  175. (name: 'MPEG2_TRANSPORT'; GUID: '{E06D8023-DB46-11CF-B4D1-00805F6CBBEA}'),
  176. (name: 'MPEG2_AUDIO'; GUID: '{E06D802B-DB46-11CF-B4D1-00805F6CBBEA}'),
  177. (name: 'DVD_SUBPICTURE'; GUID: '{E06D802D-DB46-11CF-B4D1-00805F6CBBEA}'),
  178. (name: 'DVD_LPCM_AUDIO'; GUID: '{E06D8032-DB46-11CF-B4D1-00805F6CBBEA}'),
  179. (name: 'SDDS'; GUID: '{E06D8034-DB46-11CF-B4D1-00805F6CBBEA}'),
  180. (name: 'DVD_NAVIGATION_PCI'; GUID: '{E06D802F-DB46-11CF-B4D1-00805F6CBBEA}'),
  181. (name: 'DVD_NAVIGATION_DSI'; GUID: '{E06D8030-DB46-11CF-B4D1-00805F6CBBEA}'),
  182. (name: 'DVD_NAVIGATION_PROVIDER'; GUID: '{E06D8031-DB46-11CF-B4D1-00805F6CBBEA}'),
  183. (name: 'MP42'; GUID: '{3234504D-0000-0010-8000-00AA00389B71}'),
  184. (name: 'DIVX'; GUID: '{58564944-0000-0010-8000-00AA00389B71}'),
  185. (name: 'VOXWARE'; GUID: '{00000075-0000-0010-8000-00AA00389B71}'));
  186. FormatTypes: array[0..4] of TGUIDDescription =
  187. ((name: '[Automatic]'; GUID: '{00000000-0000-0000-0000-000000000000}'),
  188. (name: 'None'; GUID: '{0F6417D6-C318-11D0-A43F-00A0C9223196}'),
  189. (name: 'VideoInfo'; GUID: '{05589F80-C356-11CE-BF01-00AA0055595A}'),
  190. (name: 'VideoInfo2'; GUID: '{F72A76A0-EB0A-11D0-ACE4-0000C0CC16BA}'),
  191. (name: 'WaveFormatEx'; GUID: '{05589F81-C356-11CE-BF01-00AA0055595A}'));
  192. implementation
  193. uses ActiveX;
  194. {$R *.dfm}
  195. constructor TFormMediaType.create(AOwner: TComponent);
  196. var i: byte;
  197. begin
  198. inherited Create(AOwner);
  199. MediaType:= TMediaType.Create;
  200. for i := 0 to 15 do cbMajorTypes.Items.Add(MajorTypes[i].name);
  201. for i := 0 to 97 do cbSubTypes.Items.Add(SubTypes[i].name);
  202. for i := 0 to 4 do cbFormatType.Items.Add(FormatTypes[i].name);
  203. end;
  204. destructor TFormMediaType.Destroy;
  205. begin
  206. MediaType.Free;
  207. inherited Destroy;
  208. end;
  209. // majortype : TGUID;
  210. // subtype : TGUID;
  211. // bFixedSizeSamples : BOOL;
  212. // bTemporalCompression : BOOL;
  213. // lSampleSize : ULONG;
  214. // formattype : TGUID;
  215. // pUnk : IUnknown;
  216. // cbFormat : ULONG;
  217. // pbFormat : Pointer;
  218. procedure TFormMediaType.FormShow(Sender: TObject);
  219. begin
  220. RefreshMediaType;
  221. end;
  222. procedure TFormMediaType.RefreshMediaType;
  223. var i: byte;
  224. begin
  225. for i := 0 to 15 do
  226. if IsEqualGUID(MajorTypes[i].GUID, MediaType.MajorType) then
  227. begin
  228. cbMajorTypes.ItemIndex := i;
  229. Break;
  230. end;
  231. for i := 0 to 97 do
  232. if IsEqualGUID(SubTypes[i].GUID, MediaType.SubType) then
  233. begin
  234. cbSubTypes.ItemIndex := i;
  235. Break;
  236. end;
  237. if cbMajorTypes.ItemIndex = -1 then cbMajorTypes.ItemIndex := 0;
  238. if cbSubTypes.ItemIndex = -1 then cbSubTypes.ItemIndex := 0;
  239. chkFixedSize.Checked := MediaType.IsFixedSize;
  240. chkTempCompress.Checked := MediaType.IsTemporalCompressed;
  241. edSampleSize.Text := inttostr(MediaType.GetSampleSize);
  242. for i := 0 to 4 do
  243. if IsEqualGUID(FormatTypes[i].GUID, MediaType.FormatType) then
  244. begin
  245. cbFormatType.ItemIndex := i;
  246. Break;
  247. end;
  248. edFormatSize.Text := inttostr(MediaType.FormatLength);
  249. memo1.Clear;
  250. memo1.lines.Add(GetMediaTypeDescription(MediaType.AMMediaType));
  251. end;
  252. procedure TFormMediaType.btOKClick(Sender: TObject);
  253. begin
  254. try
  255. MediaType.SetSampleSize(StrToInt(edSampleSize.Text));
  256. except
  257. MessageBox(Handle,PChar('Invalid Sample Size.'), PChar('Error'), mb_ok);
  258. exit;
  259. end;
  260. ModalResult := mrOK;
  261. end;
  262. procedure TFormMediaType.cbMajorTypesChange(Sender: TObject);
  263. begin
  264. MediaType.MajorType := MajorTypes[cbMajorTypes.ItemIndex].GUID;
  265. RefreshMediaType;
  266. end;
  267. procedure TFormMediaType.cbSubTypesChange(Sender: TObject);
  268. begin
  269. MediaType.SubType := SubTypes[cbSubTypes.ItemIndex].GUID;
  270. RefreshMediaType;
  271. end;
  272. procedure TFormMediaType.chkFixedSizeClick(Sender: TObject);
  273. begin
  274. MediaType.AMMediaType.bFixedSizeSamples := chkFixedSize.Checked;
  275. RefreshMediaType;
  276. end;
  277. procedure TFormMediaType.chkTempCompressClick(Sender: TObject);
  278. begin
  279. MediaType.AMMediaType.bTemporalCompression := chkTempCompress.Checked;
  280. RefreshMediaType;
  281. end;
  282. procedure TFormMediaType.cbFormatTypeChange(Sender: TObject);
  283. begin
  284. MediaType.FormatType := FormatTypes[cbFormatType.ItemIndex].GUID;
  285. RefreshMediaType;
  286. end;
  287. procedure TFormMediaType.edSampleSizeChange(Sender: TObject);
  288. begin
  289. try
  290. if edSampleSize.Text = '' then MediaType.SetSampleSize(0) else
  291. MediaType.SetSampleSize(StrToInt(edSampleSize.Text));
  292. finally
  293. RefreshMediaType;
  294. end;
  295. end;
  296. end.