mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Codec settings
This commit is contained in:
parent
1efb1d341f
commit
3f0d6b5778
|
@ -194,10 +194,13 @@ START_TEST(test_AV)
|
||||||
printf("All set after %llu seconds! Starting call...\n", time(NULL) - cur_time);
|
printf("All set after %llu seconds! Starting call...\n", time(NULL) - cur_time);
|
||||||
|
|
||||||
|
|
||||||
|
ToxAvCodecSettings muhcaps = av_DefaultSettings;
|
||||||
|
muhcaps.video_height = muhcaps.video_width = 128;
|
||||||
|
|
||||||
Status status_control =
|
Status status_control =
|
||||||
{
|
{
|
||||||
{none, toxav_new(Alice, 128, 128), NULL},
|
{none, toxav_new(Alice, &muhcaps), NULL},
|
||||||
{none, toxav_new(Bob, 128, 128), NULL},
|
{none, toxav_new(Bob, &muhcaps), NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,8 @@
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "../toxcore/tox.h"
|
#include "../toxcore/tox.h"
|
||||||
|
|
||||||
|
#define AUDIO_FRAME_SIZE (av_DefaultSettings.audio_sample_rate * av_DefaultSettings.audio_frame_duration / 1000)
|
||||||
|
|
||||||
#ifdef TOX_FFMPEG
|
#ifdef TOX_FFMPEG
|
||||||
/* Video encoding/decoding */
|
/* Video encoding/decoding */
|
||||||
#include <libavcodec/avcodec.h>
|
#include <libavcodec/avcodec.h>
|
||||||
|
@ -1055,7 +1057,7 @@ av_session_t *av_init_session()
|
||||||
|
|
||||||
_retu->audio_capture_device =
|
_retu->audio_capture_device =
|
||||||
(struct ALCdevice *)alcCaptureOpenDevice(
|
(struct ALCdevice *)alcCaptureOpenDevice(
|
||||||
device_names[selection], AUDIO_SAMPLE_RATE, AL_FORMAT_MONO16, AUDIO_FRAME_SIZE * 4);
|
device_names[selection], av_DefaultSettings.audio_sample_rate, AL_FORMAT_MONO16, AUDIO_FRAME_SIZE * 4);
|
||||||
|
|
||||||
|
|
||||||
if (alcGetError((ALCdevice *)_retu->audio_capture_device) != AL_NO_ERROR) {
|
if (alcGetError((ALCdevice *)_retu->audio_capture_device) != AL_NO_ERROR) {
|
||||||
|
@ -1117,8 +1119,10 @@ failed_init_ffmpeg: ;
|
||||||
tox_get_address(_retu->_messenger, _byte_address );
|
tox_get_address(_retu->_messenger, _byte_address );
|
||||||
fraddr_to_str( _byte_address, _retu->_my_public_id );
|
fraddr_to_str( _byte_address, _retu->_my_public_id );
|
||||||
|
|
||||||
|
ToxAvCodecSettings cs = av_DefaultSettings;
|
||||||
_retu->av = toxav_new(_retu->_messenger, width, height);
|
cs.video_height = height;
|
||||||
|
cs.video_width = width;
|
||||||
|
_retu->av = toxav_new(_retu->_messenger, &cs);
|
||||||
|
|
||||||
/* ------------------ */
|
/* ------------------ */
|
||||||
|
|
||||||
|
|
|
@ -35,12 +35,6 @@
|
||||||
|
|
||||||
#include "toxav.h"
|
#include "toxav.h"
|
||||||
|
|
||||||
/* Default video bitrate in bytes/s */
|
|
||||||
#define VIDEO_BITRATE (10*1000*100)
|
|
||||||
|
|
||||||
/* Default audio bitrate in bits/s */
|
|
||||||
#define AUDIO_BITRATE 64000
|
|
||||||
|
|
||||||
/* Assume 60 fps*/
|
/* Assume 60 fps*/
|
||||||
#define MAX_ENCODE_TIME_US ((1000 / 60) * 1000)
|
#define MAX_ENCODE_TIME_US ((1000 / 60) * 1000)
|
||||||
|
|
||||||
|
@ -80,7 +74,7 @@ typedef struct _ToxAv {
|
||||||
* @return ToxAv*
|
* @return ToxAv*
|
||||||
* @retval NULL On error.
|
* @retval NULL On error.
|
||||||
*/
|
*/
|
||||||
ToxAv *toxav_new( Tox* messenger, uint16_t video_width, uint16_t video_height)
|
ToxAv *toxav_new( Tox* messenger, ToxAvCodecSettings* codec_settings)
|
||||||
{
|
{
|
||||||
ToxAv *av = calloc ( sizeof(ToxAv), 1);
|
ToxAv *av = calloc ( sizeof(ToxAv), 1);
|
||||||
|
|
||||||
|
@ -95,10 +89,15 @@ ToxAv *toxav_new( Tox* messenger, uint16_t video_width, uint16_t video_height)
|
||||||
av->rtp_sessions[0] = av->rtp_sessions [1] = NULL;
|
av->rtp_sessions[0] = av->rtp_sessions [1] = NULL;
|
||||||
|
|
||||||
/* NOTE: This should be user defined or? */
|
/* NOTE: This should be user defined or? */
|
||||||
av->j_buf = create_queue(20);
|
av->j_buf = create_queue(codec_settings->jbuf_capacity);
|
||||||
|
|
||||||
av->cs = codec_init_session(AUDIO_BITRATE, AUDIO_FRAME_DURATION, AUDIO_SAMPLE_RATE, AUDIO_CHANNELS, video_width,
|
av->cs = codec_init_session(codec_settings->audio_bitrate,
|
||||||
video_height, VIDEO_BITRATE);
|
codec_settings->audio_frame_duration,
|
||||||
|
codec_settings->audio_sample_rate,
|
||||||
|
codec_settings->audio_channels,
|
||||||
|
codec_settings->video_width,
|
||||||
|
codec_settings->video_height,
|
||||||
|
codec_settings->video_bitrate);
|
||||||
|
|
||||||
return av;
|
return av;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,18 +39,6 @@ typedef struct Tox Tox;
|
||||||
|
|
||||||
#define RTP_PAYLOAD_SIZE 65535
|
#define RTP_PAYLOAD_SIZE 65535
|
||||||
|
|
||||||
/* Number of audio channels. */
|
|
||||||
#define AUDIO_CHANNELS 1
|
|
||||||
|
|
||||||
/* Audio frame duration in miliseconds */
|
|
||||||
#define AUDIO_FRAME_DURATION 20
|
|
||||||
|
|
||||||
/* Audio sample rate recommended to be 48kHz for Opus */
|
|
||||||
#define AUDIO_SAMPLE_RATE 48000
|
|
||||||
|
|
||||||
/* The amount of samples in one audio frame */
|
|
||||||
#define AUDIO_FRAME_SIZE (AUDIO_SAMPLE_RATE*AUDIO_FRAME_DURATION/1000)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Callbacks ids that handle the call states.
|
* @brief Callbacks ids that handle the call states.
|
||||||
|
@ -114,6 +102,35 @@ typedef enum {
|
||||||
VideoDecoding = 1 << 3
|
VideoDecoding = 1 << 3
|
||||||
} ToxAvCapabilities;
|
} ToxAvCapabilities;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Encoding settings.
|
||||||
|
*/
|
||||||
|
typedef struct _ToxAvCodecSettings {
|
||||||
|
uint32_t video_bitrate; /* In bits/s */
|
||||||
|
uint16_t video_width; /* In px */
|
||||||
|
uint16_t video_height; /* In px */
|
||||||
|
|
||||||
|
uint32_t audio_bitrate; /* In bits/s */
|
||||||
|
uint16_t audio_frame_duration; /* In ms */
|
||||||
|
uint32_t audio_sample_rate; /* In Hz */
|
||||||
|
uint32_t audio_channels;
|
||||||
|
|
||||||
|
uint32_t jbuf_capacity; /* Size of jitter buffer */
|
||||||
|
} ToxAvCodecSettings;
|
||||||
|
|
||||||
|
static const ToxAvCodecSettings av_DefaultSettings = {
|
||||||
|
1000000,
|
||||||
|
800,
|
||||||
|
600,
|
||||||
|
|
||||||
|
64000,
|
||||||
|
20,
|
||||||
|
48000,
|
||||||
|
1,
|
||||||
|
20
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Start new A/V session. There can only be one session at the time. If you register more
|
* @brief Start new A/V session. There can only be one session at the time. If you register more
|
||||||
* it will result in undefined behaviour.
|
* it will result in undefined behaviour.
|
||||||
|
@ -125,7 +142,7 @@ typedef enum {
|
||||||
* @return ToxAv*
|
* @return ToxAv*
|
||||||
* @retval NULL On error.
|
* @retval NULL On error.
|
||||||
*/
|
*/
|
||||||
ToxAv *toxav_new(Tox *messenger, uint16_t video_width, uint16_t video_height);
|
ToxAv *toxav_new(Tox *messenger, ToxAvCodecSettings* codec_settings);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Remove A/V session.
|
* @brief Remove A/V session.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user