Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
e309de8
gstpad: check EOS / FLUSHING again after running probes in chain
MathieuDuponchelle Nov 24, 2020
6f1d35b
ccextractor: Add force-expose-caption-pad property
seungha-yang Aug 11, 2021
2544113
filesrc: Port to FILE struct
seungha-yang Dec 29, 2021
fdca958
filesrc: Add buffer-size property
seungha-yang Dec 29, 2021
9376a85
Set default filesrc buffer-size to 10MB
raytiley May 2, 2022
15c26b1
Increase default filesrc buffer to 20MB
raytiley May 26, 2022
94502bf
WIP: Video audio meta
MathieuDuponchelle Mar 25, 2021
ea97096
mpegvideoparse: Update pixel-aspect-ratio if resolution is updated
seungha-yang Aug 27, 2022
efe13e2
videodecoder: Always prefer DTS as PTS if PTS is unknown
seungha-yang Aug 30, 2022
bf8eaaf
ccconverter: Don't assert on error
seungha-yang Mar 29, 2023
1719b57
decklink2: Import SDK v12.4.2 files
seungha-yang Dec 31, 2022
3380b06
decklink2: Remove fprintf from SDK
seungha-yang Mar 22, 2023
05ff22e
decklink2: Add new Blackmagic DeckLink plugin
seungha-yang Dec 30, 2022
44ff95f
aggregator: Add gst_aggregator_ensure_mandatory_events() method
seungha-yang Jun 1, 2023
ae58acf
streamselector: Add new input stream selector element
seungha-yang Jun 1, 2023
d741a48
decklink2srcbin: Configure small queue between src and demux
seungha-yang Jun 6, 2023
c8a7763
decklink2sink: Fill audio silence when video is duplicated
seungha-yang Jun 6, 2023
0ec1ed0
streamselector: Always drop old buffers from inactive pad
seungha-yang Jun 5, 2023
1b9c619
decklink2src: Add "skip-first-time" property
seungha-yang Jun 13, 2023
217da0f
decklink2src: Add "restart" signal action
seungha-yang Jun 13, 2023
b8342c4
decklink2sink: Add auto-restart property
seungha-yang Jun 20, 2023
ea4484f
decklink2sink: Add restart signal action
seungha-yang Jun 20, 2023
ba0312f
decklink2: Update for CFStringRef to std::string converision
seungha-yang Jun 15, 2023
11b3af8
decklink2src: Use GstQueueArray instead of std::queue
seungha-yang Jun 15, 2023
d0f23db
decklink2sink: Loop ScheduleAudioSamples() until all data is written
seungha-yang Jun 21, 2023
fe19ac7
decklink2src: Add "desync-threshold" and "no-signal-threshold" proper…
seungha-yang Jun 21, 2023
414285d
decklink2src: Remove no-signal-threshold property
seungha-yang Jun 26, 2023
68f2392
decklink2src: Update for signal state logging
seungha-yang Jun 27, 2023
d680388
decklink2sink: Don't hold lock while stopping
seungha-yang Jun 30, 2023
7dcd7d3
Flush device streams when we don't get enough audio samples from the …
raytiley Jul 10, 2023
9362749
decklink2: Fix output audio prepend and add more logs
seungha-yang Jul 11, 2023
1694e14
decklink2sink: Restart only when frames are dropped
seungha-yang Jul 14, 2023
502321e
decklink2output: Duplicate more frames on underrun
seungha-yang Jul 14, 2023
0e92f08
decklink2output: Calculate audio sample timestamp
seungha-yang Jul 27, 2023
2db4918
decklink2sink: Add output-stats property
seungha-yang Jul 28, 2023
9add04c
Set audio output mode to bmdAudioSampleRate48kHz
raytiley Jul 29, 2023
ea130a4
decklink2sink: Add buffered audio and video time to ouptput-stats
seungha-yang Jul 28, 2023
c9b001d
ceiling latency for awscombiner
raytiley Aug 1, 2023
06343d8
decklink2combiner: Don't aggregate multiple audio buffers
seungha-yang Aug 1, 2023
bb0b210
decklink2output: Update audio drop logic
seungha-yang Aug 1, 2023
a43ede1
streamselector: Don't try to drop buffer of the current active pad
seungha-yang Aug 5, 2023
f740614
streamselector: Fix busy waiting
seungha-yang Aug 5, 2023
68efb98
streamselectorbin: Add sync-only-inactive property
seungha-yang Sep 14, 2023
d116d44
decklink2src: Validate frame resolution and formats
seungha-yang Nov 3, 2023
282cc97
decklink2sink: Add desync-threshold property
seungha-yang Dec 4, 2023
cab2791
decklink2src: Fix mutex usage
seungha-yang Dec 7, 2023
19e0011
decklink2src: Release mutex while stopping
seungha-yang Dec 7, 2023
3fb0cba
decklink2: Validate video buffer size
seungha-yang Dec 14, 2023
634f8bd
decklink2src: Implement soft restart
seungha-yang Dec 14, 2023
8ac14f8
decklink2: Fix caps to mode conversion
seungha-yang Apr 3, 2024
6392d4b
filesrc: Don't abort on _get_osfhandle()
seungha-yang May 17, 2024
6dc6ce6
fix cherry-pick
raytiley May 17, 2024
b31c07e
filesrc: Fix build
seungha-yang May 20, 2024
7ed8256
[TEST] - Test default max decode threads at 2
raytiley Jun 11, 2024
242088c
Revert "[TEST] - Test default max decode threads at 2"
raytiley Jun 18, 2024
e61a722
timecodestamper: Add running-time source mode
seungha-yang Aug 7, 2024
77455c0
Fix rebase
raytiley Dec 1, 2024
6bef836
line21dec: Handle the case where there is only one line of CC
bilboed Nov 4, 2024
3e50c8d
Add warning about if there is audio with no video from decklink2src
raytiley Dec 6, 2024
f347240
decklink2src: Respect requested video-format
seungha-yang Jan 8, 2025
8831ce4
decklink2src: Avoid unnecessary restart on format change callback
seungha-yang Feb 10, 2025
b662620
decklink2output: Fix out of bounds read
seungha-yang Feb 20, 2025
587b726
avviddec: Drop frame on resolution mismatch
seungha-yang Aug 7, 2025
df07845
decodebin3: Add decoder-factory-sort signal
seungha-yang Sep 10, 2025
4ee6153
videoaggregator: Remove input interlace-mode and alpha restrictions
seungha-yang Nov 4, 2025
9738938
videoaggregator: Actually accept differnt interlace-mode
seungha-yang Nov 6, 2025
97ab753
overlaycomposition: Add support for blending upstream composition
seungha-yang Jan 6, 2026
75c4a95
overlaycomposition: Implement fixate_caps()
seungha-yang Aug 8, 2023
13b9f4f
overlaycomposition: Fix transform caps
seungha-yang Jul 1, 2024
9f37e31
Use Cablecast plugins
raytiley Jan 19, 2026
dbf8889
aggregator: select new start time after flush stop
MathieuDuponchelle Mar 3, 2026
fad7a14
errorignore: Add ignore-flushing property
seungha-yang Aug 20, 2024
31dab02
decklink2: Use correct IID in video frame QueryInterface()
sdroege May 6, 2026
9e097c2
gstinfo: Use stack allocation for <=1KB messages
nirbheek May 9, 2026
9b96a3e
gstinfo: Don't ever use %n to know how much was written
nirbheek May 9, 2026
10734ba
gstinfo: Use stack allocated memory when printing on Win32
nirbheek May 11, 2026
f31e21b
gstinfo: Use a more optimized version of GST_TIME_ARGS
nirbheek May 9, 2026
9b908d4
gstinfo: Don't use fwrite() on Windows for debug logging
nirbheek May 11, 2026
a6c2a9a
gst: Pass a strong reference to the user_data to gst_pad_start_task()
sdroege May 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .indent_cpp_list
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ subprojects/gst-plugins-bad/sys/d3d11
subprojects/gst-plugins-bad/sys/d3d12
subprojects/gst-plugins-bad/sys/dwrite
subprojects/gst-plugins-bad/sys/hip
^(subprojects/gst-plugins-bad/sys/decklink2/)+(\w)+([^/])+(cpp$)
subprojects/gst-plugins-bad/sys/mediafoundation
subprojects/gst-plugins-bad/sys/nvcodec
^(subprojects/gst-plugins-bad/sys/qsv/)+(\w)+([^/])+(cpp$)
Expand Down
4 changes: 2 additions & 2 deletions subprojects/gst-libav/ext/libav/gstavdemux.c
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ gst_ffmpegdemux_perform_seek (GstFFMpegDemux * demux, GstEvent * event)
/* and restart the task in case it got paused explicitely or by
* the FLUSH_START event we pushed out. */
gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_ffmpegdemux_loop,
demux->sinkpad, NULL);
gst_object_ref (demux->sinkpad), gst_object_unref);

