mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-13 20:50:41 +00:00
add switch_core_file_write_video
open a door to write video data so it is possible to record a .fsv file also possible to write to .mp4 with proper file format support
This commit is contained in:
parent
30c009b30e
commit
14cb9af607
@ -1648,6 +1648,15 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_read(_In_ switch_file_handle_t
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_file_write(_In_ switch_file_handle_t *fh, void *data, switch_size_t *len);
|
||||
|
||||
/*!
|
||||
\brief Write media to a file handle
|
||||
\param fh the file handle to write to
|
||||
\param data the buffer to write
|
||||
\param len the amount of data to write from the buffer
|
||||
\return SWITCH_STATUS_SUCCESS with len adjusted to the bytes written if successful
|
||||
*/
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_file_write_video(_In_ switch_file_handle_t *fh, void *data, switch_size_t *len);
|
||||
|
||||
/*!
|
||||
\brief Seek a position in a file
|
||||
\param fh the file handle to seek
|
||||
\param cur_pos the current position in the file
|
||||
|
@ -273,6 +273,10 @@ struct switch_file_interface {
|
||||
/*! function to write from the file */
|
||||
switch_status_t (*file_write) (switch_file_handle_t *, void *data, switch_size_t *len);
|
||||
/*! function to seek to a certian position in the file */
|
||||
switch_status_t (*file_read_video) (switch_file_handle_t *, void *data, switch_size_t *len);
|
||||
/*! function to write from the file */
|
||||
switch_status_t (*file_write_video) (switch_file_handle_t *, void *data, switch_size_t *len);
|
||||
/*! function to seek to a certian position in the file */
|
||||
switch_status_t (*file_seek) (switch_file_handle_t *, unsigned int *cur_pos, int64_t samples, int whence);
|
||||
/*! function to set meta data */
|
||||
switch_status_t (*file_set_string) (switch_file_handle_t *fh, switch_audio_col_t col, const char *string);
|
||||
|
@ -703,30 +703,30 @@ static switch_status_t fsv_file_write(switch_file_handle_t *handle, void *data,
|
||||
return status;
|
||||
}
|
||||
|
||||
// static switch_status_t fsv_file_write_video(switch_file_handle_t *handle, void *data, size_t *len)
|
||||
// {
|
||||
// uint32_t datalen = *len;
|
||||
// uint32_t bytes = datalen | VID_BIT;
|
||||
// size_t size;
|
||||
// switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||
static switch_status_t fsv_file_write_video(switch_file_handle_t *handle, void *data, size_t *len)
|
||||
{
|
||||
uint32_t datalen = *len;
|
||||
uint32_t bytes = datalen | VID_BIT;
|
||||
size_t size;
|
||||
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||
|
||||
// fsv_file_context *context = handle->private_info;
|
||||
// /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "writing: %ld\n", (long)(*len)); */
|
||||
fsv_file_context *context = handle->private_info;
|
||||
/* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "writing: %ld\n", (long)(*len)); */
|
||||
|
||||
// switch_mutex_lock(context->mutex);
|
||||
switch_mutex_lock(context->mutex);
|
||||
|
||||
// size = sizeof(bytes);
|
||||
// if (switch_file_write(context->fd, &bytes, &size) != SWITCH_STATUS_SUCCESS) {
|
||||
// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "write error\n");
|
||||
// return SWITCH_STATUS_FALSE;
|
||||
// }
|
||||
size = sizeof(bytes);
|
||||
if (switch_file_write(context->fd, &bytes, &size) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "write error\n");
|
||||
return SWITCH_STATUS_FALSE;
|
||||
}
|
||||
|
||||
// *len = datalen;
|
||||
// status = switch_file_write(context->fd, data, len);
|
||||
// switch_mutex_unlock(context->mutex);
|
||||
*len = datalen;
|
||||
status = switch_file_write(context->fd, data, len);
|
||||
switch_mutex_unlock(context->mutex);
|
||||
|
||||
// return status;
|
||||
// }
|
||||
return status;
|
||||
}
|
||||
|
||||
static switch_status_t fsv_file_set_string(switch_file_handle_t *handle, switch_audio_col_t col, const char *string)
|
||||
{
|
||||
@ -760,7 +760,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_fsv_load)
|
||||
file_interface->file_truncate = fsv_file_truncate;
|
||||
file_interface->file_read = fsv_file_read;
|
||||
file_interface->file_write = fsv_file_write;
|
||||
// file_interface->file_write_video = fsv_file_write_video;
|
||||
file_interface->file_write_video = fsv_file_write_video;
|
||||
file_interface->file_seek = fsv_file_seek;
|
||||
file_interface->file_set_string = fsv_file_set_string;
|
||||
file_interface->file_get_string = fsv_file_get_string;
|
||||
|
@ -406,6 +406,23 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_write(switch_file_handle_t *fh,
|
||||
}
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_file_write_video(switch_file_handle_t *fh, void *data, switch_size_t *len)
|
||||
{
|
||||
switch_assert(fh != NULL);
|
||||
switch_assert(fh->file_interface != NULL);
|
||||
|
||||
if (!switch_test_flag(fh, SWITCH_FILE_OPEN)) {
|
||||
return SWITCH_STATUS_GENERR;
|
||||
}
|
||||
|
||||
if (!fh->file_interface->file_write_video) {
|
||||
return SWITCH_STATUS_FALSE;
|
||||
}
|
||||
|
||||
return fh->file_interface->file_write_video(fh, data, len);
|
||||
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_core_file_seek(switch_file_handle_t *fh, unsigned int *cur_pos, int64_t samples, int whence)
|
||||
{
|
||||
switch_status_t status;
|
||||
|
Loading…
x
Reference in New Issue
Block a user