/////////////////////////////////////////////////////////////////////////////// // Small helping Methods // /////////////////////////////////////////////////////////////////////////////// #region HELPER /// <summary> /// Returns the <see cref="Guid"/> for the given filter of /// given category. /// </summary> /// <param name="filterName">Name of the filter to search.</param> /// <param name="category">Category of filter to search.</param> /// <returns>The <see cref="Guid"/> for the given filter of /// given category.</returns> private Guid FindGuid(string filterName, Guid category) { int hr; IEnumDMO enumDMO; Guid[] g2 = new Guid[1]; string[] sn = new string[1]; hr = DMOUtils.DMOEnum(category, 0, 0, null, 0, null, out enumDMO); DMOError.ThrowExceptionForHR(hr); try { do { hr = enumDMO.Next(1, g2, sn, IntPtr.Zero); }while (hr == 0 && sn[0] != filterName); // Handle any serious errors DMOError.ThrowExceptionForHR(hr); if (hr != 0) { throw new Exception("Cannot find " + filterName); } } finally { Marshal.ReleaseComObject(enumDMO); } return(g2[0]); }
/// <summary> /// Finds the <see cref="Guid"/> for the given /// category and object /// </summary> /// <param name="gn"> /// A string containing the name of the DMO. /// </param> /// <param name="cat"> /// A <see cref="Guid"/> with the dmo category. /// </param> /// <returns> /// The <see cref="Guid"/> of the found DMO. /// </returns> private Guid FindGuid(string gn, Guid cat) { int hr; IEnumDMO dmoEnum; var g2 = new Guid[1]; var sn = new string[1]; hr = DMOUtils.DMOEnum(cat, 0, 0, null, 0, null, out dmoEnum); DMOError.ThrowExceptionForHR(hr); try { do { hr = dmoEnum.Next(1, g2, sn, IntPtr.Zero); }while (hr == 0 && sn[0] != gn); // Handle any serious errors DMOError.ThrowExceptionForHR(hr); if (hr != 0) { throw new Exception("Cannot find " + gn); } } finally { Marshal.ReleaseComObject(dmoEnum); } return(g2[0]); }
private void Configure() { int hr; hr = DMOUtils.DMOEnum(Guid.Empty, DMOEnumerator.None, 0, null, 0, null, out m_idmo); DsError.ThrowExceptionForHR(hr); }
private void TestRegister() { int hr; IEnumDMO idmo; Guid g = Guid.NewGuid(); Guid g2 = Guid.NewGuid(); Debug.WriteLine(g); Debug.WriteLine(g2); DMOPartialMediatype [] pIn = new DMOPartialMediatype[2]; pIn[0] = new DMOPartialMediatype(); pIn[0].type = g2; pIn[0].subtype = MediaSubType.RGB24; pIn[1] = new DMOPartialMediatype(); pIn[1].type = g2; pIn[1].subtype = MediaSubType.RGB32; DMOPartialMediatype [] pOut = new DMOPartialMediatype[2]; pOut[0] = new DMOPartialMediatype(); pOut[0].type = g2; pOut[0].subtype = MediaSubType.RGB24; pOut[1] = new DMOPartialMediatype(); pOut[1].type = g2; pOut[1].subtype = MediaSubType.RGB32; hr = DMOUtils.DMORegister("asdffdsa", g, DMOCategory.VideoEffect, DMORegisterFlags.None, pIn.Length, pIn, pOut.Length, pOut ); Debug.Assert(hr == 0, "DMORegister"); DMOPartialMediatype [] tIn = new DMOPartialMediatype[1]; tIn[0].type = g2; tIn[0].subtype = MediaSubType.RGB32; hr = DMOUtils.DMOEnum(Guid.Empty, DMOEnumerator.IncludeKeyed, tIn.Length, tIn, 0, null, out idmo); DMOError.ThrowExceptionForHR(hr); int iCnt1 = CountEm(idmo); Debug.Assert(iCnt1 == 1, "DMORegister"); hr = DMOUtils.DMOUnregister(g, DMOCategory.VideoEffect); DMOError.ThrowExceptionForHR(hr); int iCnt2 = CountEm(idmo); Debug.Assert(iCnt2 == 0, "DMOUnregister"); }
private void junk() { int hr; IEnumDMO idmo; Guid [] g = new Guid[1]; string [] sn = new string[1]; int iCount = 0; hr = DMOUtils.DMOEnum(Guid.Empty, DMOEnumerator.None, 0, null, 0, null, out idmo); DMOError.ThrowExceptionForHR(hr); do { DMOWrapperFilter dmoFilter = new DMOWrapperFilter(); IDMOWrapperFilter dmoWrapperFilter = (IDMOWrapperFilter)dmoFilter; hr = idmo.Next(1, g, sn, IntPtr.Zero); DMOError.ThrowExceptionForHR(hr); if (hr > 0) { break; } hr = dmoWrapperFilter.Init(g[0], Guid.Empty); if (hr >= 0) { m_impi = dmoWrapperFilter as IMediaParamInfo; if (m_impi != null) { hr = m_impi.GetParamCount(out iCount); } else { iCount = 0; } if (iCount > 0) { Debug.WriteLine(string.Format("{0} {1} {2}", sn[0], iCount, g[0])); } } } while (iCount >= 0); }
private Guid FindDMOGuid(string gn, Guid cat) { int hr; IEnumDMO pEnum; Guid[] g2 = new Guid[1]; string[] sn = new String[1]; hr = DMOUtils.DMOEnum(cat, 0, 0, null, 0, null, out pEnum); DMOError.ThrowExceptionForHR(hr); IntPtr fetched = Marshal.AllocCoTaskMem(4); try { do { hr = pEnum.Next(1, g2, sn, fetched); } while (hr == 0 && sn[0] != gn); // Handle any serious errors DMOError.ThrowExceptionForHR(hr); if (hr != 0) { Console.WriteLine("Cannot find " + gn); return(Guid.Empty); } } finally { Marshal.ReleaseComObject(pEnum); Marshal.FreeCoTaskMem(fetched); } return(g2[0]); }
private void TestDmoEnum() { int hr; IEnumDMO idmo; DMOPartialMediatype [] tIn = new DMOPartialMediatype[2]; tIn[0].type = MediaType.Audio; tIn[0].subtype = Guid.Empty; tIn[1].type = MediaType.Video; tIn[1].subtype = Guid.Empty; hr = DMOUtils.DMOEnum(Guid.Empty, DMOEnumerator.IncludeKeyed, 2, tIn, 0, tIn, out idmo); DMOError.ThrowExceptionForHR(hr); int iCnt1 = CountEm(idmo); hr = DMOUtils.DMOEnum(Guid.Empty, DMOEnumerator.IncludeKeyed, 0, null, 0, null, out idmo); DMOError.ThrowExceptionForHR(hr); int iCnt2 = CountEm(idmo); Debug.Assert(iCnt1 == iCnt2, "Hopefully all DMOs are Video or Audio"); // Looking for the MS Screen Encoder MSS1 tIn[0].type = MediaType.Video; tIn[0].subtype = new Guid(0x3153534D, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71); tIn[0].subtype = new Guid("D990EE14-776C-4723-BE46-3DA2F56F10B9"); hr = DMOUtils.DMOEnum(DMOCategory.VideoEncoder, DMOEnumerator.IncludeKeyed, 0, null, 1, tIn, out idmo); DMOError.ThrowExceptionForHR(hr); int iCnt3 = CountEm(idmo); Debug.Assert(iCnt3 == 1, "Test Category, and output partial media types"); }