提交 4bcc6e6d authored 作者: Anthony Minessale's avatar Anthony Minessale 提交者: Michael Jerris

FS-7503 FS-7514: First crack at recording mp4 <action…

FS-7503 FS-7514: First crack at recording mp4 <action application="capture_video" data="vlc://#transcode{vcodec=h264,acodec=mp3}:std{access=file,mux=mp4,dst=/var/www/sounds/file.mp4}"/>
上级 c59874cb
......@@ -324,6 +324,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_lock_unlock(switch_core_s
SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session);
SWITCH_DECLARE(switch_media_flow_t) switch_core_session_media_flow(switch_core_session_t *session, switch_media_type_t type);
SWITCH_DECLARE(switch_status_t) switch_core_media_get_vid_params(switch_core_session_t *session, switch_vid_params_t *vid_params);
SWITCH_END_EXTERN_C
#endif
......
......@@ -78,6 +78,9 @@ typedef struct switch_image_rect {
unsigned int h; /**< height */
} switch_image_rect_t;
typedef enum {
SWITCH_CONVERT_FMT_YUYV = 0
} switch_convert_fmt_t;
/*!\brief Open a descriptor, allocating storage for the underlying image
*
......@@ -222,6 +225,7 @@ SWITCH_DECLARE(switch_status_t) switch_img_scale(switch_image_t *src, switch_ima
SWITCH_DECLARE(switch_status_t) switch_img_fit(switch_image_t **srcP, int width, int height);
SWITCH_DECLARE(switch_img_position_t) parse_img_position(const char *name);
SWITCH_DECLARE(void) switch_img_find_position(switch_img_position_t pos, int sw, int sh, int iw, int ih, int *xP, int *yP);
SWITCH_DECLARE(switch_status_t) switch_img_convert(switch_image_t *src, switch_convert_fmt_t fmt, void *dest, switch_size_t *size);
/** @} */
......
......@@ -1465,11 +1465,18 @@ typedef enum {
CF_VIDEO_DEBUG_READ,
CF_VIDEO_DEBUG_WRITE,
CF_VIDEO_ONLY,
CF_VIDEO_READY,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
/* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */
CF_FLAG_MAX
} switch_channel_flag_t;
typedef struct switch_vid_params_s {
int width;
int height;
} switch_vid_params_t;
typedef enum {
CF_APP_TAGGED = (1 << 0),
......
......@@ -2374,6 +2374,7 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, void *
if (!strcasecmp(tech, "flush")) {
flush++;
tech = NULL;
if (prof) {
tech = prof;
......
......@@ -202,6 +202,7 @@ struct switch_media_handle_s {
switch_video_function_t video_function;
void *video_user_data;
int8_t video_function_running;
switch_vid_params_t vid_params;
};
......@@ -490,7 +491,20 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_check_autoadj(switch_core_sess
return x ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
}
SWITCH_DECLARE(switch_status_t) switch_core_media_get_vid_params(switch_core_session_t *session, switch_vid_params_t *vid_params)
{
switch_media_handle_t *smh;
switch_assert(session);
if (!(smh = session->media_handle)) {
return SWITCH_STATUS_FALSE;
}
*vid_params = smh->vid_params;
return SWITCH_STATUS_SUCCESS;
}
SWITCH_DECLARE(switch_t38_options_t *) switch_core_media_extract_t38_options(switch_core_session_t *session, const char *r_sdp)
{
......@@ -4654,6 +4668,14 @@ static void *SWITCH_THREAD_FUNC video_helper_thread(switch_thread_t *thread, voi
continue;
}
if (read_frame->img) {
switch_channel_set_flag(channel, CF_VIDEO_READY);
smh->vid_params.width = read_frame->img->d_w;
smh->vid_params.height = read_frame->img->d_h;
}
if (switch_channel_test_flag(channel, CF_VIDEO_ECHO)) {
switch_core_session_write_video_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
}
......
......@@ -1269,6 +1269,30 @@ SWITCH_DECLARE(switch_status_t) switch_img_fit(switch_image_t **srcP, int width,
return SWITCH_STATUS_FALSE;
}
SWITCH_DECLARE(switch_status_t) switch_img_convert(switch_image_t *src, switch_convert_fmt_t fmt, void *dest, switch_size_t *size)
{
switch (fmt) {
case SWITCH_CONVERT_FMT_YUYV:
{
switch_size_t size_in = *size;
ConvertFromI420(src->planes[0], src->stride[0],
src->planes[1], src->stride[1],
src->planes[2], src->stride[2],
dest, size_in,
src->d_w, src->d_h,
FOURCC_YUY2);
*size = src->d_w * src->d_h * 2;
return SWITCH_STATUS_SUCCESS;
}
default:
abort();
break;
}
}
SWITCH_DECLARE(switch_status_t) switch_img_scale(switch_image_t *src, switch_image_t **destP, int width, int height)
{
switch_image_t *dest = NULL;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论