From patchwork Tue Sep 26 00:36:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 5278 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.36.26 with SMTP id f26csp3231483jaa; Mon, 25 Sep 2017 17:45:08 -0700 (PDT) X-Received: by 10.223.150.171 with SMTP id u40mr8153820wrb.201.1506386708723; Mon, 25 Sep 2017 17:45:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506386708; cv=none; d=google.com; s=arc-20160816; b=BdT+YwNwVU1SwwmudnRCpvSLWW3ml/7WGc1VCot33csfp6IDb3oWgH0L6a0/ZwxjWI CF2/Z1HAh6EenKRdfC+WXeti+0V3iz6Uphtx537Qp4hqXZX0uZ+gEDXjyMUlBrzrUHyz Geul7GrE/LSOdtxn9jgVRXMNt5G/ZNDw3rtFLCpZqkvBH9zZa4xJ4J6Ko4X5VxbiRODV o6V8wU1jPi2puzPhVDHZuAW1bVeqdjI1pbdxynKhTK8ksTQGRgfNpy1d6oDK5y4s4iz3 6ttkYHX/ENwaY4SCA+BdG3HfNv/rageuP6mUTGGi0GMJxFXNd4WOh8q3YWF2raZSgXFV 3WoA== 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=D+Wfn/0hHZRNvwT/2OHyUsfpUg1h2z0FVXZw7PvQ+5s=; b=bnY8mIsoB1rkUYAgCEEOkw/dJFI2TF/yIS6CgxEUsV7+DBpVkorSkzYi8lOwPHTmaI i+Of/t5y0bN5kNQiUGtswSXv50eButGKhWKyGKG2HYKevukjqqTwqkF0xV7nDxUKmOI0 KqIAKEOImwMKbi/pZC+zRjS8qPFmCvMkdqN0sK4hEP76s5/sOdZnANBc2PWc3+i+AEKH ZUbJf92O8KoHkpMapzSTljr0YXKvkVhwuoQiu1TJU157aTfkK08759UKuLrBg/Pa/GYH f8Q3jwj5scuE/uGW+ddknaf2o6oqKWcicU6A7zoF8TVk915s4SCaGHBcJZDdbAF0T6tx hGzA== 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=feclHUFw; 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 18si550226wmj.84.2017.09.25.17.45.08; Mon, 25 Sep 2017 17:45:08 -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=feclHUFw; 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 EFBF0689B0E; Tue, 26 Sep 2017 03:44:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f196.google.com (mail-pf0-f196.google.com [209.85.192.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2C905689ADE for ; Tue, 26 Sep 2017 03:44:54 +0300 (EEST) Received: by mail-pf0-f196.google.com with SMTP id a7so4299056pfj.5 for ; Mon, 25 Sep 2017 17:45:05 -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=VgwhwgCZtcRtTy7cSJSoDyluSGxAUClMpD7GQ1y7Gmc=; b=feclHUFwJ4Komn6iUHRXdsSLKSqqnHpqimeFX7PUUwZn92gpeNFkyND0zy0j9OQCHt 1YGXyAxyQduMD6Sx/wBSiDK6emUMAcoQ6XQWLle8g0E+z2IjJJdIF512jElGr3QZH8Xc +jPzxcUAXPfwK2n2mdzGQt9R5h6Q5eIVEEVKUgbY3Uy/mHOlN4ZZZZ1uWBmXAT4B8i06 Xc8yE8L9f8TUapHmpSQ6vS9guqP6Ajmq6TFZjN01TFYyMXH0HodMcUXgPp+TDp0wi6ee hlL/moOeFrQkMyvKP+9DSMuIJiD+kDKqx/Mmo9ghv3dAYrPEIxciDVo2Xk25q1JoYSaa X0GQ== 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=VgwhwgCZtcRtTy7cSJSoDyluSGxAUClMpD7GQ1y7Gmc=; b=eOEoH35RPDkksbEY/ifAQW+sOIA9tCVD+uNrzUgh8avi63Ubyej60vYELBOHeXGCDM wJ9mV5e+LHadhA6xj1vqBOH8ITQ7zvnwRSOwXphAyskUdt8t+MN59r+xCVxa6oJcMtl1 MWd9I8aN3xJMhWBNwC/PAGrbMNgQ/MkZsXO7q9U2SiZ/hg7YMYTZM6weDw1t7kT3AX0X LCt1a/5erdt14/1zcqG+yEPWGSPSXvnA2irUrLwXa2mnISa7Rcv7PsLWcZ8cDPJkiI38 Th66e+rd3i5bbC4h8PAF+XCk9twZ0wmF0tT8l85u/h6bzsUYAvnalBBIsu7ugWVMt0Ps iUig== X-Gm-Message-State: AHPjjUjrrHJyV44YSZI2gK61AcvVTrzR54r+Z+F+q8Vd9LpDoQ2Oz3Ta 3SS4ZQJ0Pq9xncDa3+GOAmusY48i X-Google-Smtp-Source: AOwi7QASCB56xH0iatR7ZTd3En+GGoshF/XpEv2TPeCvmQToTUNdTIT/drD8QWCBEBxrT/oiYJMaZA== X-Received: by 10.159.207.139 with SMTP id z11mr9021348plo.335.1506386209490; Mon, 25 Sep 2017 17:36:49 -0700 (PDT) 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 n18sm12483164pgd.69.2017.09.25.17.36.48 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 25 Sep 2017 17:36:48 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 25 Sep 2017 17:36:29 -0700 Message-Id: <20170926003631.55571-7-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.13.5 (Apple Git-94) In-Reply-To: <20170926003631.55571-1-ffmpeg@tmm1.net> References: <20170926003631.55571-1-ffmpeg@tmm1.net> Subject: [FFmpeg-devel] [PATCH 7/9] avcodec/h264: add decode_params callback to AVHWAccel 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 callback will be used by the VideoToolbox H264 hwaccel so that it can receive SPS and PPS NALUs. VideoToolbox requires PPS changes to be fed into the decoder session, and for the session to be recreated when the SPS changes. --- libavcodec/avcodec.h | 12 ++++++++++++ libavcodec/h264dec.c | 14 ++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 5c84974e03..14bb509f66 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3921,6 +3921,18 @@ typedef struct AVHWAccel { int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); /** + * Callback for parameter data. + * + * Used for SPS/PPS in H264 streams. + * + * @param avctx the codec context + * @param buf the slice data buffer base + * @param buf_size the size of the slice in bytes + * @return zero if successful, a negative value otherwise + */ + int (*decode_params)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size); + + /** * Callback for each slice. * * Meaningful slice information (codec specific) is guaranteed to diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index a8263f2e19..ab95beb020 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -738,6 +738,13 @@ FF_ENABLE_DEPRECATION_WARNINGS break; case H264_NAL_SPS: { GetBitContext tmp_gb = nal->gb; + if (avctx->hwaccel && avctx->hwaccel->decode_params) { + ret = avctx->hwaccel->decode_params(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, @@ -749,6 +756,13 @@ FF_ENABLE_DEPRECATION_WARNINGS break; } case H264_NAL_PPS: + if (avctx->hwaccel && avctx->hwaccel->decode_params) { + ret = avctx->hwaccel->decode_params(avctx, + nal->data, + nal->size); + if (ret < 0) + goto end; + } ret = ff_h264_decode_picture_parameter_set(&nal->gb, avctx, &h->ps, nal->size_bits); if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE))