From: Anton Khirnov <anton@khirnov.net> To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH 28/31] fftools/ffmpeg_dec: eliminate all remaining InputStream uses Date: Wed, 24 Jan 2024 09:16:58 +0100 Message-ID: <20240124081702.4759-28-anton@khirnov.net> (raw) In-Reply-To: <20240124081702.4759-1-anton@khirnov.net> Previously, the demuxer would register decoder with the scheduler, using InputStream as opaque, and pass the scheduling index to the decoder. Now the registration is done by the decoder itself, using DecoderPriv as opaque, and the scheduling index is returned to demuxer from dec_open(). decoder_thread() then no longer needs to be accessed from outside of ffmpeg_dec and can be made static. --- fftools/ffmpeg.h | 7 +++++-- fftools/ffmpeg_dec.c | 16 +++++++++------- fftools/ffmpeg_demux.c | 21 +++++++++------------ 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index c8cba72006..4881174632 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -290,6 +290,7 @@ enum DecoderFlags { #if FFMPEG_OPT_TOP DECODER_FLAG_TOP_FIELD_FIRST = (1 << 3), #endif + DECODER_FLAG_SEND_END_TS = (1 << 4), }; typedef struct DecoderOpts { @@ -756,8 +757,11 @@ AVBufferRef *hw_device_for_filter(void); /** * @param dec_opts Dictionary filled with decoder options. Its ownership * is transferred to the decoder. + * + * @retval ">=0" non-negative scheduler index on success + * @retval "<0" an error code on failure */ -int dec_open(Decoder **pdec, Scheduler *sch, unsigned sch_idx, +int dec_open(Decoder **pdec, Scheduler *sch, AVDictionary **dec_opts, const DecoderOpts *o); void dec_free(Decoder **pdec); @@ -847,7 +851,6 @@ const char *opt_match_per_type_str(const SpecifierOptList *sol, char mediatype); void *muxer_thread(void *arg); -void *decoder_thread(void *arg); void *encoder_thread(void *arg); #endif /* FFTOOLS_FFMPEG_H */ diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c index 3610256f31..57017faa59 100644 --- a/fftools/ffmpeg_dec.c +++ b/fftools/ffmpeg_dec.c @@ -645,10 +645,9 @@ fail: return AVERROR(ENOMEM); } -void *decoder_thread(void *arg) +static void *decoder_thread(void *arg) { - InputStream *ist = arg; - DecoderPriv *dp = dp_from_dec(ist->decoder); + DecoderPriv *dp = arg; DecThreadContext dt; int ret = 0, input_status = 0; @@ -692,7 +691,7 @@ void *decoder_thread(void *arg) break; /* report last frame duration to the scheduler */ - if (ist->dec->type == AVMEDIA_TYPE_AUDIO) { + if (dp->dec_ctx->codec_type == AVMEDIA_TYPE_AUDIO) { dt.pkt->pts = dp->last_frame_pts + dp->last_frame_duration_est; dt.pkt->time_base = dp->last_frame_tb; } @@ -940,7 +939,7 @@ static const AVClass dec_class = { .item_name = dec_item_name, }; -int dec_open(Decoder **pdec, Scheduler *sch, unsigned sch_idx, +int dec_open(Decoder **pdec, Scheduler *sch, AVDictionary **dec_opts, const DecoderOpts *o) { DecoderPriv *dp; @@ -953,8 +952,11 @@ int dec_open(Decoder **pdec, Scheduler *sch, unsigned sch_idx, if (ret < 0) return ret; + ret = sch_add_dec(sch, decoder_thread, dp, o->flags & DECODER_FLAG_SEND_END_TS); + if (ret < 0) + return ret; dp->sch = sch; - dp->sch_idx = sch_idx; + dp->sch_idx = ret; dp->flags = o->flags; dp->dec.class = &dec_class; @@ -1036,7 +1038,7 @@ int dec_open(Decoder **pdec, Scheduler *sch, unsigned sch_idx, *pdec = &dp->dec; - return 0; + return dp->sch_idx; fail: dec_free((Decoder**)dp); return ret; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 5178bcbce4..0ccb05b1d0 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -895,18 +895,9 @@ static int ist_use(InputStream *ist, int decoding_needed) if (decoding_needed && ds->sch_idx_dec < 0) { int is_audio = ist->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO; - ret = sch_add_dec(d->sch, decoder_thread, ist, d->loop && is_audio); - if (ret < 0) - return ret; - ds->sch_idx_dec = ret; - - ret = sch_connect(d->sch, SCH_DSTREAM(d->f.index, ds->sch_idx_stream), - SCH_DEC(ds->sch_idx_dec)); - if (ret < 0) - return ret; - ds->dec_opts.flags = (!!ist->fix_sub_duration * DECODER_FLAG_FIX_SUB_DURATION) | - (!!(d->f.ctx->iformat->flags & AVFMT_NOTIMESTAMPS) * DECODER_FLAG_TS_UNRELIABLE) + (!!(d->f.ctx->iformat->flags & AVFMT_NOTIMESTAMPS) * DECODER_FLAG_TS_UNRELIABLE) | + (!!(d->loop && is_audio) * DECODER_FLAG_SEND_END_TS) #if FFMPEG_OPT_TOP | ((ist->top_field_first >= 0) * DECODER_FLAG_TOP_FIELD_FIRST) #endif @@ -935,10 +926,16 @@ static int ist_use(InputStream *ist, int decoding_needed) ds->dec_opts.log_parent = ist; - ret = dec_open(&ist->decoder, d->sch, ds->sch_idx_dec, + ret = dec_open(&ist->decoder, d->sch, &ist->decoder_opts, &ds->dec_opts); if (ret < 0) return ret; + ds->sch_idx_dec = ret; + + ret = sch_connect(d->sch, SCH_DSTREAM(d->f.index, ds->sch_idx_stream), + SCH_DEC(ds->sch_idx_dec)); + if (ret < 0) + return ret; d->have_audio_dec |= is_audio; } -- 2.42.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2024-01-24 8:19 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-01-24 8:16 [FFmpeg-devel] [PATCH 01/31] fftools/ffmpeg_dec: split Decoder into a private and public part Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 02/31] fftools/ffmpeg_dec: export subtitle_header in Decoder Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 03/31] fftools/ffmpeg_filter: consolidate decoder/filter type checks Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 04/31] fftools/ffmpeg: make decoding AVCodecContext private to the decoder Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 05/31] fftools/ffmpeg_dec: add an AVClass to Decoder Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 06/31] fftools/ffmpeg_dec: pass decoder options as an argument to dec_open() Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 07/31] fftools/ffmpeg_dec: move decoding counters from InputStream to Decoder Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 08/31] fftools/ffmpeg_dec: drop useless and racy code Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 09/31] fftools/ffmpeg_dec: drop a useless log message Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 10/31] fftools/ffmpeg: move decoder existence check to a more appropriate place Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 11/31] fftools/ffmpeg_dec: override video SAR with AVCodecParameters value Anton Khirnov 2024-03-24 22:09 ` Michael Niedermayer 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 12/31] fftools/ffmpeg_dec: stop accesing InputStream.fix_sub_duration Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 13/31] fftools/ffmpeg: refactor disabling decoder threading for attached pictures Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 14/31] fftools/ffmpeg_dec: replace InputFile.format_nots with a decoder flag Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 15/31] fftools/ffmpeg: move hwaccel_retrieve_data() from ffmpeg_hw to ffmpeg_dec Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 16/31] fftools/ffmpeg_dec: pass hwaccel options to the decoder in a separate struct Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 17/31] fftools/ffmpeg_dec: move flags to DecoderOpts Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 18/31] fftools/ffmpeg_dec: pass forced/estimated framerate though DecoderOpts Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 19/31] fftools/ffmpeg_dec: move setting compute_edt to demuxer Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 20/31] fftools/ffmpeg_dec: pass input timebase through DecoderOpts Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 21/31] fftools/ffmpeg_dec: pass top_field_first " Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 22/31] fftools/ffmpeg_dec: pass decoder name " Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 23/31] fftools/ffmpeg_dec: eliminate InputStream use in hw_device_setup_for_decode() Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 24/31] fftools/ffmpeg_dec: pass AVCodec through DecoderOpts Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 25/31] fftools/ffmpeg_dec: pass AVCodecParameters " Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 26/31] fftools/ffmpeg_dec: remove unnecessary InputStream arguments Anton Khirnov 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 27/31] fftools/ffmpeg_dec: stop passing InputStream to dec_open() Anton Khirnov 2024-01-25 1:19 ` Michael Niedermayer 2024-01-28 9:40 ` [FFmpeg-devel] [PATCH v2 " Anton Khirnov 2024-01-24 8:16 ` Anton Khirnov [this message] 2024-01-24 8:16 ` [FFmpeg-devel] [PATCH 29/31] fftools/ffmpeg: make InputStream.decoding_needed private to demuxer Anton Khirnov 2024-01-24 8:17 ` [FFmpeg-devel] [PATCH 30/31] fftools/ffmpeg: make InputStream.decoder_opts " Anton Khirnov 2024-01-24 8:17 ` [FFmpeg-devel] [PATCH 31/31] fftools/ffmpeg: cosmetics, vertically align Input{File, Stream} Anton Khirnov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20240124081702.4759-28-anton@khirnov.net \ --to=anton@khirnov.net \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git