From patchwork Fri Jun 9 22:53:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 3894 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.195 with SMTP id 186csp194492vsk; Fri, 9 Jun 2017 16:01:49 -0700 (PDT) X-Received: by 10.28.86.194 with SMTP id k185mr1365708wmb.35.1497049309627; Fri, 09 Jun 2017 16:01:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1497049309; cv=none; d=google.com; s=arc-20160816; b=Lt1KacoFWdeB6aomISJkPDz6tOsuW6tOWxPF5q0Y2puTjuUft0T+JnqEHZPH9jMzxi YjzNyAxvFBZb/sYKPq2lsC+va0ypVxjct0ZiMgCZogBPNStins0g+i3OmwfDJCudNwUA 0mfjhE9xFCvDy6gZQFXC8MoXGgwm7i61L3DiFJPy+kDhRM0DcduBSit1Ir7JELGHV4tr HUxi2hjudF4MpGDPrNfOH5xOW+NW/7DQIp/K9wWpFzp+VFHdjzigl5eSP1mMv5ZK9KgW ak0PxyIBdy6kHHbO1J1A9ag39TI9Rg8vMoqovNywpuCU46IuJSQ/hhz4UgfGIrjz9zYu 6M9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=/c1uxLdGrs3MDFxDgVQBUkP35VmD0ACK2yTM1ZQM+o4=; b=FwcL1Beyae8qUJfv0BrfUD3d0hPQx2C4za4pMJ135kjylwwx6ymkCfbVSoaAcn8Cu6 wXe5p0I0FTBLoVyYIs5BmfZl4eoqttsWWw/tU/2Pyq7UR5hC6P6BpTEkLH5mqOiWEkxd hINJD+PsEVwZE956Acu1wS6Sr74GfpcikVGTWGinqYfbdcZHE5woqU0+PV6OgObMF4lv B90RAOjFsqlxnCOxJj+TfEiXVxuNmOT8e1rfd09mXBjI7wIxyMUhGZRIQ3DJ/zKHWLBo iJig5w0lLjHEMzTHYYcRzIz/3FpICXNMiiJOT9akhEPVpC4J8UXtxDtYsrdn3g6NZxrr wanw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com; 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=NONE 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 l47si2425657wrl.334.2017.06.09.16.01.48; Fri, 09 Jun 2017 16:01:49 -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; 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=NONE 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 646CA689F13; Sat, 10 Jun 2017 02:01:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B89D7689EF3 for ; Sat, 10 Jun 2017 02:01:38 +0300 (EEST) Received: by mail-wr0-f194.google.com with SMTP id g76so9537576wrd.2 for ; Fri, 09 Jun 2017 16:01:39 -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; bh=LZLLJnPbXT3zYXcqM9fIOS/BB7Kl2fVSh4BSraOaLA8=; b=oCZNzlLW9FJu9DmR1Rc8FaZHPpXrgWEo5AUfo65LTtO2feDPbYZf9iWkkrC5rBArXP r4Yk31Q/iDA14QI/1DwCzBTaVIAFwiorR5H9w1zq74Wivxe9h0B2DC5eGDHVpsgm0wBJ qxJzKsC/fJYwQMOGNs7XFpxAmmFzIwGw56fERe0CQGEG7QNdVgaUiXmTJYfEZKmx+mv7 fL+KSy7vDj2M4vGaLzrFEGZxS4oI5ippfUqsInrwj2B2hufbyMWVXvaX6if09Anntkum WY3bqufr7BrTUC0FtZhpT6Zgs+RZ28sX+vj/a+1XgmLiltjeg2KmCpp2OKijo71z/5BH wSNw== 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; bh=LZLLJnPbXT3zYXcqM9fIOS/BB7Kl2fVSh4BSraOaLA8=; b=Ne6Yanqg06o/zZzMzifAeKXbW/MnuXrbr3S13APNat1YaWqdlo8+k988QPr8SGdlFD c7FFGAAtf7NiQsl8+dlfDxJa9uGrGnGPcWoWnV3kSIn63/2yGM8Kw3T/eso49FSLYd7c THVyDYfGfXJufh3VUX0xVsFznN/WDOVhpnc0uBMPuTaJj4Y/Z8cTGHkxiemmZ+NEC5YJ lsJYrtCE3jjnqFItPRfuv0sulP9vrg+9AiAlZnxbcSOKmylT9Z8Su8E4qCf1o0PaeuYg OWZc7pfTrH6GDGgfFgUaSHJucb//uVrGhJP+at8FqwyFm8ySLt5qt23XhU0PcFQA34kA 9ssw== X-Gm-Message-State: AKS2vOzoIfs/ZLUdi5wc/jiVP4OZvQn3rZiITgI7nz8OOWvI+LXzg41o fA3pwNf+dXH7UK0h X-Received: by 10.28.113.85 with SMTP id m82mr1346561wmc.21.1497048822173; Fri, 09 Jun 2017 15:53:42 -0700 (PDT) Received: from localhost.localdomain (AMontsouris-653-1-246-123.w92-128.abo.wanadoo.fr. [92.128.117.123]) by smtp.gmail.com with ESMTPSA id z23sm3412388wrz.0.2017.06.09.15.53.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Jun 2017 15:53:41 -0700 (PDT) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Sat, 10 Jun 2017 00:53:30 +0200 Message-Id: <20170609225330.24536-1-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.13.0 Subject: [FFmpeg-devel] [PATCH] lavc/mediacodecdec: switch to the new generic filtering mechanism 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/mediacodecdec.c | 70 ++++++++-------------------------------------- 1 file changed, 12 insertions(+), 58 deletions(-) diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 5bdeb6c1d7..0c77a78aa9 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -41,11 +41,9 @@ typedef struct MediaCodecH264DecContext { MediaCodecDecContext *ctx; - AVBSFContext *bsf; - AVFifoBuffer *fifo; - AVPacket filtered_pkt; + AVPacket buffered_pkt; } MediaCodecH264DecContext; @@ -58,8 +56,7 @@ static av_cold int mediacodec_decode_close(AVCodecContext *avctx) av_fifo_free(s->fifo); - av_bsf_free(&s->bsf); - av_packet_unref(&s->filtered_pkt); + av_packet_unref(&s->buffered_pkt); return 0; } @@ -312,9 +309,6 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) const char *codec_mime = NULL; - const char *bsf_name = NULL; - const AVBitStreamFilter *bsf = NULL; - FFAMediaFormat *format = NULL; MediaCodecH264DecContext *s = avctx->priv_data; @@ -329,7 +323,6 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) #if CONFIG_H264_MEDIACODEC_DECODER case AV_CODEC_ID_H264: codec_mime = "video/avc"; - bsf_name = "h264_mp4toannexb"; ret = h264_set_extradata(avctx, format); if (ret < 0) @@ -339,7 +332,6 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) #if CONFIG_HEVC_MEDIACODEC_DECODER case AV_CODEC_ID_HEVC: codec_mime = "video/hevc"; - bsf_name = "hevc_mp4toannexb"; ret = hevc_set_extradata(avctx, format); if (ret < 0) @@ -410,25 +402,6 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) goto done; } - if (bsf_name) { - bsf = av_bsf_get_by_name(bsf_name); - if(!bsf) { - ret = AVERROR_BSF_NOT_FOUND; - goto done; - } - - if ((ret = av_bsf_alloc(bsf, &s->bsf))) { - goto done; - } - - if (((ret = avcodec_parameters_from_context(s->bsf->par_in, avctx)) < 0) || - ((ret = av_bsf_init(s->bsf)) < 0)) { - goto done; - } - } - - av_init_packet(&s->filtered_pkt); - done: if (format) { ff_AMediaFormat_delete(format); @@ -503,10 +476,10 @@ static int mediacodec_decode_frame(AVCodecContext *avctx, void *data, /* process buffered data */ while (!*got_frame) { /* prepare the input data -- convert to Annex B if needed */ - if (s->filtered_pkt.size <= 0) { - AVPacket input_pkt = { 0 }; + if (s->buffered_pkt.size <= 0) { + AVPacket input_pkt; - av_packet_unref(&s->filtered_pkt); + av_packet_unref(&s->buffered_pkt); /* no more data */ if (av_fifo_size(s->fifo) < sizeof(AVPacket)) { @@ -514,36 +487,15 @@ static int mediacodec_decode_frame(AVCodecContext *avctx, void *data, ff_mediacodec_dec_decode(avctx, s->ctx, frame, got_frame, avpkt); } - av_fifo_generic_read(s->fifo, &input_pkt, sizeof(input_pkt), NULL); - - if (s->bsf) { - ret = av_bsf_send_packet(s->bsf, &input_pkt); - if (ret < 0) { - return ret; - } - - ret = av_bsf_receive_packet(s->bsf, &s->filtered_pkt); - if (ret == AVERROR(EAGAIN)) { - goto done; - } - } else { - av_packet_move_ref(&s->filtered_pkt, &input_pkt); - } - - /* {h264,hevc}_mp4toannexb are used here and do not require flushing */ - av_assert0(ret != AVERROR_EOF); - - if (ret < 0) { - return ret; - } + av_fifo_generic_read(s->fifo, &s->buffered_pkt, sizeof(input_pkt), NULL); } - ret = mediacodec_process_data(avctx, frame, got_frame, &s->filtered_pkt); + ret = mediacodec_process_data(avctx, frame, got_frame, &s->buffered_pkt); if (ret < 0) return ret; - s->filtered_pkt.size -= ret; - s->filtered_pkt.data += ret; + s->buffered_pkt.size -= ret; + s->buffered_pkt.data += ret; } done: return avpkt->size; @@ -560,7 +512,7 @@ static void mediacodec_decode_flush(AVCodecContext *avctx) } av_fifo_reset(s->fifo); - av_packet_unref(&s->filtered_pkt); + av_packet_unref(&s->buffered_pkt); ff_mediacodec_dec_flush(avctx, s->ctx); } @@ -578,6 +530,7 @@ AVCodec ff_h264_mediacodec_decoder = { .close = mediacodec_decode_close, .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, + .bsfs = "h264_mp4toannexb", }; #endif @@ -594,6 +547,7 @@ AVCodec ff_hevc_mediacodec_decoder = { .close = mediacodec_decode_close, .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, + .bsfs = "hevc_mp4toannexb", }; #endif