mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-25 20:19:36 +00:00
FS-7519: increase default video buffer to 2mb in avformat and add vbuf file param to change it per file using a number of bytes with k or m modifier for kilobytes and megabytes
This commit is contained in:
parent
cbe4f10ba3
commit
dd3d6cbe76
@ -307,6 +307,7 @@ typedef struct switch_mm_s {
|
|||||||
int vw;
|
int vw;
|
||||||
int vh;
|
int vh;
|
||||||
float fps;
|
float fps;
|
||||||
|
int vbuf;
|
||||||
} switch_mm_t;
|
} switch_mm_t;
|
||||||
|
|
||||||
/*! an abstract representation of a file handle (some parameters based on compat with libsndfile) */
|
/*! an abstract representation of a file handle (some parameters based on compat with libsndfile) */
|
||||||
|
@ -177,6 +177,8 @@ static switch_status_t add_stream(OutputStream *ost, AVFormatContext *oc, AVCode
|
|||||||
AVCodecContext *c;
|
AVCodecContext *c;
|
||||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||||
int threads = switch_core_cpu_count();
|
int threads = switch_core_cpu_count();
|
||||||
|
int buffer_bytes = 2097152; /* 2 mb */
|
||||||
|
|
||||||
/* find the encoder */
|
/* find the encoder */
|
||||||
*codec = avcodec_find_encoder(codec_id);
|
*codec = avcodec_find_encoder(codec_id);
|
||||||
if (!(*codec)) {
|
if (!(*codec)) {
|
||||||
@ -217,6 +219,13 @@ static switch_status_t add_stream(OutputStream *ost, AVFormatContext *oc, AVCode
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case AVMEDIA_TYPE_VIDEO:
|
case AVMEDIA_TYPE_VIDEO:
|
||||||
|
|
||||||
|
if (mm) {
|
||||||
|
if (mm->vbuf) {
|
||||||
|
buffer_bytes = mm->vbuf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c->codec_id = codec_id;
|
c->codec_id = codec_id;
|
||||||
c->bit_rate = 1000000;
|
c->bit_rate = 1000000;
|
||||||
/* Resolution must be a multiple of two. */
|
/* Resolution must be a multiple of two. */
|
||||||
@ -227,7 +236,8 @@ static switch_status_t add_stream(OutputStream *ost, AVFormatContext *oc, AVCode
|
|||||||
c->gop_size = 25; /* emit one intra frame every x frames at most */
|
c->gop_size = 25; /* emit one intra frame every x frames at most */
|
||||||
c->pix_fmt = AV_PIX_FMT_YUV420P;
|
c->pix_fmt = AV_PIX_FMT_YUV420P;
|
||||||
c->thread_count = threads;
|
c->thread_count = threads;
|
||||||
c->rc_initial_buffer_occupancy = 1024 * 1024 * 8;
|
c->rc_initial_buffer_occupancy = buffer_bytes * 8;
|
||||||
|
|
||||||
if (codec_id == AV_CODEC_ID_VP8) {
|
if (codec_id == AV_CODEC_ID_VP8) {
|
||||||
av_set_options_string(c, "quality=realtime", "=", ":");
|
av_set_options_string(c, "quality=realtime", "=", ":");
|
||||||
}
|
}
|
||||||
|
@ -157,6 +157,22 @@ SWITCH_DECLARE(switch_status_t) switch_core_perform_file_open(const char *file,
|
|||||||
fh->mm.fps = ftmp;
|
fh->mm.fps = ftmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((val = switch_event_get_header(fh->params, "vbuf"))) {
|
||||||
|
tmp = atoi(val);
|
||||||
|
|
||||||
|
if (strrchr(val, 'k')) {
|
||||||
|
tmp *= 1024;
|
||||||
|
} else if (strrchr(val, 'm')) {
|
||||||
|
tmp *= 1048576;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tmp > 0 && tmp < 52428800 /*50mb*/) {
|
||||||
|
fh->mm.vbuf = tmp;
|
||||||
|
} else {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid buffer size: %d\n", tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (switch_directory_exists(file_path, fh->memory_pool) == SWITCH_STATUS_SUCCESS) {
|
if (switch_directory_exists(file_path, fh->memory_pool) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user