private av_read_frame ( IntPtr s, IntPtr pkt ) : |
||
s | IntPtr | |
pkt | IntPtr | |
Résultat |
public IAVFrame GetNext() { IAVFrame frame = null; IntPtr pPacket = Marshal.AllocHGlobal(Marshal.SizeOf(new AV.AVPacket())); if (AV.av_read_frame(rawFormatCtx, pPacket) != 0) { Marshal.FreeHGlobal(pPacket); pPacket = IntPtr.Zero; return(null); } AV.AVPacket packet = new NativeGetter <AV.AVPacket>(pPacket).Get(); if (!decoderTable.ContainsKey(packet.stream_index) || !mediaTypeTable.ContainsKey(packet.stream_index)) { Marshal.FreeHGlobal(pPacket); pPacket = IntPtr.Zero; return(null); } var codec = decoderTable[packet.stream_index]; var type = mediaTypeTable[packet.stream_index]; switch (type) { case AV.AVMediaType.AVMEDIA_TYPE_AUDIO: frame = new AudioFrame(pPacket, codec); return(frame); case AV.AVMediaType.AVMEDIA_TYPE_VIDEO: frame = new VideoFrame(pPacket, codec); return(frame); default: throw new Exception("Not support media type " + type.ToString()); } return(null); }