From 82ba83e52643ff76962b24abb6ca22ba343c1fbb Mon Sep 17 00:00:00 2001 From: irungentoo Date: Tue, 16 Dec 2014 13:10:28 -0500 Subject: cs_set_video_encoder_resolution improvements. --- toxav/codec.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'toxav/codec.c') diff --git a/toxav/codec.c b/toxav/codec.c index 2c15cb4d..dae35d54 100644 --- a/toxav/codec.c +++ b/toxav/codec.c @@ -270,9 +270,6 @@ static int init_video_encoder(CSSession *cs, uint16_t max_width, uint16_t max_he cfg.kf_max_dist = 48; cfg.kf_mode = VPX_KF_AUTO; - cs->max_width = max_width; - cs->max_height = max_height; - rc = vpx_codec_enc_init_ver(&cs->v_encoder, VIDEO_CODEC_ENCODER_INTERFACE, &cfg, 0, VPX_ENCODER_ABI_VERSION); if ( rc != VPX_CODEC_OK) { @@ -287,6 +284,10 @@ static int init_video_encoder(CSSession *cs, uint16_t max_width, uint16_t max_he return -1; } + cs->max_width = max_width; + cs->max_height = max_height; + cs->video_bitrate = video_bitrate; + return 0; } @@ -436,8 +437,17 @@ int cs_set_video_encoder_resolution(CSSession *cs, uint16_t width, uint16_t heig if (cfg.g_w == width && cfg.g_h == height) return 0; - if (width * height > cs->max_width * cs->max_height) - return cs_ErrorSettingVideoResolution; + if (width * height > cs->max_width * cs->max_height) { + vpx_codec_ctx_t v_encoder = cs->v_encoder; + + if (init_video_encoder(cs, width, height, cs->video_bitrate) == -1) { + cs->v_encoder = v_encoder; + return cs_ErrorSettingVideoResolution; + } + + vpx_codec_destroy(&v_encoder); + return 0; + } LOGGER_DEBUG("New video resolution: %u %u", width, height); cfg.g_w = width; @@ -468,6 +478,7 @@ int cs_set_video_encoder_bitrate(CSSession *cs, uint32_t video_bitrate) return cs_ErrorSettingVideoBitrate; } + cs->video_bitrate = video_bitrate; return 0; } -- cgit v1.2.3