[vlc-devel] [PATCH] decoder: make AbortPictures() impl-dependant
Romain Vimont
rom1v at videolabs.io
Tue Sep 24 11:23:08 CEST 2019
The API function decoder_AbortPictures() assumed a specific private
implementation (the one from input/decoder.c), so calling it with
another decoder implementation was undefined.
Instead, expose this function in decoder owner ops, and delegate the
call to its specific implementation.
---
include/vlc_codec.h | 2 ++
src/input/decoder.c | 3 ++-
src/input/decoder_helpers.c | 7 +++++++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/include/vlc_codec.h b/include/vlc_codec.h
index 28a65846d9..25e516c5f0 100644
--- a/include/vlc_codec.h
+++ b/include/vlc_codec.h
@@ -53,6 +53,8 @@ struct decoder_owner_callbacks
/* cf. decoder_NewPicture, can be called from any decoder thread */
picture_t* (*buffer_new)( decoder_t * );
+ /* cf. decoder_AbortPictures */
+ void (*abort_pictures)( decoder_t *, bool b_abort );
/* cf.decoder_QueueVideo */
void (*queue)( decoder_t *, picture_t * );
/* cf.decoder_QueueCC */
diff --git a/src/input/decoder.c b/src/input/decoder.c
index 57c9de6a1e..ffd0467680 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -767,7 +767,7 @@ static void RequestReload( struct decoder_owner *p_owner )
atomic_compare_exchange_strong( &p_owner->reload, &expected, RELOAD_DECODER );
}
-void decoder_AbortPictures( decoder_t *p_dec, bool b_abort )
+static void DecoderThread_AbortPictures( decoder_t *p_dec, bool b_abort )
{
struct decoder_owner *p_owner = dec_get_owner( p_dec );
@@ -1703,6 +1703,7 @@ static const struct decoder_owner_callbacks dec_video_cbs =
.video = {
.format_update = ModuleThread_UpdateVideoFormat,
.buffer_new = ModuleThread_NewVideoBuffer,
+ .abort_pictures = DecoderThread_AbortPictures,
.queue = ModuleThread_QueueVideo,
.queue_cc = ModuleThread_QueueCc,
.get_display_date = ModuleThread_GetDisplayDate,
diff --git a/src/input/decoder_helpers.c b/src/input/decoder_helpers.c
index 6d5b0050ed..d2c9a82c38 100644
--- a/src/input/decoder_helpers.c
+++ b/src/input/decoder_helpers.c
@@ -93,6 +93,13 @@ picture_t *decoder_NewPicture( decoder_t *dec )
return dec->cbs->video.buffer_new( dec );
}
+void decoder_AbortPictures(decoder_t *dec, bool abort)
+{
+ vlc_assert(dec->fmt_in.i_cat == VIDEO_ES && dec->cbs);
+ if (dec->cbs->video.abort_pictures)
+ dec->cbs->video.abort_pictures(dec, abort);
+}
+
struct vlc_decoder_device_priv
{
struct vlc_decoder_device device;
--
2.23.0
More information about the vlc-devel
mailing list