mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 16:58:35 +00:00
FS-7514: add logging to vlc
This commit is contained in:
parent
80fdf7a24c
commit
39730182e5
@ -62,7 +62,7 @@ typedef int (*imem_get_t)(void *data, const char *cookie,
|
|||||||
typedef void (*imem_release_t)(void *data, const char *cookie, size_t, void *);
|
typedef void (*imem_release_t)(void *data, const char *cookie, size_t, void *);
|
||||||
|
|
||||||
/* Change value to -vvv for vlc related debug. Be careful since vlc is at least as verbose as FS about logging */
|
/* Change value to -vvv for vlc related debug. Be careful since vlc is at least as verbose as FS about logging */
|
||||||
const char *vlc_args[] = {""};
|
const char *vlc_args[] = {"-vvvv"};
|
||||||
//const char *vlc_args[] = {"--network-caching=0"};
|
//const char *vlc_args[] = {"--network-caching=0"};
|
||||||
//--sout-mux-caching
|
//--sout-mux-caching
|
||||||
|
|
||||||
@ -90,10 +90,9 @@ struct vlc_file_context {
|
|||||||
int channels;
|
int channels;
|
||||||
int err;
|
int err;
|
||||||
int64_t pts;
|
int64_t pts;
|
||||||
libvlc_instance_t *inst_out;
|
libvlc_instance_t *vlc_handle;
|
||||||
void *frame_buffer;
|
void *frame_buffer;
|
||||||
switch_size_t frame_buffer_len;
|
switch_size_t frame_buffer_len;
|
||||||
libvlc_instance_t *vlc_handle;
|
|
||||||
struct vlc_video_context *vcontext;
|
struct vlc_video_context *vcontext;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -153,6 +152,39 @@ static int vlc_write_video_imem_get_callback(void *data, const char *cookie, int
|
|||||||
void vlc_write_video_imem_release_callback(void *data, const char *cookie, size_t size, void *unknown);
|
void vlc_write_video_imem_release_callback(void *data, const char *cookie, size_t size, void *unknown);
|
||||||
static switch_status_t av_init_handle(switch_file_handle_t *handle, switch_image_t *img);
|
static switch_status_t av_init_handle(switch_file_handle_t *handle, switch_image_t *img);
|
||||||
|
|
||||||
|
void log_cb(void *data, int level, const libvlc_log_t *ctx, const char *fmt, va_list args)
|
||||||
|
{
|
||||||
|
char *ldata;
|
||||||
|
switch_log_level_t fslevel = SWITCH_LOG_DEBUG;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = switch_vasprintf(&ldata, fmt, args);
|
||||||
|
|
||||||
|
if (ret == -1) return;
|
||||||
|
|
||||||
|
switch(level) {
|
||||||
|
case LIBVLC_NOTICE:
|
||||||
|
fslevel = SWITCH_LOG_NOTICE;
|
||||||
|
break;
|
||||||
|
case LIBVLC_WARNING:
|
||||||
|
fslevel = SWITCH_LOG_WARNING;
|
||||||
|
break;
|
||||||
|
case LIBVLC_ERROR:
|
||||||
|
fslevel = SWITCH_LOG_ERROR;
|
||||||
|
break;
|
||||||
|
case LIBVLC_DEBUG:
|
||||||
|
default:
|
||||||
|
fslevel = SWITCH_LOG_DEBUG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, fslevel, "%s\n", ldata);
|
||||||
|
|
||||||
|
switch_safe_free(ldata);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void yuyv_to_i420(uint8_t *pixels, void *out_buffer, int src_width, int src_height)
|
void yuyv_to_i420(uint8_t *pixels, void *out_buffer, int src_width, int src_height)
|
||||||
{
|
{
|
||||||
uint8_t *Y, *U, *V;
|
uint8_t *Y, *U, *V;
|
||||||
@ -593,7 +625,8 @@ static switch_status_t av_init_handle(switch_file_handle_t *handle, switch_image
|
|||||||
opts[argc++] = switch_core_sprintf(vcontext->pool, "--imem-release=%ld", vlc_write_video_imem_release_callback);
|
opts[argc++] = switch_core_sprintf(vcontext->pool, "--imem-release=%ld", vlc_write_video_imem_release_callback);
|
||||||
opts[argc++] = switch_core_sprintf(vcontext->pool, "--imem-data=%ld", vcontext);
|
opts[argc++] = switch_core_sprintf(vcontext->pool, "--imem-data=%ld", vcontext);
|
||||||
|
|
||||||
acontext->inst_out = libvlc_new(argc, opts);
|
acontext->vlc_handle = libvlc_new(argc, opts);
|
||||||
|
libvlc_log_set(acontext->vlc_handle, log_cb, NULL);
|
||||||
|
|
||||||
imem_main = switch_core_sprintf(vcontext->pool,
|
imem_main = switch_core_sprintf(vcontext->pool,
|
||||||
"imem://cookie=video:"
|
"imem://cookie=video:"
|
||||||
@ -616,7 +649,7 @@ static switch_status_t av_init_handle(switch_file_handle_t *handle, switch_image
|
|||||||
"caching=0",
|
"caching=0",
|
||||||
vcontext->samplerate, vcontext->channels);
|
vcontext->samplerate, vcontext->channels);
|
||||||
|
|
||||||
vcontext->m = libvlc_media_new_location(acontext->inst_out, imem_main);
|
vcontext->m = libvlc_media_new_location(acontext->vlc_handle, imem_main);
|
||||||
|
|
||||||
libvlc_media_add_option_flag( vcontext->m, imem_slave, libvlc_media_option_trusted );
|
libvlc_media_add_option_flag( vcontext->m, imem_slave, libvlc_media_option_trusted );
|
||||||
|
|
||||||
@ -735,6 +768,7 @@ static switch_status_t vlc_file_open(switch_file_handle_t *handle, const char *p
|
|||||||
context = switch_core_alloc(handle->memory_pool, sizeof(*context));
|
context = switch_core_alloc(handle->memory_pool, sizeof(*context));
|
||||||
context->pool = handle->memory_pool;
|
context->pool = handle->memory_pool;
|
||||||
context->vlc_handle = libvlc_new(sizeof(vlc_args)/sizeof(char *), vlc_args);
|
context->vlc_handle = libvlc_new(sizeof(vlc_args)/sizeof(char *), vlc_args);
|
||||||
|
libvlc_log_set(context->vlc_handle, log_cb, NULL);
|
||||||
|
|
||||||
realpath = path;
|
realpath = path;
|
||||||
|
|
||||||
@ -945,10 +979,11 @@ static switch_status_t vlc_file_open(switch_file_handle_t *handle, const char *p
|
|||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "VLC open %s for writing\n", path);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "VLC open %s for writing\n", path);
|
||||||
|
|
||||||
/* load the vlc engine. */
|
/* load the vlc engine. */
|
||||||
context->inst_out = libvlc_new(opts_count, opts);
|
context->vlc_handle = libvlc_new(opts_count, opts);
|
||||||
|
libvlc_log_set(context->vlc_handle, log_cb, NULL);
|
||||||
|
|
||||||
/* Tell VLC the audio will come from memory, and to use the callbacks to fetch it. */
|
/* Tell VLC the audio will come from memory, and to use the callbacks to fetch it. */
|
||||||
context->m = libvlc_media_new_location(context->inst_out, "imem/rawaud://");
|
context->m = libvlc_media_new_location(context->vlc_handle, "imem/rawaud://");
|
||||||
context->mp = libvlc_media_player_new_from_media(context->m);
|
context->mp = libvlc_media_player_new_from_media(context->m);
|
||||||
context->samples = 0;
|
context->samples = 0;
|
||||||
context->pts = 0;
|
context->pts = 0;
|
||||||
@ -1328,7 +1363,7 @@ static switch_status_t vlc_file_av_close(switch_file_handle_t *handle)
|
|||||||
|
|
||||||
if (vcontext->mp) libvlc_media_player_stop(vcontext->mp);
|
if (vcontext->mp) libvlc_media_player_stop(vcontext->mp);
|
||||||
if (vcontext->m) libvlc_media_release(vcontext->m);
|
if (vcontext->m) libvlc_media_release(vcontext->m);
|
||||||
if (acontext->inst_out) libvlc_release(acontext->inst_out);
|
if (acontext->vlc_handle) libvlc_release(acontext->vlc_handle);
|
||||||
|
|
||||||
switch_img_free(&vcontext->img);
|
switch_img_free(&vcontext->img);
|
||||||
|
|
||||||
@ -1359,7 +1394,7 @@ static switch_status_t vlc_file_close(switch_file_handle_t *handle)
|
|||||||
|
|
||||||
if (context->m) libvlc_media_release(context->m);
|
if (context->m) libvlc_media_release(context->m);
|
||||||
|
|
||||||
if (context->inst_out) libvlc_release(context->inst_out);
|
if (context->vlc_handle) libvlc_release(context->vlc_handle);
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1384,6 +1419,7 @@ SWITCH_STANDARD_APP(play_video_function)
|
|||||||
|
|
||||||
|
|
||||||
vlc_handle = libvlc_new(sizeof(vlc_args)/sizeof(char *), vlc_args);
|
vlc_handle = libvlc_new(sizeof(vlc_args)/sizeof(char *), vlc_args);
|
||||||
|
libvlc_log_set(vlc_handle, log_cb, NULL);
|
||||||
|
|
||||||
context = switch_core_session_alloc(session, sizeof(vlc_video_context_t));
|
context = switch_core_session_alloc(session, sizeof(vlc_video_context_t));
|
||||||
switch_assert(context);
|
switch_assert(context);
|
||||||
@ -1600,6 +1636,10 @@ int vlc_write_video_imem_get_callback(void *data, const char *cookie, int64_t *
|
|||||||
|
|
||||||
if (!context->ending) {
|
if (!context->ending) {
|
||||||
switch_mutex_lock(context->cond_mutex);
|
switch_mutex_lock(context->cond_mutex);
|
||||||
|
//while (!switch_queue_size(context->video_queue)) {
|
||||||
|
// switch_yield(20000);
|
||||||
|
//}
|
||||||
|
|
||||||
//if (!switch_queue_size(context->video_queue)) {
|
//if (!switch_queue_size(context->video_queue)) {
|
||||||
// switch_thread_cond_wait(context->cond, context->cond_mutex);
|
// switch_thread_cond_wait(context->cond, context->cond_mutex);
|
||||||
//}
|
//}
|
||||||
@ -1623,7 +1663,7 @@ int vlc_write_video_imem_get_callback(void *data, const char *cookie, int64_t *
|
|||||||
|
|
||||||
*size = img->d_w * img->d_h * 2;
|
*size = img->d_w * img->d_h * 2;
|
||||||
|
|
||||||
//printf("WTF %s VIDEO %ld %ld\n", cookie, *pts, *size);
|
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "WTF %s RT\t%ld\t%ld\n", cookie, *pts, *size);
|
||||||
|
|
||||||
if (context->video_frame_buffer_len < *size) {
|
if (context->video_frame_buffer_len < *size) {
|
||||||
context->video_frame_buffer_len = *size;
|
context->video_frame_buffer_len = *size;
|
||||||
@ -1650,7 +1690,7 @@ int vlc_write_video_imem_get_callback(void *data, const char *cookie, int64_t *
|
|||||||
*pts = *dts = context->pts;
|
*pts = *dts = context->pts;
|
||||||
*size = need;
|
*size = need;
|
||||||
*output = context->audio_frame_buffer;
|
*output = context->audio_frame_buffer;
|
||||||
//printf("WTF %s AUDIOSYNC %ld %ld\n", cookie, *pts, *size);
|
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "WTF %s AS\t%ld\t%ld\n", cookie, *pts, *size);
|
||||||
context->sync_ready = 1;
|
context->sync_ready = 1;
|
||||||
switch_mutex_unlock(context->audio_mutex);
|
switch_mutex_unlock(context->audio_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1669,7 +1709,7 @@ int vlc_write_video_imem_get_callback(void *data, const char *cookie, int64_t *
|
|||||||
goto nada;
|
goto nada;
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("WTF READ BUFFER %ld %d\n", lpts, read_bytes);
|
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "WTF %s RB\t%ld\t%d\n", cookie, lpts, read_bytes);
|
||||||
blen = (int)read_bytes;//switch_buffer_inuse(context->audio_buffer);
|
blen = (int)read_bytes;//switch_buffer_inuse(context->audio_buffer);
|
||||||
*pts = *dts = lpts + context->sync_offset;
|
*pts = *dts = lpts + context->sync_offset;
|
||||||
}
|
}
|
||||||
@ -1690,7 +1730,7 @@ int vlc_write_video_imem_get_callback(void *data, const char *cookie, int64_t *
|
|||||||
|
|
||||||
*size = (size_t) bread;
|
*size = (size_t) bread;
|
||||||
|
|
||||||
//printf("WTF %s AUDIO %ld %ld\n", cookie, *pts, *size);
|
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "WTF %s RT\t%ld\t%ld\n", cookie, *pts, *size);
|
||||||
|
|
||||||
switch_mutex_unlock(context->audio_mutex);
|
switch_mutex_unlock(context->audio_mutex);
|
||||||
|
|
||||||
@ -1698,7 +1738,7 @@ int vlc_write_video_imem_get_callback(void *data, const char *cookie, int64_t *
|
|||||||
|
|
||||||
nada:
|
nada:
|
||||||
|
|
||||||
//printf("WTF %s NADA\n", cookie);
|
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "WTF %s NADA\n", cookie);
|
||||||
|
|
||||||
if (context->ending) {
|
if (context->ending) {
|
||||||
if (*cookie == 'a') {
|
if (*cookie == 'a') {
|
||||||
@ -1761,7 +1801,7 @@ SWITCH_STANDARD_APP(capture_video_function)
|
|||||||
switch_codec_implementation_t read_impl = { 0 };
|
switch_codec_implementation_t read_impl = { 0 };
|
||||||
vlc_video_context_t *context;
|
vlc_video_context_t *context;
|
||||||
char *path = (char *)data;
|
char *path = (char *)data;
|
||||||
libvlc_instance_t *inst_out;
|
libvlc_instance_t *vlc_handle;
|
||||||
switch_status_t status;
|
switch_status_t status;
|
||||||
switch_frame_t *read_frame;
|
switch_frame_t *read_frame;
|
||||||
switch_vid_params_t vid_params = { 0 };
|
switch_vid_params_t vid_params = { 0 };
|
||||||
@ -1831,7 +1871,8 @@ SWITCH_STANDARD_APP(capture_video_function)
|
|||||||
opts[argc++] = switch_core_session_sprintf(session, "--imem-release=%ld", vlc_write_video_imem_release_callback);
|
opts[argc++] = switch_core_session_sprintf(session, "--imem-release=%ld", vlc_write_video_imem_release_callback);
|
||||||
opts[argc++] = switch_core_session_sprintf(session, "--imem-data=%ld", context);
|
opts[argc++] = switch_core_session_sprintf(session, "--imem-data=%ld", context);
|
||||||
|
|
||||||
inst_out = libvlc_new(argc, opts);
|
vlc_handle = libvlc_new(argc, opts);
|
||||||
|
libvlc_log_set(vlc_handle, log_cb, NULL);
|
||||||
|
|
||||||
imem_main = switch_core_session_sprintf(session,
|
imem_main = switch_core_session_sprintf(session,
|
||||||
"imem://cookie=video:"
|
"imem://cookie=video:"
|
||||||
@ -1854,7 +1895,7 @@ SWITCH_STANDARD_APP(capture_video_function)
|
|||||||
"caching=0",
|
"caching=0",
|
||||||
context->samplerate, context->channels);
|
context->samplerate, context->channels);
|
||||||
|
|
||||||
context->m = libvlc_media_new_location(inst_out, imem_main);
|
context->m = libvlc_media_new_location(vlc_handle, imem_main);
|
||||||
|
|
||||||
libvlc_media_add_option_flag( context->m, imem_slave, libvlc_media_option_trusted );
|
libvlc_media_add_option_flag( context->m, imem_slave, libvlc_media_option_trusted );
|
||||||
|
|
||||||
@ -1961,7 +2002,7 @@ SWITCH_STANDARD_APP(capture_video_function)
|
|||||||
|
|
||||||
if (context->mp) libvlc_media_player_stop(context->mp);
|
if (context->mp) libvlc_media_player_stop(context->mp);
|
||||||
if (context->m) libvlc_media_release(context->m);
|
if (context->m) libvlc_media_release(context->m);
|
||||||
if (inst_out) libvlc_release(inst_out);
|
if (vlc_handle) libvlc_release(vlc_handle);
|
||||||
|
|
||||||
switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "OK");
|
switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "OK");
|
||||||
|
|
||||||
@ -2108,6 +2149,7 @@ static switch_status_t setup_tech_pvt(switch_core_session_t *osession, switch_co
|
|||||||
memset(context, 0, sizeof(vlc_file_context_t));
|
memset(context, 0, sizeof(vlc_file_context_t));
|
||||||
tech_pvt->context = context;
|
tech_pvt->context = context;
|
||||||
context->vlc_handle = libvlc_new(sizeof(vlc_args)/sizeof(char *), vlc_args);
|
context->vlc_handle = libvlc_new(sizeof(vlc_args)/sizeof(char *), vlc_args);
|
||||||
|
libvlc_log_set(context->vlc_handle, log_cb, NULL);
|
||||||
|
|
||||||
switch_buffer_create_dynamic(&(context->audio_buffer), VLC_BUFFER_SIZE, VLC_BUFFER_SIZE * 8, 0);
|
switch_buffer_create_dynamic(&(context->audio_buffer), VLC_BUFFER_SIZE, VLC_BUFFER_SIZE * 8, 0);
|
||||||
switch_queue_create(&context->video_queue, SWITCH_CORE_QUEUE_LEN, switch_core_session_get_pool(session));
|
switch_queue_create(&context->video_queue, SWITCH_CORE_QUEUE_LEN, switch_core_session_get_pool(session));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user