mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
- Small cleanups
Original commit message from CVS: - Small cleanups - update OFFSET/DURATION - add blocksize property
This commit is contained in:
parent
8481e5013c
commit
264e1f15e2
2 changed files with 41 additions and 15 deletions
|
@ -50,6 +50,8 @@ enum {
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define DEFAULT_BLOCKSIZE 4096
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ARG_0,
|
ARG_0,
|
||||||
ARG_TUNE,
|
ARG_TUNE,
|
||||||
|
@ -59,6 +61,7 @@ enum {
|
||||||
ARG_MEASURED_VOLUME,
|
ARG_MEASURED_VOLUME,
|
||||||
ARG_MOS8580,
|
ARG_MOS8580,
|
||||||
ARG_FORCE_SPEED,
|
ARG_FORCE_SPEED,
|
||||||
|
ARG_BLOCKSIZE,
|
||||||
ARG_METADATA,
|
ARG_METADATA,
|
||||||
/* FILL ME */
|
/* FILL ME */
|
||||||
};
|
};
|
||||||
|
@ -230,9 +233,12 @@ gst_siddec_class_init (GstSidDec *klass)
|
||||||
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FORCE_SPEED,
|
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FORCE_SPEED,
|
||||||
g_param_spec_boolean ("force_speed", "force_speed", "force_speed",
|
g_param_spec_boolean ("force_speed", "force_speed", "force_speed",
|
||||||
TRUE, (GParamFlags)G_PARAM_READWRITE));
|
TRUE, (GParamFlags)G_PARAM_READWRITE));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BLOCKSIZE,
|
||||||
|
g_param_spec_ulong ("blocksize", "Block size", "Size in bytes to output per buffer",
|
||||||
|
1, G_MAXULONG, DEFAULT_BLOCKSIZE, (GParamFlags)G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (gobject_class, ARG_METADATA,
|
g_object_class_install_property (gobject_class, ARG_METADATA,
|
||||||
g_param_spec_boxed ("metadata", "Metadata", "Metadata",
|
g_param_spec_boxed ("metadata", "Metadata", "Metadata",
|
||||||
GST_TYPE_CAPS, G_PARAM_READABLE));
|
GST_TYPE_CAPS, (GParamFlags)G_PARAM_READABLE));
|
||||||
|
|
||||||
gobject_class->set_property = gst_siddec_set_property;
|
gobject_class->set_property = gst_siddec_set_property;
|
||||||
gobject_class->get_property = gst_siddec_get_property;
|
gobject_class->get_property = gst_siddec_get_property;
|
||||||
|
@ -287,6 +293,7 @@ gst_siddec_init (GstSidDec *siddec)
|
||||||
siddec->tune_len = 0;
|
siddec->tune_len = 0;
|
||||||
siddec->tune_number = 1;
|
siddec->tune_number = 1;
|
||||||
siddec->total_bytes = 0;
|
siddec->total_bytes = 0;
|
||||||
|
siddec->blocksize = DEFAULT_BLOCKSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -443,18 +450,28 @@ gst_siddec_loop (GstElement *element)
|
||||||
if (siddec->state == SID_STATE_PLAY_TUNE) {
|
if (siddec->state == SID_STATE_PLAY_TUNE) {
|
||||||
GstBuffer *out;
|
GstBuffer *out;
|
||||||
GstFormat format;
|
GstFormat format;
|
||||||
gint64 value;
|
gint64 value, value2;
|
||||||
|
|
||||||
out = gst_buffer_new_and_alloc (4096);
|
out = gst_buffer_new_and_alloc (siddec->blocksize);
|
||||||
|
|
||||||
sidEmuFillBuffer (*siddec->engine, *siddec->tune,
|
sidEmuFillBuffer (*siddec->engine, *siddec->tune,
|
||||||
GST_BUFFER_DATA (out), GST_BUFFER_SIZE (out));
|
GST_BUFFER_DATA (out), GST_BUFFER_SIZE (out));
|
||||||
|
|
||||||
|
/* get offset in samples */
|
||||||
|
format = GST_FORMAT_DEFAULT;
|
||||||
|
gst_siddec_src_query (siddec->srcpad, GST_QUERY_POSITION, &format, &value);
|
||||||
|
GST_BUFFER_OFFSET (out) = value;
|
||||||
|
|
||||||
|
/* get current timestamp */
|
||||||
format = GST_FORMAT_TIME;
|
format = GST_FORMAT_TIME;
|
||||||
gst_siddec_src_query (siddec->srcpad, GST_QUERY_POSITION, &format, &value);
|
gst_siddec_src_query (siddec->srcpad, GST_QUERY_POSITION, &format, &value);
|
||||||
GST_BUFFER_TIMESTAMP (out) = value;
|
GST_BUFFER_TIMESTAMP (out) = value;
|
||||||
|
|
||||||
siddec->total_bytes += 4096;
|
/* update position and get new timestamp to calculate duration */
|
||||||
|
siddec->total_bytes += siddec->blocksize;
|
||||||
|
format = GST_FORMAT_TIME;
|
||||||
|
gst_siddec_src_query (siddec->srcpad, GST_QUERY_POSITION, &format, &value2);
|
||||||
|
GST_BUFFER_DURATION (out) = value2 - value;
|
||||||
|
|
||||||
gst_pad_push (siddec->srcpad, out);
|
gst_pad_push (siddec->srcpad, out);
|
||||||
}
|
}
|
||||||
|
@ -578,6 +595,9 @@ gst_siddec_set_property (GObject *object, guint prop_id, const GValue *value, GP
|
||||||
case ARG_MOS8580:
|
case ARG_MOS8580:
|
||||||
siddec->config->mos8580 = g_value_get_boolean (value);
|
siddec->config->mos8580 = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
case ARG_BLOCKSIZE:
|
||||||
|
siddec->blocksize = g_value_get_ulong (value);
|
||||||
|
break;
|
||||||
case ARG_FORCE_SPEED:
|
case ARG_FORCE_SPEED:
|
||||||
siddec->config->forceSongSpeed = g_value_get_boolean (value);
|
siddec->config->forceSongSpeed = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
@ -619,6 +639,9 @@ gst_siddec_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
|
||||||
case ARG_FORCE_SPEED:
|
case ARG_FORCE_SPEED:
|
||||||
g_value_set_boolean (value, siddec->config->forceSongSpeed);
|
g_value_set_boolean (value, siddec->config->forceSongSpeed);
|
||||||
break;
|
break;
|
||||||
|
case ARG_BLOCKSIZE:
|
||||||
|
g_value_set_ulong (value, siddec->blocksize);
|
||||||
|
break;
|
||||||
case ARG_METADATA:
|
case ARG_METADATA:
|
||||||
g_value_set_boxed (value, siddec->metadata);
|
g_value_set_boxed (value, siddec->metadata);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -46,22 +46,25 @@ typedef struct _GstSidDec GstSidDec;
|
||||||
typedef struct _GstSidDecClass GstSidDecClass;
|
typedef struct _GstSidDecClass GstSidDecClass;
|
||||||
|
|
||||||
struct _GstSidDec {
|
struct _GstSidDec {
|
||||||
GstElement element;
|
GstElement element;
|
||||||
|
|
||||||
/* pads */
|
/* pads */
|
||||||
GstPad *sinkpad, *srcpad;
|
GstPad *sinkpad,
|
||||||
|
*srcpad;
|
||||||
|
|
||||||
gint state;
|
gint state;
|
||||||
guchar *tune_buffer;
|
guchar *tune_buffer;
|
||||||
gint tune_len;
|
gint tune_len;
|
||||||
gint tune_number;
|
gint tune_number;
|
||||||
guint64 total_bytes;
|
guint64 total_bytes;
|
||||||
|
|
||||||
emuEngine *engine;
|
emuEngine *engine;
|
||||||
sidTune *tune;
|
sidTune *tune;
|
||||||
emuConfig *config;
|
emuConfig *config;
|
||||||
|
|
||||||
GstCaps *metadata;
|
gulong blocksize;
|
||||||
|
|
||||||
|
GstCaps *metadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstSidDecClass {
|
struct _GstSidDecClass {
|
||||||
|
|
Loading…
Reference in a new issue