[FFmpeg-devel] [PATCH 1/2] avcodec/libaomenc: support setting chroma sample location
Mark Thompson
sw at jkqxz.net
Tue Sep 18 02:02:54 EEST 2018
On 16/09/18 19:29, James Almer wrote:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavcodec/libaomenc.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c
> index 6a79d9b873..55d50ded28 100644
> --- a/libavcodec/libaomenc.c
> +++ b/libavcodec/libaomenc.c
> @@ -76,6 +76,7 @@ static const char *const ctlidstr[] = {
> [AOME_SET_ENABLEAUTOALTREF] = "AOME_SET_ENABLEAUTOALTREF",
> [AOME_SET_STATIC_THRESHOLD] = "AOME_SET_STATIC_THRESHOLD",
> [AV1E_SET_COLOR_RANGE] = "AV1E_SET_COLOR_RANGE",
> + [AV1E_SET_CHROMA_SAMPLE_POSITION] = "AV1E_SET_CHROMA_SAMPLE_POSITION",
> [AV1E_SET_COLOR_PRIMARIES] = "AV1E_SET_COLOR_PRIMARIES",
> [AV1E_SET_MATRIX_COEFFICIENTS] = "AV1E_SET_MATRIX_COEFFICIENTS",
> [AV1E_SET_TRANSFER_CHARACTERISTICS] = "AV1E_SET_TRANSFER_CHARACTERISTICS",
> @@ -284,6 +285,22 @@ static void set_color_range(AVCodecContext *avctx)
> codecctl_int(avctx, AV1E_SET_COLOR_RANGE, aom_cr);
> }
>
> +static void set_chroma_location(AVCodecContext *avctx)
> +{
> + enum aom_chroma_sample_position aom_cps;
> + switch (avctx->chroma_sample_location) {
> + case AVCHROMA_LOC_UNSPECIFIED: aom_cps = AOM_CSP_UNKNOWN; break;
> + case AVCHROMA_LOC_LEFT: aom_cps = AOM_CSP_VERTICAL; break;
> + case AVCHROMA_LOC_TOPLEFT: aom_cps = AOM_CSP_COLOCATED; break;
> + default:
> + av_log(avctx, AV_LOG_WARNING, "Unsupported chroma sample location (%d)\n",
> + avctx->chroma_sample_location);
> + return;
> + }
> +
> + codecctl_int(avctx, AV1E_SET_CHROMA_SAMPLE_POSITION, aom_cps);
> +}
I think you should only set this if the input is 4:2:0, since the value is only used in that case.
> +
> static av_cold int aom_init(AVCodecContext *avctx,
> const struct aom_codec_iface *iface)
> {
> @@ -452,6 +469,7 @@ static av_cold int aom_init(AVCodecContext *avctx,
> codecctl_int(avctx, AV1E_SET_COLOR_PRIMARIES, avctx->color_primaries);
> codecctl_int(avctx, AV1E_SET_MATRIX_COEFFICIENTS, avctx->colorspace);
> codecctl_int(avctx, AV1E_SET_TRANSFER_CHARACTERISTICS, avctx->color_trc);
> + set_chroma_location(avctx);
> set_color_range(avctx);
>
> // provide dummy value to initialize wrapper, values will be updated each _encode()
>
Otherwise LGTM.
It's somewhat unfortunate that the obvious way of encoding a sequence of JPEGs will always hit the warning, but it is correct...
Thanks,
- Mark
More information about the ffmpeg-devel
mailing list