From: Anton Khirnov <anton@khirnov.net>
To: ffmpeg-devel@ffmpeg.org
Subject: [FFmpeg-devel] [PATCH 04/10] fftools/ffmpeg_filter: pass sub2video canvas size through InputFilterOptions
Date: Wed, 14 Feb 2024 19:24:29 +0100
Message-ID: <20240214182435.31380-4-anton@khirnov.net> (raw)
In-Reply-To: <20240214182435.31380-1-anton@khirnov.net>
Rather than read them directly from InputStream.
This is a step towards avoiding the assumption that filtergraph inputs
are always fed by demuxers.
---
fftools/ffmpeg.h | 7 +++----
fftools/ffmpeg_demux.c | 41 ++++++++++++++++++++---------------------
fftools/ffmpeg_filter.c | 21 ++++++++++-----------
3 files changed, 33 insertions(+), 36 deletions(-)
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index 2c1ad714b6..6db7b8a9c4 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -255,6 +255,9 @@ typedef struct InputFilterOptions {
int64_t trim_end_us;
uint8_t *name;
+
+ int sub2video_width;
+ int sub2video_height;
} InputFilterOptions;
typedef struct InputFilter {
@@ -366,10 +369,6 @@ typedef struct InputStream {
int fix_sub_duration;
- struct sub2video {
- int w, h;
- } sub2video;
-
/* decoded data from this stream goes into all those filters
* currently video and audio only */
InputFilter **filters;
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 4cbad80e17..87ed8225c2 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -992,6 +992,26 @@ int ist_filter_add(InputStream *ist, InputFilter *ifilter, int is_simple,
return ret;
if (ist->par->codec_type == AVMEDIA_TYPE_SUBTITLE) {
+ /* Compute the size of the canvas for the subtitles stream.
+ If the subtitles codecpar has set a size, use it. Otherwise use the
+ maximum dimensions of the video streams in the same file. */
+ opts->sub2video_width = ist->par->width;
+ opts->sub2video_height = ist->par->height;
+ if (!(opts->sub2video_width && opts->sub2video_height)) {
+ for (int j = 0; j < d->f.nb_streams; j++) {
+ AVCodecParameters *par1 = d->f.streams[j]->par;
+ if (par1->codec_type == AVMEDIA_TYPE_VIDEO) {
+ opts->sub2video_width = FFMAX(opts->sub2video_width, par1->width);
+ opts->sub2video_height = FFMAX(opts->sub2video_height, par1->height);
+ }
+ }
+ }
+
+ if (!(opts->sub2video_width && opts->sub2video_height)) {
+ opts->sub2video_width = FFMAX(opts->sub2video_width, 720);
+ opts->sub2video_height = FFMAX(opts->sub2video_height, 576);
+ }
+
if (!d->pkt_heartbeat) {
d->pkt_heartbeat = av_packet_alloc();
if (!d->pkt_heartbeat)
@@ -1357,27 +1377,6 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st)
return ret;
}
}
-
- /* Compute the size of the canvas for the subtitles stream.
- If the subtitles codecpar has set a size, use it. Otherwise use the
- maximum dimensions of the video streams in the same file. */
- ist->sub2video.w = par->width;
- ist->sub2video.h = par->height;
- if (!(ist->sub2video.w && ist->sub2video.h)) {
- for (int j = 0; j < ic->nb_streams; j++) {
- AVCodecParameters *par1 = ic->streams[j]->codecpar;
- if (par1->codec_type == AVMEDIA_TYPE_VIDEO) {
- ist->sub2video.w = FFMAX(ist->sub2video.w, par1->width);
- ist->sub2video.h = FFMAX(ist->sub2video.h, par1->height);
- }
- }
- }
-
- if (!(ist->sub2video.w && ist->sub2video.h)) {
- ist->sub2video.w = FFMAX(ist->sub2video.w, 720);
- ist->sub2video.h = FFMAX(ist->sub2video.h, 576);
- }
-
break;
}
case AVMEDIA_TYPE_ATTACHMENT:
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 0f57035104..d182f3ab2e 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -689,6 +689,16 @@ static int ifilter_bind_ist(InputFilter *ifilter, InputStream *ist)
ifp->sub2video.frame = av_frame_alloc();
if (!ifp->sub2video.frame)
return AVERROR(ENOMEM);
+
+ ifp->width = ifp->opts.sub2video_width;
+ ifp->height = ifp->opts.sub2video_height;
+
+ /* rectangles are AV_PIX_FMT_PAL8, but we have no guarantee that the
+ palettes for all rectangles are identical or compatible */
+ ifp->format = AV_PIX_FMT_RGB32;
+
+ av_log(fgp, AV_LOG_VERBOSE, "sub2video: using %dx%d canvas\n",
+ ifp->width, ifp->height);
}
return 0;
@@ -1829,17 +1839,6 @@ int ifilter_parameters_from_dec(InputFilter *ifilter, const AVCodecContext *dec)
ret = av_channel_layout_copy(&ifp->fallback.ch_layout, &dec->ch_layout);
if (ret < 0)
return ret;
- } else {
- // for subtitles (i.e. sub2video) we set the actual parameters,
- // rather than just fallback
- ifp->width = ifp->ist->sub2video.w;
- ifp->height = ifp->ist->sub2video.h;
-
- /* rectangles are AV_PIX_FMT_PAL8, but we have no guarantee that the
- palettes for all rectangles are identical or compatible */
- ifp->format = AV_PIX_FMT_RGB32;
-
- av_log(NULL, AV_LOG_VERBOSE, "sub2video: using %dx%d canvas\n", ifp->width, ifp->height);
}
return 0;
--
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-02-14 18:25 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-14 18:24 [FFmpeg-devel] [PATCH 01/10] fftools/ffmpeg_filter: stop taking display matrix from global side data Anton Khirnov
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 02/10] fftools/ffmpeg_filter: compute input trim start/end in demuxer Anton Khirnov
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 03/10] fftools/ffmpeg_filter: accept a name from its upstream input Anton Khirnov
2024-02-14 18:24 ` Anton Khirnov [this message]
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 05/10] fftools/ffmpeg_filter: pass autorotate/reinit flags through InputFilterOptions Anton Khirnov
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 06/10] fftools/ffmpeg_filter: pass framerate " Anton Khirnov
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 07/10] fftools/ffmpeg_filter: refactor setting input timebase Anton Khirnov
2024-02-15 1:58 ` Michael Niedermayer
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 08/10] fftools/ffmpeg_filter: drop unused InputFilterPriv.ist Anton Khirnov
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 09/10] fftools/ffmpeg: move subtitle helpers to ffmpeg_dec, their only user Anton Khirnov
2024-02-14 18:24 ` [FFmpeg-devel] [PATCH 10/10] fftools/ffmpeg: cosmetics, vertically align structs 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=20240214182435.31380-4-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