Beispiel #1
0
        public void Answer()
        {
            ToxAvError error = toxav.Answer(CallIndex, ToxAv.DefaultCodecSettings);

            if (error != ToxAvError.None)
            {
                throw new Exception("Could not answer call " + error.ToString());
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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));
            }
        }