static int OpenDemux (vlc_object_t *);
static void CloseDemux(vlc_object_t *);
-#define CACHING_TEXT N_("Caching value in ms")
-#define CACHING_LONGTEXT N_(\
- "Caching value for imem streams. This " \
- "value should be set in milliseconds.")
-
#define ID_TEXT N_("ID")
#define ID_LONGTEXT N_(\
"Set the ID of the elementary stream")
#define RELEASE_LONGTEXT N_(\
"Address of the release callback function")
+#define SIZE_TEXT N_("Size")
+#define SIZE_LONGTEXT N_(\
+ "Size of stream in bytes")
+
vlc_module_begin()
set_shortname(N_("Memory input"))
set_description(N_("Memory input"))
set_category(CAT_INPUT)
set_subcategory(SUBCAT_INPUT_ACCESS)
- add_integer("imem-caching", DEFAULT_PTS_DELAY / 1000, NULL, CACHING_TEXT, CACHING_LONGTEXT, true)
- change_private()
- add_string ("imem-get", "0", NULL, GET_TEXT, GET_LONGTEXT, true)
+ add_string ("imem-get", "0", GET_TEXT, GET_LONGTEXT, true)
change_volatile()
- add_string ("imem-release", "0", NULL, RELEASE_TEXT, RELEASE_LONGTEXT, true)
+ add_string ("imem-release", "0", RELEASE_TEXT, RELEASE_LONGTEXT, true)
change_volatile()
- add_string ("imem-cookie", NULL, NULL, COOKIE_TEXT, COOKIE_LONGTEXT, true)
+ add_string ("imem-cookie", NULL, COOKIE_TEXT, COOKIE_LONGTEXT, true)
change_volatile()
change_safe()
- add_string ("imem-data", "0", NULL, DATA_TEXT, DATA_LONGTEXT, true)
+ add_string ("imem-data", "0", DATA_TEXT, DATA_LONGTEXT, true)
change_volatile()
- add_integer("imem-id", -1, NULL, ID_TEXT, ID_LONGTEXT, true)
+ add_integer("imem-id", -1, ID_TEXT, ID_LONGTEXT, true)
change_private()
change_safe()
- add_integer("imem-group", 0, NULL, GROUP_TEXT, GROUP_LONGTEXT, true)
+ add_integer("imem-group", 0, GROUP_TEXT, GROUP_LONGTEXT, true)
change_private()
change_safe()
- add_integer("imem-cat", 0, NULL, CAT_TEXT, CAT_LONGTEXT, true)
- change_integer_list(cat_values, cat_texts, NULL)
+ add_integer("imem-cat", 0, CAT_TEXT, CAT_LONGTEXT, true)
+ change_integer_list(cat_values, cat_texts)
change_private()
change_safe()
- add_string ("imem-codec", NULL, NULL, CODEC_TEXT, CODEC_LONGTEXT, true)
+ add_string ("imem-codec", NULL, CODEC_TEXT, CODEC_LONGTEXT, true)
change_private()
change_safe()
- add_string( "imem-language", NULL, NULL, LANGUAGE_TEXT, LANGUAGE_LONGTEXT, false)
+ add_string( "imem-language", NULL, LANGUAGE_TEXT, LANGUAGE_LONGTEXT, false)
change_private()
change_safe()
- add_integer("imem-samplerate", 0, NULL, SAMPLERATE_TEXT, SAMPLERATE_LONGTEXT, true)
+ add_integer("imem-samplerate", 0, SAMPLERATE_TEXT, SAMPLERATE_LONGTEXT, true)
change_private()
change_safe()
- add_integer("imem-channels", 0, NULL, CHANNELS_TEXT, CHANNELS_LONGTEXT, true)
+ add_integer("imem-channels", 0, CHANNELS_TEXT, CHANNELS_LONGTEXT, true)
change_private()
change_safe()
- add_integer("imem-width", 0, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true)
+ add_integer("imem-width", 0, WIDTH_TEXT, WIDTH_LONGTEXT, true)
change_private()
change_safe()
- add_integer("imem-height", 0, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true)
+ add_integer("imem-height", 0, HEIGHT_TEXT, HEIGHT_LONGTEXT, true)
change_private()
change_safe()
- add_string ("imem-dar", NULL, NULL, DAR_TEXT, DAR_LONGTEXT, true)
+ add_string ("imem-dar", NULL, DAR_TEXT, DAR_LONGTEXT, true)
change_private()
change_safe()
- add_string ("imem-fps", NULL, NULL, FPS_TEXT, FPS_LONGTEXT, true)
+ add_string ("imem-fps", NULL, FPS_TEXT, FPS_LONGTEXT, true)
+ change_private()
+ change_safe()
+
+ add_integer ("imem-size", 0, SIZE_TEXT, SIZE_LONGTEXT, true)
change_private()
change_safe()
es_out_id_t *es;
- mtime_t pts_delay;
-
mtime_t dts;
mtime_t deadline;
} imem_sys_t;
static void ParseMRL(vlc_object_t *, const char *);
-#define var_InheritRational(a,b,c,d) var_InheritRational(VLC_OBJECT(a),b,c,d)
-static int (var_InheritRational)(vlc_object_t *,
- unsigned *num, unsigned *den,
- const char *var);
/**
* It closes the common part of the access and access_demux
sys->source.cookie ? sys->source.cookie : "(null)");
/* */
- sys->pts_delay = var_InheritInteger(object, "imem-caching") * INT64_C(1000);
sys->dts = 0;
sys->deadline = VLC_TS_INVALID;
access_t *access = (access_t *)object;
imem_sys_t *sys;
- if (OpenCommon(object, &sys, access->psz_path))
+ if (OpenCommon(object, &sys, access->psz_location))
return VLC_EGENERIC;
if (var_InheritInteger(object, "imem-cat") != 4) {
access->pf_block = Block;
access->pf_seek = NULL;
access->p_sys = (access_sys_t*)sys;
+ access->info.i_size = var_InheritInteger(object, "imem-size");
return VLC_SUCCESS;
}
}
case ACCESS_GET_PTS_DELAY: {
int64_t *delay = va_arg(args, int64_t *);
- *delay = sys->pts_delay;
+ *delay = DEFAULT_PTS_DELAY; /* FIXME? */
return VLC_SUCCESS;
}
case ACCESS_SET_PAUSE_STATE:
demux_t *demux = (demux_t *)object;
imem_sys_t *sys;
- if (OpenCommon(object, &sys, demux->psz_path))
+ if (OpenCommon(object, &sys, demux->psz_location))
return VLC_EGENERIC;
/* ES format */
fmt.video.i_width = var_InheritInteger(object, "imem-width");
fmt.video.i_height = var_InheritInteger(object, "imem-height");
unsigned num, den;
- if (!var_InheritRational(object, &num, &den, "imem-dar") && num > 0 && den > 0) {
+ if (!var_InheritURational(object, &num, &den, "imem-dar") && num > 0 && den > 0) {
if (fmt.video.i_width > 0 && fmt.video.i_height > 0) {
fmt.video.i_sar_num = num * fmt.video.i_height;
fmt.video.i_sar_den = den * fmt.video.i_width;
}
}
- if (!var_InheritRational(object, &num, &den, "imem-fps") && num > 0 && den > 0) {
+ if (!var_InheritURational(object, &num, &den, "imem-fps") && num > 0 && den > 0) {
fmt.video.i_frame_rate = num;
fmt.video.i_frame_rate_base = den;
}
case DEMUX_GET_PTS_DELAY: {
int64_t *delay = va_arg(args, int64_t *);
- *delay = sys->pts_delay;
+ *delay = DEFAULT_PTS_DELAY; /* FIXME? */
return VLC_SUCCESS;
}
case DEMUX_GET_POSITION: {
return 1;
}
-/**
- * It parses a rational number (it also accepts basic float number).
- *
- * It returns an error if the rational number cannot be parsed (0/0 is valid).
- */
-static int (var_InheritRational)(vlc_object_t *object,
- unsigned *num, unsigned *den,
- const char *var)
-{
- /* */
- *num = 0;
- *den = 0;
-
- /* */
- char *tmp = var_InheritString(object, var);
- if (!tmp)
- goto error;
-
- char *next;
- unsigned n = strtol(tmp, &next, 0);
- unsigned d = strtol(*next ? &next[1] : "0", NULL, 0);
-
- if (*next == '.') {
- /* Interpret as a float number */
- double r = us_atof(tmp);
- double c = ceil(r);
- if (c >= UINT_MAX)
- goto error;
- unsigned m = c;
- if (m > 0) {
- d = UINT_MAX / m;
- n = r * d;
- } else {
- n = 0;
- d = 0;
- }
- }
-
- if (n > 0 && d > 0)
- vlc_ureduce(num, den, n, d, 0);
-
- free(tmp);
- return VLC_SUCCESS;
-
-error:
- free(tmp);
- return VLC_EGENERIC;
-}
-
/**
* Parse the MRL and extract configuration from it.
*
const char *name;
int type;
} options[] = {
- { "caching", VLC_VAR_INTEGER },
{ "id", VLC_VAR_INTEGER },
{ "group", VLC_VAR_INTEGER },
{ "cat", VLC_VAR_INTEGER },