mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-08 10:31:05 +00:00
flacdec: don't use pad_alloc when decoding while seeking. Fixes #579422
This commit is contained in:
parent
99efbfcf4d
commit
71acf2e900
1 changed files with 16 additions and 7 deletions
|
@ -908,10 +908,12 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
|
|||
}
|
||||
|
||||
if (flacdec->close_segment) {
|
||||
GST_DEBUG_OBJECT (flacdec, "pushing close segment");
|
||||
gst_pad_push_event (flacdec->srcpad, flacdec->close_segment);
|
||||
flacdec->close_segment = NULL;
|
||||
}
|
||||
if (flacdec->start_segment) {
|
||||
GST_DEBUG_OBJECT (flacdec, "pushing start segment");
|
||||
gst_pad_push_event (flacdec->srcpad, flacdec->start_segment);
|
||||
flacdec->start_segment = NULL;
|
||||
}
|
||||
|
@ -935,6 +937,12 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
|
|||
flacdec->pending_samples = 0;
|
||||
}
|
||||
|
||||
if (flacdec->seeking) {
|
||||
GST_DEBUG_OBJECT (flacdec, "a pad_alloc would block here, do normal alloc");
|
||||
outbuf = gst_buffer_new_and_alloc (samples * channels * (width / 8));
|
||||
outbuf->offset = flacdec->segment.last_stop;
|
||||
} else {
|
||||
GST_LOG_OBJECT (flacdec, "alloc_buffer_and_set_caps");
|
||||
ret = gst_pad_alloc_buffer_and_set_caps (flacdec->srcpad,
|
||||
flacdec->segment.last_stop, samples * channels * (width / 8),
|
||||
GST_PAD_CAPS (flacdec->srcpad), &outbuf);
|
||||
|
@ -944,6 +952,7 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
|
|||
gst_flow_get_name (ret));
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
if (flacdec->cur_granulepos != GST_BUFFER_OFFSET_NONE) {
|
||||
/* this should be fine since it should be one flac frame per ogg packet */
|
||||
|
|
Loading…
Reference in a new issue