cs_set_video_encoder_resolution improvements.

This commit is contained in:
irungentoo 2014-12-16 13:10:28 -05:00
parent d6da08fe9d
commit 82ba83e526
No known key found for this signature in database
GPG Key ID: 10349DC9BED89E98
3 changed files with 18 additions and 6 deletions

View File

@ -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_max_dist = 48;
cfg.kf_mode = VPX_KF_AUTO; 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); rc = vpx_codec_enc_init_ver(&cs->v_encoder, VIDEO_CODEC_ENCODER_INTERFACE, &cfg, 0, VPX_ENCODER_ABI_VERSION);
if ( rc != VPX_CODEC_OK) { 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; return -1;
} }
cs->max_width = max_width;
cs->max_height = max_height;
cs->video_bitrate = video_bitrate;
return 0; 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) if (cfg.g_w == width && cfg.g_h == height)
return 0; return 0;
if (width * height > cs->max_width * cs->max_height) 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; return cs_ErrorSettingVideoResolution;
}
vpx_codec_destroy(&v_encoder);
return 0;
}
LOGGER_DEBUG("New video resolution: %u %u", width, height); LOGGER_DEBUG("New video resolution: %u %u", width, height);
cfg.g_w = width; cfg.g_w = width;
@ -468,6 +478,7 @@ int cs_set_video_encoder_bitrate(CSSession *cs, uint32_t video_bitrate)
return cs_ErrorSettingVideoBitrate; return cs_ErrorSettingVideoBitrate;
} }
cs->video_bitrate = video_bitrate;
return 0; return 0;
} }

View File

@ -85,6 +85,7 @@ typedef struct _CSSession {
vpx_codec_ctx_t v_decoder; vpx_codec_ctx_t v_decoder;
int max_width; int max_width;
int max_height; int max_height;
unsigned int video_bitrate;
/* Data handling */ /* Data handling */