/* and release the lock again so we can continue streaming */
GST_PAD_STREAM_UNLOCK (demux->sinkpad);
Expand Down Expand Up @@ -1965,7 +1965,7 @@ gst_ffmpegdemux_sink_activate_pull (GstPad * sinkpad, GstObject * parent,
if (active) {
demux->seekable = TRUE;
res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_ffmpegdemux_loop,
demux, NULL);
gst_object_ref (demux), gst_object_unref);
} else {
res = gst_pad_stop_task (sinkpad);
demux->seekable = FALSE;
Expand Down
3 changes: 2 additions & 1 deletion subprojects/gst-libav/ext/libav/gstavviddec.c
Original file line number Diff line number Diff line change
Expand Up @@ -2136,9 +2136,10 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
GstVideoInfo *info = &ffmpegdec->output_state->info;
if (vmeta->width != GST_VIDEO_INFO_WIDTH (info) ||
vmeta->height != GST_VIDEO_INFO_HEIGHT (info)) {
g_error ("video meta uses %dx%d instead of %dx%d",
GST_ERROR_OBJECT (ffmpegdec, "video meta uses %dx%d instead of %dx%d",
vmeta->width, vmeta->height, GST_VIDEO_INFO_WIDTH (info),
GST_VIDEO_INFO_HEIGHT (info));
GST_VIDEO_CODEC_FRAME_SET_DECODE_ONLY (output_frame);
}
}
}
Expand Down
1,270 changes: 1,270 additions & 0 deletions subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions subprojects/gst-plugins-bad/ext/dtls/gstdtlsenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,8 +477,8 @@ src_activate_mode (GstPad * pad, GstObject * parent, GstPadMode mode,
self->src_ret = GST_FLOW_OK;
self->send_initial_events = TRUE;
success =
gst_pad_start_task (pad, (GstTaskFunction) src_task_loop, self->src,
NULL);
gst_pad_start_task (pad, (GstTaskFunction) src_task_loop,
gst_object_ref (self->src), gst_object_unref);
if (!success) {
GST_WARNING_OBJECT (self, "failed to activate pad task");
}
Expand Down
6 changes: 3 additions & 3 deletions subprojects/gst-plugins-bad/ext/gme/gstgme.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ gst_gme_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
gme->seeking = TRUE;

gst_pad_start_task (gme->srcpad, (GstTaskFunction) gst_gme_play,
gme->srcpad, NULL);
gst_object_ref (gme->srcpad), gst_object_unref);

