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) {