From patchwork Wed Apr 24 07:59:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 12885 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id E5F464495B5 for ; Wed, 24 Apr 2019 10:59:41 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C98196805B9; Wed, 24 Apr 2019 10:59:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5A119680280 for ; Wed, 24 Apr 2019 10:59:35 +0300 (EEST) Received: by mail-wr1-f45.google.com with SMTP id c5so14860637wrs.11 for ; Wed, 24 Apr 2019 00:59:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fihpeIlSuED9Pvw2dvuWjaTISZ/oWFLWVjH0Th84wJ0=; b=hF02P3N+PEvAk9SLCSCbhJ0x2UhyOWijlhqr90vSSpJVGEu7bkGUkm5i5qVPSyspNK 7Vnf/fsyX1b/UDbzn6PJInwoZlf+gg3LDagVa5Wq13fQhfeqTAXYwdrJrmrcvlHgCEIq NW1XWw6rSRXHMpZP9vUJiXhDxUCGOgZjjoBJetHmERo+cNqsWe3LPGQr6KNYgNYgPS7Q VwzaSA2ktNCp2lGRkPi69pLnKWXqQg6oLjLsBVO60dRBlT5p0Cp9dDXVaY2X6UfCcqYT i/vYIoRelbw1e/VXuxo35lBxkEo1B6Ev86Ui/y+HeNXqOILDReGc7q+aPzI8+iSF0hef Hyvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fihpeIlSuED9Pvw2dvuWjaTISZ/oWFLWVjH0Th84wJ0=; b=jd8S648+mc3uY8dtjDB+2MmfIUVvWkwdvTCY3Cv8aE/6gWCSzH1CbJjNsTqgwSVaeY MTGbLFrQWDthQ5XNT+zoCMcRnHU2F0zglGb1/k1IqpbLGfLItlFvC+5m5zqm8le/LfnV ZuNeNly0EhOTpPjykeTvx+kBKe6NlOU3tbVM4mdiC7itnboxR+/L5ShLHJVMKSoB1K0M cU5KCUNk5v3zp0qn4XknTqXyfxkc1hDJzI6WqgFs6TFhbmOxaPvqQx5n9Zn0e1U2YsEU NKgdCZwHLvQugXDHJ+BivcaKZitCaGymjLgomzeKvh02fg52f03L+Y3qKA/Uweoxd5AD 4gjw== X-Gm-Message-State: APjAAAVibLxp8UtGc4TAyQo2jc2JSnSwln2R3zJmUgrcwErtwDfwV1wB ++XVC+FVxkLLMpruHj8s9XuTEIws X-Google-Smtp-Source: APXvYqw8zttvsg5Mbbjhhw6XlQE4ZsZJDpzC/O7rut+m2KVMy++Ylh1oEdwECmfDiUvqOHd+32XQRQ== X-Received: by 2002:adf:ec11:: with SMTP id x17mr19696083wrn.120.1556092774424; Wed, 24 Apr 2019 00:59:34 -0700 (PDT) Received: from kusa.lan (lfbn-idf2-1-381-242.w82-123.abo.wanadoo.fr. [82.123.96.242]) by smtp.gmail.com with ESMTPSA id f10sm18111221wrs.17.2019.04.24.00.59.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Apr 2019 00:59:33 -0700 (PDT) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Apr 2019 09:59:28 +0200 Message-Id: <20190424075930.16157-1-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/mediacodecdec: try to receive a frame after signaling EOF to the codec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Matthieu Bouron Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Avoids returning EAGAIN after signaling EOF to the codec in ff_mediacodec_dec_send() so we can try to receive a frame before returning in mediacodec_receive_frame(). This helps avoiding an extra round-trip between avcodec_send_frame() and avcodec_receive_frame() while draining the remaining frames. --- libavcodec/mediacodecdec.c | 1 + libavcodec/mediacodecdec_common.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 3a4240aa95..e353e34bd5 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -461,6 +461,7 @@ static int mediacodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) ret = ff_mediacodec_dec_send(avctx, s->ctx, &null_pkt, true); if (ret < 0) return ret; + return ff_mediacodec_dec_receive(avctx, s->ctx, frame, true); } else if (ret == AVERROR(EAGAIN) && s->ctx->current_input_buffer < 0) { return ff_mediacodec_dec_receive(avctx, s->ctx, frame, true); } else if (ret < 0) { diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 7c2661f672..f7a06cdc6d 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -631,7 +631,7 @@ int ff_mediacodec_dec_send(AVCodecContext *avctx, MediaCodecDecContext *s, "Queued input buffer %zd size=%zd ts=%"PRIi64"\n", index, size, pts); s->draining = 1; - break; + return 0; } else { size = FFMIN(pkt->size - offset, size); memcpy(data, pkt->data + offset, size);