GST_PAD_STREAM_UNLOCK (gme->srcpad);
result = TRUE;
Expand Down Expand Up @@ -461,8 +461,8 @@ gme_setup (GstGmeDec * gme)
gst_segment_init (&seg, GST_FORMAT_TIME);
gst_pad_push_event (gme->srcpad, gst_event_new_segment (&seg));

gst_pad_start_task (gme->srcpad, (GstTaskFunction) gst_gme_play, gme->srcpad,
NULL);
gst_pad_start_task (gme->srcpad, (GstTaskFunction) gst_gme_play,
gst_object_ref (gme->srcpad), gst_object_unref);

gme->initialized = TRUE;
gme->seeking = FALSE;
Expand Down
4 changes: 2 additions & 2 deletions subprojects/gst-plugins-bad/ext/modplug/gstmodplug.cc
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ gst_modplug_do_seek (GstModPlug * modplug, GstEvent * event)
gst_util_uint64_scale_int (cur, modplug->frequency, GST_SECOND);

gst_pad_start_task (modplug->sinkpad,
(GstTaskFunction) gst_modplug_loop, modplug, NULL);
(GstTaskFunction) gst_modplug_loop, gst_object_ref (modplug), gst_object_unref);

GST_PAD_STREAM_UNLOCK (modplug->sinkpad);

