From patchwork Mon May 7 23:11:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 8855 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp3385378jad; Mon, 7 May 2018 16:12:20 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq/7t5okzLq/nCaTlSp/aVYSf7dTNsa3v69HYNWRTd6vbntHrww8FcR+L2qJEmCrFm3CzuU X-Received: by 2002:adf:dc0d:: with SMTP id t13-v6mr27885748wri.153.1525734740287; Mon, 07 May 2018 16:12:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525734740; cv=none; d=google.com; s=arc-20160816; b=lWL2ljXrrSS1KLJb6gwDJu66ScECkm/g2Nk2+BqOPOhZN63ByqFjmx9sfBYZClcLQU yHrPQv1nfwLfCoUmJZ5Y4HYUY8xdGPDY3zsq/w5TsVoyHwr8B5Mn8vUlHxdI5I0sL1Px ++wuXxI6h3nVQ5ueTluPiIyU9gkLTkFGxHe1WVHRCzTyDgzN3zWcFX0MUf2cgzmrFzHp kQfFXeYFJhjEUOT3V8TSivXTHn1RdF/PnIGmUZ3MKmod8ej1GKVv2lNIq8uAApbgwHQJ sC7EwKSd5rauU85uSnWLXZMxt4VY/3Nbc4UAen0ZQdNYEwVhmj2+3UtSKBSQHll8PjTh +stw== 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: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=bhnrau8iGpFUkVpamHGtg0sS6lu1rWB07e4ClTjzsDE=; b=Lifbh0s44iCM6ApvJA+Wcs8ytBUypl2dQNa74hiIiYmpAgnMnVVkpEO9a/Ma/gSA+G TW9Z7q8bbUnMN1h4tmLUIia9pqYJP9vNbZ6rD3TbiC8mm1B1z1PKzMQj10pAO8zY0I7b to4s4OGT/pFsB2/6+2+jgLDD0gI5dfdzIkec2i3kxD/0jGxujvySkikGruFlrv4yf0xf JdibMoil5vOPxRXi2nVvrLPwmXDF/O9JOtrjCWVKJGLQU77EoW/XG8HTX+shzJRWi+/S By5T4LPpo4EJDbHOgw7b23qIH+tbsz0+Y5eY74yGVdF8gCEunt0TEKO3ERy7koGWnJmC Du3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=cwY0tLl0; 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 l10-v6si9547405wra.436.2018.05.07.16.12.19; Mon, 07 May 2018 16:12:20 -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=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=cwY0tLl0; 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 3899468A611; Tue, 8 May 2018 02:11:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1227268A517 for ; Tue, 8 May 2018 02:11:06 +0300 (EEST) Received: by mail-wr0-f194.google.com with SMTP id y15-v6so18627339wrg.11 for ; Mon, 07 May 2018 16:11:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=JvP9BLZqQ9X9tMuDmSi8FkOhCKQu1LTN0Lh306GeW+w=; b=cwY0tLl0etyuNxgchML3NFPpVHFKc2Ryv3ldwNX9FczTChkrlwK3YJ+avaP86GaSfC 55PeAKPy7LQe90kkWP4YTRW8vjROgF7cSnftqEw7cd0SkrqoleECWBMFXhs/HdbJN69B J7So/PoFhqXRrO5Bxl8yjCul82ENsRnCMpJmaPgmNXWQmsUyAUShe4/1rX7lNIkcsqv9 Fwmx/EZzdSDvCQeDcnDF3l6u5NNERFLlMT2ee5sgRZOj4q17eeocwlwuUXCEbhS3IOzZ 9C7gXSHAHITrZYO01zB4TswWMlTzXBdn6zIWRSxPGqGuUA0PF/vMN95hNP2ZpRAGjgUo 0t2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=JvP9BLZqQ9X9tMuDmSi8FkOhCKQu1LTN0Lh306GeW+w=; b=hI+drAZ0rNeMMpIHpbuf3KkYcYG9TfpWpOk0dPXbytbVsF253aEeM73ZtD2zL6pdoj 0wKNCNqcdeHoXjVd7TOSsD/nrfrfr/Ko6JStrdwYj0aTwh0Qr+1+hwqxSvzQzrQ7fY/5 EKfVzD7qwQGKo/JVmHHd7VyfQUm0tQyFBUDExoAl9i6ZrnQ38HWmgHi8IvC63uZSRhZL 0xsQn2fufsQF623M+j/y3cYKwh4c1PJZnb56WcPEt/xgifzWkeojby4T4QtG4+ZKCYPX 3npkZUnnf0ZUCVbc9N38rBuM7Y0z8b5qM1okrh7VUEDJRatdBc0b3ZFmSsZMWrwrrrKr nG7g== X-Gm-Message-State: ALQs6tCcfcO+Tz3RHXO7MKNHsDt6ugp9Wbfb2AAWCrL4TPMn1C8uT37X OZyWLcrHSG7WitS69StwRk8FeHVX X-Received: by 2002:adf:ce8a:: with SMTP id r10-v6mr29968005wrn.222.1525734700692; Mon, 07 May 2018 16:11:40 -0700 (PDT) Received: from rywe.jkqxz.net (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id h133sm10179527wmf.47.2018.05.07.16.11.39 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 May 2018 16:11:40 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Tue, 8 May 2018 00:11:30 +0100 Message-Id: <20180507231131.29840-5-sw@jkqxz.net> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180507231131.29840-1-sw@jkqxz.net> References: <20180507231131.29840-1-sw@jkqxz.net> Subject: [FFmpeg-devel] [PATCH 5/6] cbs_h264: Add support for mastering display SEI messages 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/cbs_h264.h | 10 ++++++++++ libavcodec/cbs_h2645.c | 1 + libavcodec/cbs_h264_syntax_template.c | 23 +++++++++++++++++++++++ libavcodec/h264_sei.h | 1 + 4 files changed, 35 insertions(+) diff --git a/libavcodec/cbs_h264.h b/libavcodec/cbs_h264.h index b9536611ef..c46dd5064c 100644 --- a/libavcodec/cbs_h264.h +++ b/libavcodec/cbs_h264.h @@ -306,6 +306,15 @@ typedef struct H264RawSEIDisplayOrientation { uint8_t display_orientation_extension_flag; } H264RawSEIDisplayOrientation; +typedef struct H264RawSEIMasteringDisplayColourVolume { + uint16_t display_primaries_x[3]; + uint16_t display_primaries_y[3]; + uint16_t white_point_x; + uint16_t white_point_y; + uint16_t max_display_mastering_luminance; + uint16_t min_display_mastering_luminance; +} H264RawSEIMasteringDisplayColourVolume; + typedef struct H264RawSEIPayload { uint32_t payload_type; uint32_t payload_size; @@ -318,6 +327,7 @@ typedef struct H264RawSEIPayload { H264RawSEIUserDataUnregistered user_data_unregistered; H264RawSEIRecoveryPoint recovery_point; H264RawSEIDisplayOrientation display_orientation; + H264RawSEIMasteringDisplayColourVolume mastering_display_colour_volume; struct { uint8_t *data; size_t data_length; diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index b8194cb3b1..7354a949cf 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -427,6 +427,7 @@ static void cbs_h264_free_sei_payload(H264RawSEIPayload *payload) case H264_SEI_TYPE_PAN_SCAN_RECT: case H264_SEI_TYPE_RECOVERY_POINT: case H264_SEI_TYPE_DISPLAY_ORIENTATION: + case H264_SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME: break; case H264_SEI_TYPE_USER_DATA_REGISTERED: av_buffer_unref(&payload->payload.user_data_registered.data_ref); diff --git a/libavcodec/cbs_h264_syntax_template.c b/libavcodec/cbs_h264_syntax_template.c index fb1685e6e6..027b555db6 100644 --- a/libavcodec/cbs_h264_syntax_template.c +++ b/libavcodec/cbs_h264_syntax_template.c @@ -740,6 +740,25 @@ static int FUNC(sei_display_orientation)(CodedBitstreamContext *ctx, RWContext * return 0; } +static int FUNC(sei_mastering_display_colour_volume)(CodedBitstreamContext *ctx, RWContext *rw, + H264RawSEIMasteringDisplayColourVolume *current) +{ + int err, c; + + for (c = 0; c < 3; c++) { + us(16, display_primaries_x[c], 0, 50000, 1, c); + us(16, display_primaries_y[c], 0, 50000, 1, c); + } + + u(16, white_point_x, 0, 50000); + u(16, white_point_y, 0, 50000); + + u(32, max_display_mastering_luminance, 1, MAX_UINT_BITS(32)); + u(32, min_display_mastering_luminance, 0, current->max_display_mastering_luminance - 1); + + return 0; +} + static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw, H264RawSEIPayload *current) { @@ -787,6 +806,10 @@ static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw, CHECK(FUNC(sei_display_orientation) (ctx, rw, ¤t->payload.display_orientation)); break; + case H264_SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME: + CHECK(FUNC(sei_mastering_display_colour_volume) + (ctx, rw, ¤t->payload.mastering_display_colour_volume)); + break; default: { #ifdef READ diff --git a/libavcodec/h264_sei.h b/libavcodec/h264_sei.h index 6455f3cec5..a169a10e49 100644 --- a/libavcodec/h264_sei.h +++ b/libavcodec/h264_sei.h @@ -35,6 +35,7 @@ typedef enum { H264_SEI_TYPE_FRAME_PACKING = 45, ///< frame packing arrangement H264_SEI_TYPE_DISPLAY_ORIENTATION = 47, ///< display orientation H264_SEI_TYPE_GREEN_METADATA = 56, ///< GreenMPEG information + H264_SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME = 137, ///< mastering display properties H264_SEI_TYPE_ALTERNATIVE_TRANSFER = 147, ///< alternative transfer } H264_SEI_Type;