72 void _onNewSourcePad(GstPad *pad);
73 void _onNewDecoderPad(GstPad *pad);
75 bool _addVideoSink(GstPad *pad);
77 void _noteVideoSinkFrame();
78 void _noteEndOfStream();
82 void _shutdownDecodingBranch();
83 void _shutdownRecordingBranch();
84 void _logDecodebin3SelectedCodec(
GstElement *decodebin3);
87 void _dispatchSignal(
Task emitter);
89 static gboolean _onBusMessage(GstBus *bus, GstMessage *message, gpointer user_data);
90 static void _onNewPad(
GstElement *element, GstPad *pad, gpointer data);
91 static void _wrapWithGhostPad(
GstElement *element, GstPad *pad, gpointer data);
92 static void _linkPad(
GstElement *element, GstPad *pad, gpointer data);
93 static gboolean _padProbe(
GstElement *element, GstPad *pad, gpointer user_data);
94 static gboolean _filterParserCaps(
GstElement *bin, GstPad *pad,
GstElement *element, GstQuery *query, gpointer data);
95 static GstPadProbeReturn _teeProbe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data);
96 static GstPadProbeReturn _videoSinkProbe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data);
97 static GstPadProbeReturn _eosProbe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data);
98 static GstPadProbeReturn _keyframeWatch(GstPad *pad, GstPadProbeInfo *info, gpointer user_data);
109 gulong _teeProbeId = 0;
110 gulong _videoSinkProbeId = 0;