Name: libmm-player
Summary: Multimedia Framework Player Library
-Version: 0.6.165
+Version: 0.6.166
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
int mm_player_release_video_stream_bo(MMHandleType player, void *bo);
/**
- * This function is to set http file buffering path
- *
- * @param player [in] handle of player
- * @param file_path [in] file path
- * @return This function returns zero on success, or negative value with error code.
- */
-int mm_player_set_file_buffering_path(MMHandleType player, const char *file_path);
-
-/**
* This function is to set sound stream info
*/
int mm_player_set_sound_stream_info(MMHandleType player, char *stream_type, int stream_index);
/* http streaming */
gchar httpsrc_element[PLAYER_INI_MAX_STRLEN];
- gboolean http_use_file_buffer;
guint http_ring_buffer_size;
gint http_timeout;
/* http streaming */
#define DEFAULT_HTTPSRC "souphttpsrc"
-#define DEFAULT_HTTP_USE_FILE_BUFFER FALSE
#define DEFAULT_HTTP_RING_BUFFER_SIZE (20*1024*1024) /* bytes : 20MBytes */
#define DEFAULT_HTTP_TIMEOUT -1 /* infinite retry */
/* streaming player */
mm_player_streaming_t *streamer;
- gchar *http_file_buffering_path;
/* gstreamer pipeline */
MMPlayerGstPipelineInfo *pipeline;
int _mmplayer_change_track_language(MMHandleType hplayer, MMPlayerTrackType type, int index);
int _mmplayer_sync_subtitle_pipeline(mm_player_t *player);
int _mmplayer_use_system_clock(MMHandleType hplayer);
-int _mmplayer_set_file_buffering_path(MMHandleType hplayer, const char *file_path);
int _mmplayer_set_uri(MMHandleType hplayer, const char *uri);
int _mmplayer_set_next_uri(MMHandleType hplayer, const char *uri, bool is_first_path);
int _mmplayer_get_next_uri(MMHandleType hplayer, char **uri);
typedef enum {
MUXED_BUFFER_TYPE_MEM_QUEUE, /* push mode in queue2 */
MUXED_BUFFER_TYPE_MEM_RING_BUFFER, /* pull mode in queue2 */
- MUXED_BUFFER_TYPE_FILE, /* pull mode in queue2 */
MUXED_BUFFER_TYPE_MAX,
} MuxedBufferType;
void __mm_player_streaming_destroy(mm_player_streaming_t *streaming_player);
void __mm_player_streaming_set_queue2(mm_player_streaming_t *streamer, GstElement *buffer,
- gboolean use_buffering, MuxedBufferType type, gchar *file_path, guint64 content_size);
+ gboolean use_buffering, MuxedBufferType type, guint64 content_size);
void __mm_player_streaming_set_multiqueue(mm_player_streaming_t *streamer, GstElement *buffer);
return result;
}
-int mm_player_set_file_buffering_path(MMHandleType player, const char *file_path)
-{
- int result = MM_ERROR_NONE;
-
- MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-
- MMPLAYER_CMD_LOCK(player);
-
- result = _mmplayer_set_file_buffering_path(player, file_path);
-
- MMPLAYER_CMD_UNLOCK(player);
-
- return result;
-}
-
int mm_player_set_sound_stream_info(MMHandleType player, char *stream_type, int stream_index)
{
int result = MM_ERROR_NONE;
static void
__mmplayer_update_buffer_setting(mm_player_t *player, GstMessage *buffering_msg)
{
- MMHandleType attrs = 0;
guint64 data_size = 0;
- gchar *path = NULL;
gint64 pos_nsec = 0;
- struct stat sb;
MMPLAYER_RETURN_IF_FAIL(player && player->pipeline && player->pipeline->mainbin);
__mmplayer_gst_get_position(player, &pos_nsec); /* to update player->last_position */
- attrs = MMPLAYER_GET_ATTRS(player);
- if (!attrs) {
- LOGE("fail to get attributes.");
- return;
- }
-
- if (!MMPLAYER_IS_STREAMING(player) && (player->can_support_codec & FOUND_PLUGIN_VIDEO)) {
- mm_attrs_get_string_by_name(attrs, "profile_uri", &path);
- if (stat(path, &sb) == 0)
- data_size = (guint64)sb.st_size;
- } else if (MMPLAYER_IS_HTTP_STREAMING(player)) {
+ if (MMPLAYER_IS_HTTP_STREAMING(player)) {
data_size = player->http_content_size;
}
/* http streaming */
MMPLAYER_INI_GET_STRING(dict, ini->httpsrc_element, "http streaming:httpsrc element", DEFAULT_HTTPSRC);
- ini->http_use_file_buffer = iniparser_getboolean(dict, "http streaming:http use file buffer", DEFAULT_HTTP_USE_FILE_BUFFER);
ini->http_ring_buffer_size = iniparser_getint(dict, "http streaming:http ring buffer size", DEFAULT_HTTP_RING_BUFFER_SIZE);
ini->http_timeout = iniparser_getint(dict, "http streaming:http timeout", DEFAULT_HTTP_TIMEOUT);
/* http streaming */
strncpy(ini->httpsrc_element, DEFAULT_HTTPSRC, PLAYER_INI_MAX_STRLEN - 1);
- ini->http_use_file_buffer = DEFAULT_HTTP_USE_FILE_BUFFER;
ini->http_ring_buffer_size = DEFAULT_HTTP_RING_BUFFER_SIZE;
ini->http_timeout = DEFAULT_HTTP_TIMEOUT;
/* http streaming */
LOGD("httpsrc element : %s", ini->httpsrc_element);
- LOGD("http use file buffer : %d", ini->http_use_file_buffer);
LOGD("http ring buffer size : %d", ini->http_ring_buffer_size);
LOGD("http timeout : %d", ini->http_timeout);
#define DEFAULT_PLAYBACK_RATE 1.0
#define DEFAULT_NUM_OF_V_OUT_BUFFER 3
-#define MMPLAYER_USE_FILE_FOR_BUFFERING(player) \
- (((player)->profile.uri_type != MM_PLAYER_URI_TYPE_HLS) && \
- (player->ini.http_use_file_buffer) && \
- (player->http_file_buffering_path) && \
- (strlen(player->http_file_buffering_path) > 0))
-
#define PLAYER_DISPLAY_MODE_DST_ROI 5
#define ADAPTIVE_VARIANT_DEFAULT_VALUE -1 /* auto */
player->pipeline->mainbin[MMPLAYER_M_MUXED_S_BUFFER].gst,
TRUE, /* use_buffering */
MUXED_BUFFER_TYPE_MAX, /* use previous buffer type setting */
- NULL,
((dur_bytes > 0) ? ((guint64)dur_bytes) : 0));
MMPLAYER_FLEAVE();
__mmplayer_gst_create_sinkbin(GstElement *elem, GstPad *pad, gpointer data)
{
mm_player_t *player = NULL;
- MMHandleType attrs = 0;
GstCaps *caps = NULL;
gchar *caps_str = NULL;
GstStructure *str = NULL;
if (caps)
gst_caps_unref(caps);
- /* flusing out new attributes */
- if (mm_attrs_commit_all(attrs))
- LOGE("failed to comit attributes");
-
return;
}
LOGD("dur_bytes = %"G_GINT64_FORMAT, dur_bytes);
if (dur_bytes > 0) {
- if (MMPLAYER_USE_FILE_FOR_BUFFERING(player)) {
- type = MUXED_BUFFER_TYPE_FILE;
- } else {
- type = MUXED_BUFFER_TYPE_MEM_RING_BUFFER;
- player->streamer->ring_buffer_size = player->ini.http_ring_buffer_size;
- }
+ type = MUXED_BUFFER_TYPE_MEM_RING_BUFFER;
+ player->streamer->ring_buffer_size = player->ini.http_ring_buffer_size;
} else {
dur_bytes = 0;
}
queue2,
FALSE,
type,
- player->http_file_buffering_path,
(guint64)dur_bytes);
return queue2;
}
int
-_mmplayer_set_file_buffering_path(MMHandleType hplayer, const char *file_path)
-{
- int result = MM_ERROR_NONE;
- mm_player_t *player = (mm_player_t *)hplayer;
- MMPLAYER_FENTER();
-
- MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-
- if (file_path) {
- player->http_file_buffering_path = (gchar *)file_path;
- LOGD("temp file path: %s", player->http_file_buffering_path);
- }
- MMPLAYER_FLEAVE();
- return result;
-}
-
-int
_mmplayer_set_uri(MMHandleType hplayer, const char *uri)
{
int result = MM_ERROR_NONE;
*
*/
-#include <sys/vfs.h>
#include <dlog.h>
#include "mm_player_utils.h"
#include "mm_player_streaming.h"
} streaming_buffer_info_t;
static void streaming_set_buffer_percent(mm_player_streaming_t *streamer, BufferType type, gdouble high_percent_byte, gdouble high_percent_time);
-static void streaming_set_queue2_queue_type(mm_player_streaming_t *streamer, MuxedBufferType type, gchar *file_path, guint64 content_size);
+static void streaming_set_queue2_queue_type(mm_player_streaming_t *streamer, MuxedBufferType type, guint64 content_size);
static void streaming_set_buffer_size(mm_player_streaming_t *streamer, BufferType type, guint buffering_bytes, gint buffering_time);
static void streaming_update_buffering_status(mm_player_streaming_t *streamer, GstMessage *buffering_msg, gint64 position);
static void streaming_get_current_bitrate_info(mm_player_streaming_t *streamer,
}
static void streaming_set_queue2_queue_type(mm_player_streaming_t *streamer,
- MuxedBufferType type, gchar *file_path, guint64 content_size)
+ MuxedBufferType type, guint64 content_size)
{
streaming_buffer_t *buffer_handle = NULL;
- guint64 storage_available_size = 0; /* bytes */
guint64 buffer_size = 0; /* bytes */
- gchar file_buffer_name[MM_MAX_URL_LEN] = {0};
- struct statfs buf = {0};
gchar *factory_name = NULL;
MMPLAYER_FENTER();
return;
}
- LOGD("[Queue2] buffering type : %d. streaming is played on pull-based.", type);
- if (type == MUXED_BUFFER_TYPE_FILE && file_path && strlen(file_path) > 0) {
- if (statfs((const char *)file_path, &buf) < 0) {
- LOGW("[Queue2] fail to get available storage capacity. set mem ring buffer instead of file buffer.");
- buffer_size = (guint64)((streamer->ring_buffer_size > 0) ? (streamer->ring_buffer_size) : DEFAULT_RING_BUFFER_SIZE_BYTES);
- } else {
- storage_available_size = (guint64)buf.f_bavail * (guint64)buf.f_bsize; //bytes
-
- LOGD("[Queue2] the number of available blocks : %"G_GUINT64_FORMAT
- ", the block size is %"G_GUINT64_FORMAT".",
- (guint64)buf.f_bavail, (guint64)buf.f_bsize);
-
- LOGD("[Queue2] calculated available storage size is %"
- G_GUINT64_FORMAT" Bytes.", storage_available_size);
-
- if (content_size <= 0 || content_size >= storage_available_size)
- buffer_size = storage_available_size;
- else
- buffer_size = 0L;
-
- g_snprintf(file_buffer_name, MM_MAX_URL_LEN, "%sXXXXXX", file_path);
- SECURE_LOGD("[Queue2] the buffering file name is %s.", file_buffer_name);
-
- g_object_set(G_OBJECT(buffer_handle->buffer), "temp-template", file_buffer_name, NULL);
- }
- } else {
- buffer_size = (guint64)((streamer->ring_buffer_size > 0) ? (streamer->ring_buffer_size) : DEFAULT_RING_BUFFER_SIZE_BYTES);
- }
+ buffer_size = (guint64)((streamer->ring_buffer_size > 0) ? (streamer->ring_buffer_size) : DEFAULT_RING_BUFFER_SIZE_BYTES);
LOGW("[Queue2] set ring buffer size: %"G_GUINT64_FORMAT, buffer_size);
g_object_set(G_OBJECT(buffer_handle->buffer), "ring-buffer-max-size", buffer_size, NULL);
}
void __mm_player_streaming_set_queue2(mm_player_streaming_t *streamer, GstElement *buffer,
- gboolean use_buffering, MuxedBufferType type, gchar *file_path, guint64 content_size)
+ gboolean use_buffering, MuxedBufferType type, guint64 content_size)
{
guint queue_size_bytes = 0;
guint queue_size_time = 0;
}
/* set the simple queue size */
- if (type == MUXED_BUFFER_TYPE_FILE)
- queue_size_bytes = MIN_BUFFER_SIZE_BYTES;
- else
- queue_size_bytes = DEFAULT_BUFFER_SIZE_BYTES;
-
- streaming_set_queue2_queue_type(streamer, type, file_path, content_size);
+ queue_size_bytes = DEFAULT_BUFFER_SIZE_BYTES;
+ streaming_set_queue2_queue_type(streamer, type, content_size);
}
/* queue_size_time will set to queue2 only in case of live buffering. */