mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
pinossrc: add always-copy property
This commit is contained in:
parent
eca852cdd3
commit
3c7f1e09fb
2 changed files with 30 additions and 1 deletions
|
|
@ -54,12 +54,15 @@ static GQuark process_mem_data_quark;
|
||||||
GST_DEBUG_CATEGORY_STATIC (pinos_src_debug);
|
GST_DEBUG_CATEGORY_STATIC (pinos_src_debug);
|
||||||
#define GST_CAT_DEFAULT pinos_src_debug
|
#define GST_CAT_DEFAULT pinos_src_debug
|
||||||
|
|
||||||
|
#define DEFAULT_ALWAYS_COPY false
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_PATH,
|
PROP_PATH,
|
||||||
PROP_CLIENT_NAME,
|
PROP_CLIENT_NAME,
|
||||||
PROP_STREAM_PROPERTIES,
|
PROP_STREAM_PROPERTIES,
|
||||||
|
PROP_ALWAYS_COPY,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -115,6 +118,10 @@ gst_pinos_src_set_property (GObject * object, guint prop_id,
|
||||||
gst_structure_copy (gst_value_get_structure (value));
|
gst_structure_copy (gst_value_get_structure (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_ALWAYS_COPY:
|
||||||
|
pinossrc->always_copy = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
|
@ -140,6 +147,10 @@ gst_pinos_src_get_property (GObject * object, guint prop_id,
|
||||||
gst_value_set_structure (value, pinossrc->properties);
|
gst_value_set_structure (value, pinossrc->properties);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_ALWAYS_COPY:
|
||||||
|
g_value_set_boolean (value, pinossrc->always_copy);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
|
@ -248,6 +259,15 @@ gst_pinos_src_class_init (GstPinosSrcClass * klass)
|
||||||
G_PARAM_READWRITE |
|
G_PARAM_READWRITE |
|
||||||
G_PARAM_STATIC_STRINGS));
|
G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_ALWAYS_COPY,
|
||||||
|
g_param_spec_boolean ("always-copy",
|
||||||
|
"Always copy",
|
||||||
|
"Always copy the buffer and data",
|
||||||
|
DEFAULT_ALWAYS_COPY,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
gstelement_class->provide_clock = gst_pinos_src_provide_clock;
|
gstelement_class->provide_clock = gst_pinos_src_provide_clock;
|
||||||
gstelement_class->change_state = gst_pinos_src_change_state;
|
gstelement_class->change_state = gst_pinos_src_change_state;
|
||||||
|
|
||||||
|
|
@ -282,6 +302,8 @@ gst_pinos_src_init (GstPinosSrc * src)
|
||||||
|
|
||||||
GST_OBJECT_FLAG_SET (src, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
|
GST_OBJECT_FLAG_SET (src, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
|
||||||
|
|
||||||
|
src->always_copy = DEFAULT_ALWAYS_COPY;
|
||||||
|
|
||||||
g_queue_init (&src->queue);
|
g_queue_init (&src->queue);
|
||||||
|
|
||||||
src->fd_allocator = gst_fd_allocator_new ();
|
src->fd_allocator = gst_fd_allocator_new ();
|
||||||
|
|
@ -291,6 +313,7 @@ gst_pinos_src_init (GstPinosSrc * src)
|
||||||
src->loop = pinos_loop_new ();
|
src->loop = pinos_loop_new ();
|
||||||
src->main_loop = pinos_thread_main_loop_new (src->loop, "pinos-main-loop");
|
src->main_loop = pinos_thread_main_loop_new (src->loop, "pinos-main-loop");
|
||||||
GST_DEBUG ("loop %p, mainloop %p", src->loop, src->main_loop);
|
GST_DEBUG ("loop %p, mainloop %p", src->loop, src->main_loop);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
|
|
@ -498,7 +521,12 @@ on_new_buffer (PinosListener *listener,
|
||||||
mem->offset = d->chunk->offset + data->offset;
|
mem->offset = d->chunk->offset + data->offset;
|
||||||
mem->size = d->chunk->size;
|
mem->size = d->chunk->size;
|
||||||
}
|
}
|
||||||
gst_buffer_ref (buf);
|
|
||||||
|
if (pinossrc->always_copy)
|
||||||
|
buf = gst_buffer_copy_deep (buf);
|
||||||
|
else
|
||||||
|
gst_buffer_ref (buf);
|
||||||
|
|
||||||
g_queue_push_tail (&pinossrc->queue, buf);
|
g_queue_push_tail (&pinossrc->queue, buf);
|
||||||
|
|
||||||
pinos_thread_main_loop_signal (pinossrc->main_loop, FALSE);
|
pinos_thread_main_loop_signal (pinossrc->main_loop, FALSE);
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ struct _GstPinosSrc {
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gchar *path;
|
gchar *path;
|
||||||
gchar *client_name;
|
gchar *client_name;
|
||||||
|
gboolean always_copy;
|
||||||
|
|
||||||
gboolean negotiated;
|
gboolean negotiated;
|
||||||
gboolean flushing;
|
gboolean flushing;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue