From 700a18ae6bea44bde672a748e56137f0d5954f92 Mon Sep 17 00:00:00 2001 From: Anthony Minessale <anthm@freeswitch.org> Date: Fri, 22 May 2015 20:27:14 -0500 Subject: [PATCH] FS-7519: auto set some values on avformat recording --- src/mod/applications/mod_av/avformat.c | 13 +++++++++++-- src/switch_ivr_play_say.c | 6 ++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/mod/applications/mod_av/avformat.c b/src/mod/applications/mod_av/avformat.c index f2f11d571f..f8ff97ce6a 100644 --- a/src/mod/applications/mod_av/avformat.c +++ b/src/mod/applications/mod_av/avformat.c @@ -225,6 +225,7 @@ static switch_status_t add_stream(MediaStream *mst, AVFormatContext *fc, AVCodec switch_status_t status = SWITCH_STATUS_FALSE; int threads = switch_core_cpu_count(); int buffer_bytes = 2097152; /* 2 mb */ + int fps = 15; /* find the encoder */ *codec = avcodec_find_encoder(codec_id); @@ -271,13 +272,21 @@ static switch_status_t add_stream(MediaStream *mst, AVFormatContext *fc, AVCodec if (mm->vbuf) { buffer_bytes = mm->vbuf; } + fps = mm->fps; + + if (mm->vw && mm->vh) { + mst->width = mm->vw; + mst->height = mm->vh; + } + } c->codec_id = codec_id; - c->bit_rate = 1000000; + /* Resolution must be a multiple of two. */ c->width = mst->width; c->height = mst->height; + c->bit_rate = switch_calc_bitrate(c->width, c->height, 2, fps) * 1024; mst->st->time_base.den = 1000; mst->st->time_base.num = 1; c->time_base.den = 1000; @@ -297,7 +306,7 @@ static switch_status_t add_stream(MediaStream *mst, AVFormatContext *fc, AVCodec if (mm) { if (mm->vb) { - c->bit_rate = mm->vb * 1000; + c->bit_rate = mm->vb * 1024; } if (mm->keyint) { c->gop_size = mm->keyint; diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c index d056399c3f..76c666b6e2 100644 --- a/src/switch_ivr_play_say.c +++ b/src/switch_ivr_play_say.c @@ -530,8 +530,14 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se } if (switch_channel_test_flag(channel, CF_VIDEO)) { + switch_vid_params_t vid_params = { 0 }; + file_flags |= SWITCH_FILE_FLAG_VIDEO; switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ); + fh->mm.fps = switch_core_media_get_video_fps(session); + switch_core_media_get_vid_params(session, &vid_params); + fh->mm.vw = vid_params.width; + fh->mm.vh = vid_params.height; } if (switch_core_file_open(fh, file, fh->channels, read_impl.actual_samples_per_second, file_flags, NULL) != SWITCH_STATUS_SUCCESS) {