Expand Down Expand Up @@ -586,7 +586,7 @@ gst_modplug_sinkpad_activate_mode (GstPad * pad, GstObject * parent,
case GST_PAD_MODE_PULL:
if (active) {
res = gst_pad_start_task (pad, (GstTaskFunction) gst_modplug_loop,
modplug, NULL);
gst_object_ref (modplug), gst_object_unref);
} else {
res = gst_pad_stop_task (pad);
}
Expand Down
2 changes: 1 addition & 1 deletion subprojects/gst-plugins-bad/ext/mpeg2enc/gstmpeg2enc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -717,7 +717,7 @@ gst_mpeg2enc_handle_frame (GstVideoEncoder * video_encoder,
if (!enc->started) {
GST_DEBUG_OBJECT (video_encoder, "handle_frame: START task");
gst_pad_start_task (video_encoder->srcpad,
(GstTaskFunction) gst_mpeg2enc_loop, enc, NULL);
(GstTaskFunction) gst_mpeg2enc_loop, gst_object_ref (enc), gst_object_unref);
enc->started = TRUE;
}

Expand Down
4 changes: 2 additions & 2 deletions subprojects/gst-plugins-bad/ext/mplex/gstmplex.cc
Original file line number Diff line number Diff line change
Expand Up @@ -533,8 +533,8 @@ gst_mplex_start_task (GstMplex * mplex)
if (G_UNLIKELY (mplex->srcresult == GST_FLOW_CUSTOM_SUCCESS)
&& mplex->job->video_tracks == mplex->num_vpads
&& mplex->job->audio_tracks == mplex->num_apads) {
gst_pad_start_task (mplex->srcpad, (GstTaskFunction) gst_mplex_loop, mplex,
NULL);
gst_pad_start_task (mplex->srcpad, (GstTaskFunction) gst_mplex_loop, gst_object_ref (mplex),
gst_object_unref);
mplex->srcresult = GST_FLOW_OK;
}
}
Expand Down
6 changes: 4 additions & 2 deletions subprojects/gst-plugins-bad/ext/musepack/gstmusepackdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,8 @@ gst_musepackdec_handle_seek_event (GstMusepackDec * dec, GstEvent * event)
GST_DEBUG_OBJECT (dec, "seek successful");

gst_pad_start_task (dec->sinkpad,
(GstTaskFunction) gst_musepackdec_loop, dec->sinkpad, NULL);
(GstTaskFunction) gst_musepackdec_loop, gst_object_ref (dec->sinkpad),
gst_object_unref);

GST_PAD_STREAM_UNLOCK (dec->sinkpad);

Expand Down Expand Up @@ -473,7 +474,8 @@ gst_musepackdec_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
case GST_PAD_MODE_PULL:
if (active) {
result = gst_pad_start_task (sinkpad,
(GstTaskFunction) gst_musepackdec_loop, sinkpad, NULL);
(GstTaskFunction) gst_musepackdec_loop, gst_object_ref (sinkpad),
gst_object_unref);
} else {
result = gst_pad_stop_task (sinkpad);
}
Expand Down
3 changes: 2 additions & 1 deletion subprojects/gst-plugins-bad/ext/openjpeg/gstopenjpegdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1534,7 +1534,8 @@ gst_openjpeg_dec_decode_frame_multiple (GstVideoDecoder * decoder,
if (!self->started) {
GST_DEBUG_OBJECT (self, "Starting task");
gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self),
(GstTaskFunction) gst_openjpeg_dec_loop, decoder, NULL);
(GstTaskFunction) gst_openjpeg_dec_loop, gst_object_ref (decoder),
gst_object_unref);
self->started = TRUE;
}
/* Make sure to release the base class stream lock, otherwise
Expand Down
2 changes: 1 addition & 1 deletion subprojects/gst-plugins-bad/ext/resindvd/gstmpegdemux.c
Original file line number Diff line number Diff line change
Expand Up @@ -2136,7 +2136,7 @@ gst_flups_demux_sink_activate_pull (GstPad * sinkpad, GstObject * parent,
GST_DEBUG ("pull mode activated");
demux->random_access = TRUE;
return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flups_demux_loop,
sinkpad, NULL);
gst_object_ref (sinkpad), gst_object_unref);
} else {
demux->random_access = FALSE;
return gst_pad_stop_task (sinkpad);
Expand Down
9 changes: 5 additions & 4 deletions subprojects/gst-plugins-bad/ext/sctp/gstsctpdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,8 @@ flush_srcpad (const GValue * item, gpointer user_data)
} else {
gst_data_queue_set_flushing (sctpdec_pad->packet_queue, FALSE);
gst_pad_start_task (GST_PAD (sctpdec_pad),
(GstTaskFunction) gst_sctp_data_srcpad_loop, sctpdec_pad, NULL);
(GstTaskFunction) gst_sctp_data_srcpad_loop,
gst_object_ref (sctpdec_pad), gst_object_unref);
}
}

Expand Down Expand Up @@ -552,8 +553,8 @@ gst_sctp_dec_src_event (GstPad * pad, GstSctpDec * self, GstEvent * event)

/* Unflush and start task again */
gst_data_queue_set_flushing (sctpdec_pad->packet_queue, FALSE);
gst_pad_start_task (pad, (GstTaskFunction) gst_sctp_data_srcpad_loop, pad,
NULL);
gst_pad_start_task (pad, (GstTaskFunction) gst_sctp_data_srcpad_loop,
gst_object_ref (pad), gst_object_unref);

