From patchwork Fri Jun 2 08:23:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 3790 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.2 with SMTP id 2csp88470vsk; Fri, 2 Jun 2017 01:29:27 -0700 (PDT) X-Received: by 10.28.55.69 with SMTP id e66mr2161783wma.16.1496392167133; Fri, 02 Jun 2017 01:29:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1496392167; cv=none; d=google.com; s=arc-20160816; b=lS+chPP0gmKF6WrjarTSYwDO0mQUf/Pp359QBfEtXXnQ78c2pOVjfLCaL/16SONH58 BLe2ARTz1H5rqToO3EfeATO1mfw2qHTvRsOuzLLHln+RsoCv4H68eck48v58ONdk7uIs SC73CfmK78t8RDiC7f003xbLMwIEeLxxUBzSW+lZAC+hxa5+iotqGJev+8vHbD0OW8jn weQ+FxX9IY7FyTHUiY1J1NQrdXbAR9AtpQxejZqJ0yQmwVzovV8cQ6JnSuYg5DLE8cth nnrVAG070hU38C3dnDKXF+W97qv3I6pOnEDgsebWsCTKj0ThH7b1R9V4iVdCWw0Vg3ND 0d3Q== 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=wzlKN0QslzviYiNVDDP4TUPPOTSMDa7B2mu85CNvyzM=; b=tFdgy2WphgLDKp8ba+JN8tDo6mbojgBfYbQobHePH4hS3BLUBKol0Ay6k6QcrseBAR Bhhyqcu5Zbh0doPTCfyBilr2eA3ZwKaEA1HRVnhwvhMy/do8ZzXe8XGYXVNB+iL0W/Iw yKmqEsxPrdeOWkWrsIBX+WX3FefY/p7I6QqJknA1w5fB1f3ZBcVVlB4SbdVWkel6gseZ LgHhNihkHQXgezhyp9nfMoaQZ2F5ZjhVyebCnPuNPuBgRasrD+OYp/r88y8J9EyUK7bY dA6XP5PYOnsgAoEvy198CeIYa35rasNhzLdxZCov5TpkNQuew09qXfg1wdQBzayRIRa+ eOYA== 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 v12si1976751wmf.100.2017.06.02.01.29.25; Fri, 02 Jun 2017 01:29:27 -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 62859689AF7; Fri, 2 Jun 2017 11:29:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f193.google.com (mail-qk0-f193.google.com [209.85.220.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 92D36689983 for ; Fri, 2 Jun 2017 11:29:10 +0300 (EEST) Received: by mail-qk0-f193.google.com with SMTP id y201so4336065qka.3 for ; Fri, 02 Jun 2017 01:29:16 -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=vZRg/ZdEIRMF6WNHUdVhWyVY+vVdHwt5S8G+GcA8fHo=; b=dyHf73pILV3snWMEi5DWxsBS4bgWftWQc0vjoRYmIeslXzO1U3bpiungJBQvC5241A mjpAOYuuxREQRRATyKh/Jc0kT5/DSoYt7nqYVIfGQVj4KomWCyiVymQOffiSkpZk7Mdy +WQ+ZQC2okT6q9F3zfdXrFKMAQdSiLBNIhmvCH6u9DR+W/p2uEdFU5CsVKTU45C+hfxG f+OqhoB5B4w62hXFoutMtK7gZqwkzs9xy9Ns921/xSOEa8HyxY1soeyAGzIG5MVEmfqG Sfb+Mz4s11nCBeobI9F2pMPAMx5+rYMQ/6SRQjcKziOKOalAN6T9gKOojYr2QkWlOBLu 7Mvw== 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=vZRg/ZdEIRMF6WNHUdVhWyVY+vVdHwt5S8G+GcA8fHo=; b=jc1jvFeKGeyXJN5Xw13MbWBM8tVBgqKyOMBGJF2HlPrmt0gBGK7K5jz2w2ZTGWr/E4 pT2zzTwFsaCQfXOttXRRX0rvPkSQNrmfHhDkq5gm/TKjCk/b6xIrw0FIQqCCU9F+8srp XUibjm2w/zZ+xHYmNyifk8SxkE1idqnuFn0qLjLUMrunE1ZfcWVYFQhiwanhKkcGjDvH B/JuJWpGmVmE7VirIDBY0sifoxvykV4wp16ZRJGVSim8SEgcKZHR9T+B7DskKQu8jm93 gtWUmrndn6c1/eh/cBYWTC0NRIRmK+FclMdzjPKuCk9RnoPVR9WoQfprm059YpYqHe5E qtGg== X-Gm-Message-State: AODbwcA6Xg7ttMIN7sCz7G64mgOMs/TjTLzg5nqwO8GCplouJpO/7Sm4 A2OCUl/ZtoeouTICJoQ= X-Received: by 10.55.201.202 with SMTP id m71mr6264677qkl.73.1496391830086; Fri, 02 Jun 2017 01:23:50 -0700 (PDT) Received: from localhost.localdomain (pool-71-178-26-184.washdc.fios.verizon.net. [71.178.26.184]) by smtp.gmail.com with ESMTPSA id z203sm14559158qkb.46.2017.06.02.01.23.48 (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 02 Jun 2017 01:23:48 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Fri, 2 Jun 2017 04:23:41 -0400 Message-Id: <20170602082341.78956-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.11.0 (Apple Git-81) Subject: [FFmpeg-devel] [PATCH] 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 ++++++++++++++++++++++- 4 files changed, 27 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..f3f6155392 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",