[FFmpeg-devel] [PATCH] Added Turing codec to ffmpeg

Derek Buitenhuis derek.buitenhuis at gmail.com
Mon Nov 20 16:03:57 EET 2017


On 11/20/2017 10:35 AM, Matteo Naccari wrote:
> +enabled libturing         && require_pkg_config libturing libturing turing.h turing_version &&
> +                             { check_cpp_condition turing.h "TURING_API_VERSION > 1" ||
> +                               die "ERROR: libturing requires turing api version 2 or greater."; }

Why exactly is libturing's API version not correlated with its soversion?

> +#define MAX_OPTION_LENGTH 256

I probably asked this in a previous iteration, but why is there an
arbitrary limit?

> +        if (!(option_ctx->options)) {
> +            option_ctx->options = av_malloc(option_length + 1);
> +            if (!(option_ctx->options)) {
> +                return AVERROR(ENOMEM);
> +            }
> +        } else {
> +            temp_ptr = av_realloc(option_ctx->options, option_ctx->options_buffer_size + option_length + 1);
> +            if (!(temp_ptr)) {
> +                return AVERROR(ENOMEM);
> +            }
The if/else is redundant, since av_realloc can take a NULL pointer.

> +
> +    snprintf(option_string, MAX_OPTION_LENGTH, "--input-res=%dx%d", avctx->width, avctx->height);
> +    if (error_code = add_option(option_string, &encoder_options)) {
> +        goto fail;
> +    }

Since the return value for snprintf is not checked, won't this lead to mangled arguments if
its truncated? Same for below
> +
> +    if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
> +        turing_bitstream const *bitstream;
> +        bitstream = turing_encode_headers(ctx->encoder);
> +        if (bitstream->size <= 0) {
> +            av_log(avctx, AV_LOG_ERROR, "Failed to encode headers.\n");
> +            turing_destroy_encoder(ctx->encoder);

Shouldn't calls to turing_destroy_encoder (or preferably libturing_encode_close) be
handled at the fail label rather than all over the place?

> +    av_freep(&encoder_options.argv);
> +    av_freep(&encoder_options.options);
> +    return 0;
> +
> +fail:
> +    av_log(avctx, AV_LOG_ERROR, "Error while initialising the Turing codec.\n");

Redundant generic log.

> +    ret = ff_alloc_packet2(avctx, pkt, output->bitstream.size, 0);
> +    if (ret < 0) {
> +        av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
> +        return ret;
> +    }
> +
> +    memcpy(pkt->data, output->bitstream.p, output->bitstream.size);

Is there no way to support AV_CODEC_FLAG_GLOBAL_HEADER directly (see libx265.c)?

- Derek


More information about the ffmpeg-devel mailing list