private static bool SupportsVideoCompressor(ref ICINFO icInfo) { #if COMPATIBILITY if (icInfo.fccHandler == FourCC.x264) { return(true); } #endif const VideoCompressorFlags unsupportedFlags = VideoCompressorFlags.Quality | VideoCompressorFlags.Crunch | VideoCompressorFlags.CompressFrames; if ((icInfo.dwFlags & unsupportedFlags) != 0) { return(false); } bool requiresPreviousFrame = (icInfo.dwFlags & VideoCompressorFlags.Temporal) != 0 && (icInfo.dwFlags & VideoCompressorFlags.FastTemporalC) == 0; return(!requiresPreviousFrame); }
public static extern bool ICInfo( int fccType, int fccHandler, ref ICINFO lpicinfo );
static extern int ICGetInfo(IntPtr hic, ref ICINFO lpicinfo, int cb);
public static extern int ICGetInfo(IntPtr hic, out ICINFO pciinfo, uint cb);
public static extern int ICInfo(uint fccType, uint fccHandler, ref ICINFO lpicinfo);
public static extern Int32 ICGetInfo(IntPtr hic, ref ICINFO picinfo, Int32 size);
public static extern IntPtr ICGetInfo(VideoCompressorHandle hic, ref ICINFO lpicinfo, uint cb);
internal VideoCompressorInfo(ref ICINFO icInfo) { _icInfo = icInfo; }
private static Codec[] LoadInstalledCodecs() { List<Codec> codecs = new List<Codec>(); int fccType = mmioStringToFOURCC("VIDC", 0); int i = 0; ICINFO handlerInfo = new ICINFO(); handlerInfo.dwSize = Marshal.SizeOf(handlerInfo); while (0 != ICInfo(fccType, i++, ref handlerInfo)) { IntPtr handle = ICOpen(fccType, handlerInfo.fccHandler, (Int32)ICModeFlags.ICMODE_QUERY); if (handle == IntPtr.Zero) continue; ICINFO queryHandlerInfo = new ICINFO(); queryHandlerInfo.dwSize = Marshal.SizeOf(queryHandlerInfo); if (0 != ICGetInfo(handle, ref queryHandlerInfo, queryHandlerInfo.dwSize)) { Codec codec = new Codec(queryHandlerInfo); if (!String.IsNullOrEmpty(codec.Name) && null == codecs.Find(delegate(Codec test) { return test.Name == codec.Name; })) { codecs.Add(codec); } } ICClose(handle); } return codecs.ToArray(); }
private static Codec Find(BITMAPINFOHEADER format, ICModeFlags flags, Codec preferredCodec) { int fccType = mmioStringToFOURCC("VIDC", 0); int preferredFccHandler = 0; if (preferredCodec != null) preferredFccHandler = preferredCodec.FourCCHandler; IntPtr handle = ICLocate(fccType, preferredFccHandler, ref format, IntPtr.Zero, (short)flags); GC.KeepAlive(format); if (handle != IntPtr.Zero) { ICINFO icInfo = new ICINFO(); icInfo.dwSize = Marshal.SizeOf(icInfo); if (0 == ICGetInfo(handle, ref icInfo, icInfo.dwSize)) { ICClose(handle); return null; } ICClose(handle); return CollectionUtils.SelectFirst( _installedCodecs, delegate(Codec codec) { return codec.FourCCHandler == icInfo.fccHandler; }); } return null; }
private Codec(ICINFO icInfo) { _icInfo = icInfo; _fourCCCode = mmioFourCCToString(FourCCHandler); }
public static extern int ICInfo( Int32 fccType, Int32 fccHandler, ref ICINFO icInfo);
public static extern int ICGetInfo( int hic, ref ICINFO lpicinfo, int cb );
public static extern bool ICInfo(uint fccType, uint fccHandler, out ICINFO lpicinfo);