GstMessage * message);
static void finish_unprepare (GstRTSPMedia * media);
static gboolean default_prepare (GstRTSPMedia * media, GstRTSPThread * thread);
+static gboolean default_start_preroll (GstRTSPMedia * media);
static gboolean default_unprepare (GstRTSPMedia * media);
static gboolean default_suspend (GstRTSPMedia * media);
static gboolean default_unsuspend (GstRTSPMedia * media);
static gboolean default_setup_sdp (GstRTSPMedia * media, GstSDPMessage * sdp,
GstSDPInfo * info);
static gboolean default_handle_sdp (GstRTSPMedia * media, GstSDPMessage * sdp);
+static gboolean default_start_prepare (GstRTSPMedia * media);
static gboolean wait_preroll (GstRTSPMedia * media);
klass->handle_message = default_handle_message;
klass->prepare = default_prepare;
+ klass->start_preroll = default_start_preroll;
klass->unprepare = default_unprepare;
klass->suspend = default_suspend;
klass->unsuspend = default_unsuspend;
klass->create_rtpbin = default_create_rtpbin;
klass->setup_sdp = default_setup_sdp;
klass->handle_sdp = default_handle_sdp;
+ klass->start_prepare = default_start_prepare;
}
static void
};
static gboolean
-start_preroll (GstRTSPMedia * media)
+default_start_preroll (GstRTSPMedia * media)
{
GstRTSPMediaPrivate *priv = media->priv;
GstStateChangeReturn ret;
}
static gboolean
-start_prepare (GstRTSPMedia * media)
+default_start_prepare (GstRTSPMedia * media)
{
GstRTSPMediaPrivate *priv = media->priv;
+ GstRTSPMediaClass *klass;
guint i;
GList *walk;
+ klass = GST_RTSP_MEDIA_GET_CLASS (media);
+
/* link streams we already have, other streams might appear when we have
* dynamic elements */
for (i = 0; i < priv->streams->len; i++) {
}
}
- if (!start_preroll (media))
- goto preroll_failed;
+ if (klass->start_preroll)
+ if(!klass->start_preroll (media))
+ goto preroll_failed;
return FALSE;
/* do remainder in context */
source = g_idle_source_new ();
- g_source_set_callback (source, (GSourceFunc) start_prepare,
- g_object_ref (media), (GDestroyNotify) g_object_unref);
+ if(klass->start_prepare)
+ g_source_set_callback (source, (GSourceFunc) klass->start_prepare,
+ g_object_ref (media), (GDestroyNotify) g_object_unref);
g_source_attach (source, context);
g_source_unref (source);
default_unsuspend (GstRTSPMedia * media)
{
GstRTSPMediaPrivate *priv = media->priv;
+ GstRTSPMediaClass *klass;
+
+ klass = GST_RTSP_MEDIA_GET_CLASS (media);
switch (priv->suspend_mode) {
case GST_RTSP_SUSPEND_MODE_NONE:
case GST_RTSP_SUSPEND_MODE_RESET:
{
gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARING);
- if (!start_preroll (media))
- goto start_failed;
+ if (klass->start_preroll)
+ if(!klass->start_preroll (media))
+ goto start_failed;
g_rec_mutex_unlock (&priv->state_lock);
if (!wait_preroll (media))
/* vmethods */
gboolean (*handle_message) (GstRTSPMedia *media, GstMessage *message);
gboolean (*prepare) (GstRTSPMedia *media, GstRTSPThread *thread);
+ gboolean (*start_preroll) (GstRTSPMedia *media);
gboolean (*unprepare) (GstRTSPMedia *media);
gboolean (*suspend) (GstRTSPMedia *media);
gboolean (*unsuspend) (GstRTSPMedia *media);
GstElement * (*create_rtpbin) (GstRTSPMedia *media);
gboolean (*setup_rtpbin) (GstRTSPMedia *media, GstElement *rtpbin);
gboolean (*setup_sdp) (GstRTSPMedia *media, GstSDPMessage *sdp, GstSDPInfo *info);
+ gboolean (*start_prepare) (GstRTSPMedia *media);
/* signals */
void (*new_stream) (GstRTSPMedia *media, GstRTSPStream * stream);