From patchwork Tue Sep 27 23:49:02 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 761 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.66 with SMTP id o63csp131108vsd; Tue, 27 Sep 2016 16:50:07 -0700 (PDT) X-Received: by 10.194.141.163 with SMTP id rp3mr29518531wjb.124.1475020207082; Tue, 27 Sep 2016 16:50:07 -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 k9si5235371wjx.225.2016.09.27.16.50.01; Tue, 27 Sep 2016 16:50:07 -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 B0A11689F98; Wed, 28 Sep 2016 02:49:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi0-f68.google.com (mail-oi0-f68.google.com [209.85.218.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 754D1689F8D for ; Wed, 28 Sep 2016 02:49:40 +0300 (EEST) Received: by mail-oi0-f68.google.com with SMTP id i193so1856066oib.3 for ; Tue, 27 Sep 2016 16:49:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=pCe5suK5JnoyLXJFEa+ohWQ27pTH63n4lKPR48AX8TM=; b=welTYtn6LCDr6KSqCCq/11wDMxO1L1AObESmzyJ4e7LZfYmUsvrsssTE52yT7i0Gco 7qJvuaKV7gJIlcrA1NIWH4Pvd78uMwoA9u6BhIGuW+iyl8hWmtRBKgnRdDhbdOyYPink ZdPgJ/pFnZEkHSc9LlzVQ00zykf89Hg6+ZDJdu+1OD5ytOs0v3cf7GiWaUa4UI6NdGNN TowLyChdXyWFhlbX6awSBqRpb4tQDPierNRa+hOOElwti46Bn89cUhMj9ja/XIXEP3+V 9OtWSbu/1Q5yTZkK2iOJwAo5wMZyC4C/AIkfLPCZhlfyYr3q/ViXOMBSW/Tow966eomg Nv1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=pCe5suK5JnoyLXJFEa+ohWQ27pTH63n4lKPR48AX8TM=; b=PwWNuPyO2rWHKJm1Nyc2uAIkB6LmRND9b7VeSoDl1EgsDpDEQNJKdO9gE2UBGIzD5q i5PdBZk4Nmzge6nE2rthMzAdMuoWjfZtEiSOMaTwfQHctDFT35q1OLxttW7bFYnGXhVP /LOoUkBcKDBl0Ga2AocNOnw6EfHW+VfihI/iZiISzeU7y8X31HbdK/a7lYlcfm87iOqe HOnxJLeChaRHmpnVjX10plVQ9rczO08OHqT5EE/tsgIG6c3aESf4wquOqHYG0H+siDDa CNnXlqOBttOwXBiXve5IzW1bMN1eSziReMhsbtT0CJecY2bOFQB2bbUH8Zw5wD05pSdt Sa/A== X-Gm-Message-State: AA6/9RnuyRRfIdOUnYm8u3nkXIjHO/jxo0OrNZA5A0jnvGjDosmKdGKGen8Mpio3BHf9Yg== X-Received: by 10.157.43.4 with SMTP id o4mr716178otb.139.1475020190559; Tue, 27 Sep 2016 16:49:50 -0700 (PDT) Received: from localhost.localdomain ([181.22.0.151]) by smtp.gmail.com with ESMTPSA id w78sm1449038oiw.17.2016.09.27.16.49.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 Sep 2016 16:49:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Sep 2016 20:49:02 -0300 Message-Id: <20160927234903.4184-1-jamrial@gmail.com> X-Mailer: git-send-email 2.9.1 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/matroskaenc: don't write an empty Colour master element 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" Signed-off-by: James Almer --- libavformat/matroskaenc.c | 53 ++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 3eeb09b..3cbc437 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -734,60 +734,73 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, } static int mkv_write_video_color(AVIOContext *pb, AVCodecParameters *par, AVStream *st) { + AVIOContext *dyn_cp; + uint8_t *colorinfo_ptr; int side_data_size = 0; + int ret, colorinfo_size; const uint8_t *side_data = av_stream_get_side_data( st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, &side_data_size); - ebml_master colorinfo = start_ebml_master(pb, MATROSKA_ID_VIDEOCOLOR, 0); + + ret = avio_open_dyn_buf(&dyn_cp); + if (ret < 0) + return ret; if (par->color_trc != AVCOL_TRC_UNSPECIFIED && par->color_trc < AVCOL_TRC_NB) { - put_ebml_uint(pb, MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, + put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, par->color_trc); } if (par->color_space != AVCOL_SPC_UNSPECIFIED && par->color_space < AVCOL_SPC_NB) { - put_ebml_uint(pb, MATROSKA_ID_VIDEOCOLORMATRIXCOEFF, par->color_space); + put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORMATRIXCOEFF, par->color_space); } if (par->color_primaries != AVCOL_PRI_UNSPECIFIED && par->color_primaries < AVCOL_PRI_NB) { - put_ebml_uint(pb, MATROSKA_ID_VIDEOCOLORPRIMARIES, par->color_primaries); + put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORPRIMARIES, par->color_primaries); } if (par->color_range != AVCOL_RANGE_UNSPECIFIED && par->color_range < AVCOL_RANGE_NB) { - put_ebml_uint(pb, MATROSKA_ID_VIDEOCOLORRANGE, par->color_range); + put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORRANGE, par->color_range); } if (side_data_size == sizeof(AVMasteringDisplayMetadata)) { ebml_master meta_element = start_ebml_master( - pb, MATROSKA_ID_VIDEOCOLORMASTERINGMETA, 0); + dyn_cp, MATROSKA_ID_VIDEOCOLORMASTERINGMETA, 0); const AVMasteringDisplayMetadata *metadata = (const AVMasteringDisplayMetadata*)side_data; if (metadata->has_primaries) { - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_RX, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_RX, av_q2d(metadata->display_primaries[0][0])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_RY, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_RY, av_q2d(metadata->display_primaries[0][1])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_GX, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_GX, av_q2d(metadata->display_primaries[1][0])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_GY, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_GY, av_q2d(metadata->display_primaries[1][1])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_BX, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_BX, av_q2d(metadata->display_primaries[2][0])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_BY, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_BY, av_q2d(metadata->display_primaries[2][1])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_WHITEX, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_WHITEX, av_q2d(metadata->white_point[0])); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_WHITEY, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_WHITEY, av_q2d(metadata->white_point[1])); } if (metadata->has_luminance) { - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, av_q2d(metadata->max_luminance)); - put_ebml_float(pb, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, + put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, av_q2d(metadata->min_luminance)); } - end_ebml_master(pb, meta_element); + end_ebml_master(dyn_cp, meta_element); } - end_ebml_master(pb, colorinfo); + + colorinfo_size = avio_close_dyn_buf(dyn_cp, &colorinfo_ptr); + if (colorinfo_size) { + ebml_master colorinfo = start_ebml_master(pb, MATROSKA_ID_VIDEOCOLOR, 0); + avio_write(pb, colorinfo_ptr, colorinfo_size); + end_ebml_master(pb, colorinfo); + } + av_free(colorinfo_ptr); return 0; } @@ -1125,7 +1138,9 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, put_ebml_binary(pb, MATROSKA_ID_VIDEOCOLORSPACE, &color_space, sizeof(color_space)); } if (s->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) { - mkv_write_video_color(pb, par, st); + ret = mkv_write_video_color(pb, par, st); + if (ret < 0) + return ret; } end_ebml_master(pb, subinfo); break;