From: Niklas Haas <ffmpeg@haasn.xyz>
To: ffmpeg-devel@ffmpeg.org
Cc: Niklas Haas <git@haasn.dev>
Subject: [FFmpeg-devel] [PATCH v2 16/17] fftools/ffmpeg_filter: propagate codec yuv metadata to filters
Date: Mon, 8 Apr 2024 14:57:20 +0200
Message-ID: <20240408125950.53472-17-ffmpeg@haasn.xyz> (raw)
In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz>
From: Niklas Haas <git@haasn.dev>
To convert between color spaces/ranges, if needed by the codec
properties.
---
fftools/ffmpeg_filter.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 83259416a68..a40c6f381f2 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -193,6 +193,8 @@ typedef struct OutputFilterPriv {
int width, height;
int sample_rate;
AVChannelLayout ch_layout;
+ enum AVColorSpace color_space;
+ enum AVColorRange color_range;
// time base in which the output is sent to our downstream
// does not need to match the filtersink's timebase
@@ -208,6 +210,8 @@ typedef struct OutputFilterPriv {
const int *formats;
const AVChannelLayout *ch_layouts;
const int *sample_rates;
+ const enum AVColorSpace *color_spaces;
+ const enum AVColorRange *color_ranges;
AVRational enc_timebase;
// offset for output timestamps, in AV_TIME_BASE_Q
@@ -379,6 +383,12 @@ DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats,
DEF_CHOOSE_FORMAT(sample_rates, int, sample_rate, sample_rates, 0,
"%d", )
+DEF_CHOOSE_FORMAT(color_spaces, enum AVColorSpace, color_space, color_spaces,
+ AVCOL_SPC_UNSPECIFIED, "%s", av_color_space_name);
+
+DEF_CHOOSE_FORMAT(color_ranges, enum AVColorRange, color_range, color_ranges,
+ AVCOL_RANGE_UNSPECIFIED, "%s", av_color_range_name);
+
static void choose_channel_layouts(OutputFilterPriv *ofp, AVBPrint *bprint)
{
if (av_channel_layout_check(&ofp->ch_layout)) {
@@ -607,6 +617,8 @@ static OutputFilter *ofilter_alloc(FilterGraph *fg)
ofilter->graph = fg;
ofp->format = -1;
ofp->index = fg->nb_outputs - 1;
+ ofp->color_space = AVCOL_SPC_UNSPECIFIED;
+ ofp->color_range = AVCOL_RANGE_UNSPECIFIED;
return ofilter;
}
@@ -789,6 +801,24 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost,
ofp->formats = mjpeg_formats;
}
}
+ if (ost->enc_ctx->colorspace != AVCOL_SPC_UNSPECIFIED) {
+ ofp->color_space = ost->enc_ctx->colorspace;
+ } else {
+ ret = avcodec_get_supported_config(ost->enc_ctx, NULL,
+ AV_CODEC_CONFIG_COLOR_SPACE, 0,
+ (const void **) &ofp->color_spaces);
+ if (ret < 0)
+ return ret;
+ }
+ if (ost->enc_ctx->color_range != AVCOL_RANGE_UNSPECIFIED) {
+ ofp->color_range = ost->enc_ctx->color_range;
+ } else {
+ ret = avcodec_get_supported_config(ost->enc_ctx, NULL,
+ AV_CODEC_CONFIG_COLOR_RANGE, 0,
+ (const void **) &ofp->color_ranges);
+ if (ret < 0)
+ return ret;
+ }
fgp->disable_conversions |= ost->keep_pix_fmt;
@@ -1347,6 +1377,8 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph,
av_assert0(!ost->keep_pix_fmt || (!ofp->format && !ofp->formats));
av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED);
choose_pix_fmts(ofp, &bprint);
+ choose_color_spaces(ofp, &bprint);
+ choose_color_ranges(ofp, &bprint);
if (!av_bprint_is_complete(&bprint))
return AVERROR(ENOMEM);
if (bprint.len) {
@@ -1777,6 +1809,8 @@ static int configure_filtergraph(FilterGraph *fg, FilterGraphThread *fgt)
ofp->width = av_buffersink_get_w(sink);
ofp->height = av_buffersink_get_h(sink);
+ ofp->color_space = av_buffersink_get_colorspace(sink);
+ ofp->color_range = av_buffersink_get_color_range(sink);
// If the timing parameters are not locked yet, get the tentative values
// here but don't lock them. They will only be used if no output frames
--
2.44.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-04-08 13:01 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-08 12:57 [FFmpeg-devel] [PATCH v2 00/17] Add avcodec_get_supported_config() Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 01/17] avcodec/internal: add FFCodec.color_ranges Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 02/17] avcodec: add avcodec_get_supported_config() Niklas Haas
2024-08-01 1:48 ` Andreas Rheinhardt
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 03/17] avcodec/encode: switch to avcodec_get_supported_config() Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 04/17] avcodec/allcodecs: add backcompat for new config API Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 05/17] avcodec/libx265: switch to get_supported_config() Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 06/17] avcodec/libvpxenc: " Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 07/17] avcodec/libaomenc: " Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 08/17] avcodec/mjpegenc: " Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 09/17] avcodec/codec_internal: nuke init_static_data() Niklas Haas
2024-04-09 13:00 ` Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 10/17] fftools/opt_common: switch to avcodec_get_supported_config() Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 11/17] fftools: drop unused/hacky macros Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 12/17] fftools/ffmpeg_mux_init: switch to avcodec_get_supported_config() Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 13/17] fftools/ffmpeg_filter: set strict_std_compliance Niklas Haas
2024-04-09 13:01 ` Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 14/17] fftools/ffmpeg_filter: simplify choose_pix_fmts Niklas Haas
2024-04-10 1:13 ` Michael Niedermayer
2024-04-10 11:23 ` Niklas Haas
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 15/17] fftools/ffmpeg_filter: switch to avcodec_get_supported_config() Niklas Haas
2024-04-08 12:57 ` Niklas Haas [this message]
2024-04-10 1:25 ` [FFmpeg-devel] [PATCH v2 16/17] fftools/ffmpeg_filter: propagate codec yuv metadata to filters Michael Niedermayer
2024-04-10 10:29 ` Niklas Haas
2024-04-10 10:31 ` Niklas Haas
2024-04-10 12:59 ` Michael Niedermayer
2024-04-10 13:10 ` Niklas Haas
2024-04-10 13:12 ` Nicolas George
2024-04-11 7:45 ` Paul B Mahol
2024-04-08 12:57 ` [FFmpeg-devel] [PATCH v2 17/17] fftools/ffmpeg_filter: remove YUVJ hack Niklas Haas
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=20240408125950.53472-17-ffmpeg@haasn.xyz \
--to=ffmpeg@haasn.xyz \
--cc=ffmpeg-devel@ffmpeg.org \
--cc=git@haasn.dev \
/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