From patchwork Mon Jun 5 17:29:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 3843 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.2 with SMTP id 2csp1466123vsk; Mon, 5 Jun 2017 10:37:17 -0700 (PDT) X-Received: by 10.28.88.3 with SMTP id m3mr8837454wmb.28.1496684237075; Mon, 05 Jun 2017 10:37:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1496684237; cv=none; d=google.com; s=arc-20160816; b=zRYkF5N7oNTT/Y7zvvQzZhdQ0vK3vpXd4qFc+8t0NUyDvblWF08EFojxsVrVF1DdZn quro2vstkl7Xlfc7xPxxFuiF527vZXxa4v3l0ARpWmKrIg2VQaUBnGbj9xaWnc9Xpwh9 DFPTCq+4D0Ecz7sy7gx0WoyqAAYe2fp4nLzONWg3tjHSCt1tObpoCALmzhzFKBCLKgRJ aCANEh1uZJr+wN2DeswVUKtEI1JMpS6fn0Fn25ptMDWbW4iiagnw0gQmwAOqxjo6DbNT aEb1okKgi/nGaJFP49bhI4L1Fj2WfIknY7PongAjyOtoxyRZcY+X6VWhCKjMbnS3jBmI tDJQ== 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=sakfjcx46jdbKY3H0/PYYs2qr8GxzJ7i477ovEYTguE=; b=QV0iUj6PPeBycXuJMAKCAhxWVkfAlFWOpUmzy94SjHUvRvJ9ChF7gmnCIc2kGCcI5W c5S0Lm82gnW4IcQ2IVPuqmiARCB/2wG97SzTWh4wlLL7wbWjM8sZrH6ykBOQ1JqYAfDD goM78lt4NwM1y+i0uuSuDlO0OoPSrnr8vlqeRAb832QpvzHELsfl3rEc+BehXkcAYL6V xU3HvKryfMKM3ZmmDcB56CCd7Oo949hqxdEl3y3nNN3zQ3ARdANekMjEb20xDe64LLIk vgE1wu4PrSONZbH1q8uftCmRNK+FNhZ/6kTGhi+RWR56LXClfsTNH3WP08LlmetPe4Ha Ieag== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b51si10666282wrd.208.2017.06.05.10.37.16; Mon, 05 Jun 2017 10:37:17 -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=@tmm1-net.20150623.gappssmtp.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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ACE17689D0F; Mon, 5 Jun 2017 20:37:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f194.google.com (mail-qt0-f194.google.com [209.85.216.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E4A18689B06 for ; Mon, 5 Jun 2017 20:36:59 +0300 (EEST) Received: by mail-qt0-f194.google.com with SMTP id s33so10223426qtg.3 for ; Mon, 05 Jun 2017 10:37:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=qfSaCu7TV4Of2fa06xGCQKWWDL43UYmCU5nVcndueKk=; b=NWjGQC3Sxejg5f7FSc3WIrJoXIlil9JAki/Nyuhwd0GKwqXjIAuOqVGBEjEkCItnne AbmNYTZtd1sEx4+kXpgLXdHOPYSdvEaLzhtzBgDTuU+nMdZfSnfDmI4tH8fIPGH/8emk cQFW1RkH4YKwZOYXArv0pJX4f67YUVYBYp5PZQcXIHdoKejKT4enSFNkp00NfoxT/amJ 5s12KU3vp1HFbkHrmc7KrA6mGM96HNOt1HaU6qBrxKA4mKHIJR2JW9uNJ1i0AXw9tJJn uiwjj54cbMxRiTY4RfCXZJBi0RY0Lvkc7yDU7LVUOlzXc3H36iQknIgT9IDW8A/YZ7B/ 2C1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=qfSaCu7TV4Of2fa06xGCQKWWDL43UYmCU5nVcndueKk=; b=Nt0+mllqwZ6PsYgOWH5fPAOeIyvvbzeRQqqJJqqV19Z29lWCy51UW8HKQPikZgZ7gH 8VINdrW+kZnFJ6Nim+4mSAylUwQxuKkWRmMF1DW6LI+x2bMSXCCzf4/YHkKv9feaDmw9 wUq60ae7mxKyH5A+NJSc1TyZjCrHjGNKTrXKnffYY5nMyxeizIro09bSAhTYvy4noZH9 DGYo0yaQ3ainWFVb/2jMooOFVZXy7UcFPVGOx2trcFCMFvW8QdQFhMITrrEVtKZIrH8K SbQ+Z9Tcy+Kyk8GQ212HiXGG8dwjo8BOX4k/ouVRwHZQ/wY+rc8tyN1yyGIQXJcQEc89 iOXA== X-Gm-Message-State: AODbwcDfa83e+VLzuL67hygA5SRjOr4jCl73+XO8xpBubvvTcoVwQxBZ 7Hna4oNburvq2bN3lAc= X-Received: by 10.55.4.65 with SMTP id 62mr24757011qke.198.1496683787050; Mon, 05 Jun 2017 10:29:47 -0700 (PDT) Received: from localhost.localdomain ([104.129.194.128]) by smtp.gmail.com with ESMTPSA id b185sm2368085qkg.44.2017.06.05.10.29.45 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 05 Jun 2017 10:29:46 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Jun 2017 13:29:44 -0400 Message-Id: <20170605172944.85684-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.11.0 (Apple Git-81) Subject: [FFmpeg-devel] [PATCH v2] lavc: add mpeg2 decoder/hwaccel to mediacodec 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: Aman Gupta MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta Android TV and FireOS hardware supports mpeg2 hardware decoding via MediaCodec. --- configure | 2 ++ libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 2 ++ libavcodec/mediacodecdec.c | 23 ++++++++++++++++++++++- libavcodec/mediacodecdec_common.c | 7 +++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 72060ef0e9..5816de2398 100755 --- a/configure +++ b/configure @@ -2656,6 +2656,7 @@ mpeg2_d3d11va_hwaccel_deps="d3d11va" mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder" mpeg2_dxva2_hwaccel_deps="dxva2" mpeg2_dxva2_hwaccel_select="mpeg2video_decoder" +mpeg2_mediacodec_hwaccel_deps="mediacodec" mpeg2_mmal_hwaccel_deps="mmal" mpeg2_qsv_hwaccel_deps="libmfx" mpeg2_qsv_hwaccel_select="qsvdec_mpeg2" @@ -2762,6 +2763,7 @@ mpeg1_vdpau_decoder_select="mpeg1video_decoder" mpeg2_crystalhd_decoder_select="crystalhd" mpeg2_cuvid_decoder_deps="cuda cuvid" mpeg2_mmal_decoder_deps="mmal" +mpeg2_mediacodec_decoder_deps="mediacodec" mpeg2_qsv_decoder_deps="libmfx" mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel" mpeg2_qsv_encoder_deps="libmfx" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 0818950ad9..a752f87ef5 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -423,6 +423,7 @@ OBJS-$(CONFIG_MPEG2_QSV_DECODER) += qsvdec_other.o OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o +OBJS-$(CONFIG_MPEG2_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_MPEG2_VAAPI_ENCODER) += vaapi_encode_mpeg2.o OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 89fadcd2fa..4373ebd975 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -96,6 +96,7 @@ static void register_all(void) REGISTER_HWACCEL(MPEG2_VAAPI, mpeg2_vaapi); REGISTER_HWACCEL(MPEG2_VDPAU, mpeg2_vdpau); REGISTER_HWACCEL(MPEG2_VIDEOTOOLBOX, mpeg2_videotoolbox); + REGISTER_HWACCEL(MPEG2_MEDIACODEC, mpeg2_mediacodec); REGISTER_HWACCEL(MPEG4_CUVID, mpeg4_cuvid); REGISTER_HWACCEL(MPEG4_MEDIACODEC, mpeg4_mediacodec); REGISTER_HWACCEL(MPEG4_MMAL, mpeg4_mmal); @@ -257,6 +258,7 @@ static void register_all(void) REGISTER_DECODER(MPEG2_MMAL, mpeg2_mmal); REGISTER_DECODER(MPEG2_CRYSTALHD, mpeg2_crystalhd); REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv); + REGISTER_DECODER(MPEG2_MEDIACODEC, mpeg2_mediacodec); REGISTER_DECODER(MSA1, msa1); REGISTER_DECODER(MSCC, mscc); REGISTER_DECODER(MSMPEG4V1, msmpeg4v1); diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index ccfcb4b9ce..2c9bb033e2 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -1,5 +1,5 @@ /* - * Android MediaCodec H.264 / H.265 / MPEG-4 / VP8 / VP9 decoders + * Android MediaCodec MPEG-2 / H.264 / H.265 / MPEG-4 / VP8 / VP9 decoders * * Copyright (c) 2015-2016 Matthieu Bouron * @@ -333,6 +333,11 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) goto done; break; #endif +#if CONFIG_MPEG2_MEDIACODEC_DECODER + case AV_CODEC_ID_MPEG2VIDEO: + codec_mime = "video/mpeg2"; + break; +#endif #if CONFIG_MPEG4_MEDIACODEC_DECODER case AV_CODEC_ID_MPEG4: codec_mime = "video/mp4v-es", @@ -575,6 +580,22 @@ AVCodec ff_hevc_mediacodec_decoder = { }; #endif +#if CONFIG_MPEG2_MEDIACODEC_DECODER +AVCodec ff_mpeg2_mediacodec_decoder = { + .name = "mpeg2_mediacodec", + .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 Android MediaCodec decoder"), + .type = AVMEDIA_TYPE_VIDEO, + .id = AV_CODEC_ID_MPEG2VIDEO, + .priv_data_size = sizeof(MediaCodecH264DecContext), + .init = mediacodec_decode_init, + .decode = mediacodec_decode_frame, + .flush = mediacodec_decode_flush, + .close = mediacodec_decode_close, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, +}; +#endif + #if CONFIG_MPEG4_MEDIACODEC_DECODER AVCodec ff_mpeg4_mediacodec_decoder = { .name = "mpeg4_mediacodec", diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 2ec25c581d..1263188d34 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -766,6 +766,13 @@ AVHWAccel ff_hevc_mediacodec_hwaccel = { .pix_fmt = AV_PIX_FMT_MEDIACODEC, }; +AVHWAccel ff_mpeg2_mediacodec_hwaccel = { + .name = "mediacodec", + .type = AVMEDIA_TYPE_VIDEO, + .id = AV_CODEC_ID_MPEG2VIDEO, + .pix_fmt = AV_PIX_FMT_MEDIACODEC, +}; + AVHWAccel ff_mpeg4_mediacodec_hwaccel = { .name = "mediacodec", .type = AVMEDIA_TYPE_VIDEO,