Наследование: IDisposable
Пример #1
0
		public byte[][] DecodeAudio (Packet packet)
		{
			if (packet == null)
				throw new ArgumentNullException ("packet");

			List<byte[]> buffers = new List<byte[]>();

			byte[] buffer = new byte[FFmpeg.AVCODEC_MAX_AUDIO_FRAME_SIZE];
			
			int audio_pkt_size = packet.Size;

			fixed (byte* bptr = buffer)
			{
				while (audio_pkt_size > 0)
				{
					int data_size = buffer.Length;

					int len = FFmpeg.avcodec_decode_audio2 (this.context.ptr, (IntPtr)bptr, ref data_size, packet.packet->data, audio_pkt_size);
					if (len < 0)
						break;

					#if !X64
					packet.packet->data = new IntPtr (packet.packet->data.ToInt32() + len);
					#else
					packet.packet->data = new IntPtr (packet.packet->data.ToInt64() + len);
					#endif

					audio_pkt_size -= len;

					byte[] pcm = new byte[data_size];
					Array.Copy (buffer, pcm, data_size);
					buffers.Add (pcm);
				}
			}

			return buffers.ToArray();
		}
Пример #2
0
		public bool ReadPacket (out Packet packet)
		{
			packet = null;

			IntPtr pptr = Marshal.AllocHGlobal (sizeof (AVPacket));

			if (FFmpeg.av_read_frame (this.ptr, pptr) < 0)
				return false;

			packet = new Packet (pptr, this.streams[((AVPacket*)pptr)->stream_index]);
			return true;
		}