+2005-07-11 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * docs/gst/tmpl/gstbasesrc.sgml:
+ * docs/gst/tmpl/gstfakesrc.sgml:
+ * gst/base/gstbasesrc.c: (gst_base_src_class_init),
+ (gst_base_src_init), (gst_base_src_set_property),
+ (gst_base_src_get_property), (gst_base_src_get_range),
+ (gst_base_src_start):
+ * gst/base/gstbasesrc.h:
+ add num-buffers property
+ * gst/elements/gstfakesrc.c: (gst_fakesrc_class_init),
+ (gst_fakesrc_init), (gst_fakesrc_set_property),
+ (gst_fakesrc_get_property), (gst_fakesrc_create),
+ (gst_fakesrc_start):
+ remove num-buffers property
+
2005-07-10 Thomas Vander Stichele <thomas at apestaart dot org>
* docs/gst/gstreamer-sections.txt:
@segment_loop:
@offset:
@size:
+@num_buffers:
+@num_buffers_left:
<!-- ##### ARG GstBaseSrc:blocksize ##### -->
<para>
</para>
+<!-- ##### ARG GstBaseSrc:num-buffers ##### -->
+<para>
+
+</para>
+
<!-- ##### STRUCT GstBaseSrcClass ##### -->
<para>
</para>
-<!-- ##### ARG GstFakeSrc:num-buffers ##### -->
-<para>
-
-</para>
-
<!-- ##### ARG GstFakeSrc:parentsize ##### -->
<para>
#include <gst/gstmarshal.h>
#define DEFAULT_BLOCKSIZE 4096
+#define DEFAULT_NUM_BUFFERS -1
GST_DEBUG_CATEGORY_STATIC (gst_base_src_debug);
#define GST_CAT_DEFAULT gst_base_src_debug
PROP_BLOCKSIZE,
PROP_HAS_LOOP,
PROP_HAS_GETRANGE,
+ PROP_NUM_BUFFERS,
};
static GstElementClass *parent_class = NULL;
"True if the element should expose a getrange function", TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_NUM_BUFFERS,
+ g_param_spec_int ("num-buffers", "num-buffers",
+ "Number of buffers to output before sending EOS", -1, G_MAXINT,
+ DEFAULT_NUM_BUFFERS, G_PARAM_READWRITE));
+
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_base_src_change_state);
basesrc->is_live = FALSE;
basesrc->live_lock = g_mutex_new ();
basesrc->live_cond = g_cond_new ();
+ basesrc->num_buffers = DEFAULT_NUM_BUFFERS;
+ basesrc->num_buffers_left = -1;
pad_template =
gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src");
src->has_getrange = g_value_get_boolean (value);
gst_base_src_set_dataflow_funcs (src);
break;
+ case PROP_NUM_BUFFERS:
+ src->num_buffers = g_value_get_int (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_HAS_GETRANGE:
g_value_set_boolean (value, src->has_getrange);
break;
+ case PROP_NUM_BUFFERS:
+ g_value_set_int (value, src->num_buffers);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
if (length == 0)
goto unexpected_length;
+ if (src->num_buffers_left == 0) {
+ goto reached_num_buffers;
+ } else {
+ if (src->num_buffers_left > 0)
+ src->num_buffers_left--;
+ }
+
ret = bclass->create (src, offset, length, buf);
return ret;
GST_DEBUG_OBJECT (src, "unexpected length %u", length);
return GST_FLOW_UNEXPECTED;
}
+reached_num_buffers:
+ {
+ GST_DEBUG_OBJECT (src, "sent all buffers");
+ return GST_FLOW_UNEXPECTED;
+ }
}
static gboolean
if (GST_FLAG_IS_SET (basesrc, GST_BASE_SRC_STARTED))
return TRUE;
+ basesrc->num_buffers_left = basesrc->num_buffers;
+
bclass = GST_BASE_SRC_GET_CLASS (basesrc);
if (bclass->start)
result = bclass->start (basesrc);
guint64 offset; /* current offset in the resource */
guint64 size; /* total size of the resource */
+
+ gint num_buffers;
+ gint num_buffers_left;
};
/**
#define DEFAULT_DATARATE 0
#define DEFAULT_SYNC FALSE
#define DEFAULT_PATTERN NULL
-#define DEFAULT_NUM_BUFFERS -1
#define DEFAULT_EOS FALSE
#define DEFAULT_SIGNAL_HANDOFFS FALSE
#define DEFAULT_SILENT FALSE
PROP_DATARATE,
PROP_SYNC,
PROP_PATTERN,
- PROP_NUM_BUFFERS,
PROP_EOS,
PROP_SIGNAL_HANDOFFS,
PROP_SILENT,
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PATTERN,
g_param_spec_string ("pattern", "pattern", "pattern", DEFAULT_PATTERN,
G_PARAM_READWRITE));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_NUM_BUFFERS,
- g_param_spec_int ("num-buffers", "num-buffers",
- "Number of buffers to output before sending EOS", -1, G_MAXINT,
- DEFAULT_NUM_BUFFERS, G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LAST_MESSAGE,
g_param_spec_string ("last-message", "last-message",
"The last status message", NULL, G_PARAM_READABLE));
fakesrc->output = FAKESRC_FIRST_LAST_LOOP;
fakesrc->segment_start = -1;
fakesrc->segment_end = -1;
- fakesrc->num_buffers = DEFAULT_NUM_BUFFERS;
- fakesrc->rt_num_buffers = -1;
fakesrc->buffer_count = 0;
fakesrc->silent = DEFAULT_SILENT;
fakesrc->signal_handoffs = DEFAULT_SIGNAL_HANDOFFS;
break;
case PROP_PATTERN:
break;
- case PROP_NUM_BUFFERS:
- src->num_buffers = g_value_get_int (value);
- break;
case PROP_SILENT:
src->silent = g_value_get_boolean (value);
break;
case PROP_PATTERN:
g_value_set_string (value, src->pattern);
break;
- case PROP_NUM_BUFFERS:
- g_value_set_int (value, src->num_buffers);
- break;
case PROP_SILENT:
g_value_set_boolean (value, src->silent);
break;
return GST_FLOW_UNEXPECTED;
}
- if (src->rt_num_buffers == 0) {
- return GST_FLOW_UNEXPECTED;
- } else {
- if (src->rt_num_buffers > 0)
- src->rt_num_buffers--;
- }
-
buf = gst_fakesrc_create_buffer (src);
GST_BUFFER_OFFSET (buf) = src->buffer_count++;
src->buffer_count = 0;
src->pattern_byte = 0x00;
src->bytes_sent = 0;
- src->rt_num_buffers = src->num_buffers;
return TRUE;
}
#include <gst/gstmarshal.h>
#define DEFAULT_BLOCKSIZE 4096
+#define DEFAULT_NUM_BUFFERS -1
GST_DEBUG_CATEGORY_STATIC (gst_base_src_debug);
#define GST_CAT_DEFAULT gst_base_src_debug
PROP_BLOCKSIZE,
PROP_HAS_LOOP,
PROP_HAS_GETRANGE,
+ PROP_NUM_BUFFERS,
};
static GstElementClass *parent_class = NULL;
"True if the element should expose a getrange function", TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_NUM_BUFFERS,
+ g_param_spec_int ("num-buffers", "num-buffers",
+ "Number of buffers to output before sending EOS", -1, G_MAXINT,
+ DEFAULT_NUM_BUFFERS, G_PARAM_READWRITE));
+
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_base_src_change_state);
basesrc->is_live = FALSE;
basesrc->live_lock = g_mutex_new ();
basesrc->live_cond = g_cond_new ();
+ basesrc->num_buffers = DEFAULT_NUM_BUFFERS;
+ basesrc->num_buffers_left = -1;
pad_template =
gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src");
src->has_getrange = g_value_get_boolean (value);
gst_base_src_set_dataflow_funcs (src);
break;
+ case PROP_NUM_BUFFERS:
+ src->num_buffers = g_value_get_int (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_HAS_GETRANGE:
g_value_set_boolean (value, src->has_getrange);
break;
+ case PROP_NUM_BUFFERS:
+ g_value_set_int (value, src->num_buffers);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
if (length == 0)
goto unexpected_length;
+ if (src->num_buffers_left == 0) {
+ goto reached_num_buffers;
+ } else {
+ if (src->num_buffers_left > 0)
+ src->num_buffers_left--;
+ }
+
ret = bclass->create (src, offset, length, buf);
return ret;
GST_DEBUG_OBJECT (src, "unexpected length %u", length);
return GST_FLOW_UNEXPECTED;
}
+reached_num_buffers:
+ {
+ GST_DEBUG_OBJECT (src, "sent all buffers");
+ return GST_FLOW_UNEXPECTED;
+ }
}
static gboolean
if (GST_FLAG_IS_SET (basesrc, GST_BASE_SRC_STARTED))
return TRUE;
+ basesrc->num_buffers_left = basesrc->num_buffers;
+
bclass = GST_BASE_SRC_GET_CLASS (basesrc);
if (bclass->start)
result = bclass->start (basesrc);
guint64 offset; /* current offset in the resource */
guint64 size; /* total size of the resource */
+
+ gint num_buffers;
+ gint num_buffers_left;
};
/**
#define DEFAULT_DATARATE 0
#define DEFAULT_SYNC FALSE
#define DEFAULT_PATTERN NULL
-#define DEFAULT_NUM_BUFFERS -1
#define DEFAULT_EOS FALSE
#define DEFAULT_SIGNAL_HANDOFFS FALSE
#define DEFAULT_SILENT FALSE
PROP_DATARATE,
PROP_SYNC,
PROP_PATTERN,
- PROP_NUM_BUFFERS,
PROP_EOS,
PROP_SIGNAL_HANDOFFS,
PROP_SILENT,
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PATTERN,
g_param_spec_string ("pattern", "pattern", "pattern", DEFAULT_PATTERN,
G_PARAM_READWRITE));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_NUM_BUFFERS,
- g_param_spec_int ("num-buffers", "num-buffers",
- "Number of buffers to output before sending EOS", -1, G_MAXINT,
- DEFAULT_NUM_BUFFERS, G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LAST_MESSAGE,
g_param_spec_string ("last-message", "last-message",
"The last status message", NULL, G_PARAM_READABLE));
fakesrc->output = FAKESRC_FIRST_LAST_LOOP;
fakesrc->segment_start = -1;
fakesrc->segment_end = -1;
- fakesrc->num_buffers = DEFAULT_NUM_BUFFERS;
- fakesrc->rt_num_buffers = -1;
fakesrc->buffer_count = 0;
fakesrc->silent = DEFAULT_SILENT;
fakesrc->signal_handoffs = DEFAULT_SIGNAL_HANDOFFS;
break;
case PROP_PATTERN:
break;
- case PROP_NUM_BUFFERS:
- src->num_buffers = g_value_get_int (value);
- break;
case PROP_SILENT:
src->silent = g_value_get_boolean (value);
break;
case PROP_PATTERN:
g_value_set_string (value, src->pattern);
break;
- case PROP_NUM_BUFFERS:
- g_value_set_int (value, src->num_buffers);
- break;
case PROP_SILENT:
g_value_set_boolean (value, src->silent);
break;
return GST_FLOW_UNEXPECTED;
}
- if (src->rt_num_buffers == 0) {
- return GST_FLOW_UNEXPECTED;
- } else {
- if (src->rt_num_buffers > 0)
- src->rt_num_buffers--;
- }
-
buf = gst_fakesrc_create_buffer (src);
GST_BUFFER_OFFSET (buf) = src->buffer_count++;
src->buffer_count = 0;
src->pattern_byte = 0x00;
src->bytes_sent = 0;
- src->rt_num_buffers = src->num_buffers;
return TRUE;
}