SWITCH_VIDEO_ENCODE_SPEED_FAST
} switch_video_encode_speed_t;
+typedef enum {
+ SWITCH_VIDEO_PROFILE_BASELINE,
+ SWITCH_VIDEO_PROFILE_MAIN,
+ SWITCH_VIDEO_PROFILE_HIGH
+} switch_video_profile_t;
+
typedef struct switch_mm_s {
int samplerate;
int channels;
int vw;
int vh;
float fps;
+ float source_fps;
int vbuf;
+ switch_video_profile_t vprofile;
switch_video_encode_speed_t vencspd;
} switch_mm_t;
if (codec_id == AV_CODEC_ID_H264) {
c->ticks_per_frame = 2;
+ switch (mm->vprofile) {
+ case SWITCH_VIDEO_PROFILE_BASELINE:
+ av_opt_set(c->priv_data, "profile", "baseline", 0);
+ c->level = 41;
+ break;
+ case SWITCH_VIDEO_PROFILE_MAIN:
+ av_opt_set(c->priv_data, "profile", "main", 0);
+ av_opt_set(c->priv_data, "level", "5", 0);
+ break;
+ case SWITCH_VIDEO_PROFILE_HIGH:
+ av_opt_set(c->priv_data, "profile", "high", 0);
+ av_opt_set(c->priv_data, "level", "52", 0);
+ break;
+ }
+
switch (mm->vencspd) {
- case SWITCH_VIDEO_ENCODE_SPEED_SLOW:
- av_opt_set(c->priv_data, "preset", "veryslow", 0);
- break;
- case SWITCH_VIDEO_ENCODE_SPEED_MEDIUM:
- av_opt_set(c->priv_data, "preset", "medium", 0);
- break;
- case SWITCH_VIDEO_ENCODE_SPEED_FAST:
- av_opt_set(c->priv_data, "preset", "ultrafast", 0);
- break;
- default:
- break;
+ case SWITCH_VIDEO_ENCODE_SPEED_SLOW:
+ av_opt_set(c->priv_data, "preset", "veryslow", 0);
+ break;
+ case SWITCH_VIDEO_ENCODE_SPEED_MEDIUM:
+ av_opt_set(c->priv_data, "preset", "medium", 0);
+ break;
+ case SWITCH_VIDEO_ENCODE_SPEED_FAST:
+ av_opt_set(c->priv_data, "preset", "veryfast", 0);
+ av_opt_set(c->priv_data, "tune", "zerolatency", 0);
+ break;
+ default:
+ break;
}
}
if (switch_test_flag(handle, SWITCH_FILE_FLAG_VIDEO)) {
context->has_video = 1;
}
- context->read_fps = (int)ceil(av_q2d(context->video_st.st->avg_frame_rate));
+ handle->mm.source_fps = ceil(av_q2d(context->video_st.st->avg_frame_rate));
+ context->read_fps = (int)handle->mm.source_fps;
}
}
handle->samplerate = 44100;
handle->mm.samplerate = 44100;
handle->mm.ab = 128;
+ //handle->mm.vencspd = SWITCH_VIDEO_ENCODE_SPEED_FAST;
+ handle->mm.vprofile = SWITCH_VIDEO_PROFILE_BASELINE;
if (!handle->mm.vb && handle->mm.vw && handle->mm.vh) {
switch(handle->mm.vh) {
fh->mm.keyint = 60;
fh->mm.ab = 128;
fh->mm.vencspd = SWITCH_VIDEO_ENCODE_SPEED_DEFAULT;
+ fh->mm.vprofile = SWITCH_VIDEO_PROFILE_BASELINE;
if (*file_path == '{') {
char *timeout;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid video encode speed: %s\n", val);
}
}
+
+ if ((val = switch_event_get_header(fh->params, "vprofile"))) {
+ if (!strcasecmp(val, "baseline")) {
+ fh->mm.vprofile = SWITCH_VIDEO_PROFILE_BASELINE;
+ } else if (!strcasecmp(val, "main")) {
+ fh->mm.vprofile = SWITCH_VIDEO_PROFILE_MAIN;
+ } else if (!strcasecmp(val, "high")) {
+ fh->mm.vprofile = SWITCH_VIDEO_PROFILE_HIGH;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid video profile: %s\n", val);
+ }
+ }
}
if (switch_directory_exists(file_path, fh->memory_pool) == SWITCH_STATUS_SUCCESS) {