From patchwork Thu Feb 16 18:29:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 2583 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp2618304vsb; Thu, 16 Feb 2017 10:50:34 -0800 (PST) X-Received: by 10.28.47.15 with SMTP id v15mr3701271wmv.67.1487271034184; Thu, 16 Feb 2017 10:50:34 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b189si1570593wmc.26.2017.02.16.10.50.33; Thu, 16 Feb 2017 10:50:34 -0800 (PST) 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 B97FF6899D3; Thu, 16 Feb 2017 20:50:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg0-f66.google.com (mail-pg0-f66.google.com [74.125.83.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4DE056899D3 for ; Thu, 16 Feb 2017 20:50:18 +0200 (EET) Received: by mail-pg0-f66.google.com with SMTP id 5so2664244pgj.0 for ; Thu, 16 Feb 2017 10:50:24 -0800 (PST) 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=rFTsAkJn8zZA3m0wIMAxIhgeLucIYzAbP7Io6rvvBm0=; b=a1zRzeMm/vVJhg8uAfmc2nVSKIO83pbtcWhCq5y9OBdVIvXH1IDuMn26wckzVTXODM CiBhEWpeDXFKnFB8QPivnKGUIw40lmjJ6h+LezJuCb6kZQmY0giFofkixq1NSI3J6RK4 FH24QOuVhyUOphrU1AB7+sAOgDf/9ayexv6AHm5s4ZIMuHQBDJNWEFcn53vOvEn70ujP tBiVezNag5EXBf2pZ9QV/q8rvc+B6/7kKJrj418jOTDbKrNRck/CgEdz5Lrp0kQfH83O nd+ghtbFie6VfLS3PGFzUy5kpQ6LhBVNOW/ls7HlG01vK4et+mCjtYCcouRma7gHv2dA dajA== 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=rFTsAkJn8zZA3m0wIMAxIhgeLucIYzAbP7Io6rvvBm0=; b=f+8Y2zMDjeedHY0ATZlDHzHH32c29yfs/5DCQh+ilg0LH20K0V6Gz4TYU+D/+8vIk9 /JUosqHGC0xNGQSiN86CfBfgHqOVOn/5w5NcJkhBfcplfrTXDIZRC1I9ARfeTJBxGViY 515mqHlJ7byfkXWNFS3FI7tBkIRpTeI1tHbaAgDLxPu3RT0l38q/7Rr/zt1W6qDH79sk CYchwWo5Y5l0glVceSc/KwiMk/L70ZRUb93VGkt3xAvN/RLOV0S7ngmEpaRbyE730b0n ma0BEio1G3T2ugOeZJ5A3B+fdlQzsVkUI4xxhnGQ3uuA2E8iRA8GeKCJDGpt6nsz0hcl dgQw== X-Gm-Message-State: AMke39lX2OHQE82gnVsfG3FOWF8Q26/qhGgWU0ZFpbE+3MXEZ2wAnITW3l6EcIGGJNTZfg== X-Received: by 10.84.214.150 with SMTP id j22mr5168531pli.23.1487269783867; Thu, 16 Feb 2017 10:29:43 -0800 (PST) Received: from tmm1-macbook.local.net (c-73-252-174-83.hsd1.ca.comcast.net. [73.252.174.83]) by smtp.gmail.com with ESMTPSA id h4sm14939227pfk.96.2017.02.16.10.29.42 (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 16 Feb 2017 10:29:43 -0800 (PST) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Thu, 16 Feb 2017 10:29:36 -0800 Message-Id: <20170216182938.55393-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.10.1 (Apple Git-78) Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/h264, videotoolbox: pass SPS changes into the VT decoder 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 This fixes playback of h264 streams with SPS changes. One such sample is available at http://tmm1.s3.amazonaws.com/videotoolbox/spschange.ts. It switches mid-stream from level 4.0 to level 3.2. Previously, playing this sample with the VT hwaccel on iOS would crash. After this patch, it plays back as expected. On macOS however, feeding in new SPS into an existing decompression session does not always work, so this patch is only a partial fix. --- libavcodec/h264dec.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 41c0964..e521c52 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -740,6 +740,13 @@ FF_ENABLE_DEPRECATION_WARNINGS break; case H264_NAL_SPS: { GetBitContext tmp_gb = nal->gb; + if (avctx->hwaccel && avctx->hwaccel->pix_fmt == AV_PIX_FMT_VIDEOTOOLBOX) { + ret = avctx->hwaccel->decode_slice(avctx, + nal->data, + nal->size); + if (ret < 0) + goto end; + } if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0) break; av_log(h->avctx, AV_LOG_DEBUG,