return gst_pad_event_default (pad, GST_OBJECT (self), event);
}
Expand Down Expand Up @@ -634,7 +635,7 @@ get_pad_for_stream_id (GstSctpDec * self, guint16 stream_id)
GST_OBJECT_UNLOCK (self);

gst_pad_start_task (new_pad, (GstTaskFunction) gst_sctp_data_srcpad_loop,
new_pad, NULL);
gst_object_ref (new_pad), gst_object_unref);

gst_object_ref (new_pad);

Expand Down
6 changes: 4 additions & 2 deletions subprojects/gst-plugins-bad/ext/sctp/gstsctpenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,8 @@ gst_sctp_enc_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_READY_TO_PAUSED:
if (ret != GST_STATE_CHANGE_FAILURE)
gst_pad_start_task (self->src_pad,
(GstTaskFunction) gst_sctp_enc_srcpad_loop, self->src_pad, NULL);
(GstTaskFunction) gst_sctp_enc_srcpad_loop,
gst_object_ref (self->src_pad), gst_object_unref);
break;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
break;
Expand Down Expand Up @@ -820,7 +821,8 @@ gst_sctp_enc_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
self->src_ret = GST_FLOW_OK;
GST_OBJECT_UNLOCK (self);
gst_pad_start_task (self->src_pad,
(GstTaskFunction) gst_sctp_enc_srcpad_loop, self->src_pad, NULL);
(GstTaskFunction) gst_sctp_enc_srcpad_loop,
gst_object_ref (self->src_pad), gst_object_unref);

ret = gst_pad_event_default (pad, parent, event);
break;
Expand Down
5 changes: 3 additions & 2 deletions subprojects/gst-plugins-bad/ext/sndfile/gstsfdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,8 @@ gst_sf_dec_do_seek (GstSFDec * self, GstEvent * event)
gst_pad_push_event (self->srcpad, gst_event_new_segment (&seg));

gst_pad_start_task (self->sinkpad,
(GstTaskFunction) gst_sf_dec_loop, self, NULL);
(GstTaskFunction) gst_sf_dec_loop, gst_object_ref (self),
gst_object_unref);

GST_PAD_STREAM_UNLOCK (self->sinkpad);

