From patchwork Wed Sep 7 14:53:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 465 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp345378vsd; Wed, 7 Sep 2016 07:54:23 -0700 (PDT) X-Received: by 10.194.61.164 with SMTP id q4mr34371475wjr.89.1473260062810; Wed, 07 Sep 2016 07:54:22 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ia7si22560275wjb.123.2016.09.07.07.54.20; Wed, 07 Sep 2016 07:54:22 -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=@gmail.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; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 33E9868A0EC; Wed, 7 Sep 2016 17:54:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0303F689F90 for ; Wed, 7 Sep 2016 17:53:57 +0300 (EEST) Received: by mail-wm0-f67.google.com with SMTP id a6so3366286wmc.2 for ; Wed, 07 Sep 2016 07:54:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=sW9OxBHf08fJWhOPP04zEFDRmBbCfRna0iNfeab+dCM=; b=S/Ef9VOKQ/qe7OTFvJYfy5RMEoLmi7V2TR+hq+sVTTG8S0SUPtdyIKJI6KF9CP0Gt7 BXDPokRMH4cNr5Zk/tDuBATUSSteXairfAfBgxDgpzVmsWv1A2qaq3XTumGP1ibvY45d WGUZD+UeygU6rVVvRzRWm73lsBeL2qPlIWlQ0N91oNt48mueei06VPbxHFzwVpT50nsN YVRTMDCfPS/2kwIuFnks5HKXz3iaXUsQdZ+FWgADqcnXtSfO1DcjCFGNliSxP5cYInmH TQBSWSln8Zqo74RiikT1DEuIhOXkGuWGV5R10XuFtVhrtwRjo/vcQjEhZyYpYvf9Gq4K H0YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=sW9OxBHf08fJWhOPP04zEFDRmBbCfRna0iNfeab+dCM=; b=f5YWZwIA82k9TZU3KJdnytIttNDC5F+7bZru68SdRyUAgyjkJeaISyMD7Z4wPn+85t WfXK2TQJ0KGYDGTz3jfHAf0rk8tye/qomvOLd/+b/bBHVnJe36FOh6ZlzGbrnX3kkefe frAQMeaxIFhtna4HW3i9fqUd6i8AlmcYm8ZDj6F+qZ6qTtba4JksXoetgndF/855zeLf 5KfhVgMlerrkUI6BbEpOnqv9t1jTRwd1EhOuGtHzam53jxD5muBPrvZTfWVWslT1IC6Y 37pH4ojCyWcjLboKijBEO1lDHY4/Pqr1+P7ZXzU8OgXNh3ekjsOFGdvLyIzbdl7iVukk dx3g== X-Gm-Message-State: AE9vXwP/45ME1r0xTWeFbf2bkdjBg0NuKq8Slqjp0YwEDvNuuc3oceD38ikuWcu5TSKCfQ== X-Received: by 10.28.57.137 with SMTP id g131mr4553146wma.49.1473260046282; Wed, 07 Sep 2016 07:54:06 -0700 (PDT) Received: from obiwan.gopro.lcl (LPuteaux-656-1-74-135.w80-12.abo.wanadoo.fr. [80.12.80.135]) by smtp.gmail.com with ESMTPSA id bj8sm39243567wjc.49.2016.09.07.07.54.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Sep 2016 07:54:05 -0700 (PDT) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Sep 2016 16:53:53 +0200 Message-Id: <20160907145354.2322-2-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20160907145354.2322-1-matthieu.bouron@gmail.com> References: <20160907145354.2322-1-matthieu.bouron@gmail.com> Subject: [FFmpeg-devel] [PATCH 1/2] lavc/hevc: store VPS/SPS/PPS data 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: Matthieu Bouron MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Matthieu Bouron --- libavcodec/hevc.h | 9 +++++++++ libavcodec/hevc_ps.c | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h index be91010..6a3c750 100644 --- a/libavcodec/hevc.h +++ b/libavcodec/hevc.h @@ -387,6 +387,9 @@ typedef struct HEVCVPS { uint8_t vps_poc_proportional_to_timing_flag; int vps_num_ticks_poc_diff_one; ///< vps_num_ticks_poc_diff_one_minus1 + 1 int vps_num_hrd_parameters; + + uint8_t data[4096]; + int data_size; } HEVCVPS; typedef struct ScalingList { @@ -483,6 +486,9 @@ typedef struct HEVCSPS { int vshift[3]; int qp_bd_offset; + + uint8_t data[4096]; + int data_size; } HEVCSPS; typedef struct HEVCPPS { @@ -557,6 +563,9 @@ typedef struct HEVCPPS { int *tile_pos_rs; ///< TilePosRS int *min_tb_addr_zs; ///< MinTbAddrZS int *min_tb_addr_zs_tab;///< MinTbAddrZS + + uint8_t data[4096]; + int data_size; } HEVCPPS; typedef struct HEVCParamSets { diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 83f2ec2..629e454 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -408,6 +408,15 @@ int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, av_log(avctx, AV_LOG_DEBUG, "Decoding VPS\n"); + vps->data_size = gb->buffer_end - gb->buffer; + if (vps->data_size > sizeof(vps->data)) { + av_log(avctx, AV_LOG_WARNING, "Truncating likely oversized VPS " + "(%"SIZE_SPECIFIER" > %"SIZE_SPECIFIER")\n", + vps->data_size, sizeof(vps->data)); + vps->data_size = sizeof(vps->data); + } + memcpy(vps->data, gb->buffer, vps->data_size); + vps_id = get_bits(gb, 4); if (vps_id >= MAX_VPS_COUNT) { av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", vps_id); @@ -1184,6 +1193,15 @@ int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx, av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n"); + sps->data_size = gb->buffer_end - gb->buffer; + if (sps->data_size > sizeof(sps->data)) { + av_log(avctx, AV_LOG_WARNING, "Truncating likely oversized SPS " + "(%"SIZE_SPECIFIER" > %"SIZE_SPECIFIER")\n", + sps->data_size, sizeof(sps->data)); + sps->data_size = sizeof(sps->data); + } + memcpy(sps->data, gb->buffer, sps->data_size); + ret = ff_hevc_parse_sps(sps, gb, &sps_id, apply_defdispwin, ps->vps_list, avctx); @@ -1423,6 +1441,15 @@ int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, av_log(avctx, AV_LOG_DEBUG, "Decoding PPS\n"); + pps->data_size = gb->buffer_end - gb->buffer; + if (pps->data_size > sizeof(pps->data)) { + av_log(avctx, AV_LOG_WARNING, "Truncating likely oversized PPS " + "(%"SIZE_SPECIFIER" > %"SIZE_SPECIFIER")\n", + pps->data_size, sizeof(pps->data)); + pps->data_size = sizeof(pps->data); + } + memcpy(pps->data, gb->buffer, pps->data_size); + // Default values pps->loop_filter_across_tiles_enabled_flag = 1; pps->num_tile_columns = 1;