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 vh;
|
||||
float fps;
|
||||
int vbuf;
|
||||
} switch_mm_t;
|
||||
|
||||
/*! 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;
|
||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||
int threads = switch_core_cpu_count();
|
||||
int buffer_bytes = 2097152; /* 2 mb */
|
||||
|
||||
/* find the encoder */
|
||||
*codec = avcodec_find_encoder(codec_id);
|
||||
if (!(*codec)) {
|
||||
|
@ -217,6 +219,13 @@ static switch_status_t add_stream(OutputStream *ost, AVFormatContext *oc, AVCode
|
|||
break;
|
||||
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
|
||||
if (mm) {
|
||||
if (mm->vbuf) {
|
||||
buffer_bytes = mm->vbuf;
|
||||
}
|
||||
}
|
||||
|
||||
c->codec_id = codec_id;
|
||||
c->bit_rate = 1000000;
|
||||
/* 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->pix_fmt = AV_PIX_FMT_YUV420P;
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
|
Loading…
Reference in New Issue