From patchwork Fri May 4 22:57:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 8785 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp524519jad; Fri, 4 May 2018 15:57:30 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpAIglLYOMv3qyir3HAuLWhmiVsfYNVVkKYjylyG3sndsPMGHLu4CiGJ6dQg3D4x5C+OuFJ X-Received: by 2002:adf:d0d0:: with SMTP id z16-v6mr23927453wrh.152.1525474650821; Fri, 04 May 2018 15:57:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525474650; cv=none; d=google.com; s=arc-20160816; b=BATBLd+JHfm5jkTmZp2HwWJOWCnd4ab2BDUxBxkOorvDjn+ZAKrZ8u5iGNV+HZf3RP kafSCui21iPHjjvqBZnmlw1VzJz17xx3+frcr49Uu8HQiQxqjd5SGSaIHMr+6pCZ8rvy zQuWCncCpHqOqelvlogpkVNVEsO9GL6msfbVai56/NNFZa+UsHg2SObkZqMG1LVg3utr cLs6qrkGfFY2ArVxJOHOUUNoErRxpizSglRgaxZ4SsEYMNzyS1KWpRuHFLnI9jR25gyh NyA30arAt92qlkLBICe2Ow3eSWsA5H5V+22UQ+tB6W8SPMLerXx4b4dntKaOynJDzC5i fkvQ== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=TCP6cnWDISI30qde1Kjn1fMm//YJhLSczKV/09pi3r8=; b=UOdnNXoPAByFk57+qFLKR2DblVpDlGmAuzYw7EE7dvWbYQXsH2UaeA13kYTLxLSpoX rw4D4Ytj9evwY8gWD2yE3Z/B0HJRs3jApH4kFtzVlsZL1R1t0Icrxa4FpUysGfgC7knM EvXcWWYNevokzCgLGTO9NPrslpU6jzV1dzZwVsLEdi7+hlfD63xUTcMsSabgAJuJ7TEf D3nnhi7itUD/rqq3XBfGDzDHZz9rsMJ73MHBRpPiU/05D9U9UeNhznz/LJ/McmVO+OeS yG5rbHpB63LI87m0zEkiunMsl4v258hDCuXOI+LMTfaVzZT5EF8qxgLcnUnpokHpJ0a8 cQ8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=q13jHRAN; 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 s5-v6si15137940wrc.318.2018.05.04.15.57.29; Fri, 04 May 2018 15:57:30 -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 header.s=20150623 header.b=q13jHRAN; 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 40DAE68A52B; Sat, 5 May 2018 01:56:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f170.google.com (mail-pf0-f170.google.com [209.85.192.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5FB6268A497 for ; Sat, 5 May 2018 01:56:47 +0300 (EEST) Received: by mail-pf0-f170.google.com with SMTP id f189so18503075pfa.7 for ; Fri, 04 May 2018 15:57:21 -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:in-reply-to:references; bh=n3K2sbgN5Y/TKiPZUoykJdJJ8SVathkwIJZqtQTBOjE=; b=q13jHRANpTxKAHwn8PIiLgkHFaVYD0m0heeok5Si3qOynpviA5KYk0lZxh6rwkbpo/ iTbtYMtSLVtU7AkFQxQxvJSA6VgYDHE4FZPzCStbkNYFzZ1OyRujmsGzfjAVXbDj1Cg6 Dr8LAf+X4PJJyTl6TGrlojdbd4ZF/S/wk5p9ptWhd4h6BdbHsWX/1rYVdH7uZwXPJete jssSqV4l5CdiuR46a6pxcF5qoCi6wLfaOwluDU+yyq1q3KYF3v0dOx5Qwm+4BdPjODy/ hXu0HXD7vgtuUY9csi88d+Ga17hRb+Tvvo9PjIK1yAKV0ZgQPoDYIYd2sQa3dswl9yvv l1RA== 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 :in-reply-to:references; bh=n3K2sbgN5Y/TKiPZUoykJdJJ8SVathkwIJZqtQTBOjE=; b=J+8dJsPgEPq9LoxcQzyIEdq+znbYuAotkeN091AoZrQvloYrFgusZEyHLECcOUwRBG UkHs4akhgNU3uoYzp33Hiu+aTHUzuV41QLt7aQxcn2QiNFg2DUcr3u4Q0PuSYAGdnCx3 MIQPmwp4xatGjPrbgAp5aCgMOQOuqzDcglMqStbkCB5EweEJozTB+PYGltV7doEQijrE GK+4fnk/gQJ93D5j5M2rvOMG5tEGq9XZPlZ/DOk2vXufFXrgnaQWSIsZyCYr4HigdFl7 HYOp0wrta/e/0sddIQnHgtIEN6yxL8y+lScxDwK1ypgmm3jQ0zDfnxAF9FDBox3r4Pgw wC7A== X-Gm-Message-State: ALQs6tAiYxFge49SS0JfaQf0+EtAX0Pf6+zK+wrE+4XjQvRVTsMldQ11 kAL29EdiwfoDMKpATN9v2ePBnRv2 X-Received: by 2002:a17:902:758a:: with SMTP id j10-v6mr29526125pll.11.1525474639569; Fri, 04 May 2018 15:57:19 -0700 (PDT) Received: from localhost.localdomain (c-69-181-54-242.hsd1.ca.comcast.net. [69.181.54.242]) by smtp.gmail.com with ESMTPSA id h1sm34521780pfg.135.2018.05.04.15.57.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 04 May 2018 15:57:19 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Fri, 4 May 2018 15:57:11 -0700 Message-Id: <20180504225711.69909-4-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180504225711.69909-1-ffmpeg@tmm1.net> References: <20180504225711.69909-1-ffmpeg@tmm1.net> Subject: [FFmpeg-devel] [PATCH 4/4] avcodec/videotoolbox: fix decoding of some hevc videos 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: nfxjfg@googlemail.com, Aman Gupta , kernrj@gmail.com MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta See https://s3.amazonaws.com/tmm1/videotoolbox/germany-hevc-zdf.ts Although videotoolbox_buffer_create() sets frame->hw_frames_ctx, by the time videotoolbox_postproc_frame() is called, some frames randomly have frame->hw_frames_ctx == NULL. I don't really understand what's going on, and why this only affects some frames and only in some hevc videos. This patch attempts to detect the missing hw_frames_ctx and reset it in the post_process callback. This is obviously a huge hack, but it does fix playback of the affected samples. --- libavcodec/videotoolbox.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c index 08b133e1b1..279180179d 100644 --- a/libavcodec/videotoolbox.c +++ b/libavcodec/videotoolbox.c @@ -73,6 +73,7 @@ static int videotoolbox_buffer_copy(VTContext *vtctx, static int videotoolbox_postproc_frame(void *avctx, AVFrame *frame) { + VTContext *vtctx = ((AVCodecContext *)avctx)->internal->hwaccel_priv_data; CVPixelBufferRef ref = *(CVPixelBufferRef *)frame->buf[0]->data; if (!ref) { @@ -83,6 +84,11 @@ static int videotoolbox_postproc_frame(void *avctx, AVFrame *frame) frame->data[3] = (uint8_t*)ref; + if (!frame->hw_frames_ctx) + frame->hw_frames_ctx = av_buffer_ref(vtctx->cached_hw_frames_ctx); + if (!frame->hw_frames_ctx) + return AVERROR(ENOMEM); + return 0; }