Expand Down Expand Up @@ -459,7 +460,7 @@ gst_sf_dec_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
/* if we have a scheduler we can start the task */
GST_DEBUG_OBJECT (sinkpad, "start task");
res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_sf_dec_loop,
sinkpad, NULL);
gst_object_ref (sinkpad), gst_object_unref);
} else {
res = gst_pad_stop_task (sinkpad);
}
Expand Down
3 changes: 2 additions & 1 deletion subprojects/gst-plugins-bad/ext/sndfile/gstsfsink.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,8 @@ gst_sf_sink_activate_pull (GstBaseSink * basesink, gboolean active)
if (active) {
/* start task */
result = gst_pad_start_task (basesink->sinkpad,
(GstTaskFunction) gst_sf_sink_loop, basesink->sinkpad, NULL);
(GstTaskFunction) gst_sf_sink_loop, gst_object_ref (basesink->sinkpad),
gst_object_unref);
} else {
/* step 2, make sure streaming finishes */
result = gst_pad_stop_task (basesink->sinkpad);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1486,8 +1486,8 @@ static gboolean
gst_nonstream_audio_decoder_start_task (GstNonstreamAudioDecoder * dec)
{
if (!gst_pad_start_task (dec->srcpad,
(GstTaskFunction) gst_nonstream_audio_decoder_output_task, dec,
NULL)) {
(GstTaskFunction) gst_nonstream_audio_decoder_output_task,
gst_object_ref (dec), gst_object_unref)) {
GST_ERROR_OBJECT (dec, "could not start decoder output task");
return FALSE;
} else
Expand Down
6 changes: 4 additions & 2 deletions subprojects/gst-plugins-bad/gst-libs/gst/mse/gstmsesrc.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,8 @@ resume_all_streams (GstMseSrc * self)
GstPad *pad = GST_PAD (stream->pad);
if (active) {
clear_flushing (GST_MSE_SRC_PAD (pad));
gst_pad_start_task (pad, (GstTaskFunction) pad_task, pad, NULL);
gst_pad_start_task (pad, (GstTaskFunction) pad_task, gst_object_ref (pad),
gst_object_unref);
}
}
}
Expand Down Expand Up @@ -1111,7 +1112,8 @@ pad_activate_mode (GstMseSrcPad * pad, GstObject * parent, GstPadMode mode,
}

if (active) {
gst_pad_start_task (GST_PAD (pad), (GstTaskFunction) pad_task, pad, NULL);
gst_pad_start_task (GST_PAD (pad), (GstTaskFunction) pad_task,
gst_object_ref (pad), gst_object_unref);
} else {
set_flushing_and_signal (pad);
gst_media_source_track_flush (pad->track);
Expand Down
4 changes: 2 additions & 2 deletions subprojects/gst-plugins-bad/gst/aiff/aiffparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ gst_aiff_parse_perform_seek (GstAiffParse * aiff, GstEvent * event,
aiff->segment_running = TRUE;
if (!aiff->streaming) {
gst_pad_start_task (aiff->sinkpad, (GstTaskFunction) gst_aiff_parse_loop,
aiff->sinkpad, NULL);
gst_object_ref (aiff->sinkpad), gst_object_unref);
}

GST_PAD_STREAM_UNLOCK (aiff->sinkpad);
Expand Down Expand Up @@ -1821,7 +1821,7 @@ gst_aiff_parse_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
aiff->segment_running = TRUE;
res =
gst_pad_start_task (sinkpad, (GstTaskFunction) gst_aiff_parse_loop,
sinkpad, NULL);
gst_object_ref (sinkpad), gst_object_unref);
} else {
aiff->segment_running = FALSE;
res = gst_pad_stop_task (sinkpad);
Expand Down
18 changes: 12 additions & 6 deletions subprojects/gst-plugins-bad/gst/closedcaption/gstccconverter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1566,14 +1566,20 @@ can_generate_output (GstCCConverter * self)

/* compute the relative frame count for each */
if (!gst_util_fraction_multiply (self->in_fps_d, self->in_fps_n,
self->input_frames, 1, &input_frame_n, &input_frame_d))
/* we should never overflow */
g_assert_not_reached ();
self->input_frames, 1, &input_frame_n, &input_frame_d)) {
GST_ERROR_OBJECT (self,
"Couldn't get input rate, fps: %d/%d, input frames %d",
self->in_fps_n, self->in_fps_d, self->input_frames);
return FALSE;
}

if (!gst_util_fraction_multiply (self->out_fps_d, self->out_fps_n,
self->output_frames, 1, &output_frame_n, &output_frame_d))
/* we should never overflow */
g_assert_not_reached ();
self->output_frames, 1, &output_frame_n, &output_frame_d)) {
GST_ERROR_OBJECT (self,
"Couldn't get output rate, fps: %d/%d, output frames %d",
self->out_fps_n, self->out_fps_d, self->output_frames);
return FALSE;
}

output_time_cmp = gst_util_fraction_compare (input_frame_n, input_frame_d,
output_frame_n, output_frame_d);
Expand Down
Loading