Skip to content

Commit

Permalink
updated and finished vapi, extended the example with a functional tox…
Browse files Browse the repository at this point in the history
… session
  • Loading branch information
naxuroqa committed Apr 21, 2014
1 parent ced952b commit 84bf405
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 88 deletions.
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ VALA_PRECOMPILE( VALA_C_VENOM

VALA_PRECOMPILE( VALA_C_TOXAV_TEST
testing/ToxAVTest.vala
core/Tools.vala
PACKAGES
gstreamer-0.10
gstreamer-interfaces-0.10
Expand Down
96 changes: 94 additions & 2 deletions src/testing/ToxAVTest.vala
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ public class VideoSample : Window {
public VideoSample () {
create_widgets ();
setup_gst_pipeline ();
tox = new Tox.Tox(0);
//tox_av = new ToxAV.ToxAV(tox, 800, 600);
create_tox ();
}

private void create_widgets () {
Expand All @@ -64,6 +63,7 @@ public class VideoSample : Window {
vbox.pack_start (bb, false, true, 0);

add (vbox);
destroy.connect(() => {Gtk.main_quit();});
}

private void setup_gst_pipeline () {
Expand All @@ -75,6 +75,8 @@ public class VideoSample : Window {
#elif UNIX
this.src = ElementFactory.make ("v4l2src", "video");
this.asrc = ElementFactory.make("pulsesrc", "audio");
//this.src = ElementFactory.make ("videotestsrc", "video");
//this.asrc = ElementFactory.make("audiotestsrc", "audio");
this.sink = ElementFactory.make ("xvimagesink", "sink");
this.asink = ElementFactory.make("autoaudiosink", "asink");
#else
Expand All @@ -96,6 +98,96 @@ public class VideoSample : Window {
#endif
}

private void create_tox() {
tox = new Tox.Tox(0);
tox.callback_friend_request(on_friend_request);

tox_av = new ToxAV.ToxAV(tox, 800, 600);
ToxAV.register_callstate_callback(on_toxav_invite , ToxAV.CallbackID.INVITE);
ToxAV.register_callstate_callback(on_toxav_start , ToxAV.CallbackID.START);
ToxAV.register_callstate_callback(on_toxav_cancel , ToxAV.CallbackID.CANCEL);
ToxAV.register_callstate_callback(on_toxav_reject , ToxAV.CallbackID.REJECT);
ToxAV.register_callstate_callback(on_toxav_end , ToxAV.CallbackID.END);
ToxAV.register_callstate_callback(on_toxav_ringing , ToxAV.CallbackID.RINGING);
ToxAV.register_callstate_callback(on_toxav_starting , ToxAV.CallbackID.STARTING);
ToxAV.register_callstate_callback(on_toxav_ending , ToxAV.CallbackID.ENDING);
ToxAV.register_callstate_callback(on_toxav_error , ToxAV.CallbackID.ERROR);
ToxAV.register_callstate_callback(on_toxav_request_timeout, ToxAV.CallbackID.REQUEST_TIMEOUT);

uint8[] buf = new uint8[Tox.FRIEND_ADDRESS_SIZE];
tox.get_address(buf);
stdout.printf("[LOG] Tox ID: %s\n", Venom.Tools.bin_to_hexstring(buf));
tox.set_name(Venom.Tools.string_to_nullterm_uint("AV Test"));

bool bootstrapped = false;
bool connected = false;
GLib.Timeout.add(25, () => {
if(!bootstrapped) {
tox.bootstrap_from_address("66.175.223.88",
0,
((uint16)33445).to_big_endian(),
Venom.Tools.hexstring_to_bin("B24E2FB924AE66D023FE1E42A2EE3B432010206F751A2FFD3E297383ACF1572E")
);
bootstrapped = true;
print("[LOG] Bootstrapped.\n");
}
if(tox.isconnected() != 0) {
if(!connected) {
connected = true;
print("[LOG] Connected.\n");
}
} else {
if(connected) {
connected = false;
print("[LOG] Disconnected.\n");
}
}

tox.do();
return true;
});
}

private void on_friend_request(uint8[] key, uint8[] data) {
uint8[] public_key = Venom.Tools.clone(key, Tox.CLIENT_ID_SIZE);
print("[LOG] Friend request from %s received.\n", Venom.Tools.bin_to_hexstring(public_key));
int friend_number = tox.add_friend_norequest(public_key);
if(friend_number < 0) {
print("[ERR] Friend could not be added.\n");
}
}

private void on_toxav_invite() {
print("[LOG] on_toxav_invite\n");
}
private void on_toxav_start() {
print("[LOG] on_toxav_start\n");
}
private void on_toxav_cancel() {
print("[LOG] on_toxav_cancel\n");
}
private void on_toxav_reject() {
print("[LOG] on_toxav_reject\n");
}
private void on_toxav_end() {
print("[LOG] on_toxav_end\n");
}
private void on_toxav_ringing() {
print("[LOG] on_toxav_ringing\n");
}
private void on_toxav_starting() {
print("[LOG] on_toxav_starting\n");
}
private void on_toxav_ending() {
print("[LOG] on_toxav_ending\n");
}
private void on_toxav_error() {
print("[LOG] on_toxav_error\n");
}
private void on_toxav_request_timeout() {
print("[LOG] on_toxav_request_timeout\n");
}

private void on_play () {
var xoverlay = this.sink as XOverlay;
xoverlay.set_xwindow_id (this.xid);
Expand Down
176 changes: 90 additions & 86 deletions src/vapi/tox-1.0.vapi
Original file line number Diff line number Diff line change
Expand Up @@ -724,43 +724,61 @@ namespace Vpx {
[CCode (cheader_filename = "tox/toxav.h", cprefix = "")]
namespace ToxAV {

public const int RTP_PAYLOAD_SIZE;

/* Number of audio channels. */
[CCode (cprefix = "")]
public const int AUDIO_CHANNELS;

/* Audio frame duration in miliseconds */
public const int AUDIO_FRAME_DURATION;

/* Audio sample rate recommended to be 48kHz for Opus */
public const int AUDIO_SAMPLE_RATE;

/* The amount of samples in one audio frame */
[CCode (cprefix = "")]
public const int AUDIO_FRAME_SIZE;

/**
* @brief Callbacks ids that handle the call states.
*/
[CCode (cname = "ToxAvCallbackID", cprefix = "av_", has_type_id = false)]
[CCode (cname = "ToxAvCallbackID", cprefix = "av_On", has_type_id = false)]
public enum CallbackID {
/* Requests */
OnInvite,
OnStart,
OnCancel,
OnReject,
OnEnd,
[CCode (cname = "av_OnInvite")]
INVITE,
[CCode (cname = "av_OnStart")]
START,
[CCode (cname = "av_OnCancel")]
CANCEL,
[CCode (cname = "av_OnReject")]
REJECT,
[CCode (cname = "av_OnEnd")]
END,

/* Responses */
OnRinging,
OnStarting,
OnEnding,
[CCode (cname = "av_OnRinging")]
RINGING,
[CCode (cname = "av_OnStarting")]
STARTING,
[CCode (cname = "av_OnEnding")]
ENDING,

/* Protocol */
OnError,
OnRequestTimeout
[CCode (cname = "av_OnError")]
ERROR,
[CCode (cname = "av_OnRequestTimeout")]
REQUEST_TIMEOUT
}

/**
* @brief Call type identifier.
*/
[CCode (cname = "ToxAvCallType", cprefix = "Type", has_type_id = false)]
public enum CallType {
Audio,
Video
[CCode (cname = "TypeAudio")]
AUDIO,
[CCode (cname = "TypeVideo")]
VIDEO
}

/**
Expand All @@ -769,20 +787,63 @@ namespace ToxAV {
*/
[CCode (cname = "ToxAvError", cprefix = "Error", has_type_id = false)]
public enum AV_Error {
None,
Internal,
AlreadyInCall,
NoCall,
InvalidState,
NoRtpSession,
AudioPacketLost,
StartingAudioRtp,
StartingVideoRtp,
NoTransmission,
TerminatingAudioRtp,
TerminatingVideoRtp
[CCode (cname = "ErrorNone")]
NONE,
[CCode (cname = "ErrorInternal")]
INTERNAL,
[CCode (cname = "ErrorAlreadyInCall")]
ALREADY_IN_CALL,
[CCode (cname = "ErrorNoCall")]
NO_CALL,
[CCode (cname = "ErrorInvalidState")]
INVALID_STATE,
[CCode (cname = "ErrorNoRtpSession")]
NO_RTP_SESSION,
[CCode (cname = "ErrorAudioPacketLost")]
AUDIO_PACKET_LOST,
[CCode (cname = "ErrorStartingAudioRtp")]
STARTING_AUDIO_RTP,
[CCode (cname = "ErrorStartingVideoRtp")]
STARTING_VIDEO_RTP,
[CCode (cname = "ErrorNoTransmission")]
NO_TRANSMISSION,
[CCode (cname = "ErrorTerminatingAudioRtp")]
TERMINATING_AUDIO_RTP,
[CCode (cname = "ErrorTerminatingVideoRtp")]
TERMINATING_VIDEO_RTP
}

/**
* @brief Locally supported capabilities.
*/
[Flags]
[CCode (cname = "ToxAvCapabilities", cprefix = "", has_type_id = false)]
public enum Capabilities {
[CCode (cname = "None")]
NONE,
[CCode (cname = "AudioEnconding")]
AUDIO_ENCODING,
[CCode (cname = "AudioDecoding")]
AUDIO_DECODING,
[CCode (cname = "VideoEncoding")]
VIDEO_ENCODING,
[CCode (cname = "VideoDecoding")]
VIDEO_DECODING
}

/**
* @brief Register callback for call state.
*
* @param callback The callback
* @param id One of the ToxAvCallbackID values
* @return void
*/
//FIXME return value?
[CCode (cname = "ToxAVCallback", has_type_id = false)]
public delegate void CallstateCallback ();
[CCode (cname = "toxav_register_callstate_callback")]
public static void register_callstate_callback ([CCode (delegate_target_pos = 2.1)]CallstateCallback callback, CallbackID id);

[CCode (cname = "ToxAv", free_function = "toxav_kill", cprefix = "toxav_", has_type_id = false)]
[Compact]
public class ToxAV {
Expand All @@ -809,17 +870,6 @@ namespace ToxAV {
// */
//void toxav_kill(ToxAv *av);

/**
* @brief Register callback for call state.
*
* @param callback The callback
* @param id One of the ToxAvCallbackID values
* @return void
*/
[CCode (cname = "ToxAVCallback", has_type_id = false)]
public delegate int Callback ();
public static void register_callstate_callback (Callback callback, CallbackID id);

/**
* @brief Call user. Use its friend_id.
*
Expand Down Expand Up @@ -975,60 +1025,14 @@ namespace ToxAV {
public AV_Error get_peer_id ( int peer );

/**
* @brief Get reference to an object that is handling av session.
*
* @param av Handler.
* @return void*
*/
//public void *get_agent_handler ();

/**
* @brief Is video encoding supported
*
* @param av Handler
* @return int
* @retval 1 Yes.
* @retval 0 No.
*/
public int video_encoding {
[CCode (cname = "toxav_video_encoding")] get;
}

/**
* @brief Is video decoding supported
* @brief Is certain capability supported
*
* @param av Handler
* @return int
* @retval 1 Yes.
* @retval 0 No.
*/
public int video_decoding {
[CCode (cname = "toxav_video_decoding")] get;
}

/**
* @brief Is audio encoding supported
*
* @param av Handler
* @return int
* @retval 1 Yes.
* @retval 0 No.
*/
public int audio_encoding {
[CCode (cname = "toxav_audio_encoding")] get;
}

/**
* @brief Is audio decoding supported
*
* @param av Handler
* @return int
* @retval 1 Yes.
* @retval 0 No.
*/
public int audio_decoding {
[CCode (cname = "toxav_audio_decoding")] get;
}
public int capability_supported ( Capabilities capability );

/**
* @brief Get messenger handle
Expand Down

0 comments on commit 84bf405

Please sign in to comment.