From patchwork Wed Mar 30 17:43:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 35082 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp934030pzb; Wed, 30 Mar 2022 10:41:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyym8lRkqSwOG707ZNqxwXNcAdamq4x3JlSdJ5Z2EGgyVjU2Mq98gXxq4sPB9aA9GBo/YIM X-Received: by 2002:aa7:c3d6:0:b0:419:2370:4856 with SMTP id l22-20020aa7c3d6000000b0041923704856mr12211142edr.180.1648662088792; Wed, 30 Mar 2022 10:41:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648662088; cv=none; d=google.com; s=arc-20160816; b=ooQ6ORqgh782Vlmxn/AVWawT0ucFOP4jrnQ8QU0EJLIbTjDvVRH0VHu+0eRc1f1KZW UYoNwdZwAYm0KFP9xY99zGWNka/LITXPVGHhPp6BFGY8EMhgTJIY/TMifYoq1nvOhnBq te5NuXxhxIjm0ds8EQreNtSnHl3NLWI2qa+bkTTHRieJ+gQescVcp7W9L2tYzO0An8pU q5HD7PKpUVvgFzyWiQFzOvLEM06Zb1E64vuRAIf5xP3dWIh7XTxKXSx1vbV8Ed2P/LLL 3w64+BwO7QcPhD83ZuxjB9cfQSNGRkNYSkmqMy7XEzvolgkeFjjhWi2zgPCta7/PvCMD n58A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=zBpxXFl3c8cfVzjRn4RVISGkhN5OuOClYKBaguhd0+8=; b=xZBI1C11JxYESckoXrJeULqBJZNiCqUhlZoVUFU04s8ekuiNlGp2BWZffwfcJxi7Rn y9qwKoJtskcu31y/Php6jQge1JgT34A6v89V4YdJFaFdz993vBrY73smGEms3RnQAjWq 9tFdnowiCJpj+/tNSNrSfjgcVvsdsirHUlrKXpdYOcMJg2n4EZgDW6Nw+a5AxUmCQkMw 62mluOn3ObZK9p7B0PDEkUp3nRXhF8GIAW1W7mRwRjpG6/ddaxfsRMe9Yyqx4YU03r1x 3xNJYJZd2PQjwdyVjHtyETtN+1+fByuRilL4E0oVKabEhcOSGEqiXYxq6yTWJuwx7e3v MoBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=J3EmUAtG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l2-20020a1709060cc200b006df885aadadsi23338953ejh.109.2022.03.30.10.41.28; Wed, 30 Mar 2022 10:41:28 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=J3EmUAtG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 47D0E68B318; Wed, 30 Mar 2022 20:41:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B46B068B294 for ; Wed, 30 Mar 2022 20:41:18 +0300 (EEST) Received: by mail-wm1-f47.google.com with SMTP id n35so12722418wms.5 for ; Wed, 30 Mar 2022 10:41:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=rA/mjpPq11CaOBcUld/b6rV7aTrfUbJYDKlZhtClUH0=; b=J3EmUAtGltTcy4ZP9HTPAGqbmRTkXyM4pN/clfw40ziuWyHTqiIqeyePLOCEXorq1s Kz9VrH5JE0w5hFm78Xr2MbGzA/Y7YKM6UquhCKP1oL9LxN3C2msIW50CkeCNtEiQSilr DBXgn5g3vuAuMoCzFcufTiAJdeG4MytZ5rvA7b5enIrU9ACZsmY0y4qDErvbqfFG8v3F GcMR9ensHnkWDwgrLFK5ZsF3LXj9ZOpcupb8vUcI17hFc4/Kom+EOs42oPqzeQBWCYXx t6QkpZ4m2oA3hfTLce4BNAYhuOCYFDABFiCQkJ/ziDJJd0cEoeugG3PloHBDfA/Gh96t Bb2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=rA/mjpPq11CaOBcUld/b6rV7aTrfUbJYDKlZhtClUH0=; b=m2EbwSl2NPuxEIFXIHQrUflQ5fBrUXKshFyCIGvMgmlLNiucb2lGrXPfopnl5VVgRb BRfs7dzuNgfZHCU0YSf7lMyiclCiYtvipMX/+gBwfDk6Y/gTBqqLktpn3+bCYS8Sh78W OmvXU1ICqlOtkelSEm9CaU8BLESc0Ldt4gFeCd9O9JALC13ad4lQVn/ElXCm4xltZ4Tw jIHQLJMM2XCT2ivcvtF46n94qFxcBAVvgOWnorTH1IpBjgJcucfmcLSJCvf6euk7VG93 cGdwKG1c3dsRYHYxJlOrJNYtbHL3z7GMwOJPYI2RniIrzOv/YrY/x7/L+qe1Rc47wKf1 SmXg== X-Gm-Message-State: AOAM532qSggHn08bGaaIUSGxzMBoeTthwziEZx68gCdElnepjLSsYliz q0XAe3IKwr2MMI0xHgHpuaqX8gyC81U= X-Received: by 2002:a7b:c1d3:0:b0:38c:5b15:de91 with SMTP id a19-20020a7bc1d3000000b0038c5b15de91mr577287wmj.40.1648662077526; Wed, 30 Mar 2022 10:41:17 -0700 (PDT) Received: from localhost.localdomain ([95.168.120.6]) by smtp.gmail.com with ESMTPSA id m20-20020a05600c4f5400b0038b5162260csm7663989wmq.23.2022.03.30.10.41.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Mar 2022 10:41:17 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Wed, 30 Mar 2022 19:43:25 +0200 Message-Id: <20220330174326.68786-1-onemda@gmail.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avfilter/src_movie: switch to activate() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FxoaotwXTbBF Signed-off-by: Paul B Mahol --- libavfilter/src_movie.c | 76 ++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index 711854c23c..78b87cf444 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -46,6 +46,7 @@ #include "audio.h" #include "avfilter.h" +#include "filters.h" #include "formats.h" #include "internal.h" #include "video.h" @@ -55,6 +56,7 @@ typedef struct MovieStream { AVCodecContext *codec_ctx; int64_t discontinuity_threshold; int64_t last_pts; + int got_eof; } MovieStream; typedef struct MovieContext { @@ -70,6 +72,7 @@ typedef struct MovieContext { int64_t discontinuity_threshold; int64_t ts_offset; int dec_threads; + int got_eagain; AVFormatContext *format_ctx; @@ -100,7 +103,6 @@ static const AVOption movie_options[]= { }; static int movie_config_output_props(AVFilterLink *outlink); -static int movie_request_frame(AVFilterLink *outlink); static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec) { @@ -314,7 +316,6 @@ static av_cold int movie_common_init(AVFilterContext *ctx) if (!pad.name) return AVERROR(ENOMEM); pad.config_props = movie_config_output_props; - pad.request_frame = movie_request_frame; if ((ret = ff_append_outpad_free_name(ctx, &pad)) < 0) return ret; if ( movie->st[i].st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && @@ -554,47 +555,60 @@ static int movie_push_frame(AVFilterContext *ctx, unsigned out_id) return 0; } -static int movie_request_frame(AVFilterLink *outlink) +static int activate(AVFilterContext *ctx) { - AVFilterContext *ctx = outlink->src; MovieContext *movie = ctx->priv; - unsigned out_id = FF_OUTLINK_IDX(outlink); - - while (1) { - int got_eagain = 0, got_eof = 0; - int ret = 0; + int ret = 0, x = 0; - /* check all decoders for available output */ - for (int i = 0; i < ctx->nb_outputs; i++) { + /* check all decoders for available output */ + for (int i = 0; i < ctx->nb_outputs; i++) { + if (ff_outlink_frame_wanted(ctx->outputs[i])) { ret = movie_push_frame(ctx, i); if (ret == AVERROR(EAGAIN)) - got_eagain++; + movie->got_eagain++; else if (ret == AVERROR_EOF) - got_eof++; + movie->st[i].got_eof++; else if (ret < 0) return ret; - else if (i == out_id) - return 0; + x++; } + } - if (got_eagain) { - /* all decoders require more input -> read a new packet */ - ret = movie_decode_packet(ctx); + if (movie->got_eagain) { + /* all decoders require more input -> read a new packet */ + movie->got_eagain = 0; + ret = movie_decode_packet(ctx); + if (ret < 0 && ret != AVERROR(EAGAIN)) + return ret; + ff_filter_set_ready(ctx, 100); + return 0; + } else { + int nb_eofs = 0; + + for (int i = 0; i < ctx->nb_outputs; i++) { + if (movie->st[i].got_eof && movie->loop_count == 1) + ff_outlink_set_status(ctx->outputs[i], AVERROR_EOF, movie->st[i].last_pts); + nb_eofs++; + } + + if (nb_eofs != ctx->nb_outputs) { + ff_filter_set_ready(ctx, 100); + return 0; + } + + if (movie->loop_count != 1) { + ret = rewind_file(ctx); if (ret < 0) return ret; - } else if (got_eof) { - /* all decoders flushed */ - if (movie->loop_count != 1) { - ret = rewind_file(ctx); - if (ret < 0) - return ret; - movie->loop_count -= movie->loop_count > 1; - av_log(ctx, AV_LOG_VERBOSE, "Stream finished, looping.\n"); - continue; - } - return AVERROR_EOF; + movie->loop_count -= movie->loop_count > 1; + av_log(ctx, AV_LOG_VERBOSE, "Stream finished, looping.\n"); + for (int i = 0; i < ctx->nb_outputs; i++) + movie->st[i].got_eof = 0; } + return 0; } + + return FFERROR_NOT_READY; } static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, @@ -651,7 +665,7 @@ const AVFilter ff_avsrc_movie = { .init = movie_common_init, .uninit = movie_uninit, FILTER_QUERY_FUNC(movie_query_formats), - + .activate = activate, .inputs = NULL, .outputs = NULL, .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, @@ -670,7 +684,7 @@ const AVFilter ff_avsrc_amovie = { .init = movie_common_init, .uninit = movie_uninit, FILTER_QUERY_FUNC(movie_query_formats), - + .activate = activate, .inputs = NULL, .outputs = NULL, .flags = AVFILTER_FLAG_DYNAMIC_OUTPUTS, From patchwork Wed Mar 30 17:43:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 35083 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp934079pzb; Wed, 30 Mar 2022 10:41:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyWkvJ4P3WsNCrgJnFSwcfAfQteWo2OZZbOFsEk+9rZ/Pjacfzh1PXx582Vtu6At3hyOrCF X-Received: by 2002:a17:907:6d93:b0:6df:f1c5:9c8c with SMTP id sb19-20020a1709076d9300b006dff1c59c8cmr779810ejc.224.1648662097401; Wed, 30 Mar 2022 10:41:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648662097; cv=none; d=google.com; s=arc-20160816; b=iuLqVqUsAbArBwrlDNz8+1ztz4OZL34ewoLi8U/TCcKgezYnaREAm9aGK0cmdfpZSA kHjzcaCfA5wlxN225IfhkTIZgYOsAxNYGvP+4r4K62KKhHvVq7yYJMO01sOtni763MKU PGZiQFXSCPRskYgc1gBkMcYOcG4a6xR9tBTKw/DDa/shPtnVu7jIIldWvHv3WIPt6hER LPZIZQZuC8Jihyyx2IryVqwSeSN9zCdzPw4qBVJvEAlfJ3CZyGTMPF5f/JvKqLBIzvyU HnikHkpHNaIZj7/MPiHZGPJrmSdWMzmuTF3XuGndLEMcpf4zWXifKCdylp8WV05PYXAc AmLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=b4SdpptPERCXfSXIdzn+r+rY3nH3vbtUqsJWNSvckzs=; b=zryUJyPS9MFODMDGy4yZCG3KZ3fRj5G9+911PiXoLgm+yGG3XSlOHBXxl5n9l0yJJb Y884+NSdJGDPZMH6QbBn87X5WFKU52grhxz969ApvKE+g86xj5mN4IbX4NDpHLCcBSiB o+F9LREsSTUZmrP6aaEFHiAcXKflE7rGjZGDoxvnGKIL6nyn49A0wyyn96lq8k2Ktkkp AjlTvCCIpmAMN9PfmdFvc9pmg5XEYIc5L3W8qdLrHGuFOrcRrISnI/pSDabTxRLYK6vJ Qbn/jJYrk7BMdBr9yzqwmBPCmXgpajwjs35XRVopMGxAvq/KqUiBjzci2jX1vDZBzUI1 4+VQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="elH4/0ab"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id bv7-20020a170906b1c700b006df76385ca8si21746078ejb.328.2022.03.30.10.41.37; Wed, 30 Mar 2022 10:41:37 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="elH4/0ab"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6887E68B322; Wed, 30 Mar 2022 20:41:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B5A1468B310 for ; Wed, 30 Mar 2022 20:41:18 +0300 (EEST) Received: by mail-wm1-f49.google.com with SMTP id p189so12738839wmp.3 for ; Wed, 30 Mar 2022 10:41:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Uwc8EE5pZX7IXcQX8WgcLAhm7+WRuUpOgo32hH+EB4s=; b=elH4/0abG8nx6SdlsgyPPQPZKkHo1+H2EzCuWllWxgCpNZvSHxT3tyLs2pJ4AjZ8vS nmZKkn6d0ebEQevcyeHD7W/NUS8dZopP6aVsDjudNV48WryTaFnNo/fE4x9ExoTXTq/w j5IRZ1MrPFVSqqm6unmMQtVw6ZOrURvcZ8QuIN11Eb948O+TsqFthH2XKeHMXwqJwozC DKdHIDj4x7knIo/5t1xqQ26q9w5AgMcImGIv4/2ljWSU+ashMcpUAzzHz5Ip/yBH9hKh 0jk7nMDM7jwCETCT8qQgy4AhH1dOkAESs/ksxxUMaSedt7WryXz5m378rMAafUt/ZmgZ eNjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Uwc8EE5pZX7IXcQX8WgcLAhm7+WRuUpOgo32hH+EB4s=; b=jjroP5gkmA5zpuXmbHsGRSiFROLXnDtk6nCmhr2WW6zZKsvGfkyRfXpPm2fbVBmjAH SMMcz0Gw/yz19T3vlInYZ1n+06s0ncqdsxGZ3eubCNFrrmVy/bEVXlj3rPc9oYiqo12O 2RzaLpErmaMXN2QeskYawuLXErUIrefbblw5+xo6JtEjN+Iw091sRPxQ5+7GhUnAktRJ Tv48ri9cZinpfm/R8qP3BfxOLBAn6Q+vSMuJ4hFEqhhdbq24j9NZLJhl26lYMPn1Di+F f6WwL3v2aWZD/9stLFEqO7wPRK+OCW3FknQiQ4y8TC9QP3Lcr8BnQgh4gs5gzVmZuQHr HLVQ== X-Gm-Message-State: AOAM532uXiK65anEQo3cMxUbL4/TOGTnBtTUMU2iHkleCYoMUkDylqU4 LadV1BZUbmDZGip/+e4L6+WGEp0S/io= X-Received: by 2002:a05:600c:4f0f:b0:38c:c8f5:73e7 with SMTP id l15-20020a05600c4f0f00b0038cc8f573e7mr496478wmq.201.1648662078237; Wed, 30 Mar 2022 10:41:18 -0700 (PDT) Received: from localhost.localdomain ([95.168.120.6]) by smtp.gmail.com with ESMTPSA id m20-20020a05600c4f5400b0038b5162260csm7663989wmq.23.2022.03.30.10.41.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Mar 2022 10:41:17 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Wed, 30 Mar 2022 19:43:26 +0200 Message-Id: <20220330174326.68786-2-onemda@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220330174326.68786-1-onemda@gmail.com> References: <20220330174326.68786-1-onemda@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avfilter/src_movie: add option to set decoding thread type X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: LWLGximFHguo Signed-off-by: Paul B Mahol --- doc/filters.texi | 3 +++ libavfilter/src_movie.c | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 1d56d24819..af332041e8 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -28790,6 +28790,9 @@ timestamps. @item dec_threads Specifies the number of threads for decoding +@item dec_thread_type +Specifies the thread type for decoding. + @item format_opts Specify format options for the opened file. Format options can be specified as a list of @var{key}=@var{value} pairs separated by ':'. The following example diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index 78b87cf444..09d107ee8f 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -72,6 +72,7 @@ typedef struct MovieContext { int64_t discontinuity_threshold; int64_t ts_offset; int dec_threads; + int thread_type; int got_eagain; AVFormatContext *format_ctx; @@ -98,6 +99,10 @@ static const AVOption movie_options[]= { { "loop", "set loop count", OFFSET(loop_count), AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, FLAGS }, { "discontinuity", "set discontinuity threshold", OFFSET(discontinuity_threshold), AV_OPT_TYPE_DURATION, {.i64 = 0}, 0, INT64_MAX, FLAGS }, { "dec_threads", "set the number of threads for decoding", OFFSET(dec_threads), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, + { "dec_thread_type","set the type of threads for decoding", OFFSET(thread_type), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 2, FLAGS, .unit = "thread_type" }, + { "auto", "auto", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, FLAGS, .unit = "thread_type" }, + { "frame", "more than one frame at once", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, FLAGS, .unit = "thread_type" }, + { "slice", "more than one part of single frame at once", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, FLAGS, .unit = "thread_type" }, { "format_opts", "set format options for the opened file", OFFSET(format_opts), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, FLAGS}, { NULL }, }; @@ -158,7 +163,7 @@ static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec) return found; } -static int open_stream(AVFilterContext *ctx, MovieStream *st, int dec_threads) +static int open_stream(AVFilterContext *ctx, MovieStream *st, int dec_threads, int thread_type) { const AVCodec *codec; int ret; @@ -180,6 +185,8 @@ static int open_stream(AVFilterContext *ctx, MovieStream *st, int dec_threads) if (!dec_threads) dec_threads = ff_filter_get_nb_threads(ctx); st->codec_ctx->thread_count = dec_threads; + if (thread_type) + st->codec_ctx->thread_type = thread_type; if ((ret = avcodec_open2(st->codec_ctx, codec, NULL)) < 0) { av_log(ctx, AV_LOG_ERROR, "Failed to open codec\n"); @@ -324,7 +331,7 @@ static av_cold int movie_common_init(AVFilterContext *ctx) if (ret < 0) return ret; } - ret = open_stream(ctx, &movie->st[i], movie->dec_threads); + ret = open_stream(ctx, &movie->st[i], movie->dec_threads, movie->thread_type); if (ret < 0) return ret; }