add num-buffers property to basesrc

Original commit message from CVS:
add num-buffers property to basesrc
This commit is contained in:
Thomas Vander Stichele 2005-07-11 15:06:27 +00:00
parent 82596fea62
commit aff85422dc
9 changed files with 87 additions and 49 deletions

View file

@ -1,3 +1,19 @@
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:

View file

@ -35,6 +35,8 @@ GstBaseSrc
@segment_loop:
@offset:
@size:
@num_buffers:
@num_buffers_left:
<!-- ##### ARG GstBaseSrc:blocksize ##### -->
<para>
@ -51,6 +53,11 @@ GstBaseSrc
</para>
<!-- ##### ARG GstBaseSrc:num-buffers ##### -->
<para>
</para>
<!-- ##### STRUCT GstBaseSrcClass ##### -->
<para>

View file

@ -68,11 +68,6 @@ GstFakeSrc
</para>
<!-- ##### ARG GstFakeSrc:num-buffers ##### -->
<para>
</para>
<!-- ##### ARG GstFakeSrc:parentsize ##### -->
<para>

View file

@ -33,6 +33,7 @@
#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
@ -50,6 +51,7 @@ enum
PROP_BLOCKSIZE,
PROP_HAS_LOOP,
PROP_HAS_GETRANGE,
PROP_NUM_BUFFERS,
};
static GstElementClass *parent_class = NULL;
@ -150,6 +152,11 @@ gst_base_src_class_init (GstBaseSrcClass * klass)
"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);
@ -165,6 +172,8 @@ gst_base_src_init (GstBaseSrc * basesrc, gpointer g_class)
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");
@ -503,6 +512,9 @@ gst_base_src_set_property (GObject * object, guint prop_id,
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;
@ -527,6 +539,9 @@ gst_base_src_get_property (GObject * object, guint prop_id, GValue * value,
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;
@ -579,6 +594,13 @@ gst_base_src_get_range (GstPad * pad, guint64 offset, guint length,
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;
@ -599,6 +621,11 @@ unexpected_length:
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
@ -796,6 +823,8 @@ gst_base_src_start (GstBaseSrc * basesrc)
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);

View file

@ -95,6 +95,9 @@ struct _GstBaseSrc {
guint64 offset; /* current offset in the resource */
guint64 size; /* total size of the resource */
gint num_buffers;
gint num_buffers_left;
};
/**

View file

@ -63,7 +63,6 @@ enum
#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
@ -82,7 +81,6 @@ enum
PROP_DATARATE,
PROP_SYNC,
PROP_PATTERN,
PROP_NUM_BUFFERS,
PROP_EOS,
PROP_SIGNAL_HANDOFFS,
PROP_SILENT,
@ -262,10 +260,6 @@ gst_fakesrc_class_init (GstFakeSrcClass * klass)
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));
@ -311,8 +305,6 @@ gst_fakesrc_init (GstFakeSrc * fakesrc)
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;
@ -414,9 +406,6 @@ gst_fakesrc_set_property (GObject * object, guint prop_id, const GValue * value,
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;
@ -486,9 +475,6 @@ gst_fakesrc_get_property (GObject * object, guint prop_id, GValue * value,
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;
@ -669,13 +655,6 @@ gst_fakesrc_create (GstBaseSrc * basesrc, guint64 offset, guint length,
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++;
@ -729,7 +708,6 @@ gst_fakesrc_start (GstBaseSrc * basesrc)
src->buffer_count = 0;
src->pattern_byte = 0x00;
src->bytes_sent = 0;
src->rt_num_buffers = src->num_buffers;
return TRUE;
}

View file

@ -33,6 +33,7 @@
#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
@ -50,6 +51,7 @@ enum
PROP_BLOCKSIZE,
PROP_HAS_LOOP,
PROP_HAS_GETRANGE,
PROP_NUM_BUFFERS,
};
static GstElementClass *parent_class = NULL;
@ -150,6 +152,11 @@ gst_base_src_class_init (GstBaseSrcClass * klass)
"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);
@ -165,6 +172,8 @@ gst_base_src_init (GstBaseSrc * basesrc, gpointer g_class)
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");
@ -503,6 +512,9 @@ gst_base_src_set_property (GObject * object, guint prop_id,
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;
@ -527,6 +539,9 @@ gst_base_src_get_property (GObject * object, guint prop_id, GValue * value,
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;
@ -579,6 +594,13 @@ gst_base_src_get_range (GstPad * pad, guint64 offset, guint length,
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;
@ -599,6 +621,11 @@ unexpected_length:
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
@ -796,6 +823,8 @@ gst_base_src_start (GstBaseSrc * basesrc)
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);

View file

@ -95,6 +95,9 @@ struct _GstBaseSrc {
guint64 offset; /* current offset in the resource */
guint64 size; /* total size of the resource */
gint num_buffers;
gint num_buffers_left;
};
/**

View file

@ -63,7 +63,6 @@ enum
#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
@ -82,7 +81,6 @@ enum
PROP_DATARATE,
PROP_SYNC,
PROP_PATTERN,
PROP_NUM_BUFFERS,
PROP_EOS,
PROP_SIGNAL_HANDOFFS,
PROP_SILENT,
@ -262,10 +260,6 @@ gst_fakesrc_class_init (GstFakeSrcClass * klass)
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));
@ -311,8 +305,6 @@ gst_fakesrc_init (GstFakeSrc * fakesrc)
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;
@ -414,9 +406,6 @@ gst_fakesrc_set_property (GObject * object, guint prop_id, const GValue * value,
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;
@ -486,9 +475,6 @@ gst_fakesrc_get_property (GObject * object, guint prop_id, GValue * value,
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;
@ -669,13 +655,6 @@ gst_fakesrc_create (GstBaseSrc * basesrc, guint64 offset, guint length,
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++;
@ -729,7 +708,6 @@ gst_fakesrc_start (GstBaseSrc * basesrc)
src->buffer_count = 0;
src->pattern_byte = 0x00;
src->bytes_sent = 0;
src->rt_num_buffers = src->num_buffers;
return TRUE;
}