public void Answer() { ToxAvError error = toxav.Answer(CallIndex, ToxAv.DefaultCodecSettings); if (error != ToxAvError.None) { throw new Exception("Could not answer call " + error.ToString()); } }
/// <summary> /// Creates a new call. /// </summary> /// <param name="callIndex"></param> /// <param name="friendNumber"></param> /// <param name="settings"></param> /// <param name="ringingSeconds"></param> /// <returns></returns> public ToxAvError Call(int friendNumber, ToxAvCodecSettings settings, int ringingSeconds, out int callIndex) { ThrowIfDisposed(); int index = new int(); ToxAvError result = ToxAvFunctions.Call(_toxAv, ref index, friendNumber, ref settings, ringingSeconds); callIndex = index; return(result); }
/// <summary> /// Creates a new call. /// </summary> /// <param name="callIndex"></param> /// <param name="friendNumber"></param> /// <param name="settings"></param> /// <param name="ringingSeconds"></param> /// <returns></returns> public ToxAvError Call(int friendNumber, ToxAvCodecSettings settings, int ringingSeconds, out int callIndex) { if (_disposed) { throw new ObjectDisposedException(GetType().FullName); } int index = new int(); ToxAvError result = ToxAvFunctions.Call(_toxAv, ref index, friendNumber, ref settings, ringingSeconds); callIndex = index; return(result); }
private void wave_source_DataAvailable(object sender, WaveInEventArgs e) { ushort[] ushorts = new ushort[e.Buffer.Length / 2]; Buffer.BlockCopy(e.Buffer, 0, ushorts, 0, e.Buffer.Length); byte[] dest = new byte[65535]; int size = toxav.PrepareAudioFrame(CallIndex, dest, 65535, ushorts); ToxAvError error = toxav.SendAudio(CallIndex, dest, size); if (error != ToxAvError.None) { Console.WriteLine("Could not send audio: {0}", error); } }
private void SendVideoFrame(Bitmap frame) { var bitmapData = frame.LockBits(new Rectangle(0, 0, frame.Width, frame.Height), ImageLockMode.ReadOnly, frame.PixelFormat); byte[] bytes = new byte[bitmapData.Stride * frame.Height]; Marshal.Copy(bitmapData.Scan0, bytes, 0, bytes.Length); try { VpxImage img = VpxImage.Create(VpxImageFormat.VPX_IMG_FMT_I420, (ushort)frame.Width, (ushort)frame.Height, 1); byte[] dest = new byte[frame.Width * frame.Height * 4]; VpxHelper.RgbToYuv420(img, bytes, (ushort)frame.Width, (ushort)frame.Height); int length = toxav.PrepareVideoFrame(CallIndex, dest, (IntPtr)img.Pointer); img.Free(); if (length > 0) { byte[] bytesToSend = new byte[length]; Array.Copy(dest, bytesToSend, length); ToxAvError error = toxav.SendVideo(CallIndex, bytesToSend); if (error != ToxAvError.None) { Debug.WriteLine(string.Format("Could not send video frame: {0}, {1}", error, length)); } } else { Debug.WriteLine(string.Format("Could not prepare frame: {0}", (ToxAvError)length)); } } catch { Debug.WriteLine(string.Format("Could not convert frame")); } frame.Dispose(); }
protected virtual void wave_source_DataAvailable(object sender, WaveInEventArgs e) { short[] shorts = BytesToShorts(e.Buffer); if (filterAudio != null && FilterAudio) { if (!filterAudio.Filter(shorts, shorts.Length / wave_source.WaveFormat.Channels)) { Debug.WriteLine("Could not filter audio"); } } byte[] dest = new byte[(((int)ToxAv.DefaultCodecSettings.AudioFrameDuration * wave_source.WaveFormat.SampleRate) / 1000) * 2 * wave_source.WaveFormat.Channels]; int size = toxav.PrepareAudioFrame(callIndex, dest, dest.Length, shorts, ((int)wave_source.BufferMilliseconds * (int)wave_source.WaveFormat.SampleRate) / 1000); ToxAvError error = toxav.SendAudio(callIndex, dest, size); if (error != ToxAvError.None) { Debug.WriteLine(string.Format("Could not send audio: {0}", error)); } }