From patchwork Thu Sep 23 00:46:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 30465 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6506:0:0:0:0:0 with SMTP id z6csp1087633iob; Wed, 22 Sep 2021 17:46:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwblL4nmW4RJr8bq56yHp35ZbGdQ7uDK9QSdSgiP9JQlbIHNxxo/hnOn6J5uC+xXQOwdQu5 X-Received: by 2002:a05:6402:299:: with SMTP id l25mr2395589edv.343.1632357999445; Wed, 22 Sep 2021 17:46:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632357999; cv=none; d=google.com; s=arc-20160816; b=mnQjdECVudOdrCr0oMLarfo2uu6RAandUApt2Jh58AOIJRmlzojxtAQ6u79lITSEUB a14vZvBQdbWZsuVM+NSyrzmP7EhCFzuOBi7qTcZoTZbOgrzQvRnsSv5wdQzE00JDK2uu M9ygbyTUFkuJvAIEkT10UQda54IvzQkL3GfY6EDaBzK3mhayv1apmDni4iC5lnHISFF2 b0EhUM9SDshPdEDwr402HmAWJ8XgtrTtu/GvV1dtJgLCjl/8ZeCXvV1Xdv8MjPlEMhrb uOBdnfUsedhZGSMDpLxx9MtYky01ClVr/BQ012jdql9CKbwzGAP55LC+31L0dVR25a3X XkuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=xaV3cna4hmo9D7ni0QAsNqj4v771EL2wmY2de0lqnqE=; b=O+hQgzLDX1XxbA/dOUm8waCERUIS96wOkNoUJiBKy0x04gJL5K/OoETXflGlqVmp3l BtNcqm2Vwljy36Bd9cBCvKZMZc/KfkY2xnSNuRWBTGF6IFoFLrJZjyEkj+mVT3aDhj9z iLUka7BRywG5xpWrGphoThMK0fP701oeKTIIx9TDlCOY0DZb4TimdgHw2ScjPNW4Ojtx OTNHeNCNK3yumdh+Uo3PypmqN7SX7m+Pc8UoiZIRRPCnwvjOadaTJtYnAdJqcHCFBpH1 gBurHQjuafyMDhyuUCwoszWjVOYtyMJ3l5MmdnX8qGpFkrd7EsyosGrel2Iyh3HBbBhn y31A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=RieChgXc; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c2si4070817edn.140.2021.09.22.17.46.38; Wed, 22 Sep 2021 17:46:39 -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 header.s=20210112 header.b=RieChgXc; 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 sp=QUARANTINE 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 9A61368A9EE; Thu, 23 Sep 2021 03:46:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f42.google.com (mail-qv1-f42.google.com [209.85.219.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B5F8068A4E5 for ; Thu, 23 Sep 2021 03:46:28 +0300 (EEST) Received: by mail-qv1-f42.google.com with SMTP id z12so3212152qvx.5 for ; Wed, 22 Sep 2021 17:46:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=54cRUAv5roG2xrG+Wl7nyViHeQcI5ivIhpvKVIaH7tU=; b=RieChgXceDzLlIeQklqFIihOMgot5apb/6KSBmk+I2abNZiQpIfGmdv7IioGMzIZUz 46BcEihYlwr7bk6eaH81j9Ddacb5gr/aTm2piAVrZnyo8T+hxLOBpPqt6x62CpLedzy0 5zexth1gPO+EoIcmbxwqWES2y8LjcBIuNYV5P2E4knQOsp65oc5zlecg6o9ul4kpnb+M xWISWDHz40drFvi9awUYRPnLwexY7QM7/zwR9IJ/AtYNMg9gZnDwBB1GGWym03bC30hj yAb6giWf0gOsKI9TTH74poSM/9y2Ds1tJrRk+D06LlHFAaYH14XvLxUR/xcKKn4utdce yCkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=54cRUAv5roG2xrG+Wl7nyViHeQcI5ivIhpvKVIaH7tU=; b=Af3kmm0B+cUscK8m5Hx1ki2dT9tyS4gJ2Q+jrOceoIDmkNVW/WsCDn+WBigV6YYH8S SjP5cxMeOt3d6eh6Z4vc6rEHOZky7Ne5vWI34iZjkvUfuk/uHdbuOTBU65guDOSkxNat 7aYbm4mKzwHlpANA5i/wd1mgcEr0zs6Vozx7hKNYuFXsk2twGFaUxWEi/pgxmJIr2WBq 5pXxq7J5HQDlV3a9zcd9XrGEMiUUASX7Qdh7QfHG4WufM/OeGjtLUiUU0Eh11Nqd4L6H pEV9cMf/sGcZtR0aryT5FZ/jvdXP7H2bl13z/qKjDDVgiXeVtzom0kndYSe//GvigSBU 0ueQ== X-Gm-Message-State: AOAM533Gz4CgvyZfFdpJV4Zt4ruCuKoBQcbchvedi1tTZjXoUn1rqXvU amq6uC+eJbHuAY0FcBJ3ynun911kkqrABg== X-Received: by 2002:a0c:e345:: with SMTP id a5mr1988322qvm.27.1632357987046; Wed, 22 Sep 2021 17:46:27 -0700 (PDT) Received: from nark.. (modemcable017.92-130-66.mc.videotron.ca. [66.130.92.17]) by smtp.gmail.com with ESMTPSA id j26sm2511618qtr.53.2021.09.22.17.46.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 17:46:26 -0700 (PDT) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Sep 2021 20:46:20 -0400 Message-Id: <20210923004624.476145-1-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avformat/matroskadec: Parse Block Additional Mapping elements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 4ntwlTK2ayCj Most of the implementation was done by the Plex developers. Signed-off-by: quietvoid --- libavformat/matroska.h | 7 ++++++ libavformat/matroskadec.c | 45 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 2d04a6838b..4b2a3310a4 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -111,6 +111,7 @@ #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240 #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE +#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4 /* IDs in the trackvideo master */ #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 @@ -189,6 +190,12 @@ #define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4 #define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3 +/* IDs in the block addition mapping master */ +#define MATROSKA_ID_BLKADDIDVALUE 0x41F0 +#define MATROSKA_ID_BLKADDIDNAME 0x41A4 +#define MATROSKA_ID_BLKADDIDTYPE 0x41E7 +#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED + /* ID in the cues master */ #define MATROSKA_ID_POINTENTRY 0xBB diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 500c83ac3a..8ae553953d 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -239,6 +239,13 @@ typedef struct MatroskaTrackOperation { EbmlList combine_planes; } MatroskaTrackOperation; +typedef struct MatroskaBlockAdditionMapping { + int value; + char *name; + int type; + EbmlBin extradata; +} MatroskaBlockAdditionMapping; + typedef struct MatroskaTrack { uint64_t num; uint64_t uid; @@ -269,6 +276,7 @@ typedef struct MatroskaTrack { int ms_compat; int needs_decoding; uint64_t max_block_additional_id; + EbmlList block_addition_mappings; uint32_t palette[AVPALETTE_COUNT]; int has_palette; @@ -419,8 +427,8 @@ typedef struct MatroskaDemuxContext { // incomplete type (6.7.2 in C90, 6.9.2 in C99). // Removing the sizes breaks MSVC. static EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_track_video_color[15], matroska_track_video[19], - matroska_track[32], matroska_track_encoding[6], matroska_track_encodings[2], - matroska_track_combine_planes[2], matroska_track_operation[2], matroska_tracks[2], + matroska_track[33], matroska_track_encoding[6], matroska_track_encodings[2], + matroska_track_combine_planes[2], matroska_track_operation[2], matroska_block_addition_mapping[5], matroska_tracks[2], matroska_attachments[2], matroska_chapter_entry[9], matroska_chapter[6], matroska_chapters[2], matroska_index_entry[3], matroska_index[2], matroska_tag[3], matroska_tags[2], matroska_seekhead[2], matroska_blockadditions[2], matroska_blockgroup[8], matroska_cluster_parsing[8]; @@ -570,6 +578,14 @@ static EbmlSyntax matroska_track_operation[] = { CHILD_OF(matroska_track) }; +static EbmlSyntax matroska_block_addition_mapping[] = { + { MATROSKA_ID_BLKADDIDVALUE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) }, + { MATROSKA_ID_BLKADDIDNAME, EBML_STR, 0, 0, offsetof(MatroskaBlockAdditionMapping, name) }, + { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) }, + { MATROSKA_ID_BLKADDIDEXTRADATA, EBML_BIN, 0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) }, + CHILD_OF(matroska_track) +}; + static EbmlSyntax matroska_track[] = { { MATROSKA_ID_TRACKNUMBER, EBML_UINT, 0, 0, offsetof(MatroskaTrack, num) }, { MATROSKA_ID_TRACKNAME, EBML_UTF8, 0, 0, offsetof(MatroskaTrack, name) }, @@ -593,6 +609,7 @@ static EbmlSyntax matroska_track[] = { { MATROSKA_ID_TRACKOPERATION, EBML_NEST, 0, 0, offsetof(MatroskaTrack, operation), { .n = matroska_track_operation } }, { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST, 0, 0, 0, { .n = matroska_track_encodings } }, { MATROSKA_ID_TRACKMAXBLKADDID, EBML_UINT, 0, 0, offsetof(MatroskaTrack, max_block_additional_id), { .u = 0 } }, + { MATROSKA_ID_TRACKBLKADDMAPPING, EBML_NEST, 0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } }, { MATROSKA_ID_SEEKPREROLL, EBML_UINT, 0, 0, offsetof(MatroskaTrack, seek_preroll), { .u = 0 } }, { MATROSKA_ID_TRACKFLAGENABLED, EBML_NONE }, { MATROSKA_ID_TRACKFLAGLACING, EBML_NONE }, @@ -2306,6 +2323,26 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, return 0; } +static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track) +{ + int i, ret; + const EbmlList *mappings_list = &track->block_addition_mappings; + MatroskaBlockAdditionMapping *mappings = mappings_list->elem; + + for (i = 0; i < mappings_list->nb_elem; i++) { + MatroskaBlockAdditionMapping *mapping = &mappings[i]; + + switch (mapping->type) { + default: + av_log(s, AV_LOG_DEBUG, + "Unknown block additional mapping type %i, value %i, name \"%s\"\n", + mapping->type, mapping->value, mapping->name ? mapping->name : ""); + } + } + + return 0; +} + static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum AVCodecID *codec_id) { const AVCodecTag *codec_tags; @@ -2893,6 +2930,10 @@ static int matroska_parse_tracks(AVFormatContext *s) if (track->flag_textdescriptions) st->disposition |= AV_DISPOSITION_DESCRIPTIONS; } + + ret = mkv_parse_block_addition_mappings(s, st, track); + if (ret < 0) + return ret; } return 0; From patchwork Thu Sep 23 00:46:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 30462 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6506:0:0:0:0:0 with SMTP id z6csp1087742iob; Wed, 22 Sep 2021 17:46:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzLmW2EVDJMFqUFtPdsERG1LIYSxmwMoiT2Vygl38tGG5L48FhS4ujfFLfP1fyDd6iBOLh/ X-Received: by 2002:a17:907:9908:: with SMTP id ka8mr2323257ejc.164.1632358010262; Wed, 22 Sep 2021 17:46:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632358010; cv=none; d=google.com; s=arc-20160816; b=TRIwdLuw0DXL4+wn0tscuSjA6Ed0I00LS15EQEAtlzVEZ5W2bowt9EcixMJGLhBeEe d/VXKmCJEfVtsXgmcYU7cSp9AkUTrHn9EeOKY7enoJRumr8+7bgGnNfLofwz9QZg2JZH iUTeJqxUEPVTDIm3lRkinW8u/NetWmO+TC0GuMXCJ6JF3R7dMExw9RAqC/7xPn2Ccgp4 B7MWG39gPX+yqvirU30MB5c2jHkGKPeAs7kDUY5Vl0UMyiPlsZVR2sLa9peu5YJuQOg+ IbiPRDolSaQ1z3CfKtk7fkRCRQuqfGDVBccm6U3zoubh/0BkwGF+O3yl44H/4beU/NJI wojw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=vrIu5uzSAckegi4mbDia4Za6XtsLkfrx7PtP0IvDHFk=; b=ksAlTShwuWxVV9q+LuNWkHr2O27CfVUf+OGfnmLn2HsiajoARZsylPbxcMJyJutY2G BewTJKxId4xAnIWRKL+ROtNI7GwFX0y6FaTwQu+YIwiNSR0hIAIjvIAJb4J6LRiAYYuw 1P9vocIrTn0eDzbzbkF6v/wkZlyH2lvBEws+TXK7VbQXeeEpSAgCmL/gMccA10yBKnyE NunEJwYtHGbIbICBy0QPMBqoe3hO5g0IglYfYdI+XjjbETqnOvc+xEJB4htB/0o7vW3M wu+qzBIfHJwQDYbIIb44P9SsoESx1Dt+C9wHXQIcW0pmaU/InaUNCKiArcwoXU2TcQPx JTfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=H0N0hAdm; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s30si4556644ejm.715.2021.09.22.17.46.49; Wed, 22 Sep 2021 17:46:50 -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 header.s=20210112 header.b=H0N0hAdm; 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 sp=QUARANTINE 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 AD9AF68AA90; Thu, 23 Sep 2021 03:46:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D5D2468A4E5 for ; Thu, 23 Sep 2021 03:46:28 +0300 (EEST) Received: by mail-qv1-f48.google.com with SMTP id a14so3196272qvb.6 for ; Wed, 22 Sep 2021 17:46:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=npGaD9OUSqf0qT84nrJ464NiGrmjMjzyKnACW6DsaO0=; b=H0N0hAdmWgRYAUg6j9bDSISQsE4w4LLxttLQtGH0/OKkmWCLx4A2A/7cHJNYa9qXMe pDTXxKFbop08sxHuItePF8IYbGflvjKtPut3ZcVPBChqMERqr1M21SIPT80DJz1kF7rZ r4sQCvqVS/prkdC7NDWW4J6vwqGtwfep8t59+p3S0p26ovlZAWGnXOHzRTOuwwddKrj3 GvccoHtk4iJOYQzpxizHUF3SJ7IooRc4wM/NzRjDCdjBD+5muzfd2Qyq5wBDx1MK/W75 Pru1QJVXIQoazxMNUrE9Ov6TrGQKvm1hPjQhpjF/rkKjUhU0jSSieS/R57yzUiJxocSC Zvww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=npGaD9OUSqf0qT84nrJ464NiGrmjMjzyKnACW6DsaO0=; b=wAXU9P/7dHJ40HqOedn7sHGg2ibVuZ/IB9e0jqmDoInZV+Lk+PCt6LwgQai6mv7bwQ dT+sA4qdWuw2CbR3PppXEgXytSHx5vLWvoBuh+2HmTO2C00EPMTs76U511LmSMmL4fL9 a3Lo00A5sldpzc0ZpobvLHQAL1Jgyj1jfFfDxKQvA3ommJPt/ORiMeEyqfZDev0zY27L 89Ffdqjwbbbfvy27m9BbnqeB+o7YMsVrcZ8y4LyEyJ1c5yV7A/aePqqIjd7Ke/AG00kf Fy/z+IAhlu6SqPqbMZ252pZvlWcU/dPAqVitLWxYRuIe1a5TkZUFJ3FOLwFMl85UI01Z LL1A== X-Gm-Message-State: AOAM531NtbE5JkHr79Tg64/n3+wWO7O3+ebkdwpbwSRUWa+evWr8oLhT 8vYxIJK4ErIvS05HgY5QXPdgMW+aR8KzNQ== X-Received: by 2002:a0c:ef04:: with SMTP id t4mr2020619qvr.61.1632357987555; Wed, 22 Sep 2021 17:46:27 -0700 (PDT) Received: from nark.. (modemcable017.92-130-66.mc.videotron.ca. [66.130.92.17]) by smtp.gmail.com with ESMTPSA id j26sm2511618qtr.53.2021.09.22.17.46.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 17:46:27 -0700 (PDT) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Sep 2021 20:46:21 -0400 Message-Id: <20210923004624.476145-2-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210923004624.476145-1-tcChlisop0@gmail.com> References: <20210923004624.476145-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avformat/matroskadec: Parse dvcC/dvvC block additional mapping X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: YZaikEOBzvlL The parsing was implemented in isom, for the unification of the mov/mpegts DOVI parsing into one function, in a later patch. Most of the implementation was done by Plex developers. Signed-off-by: quietvoid --- libavformat/isom.c | 51 +++++++++++++++++++++++++++++++++++++++ libavformat/isom.h | 5 ++++ libavformat/matroskadec.c | 13 ++++++++++ 3 files changed, 69 insertions(+) diff --git a/libavformat/isom.c b/libavformat/isom.c index 4df5440023..80a8f4d7b0 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -430,3 +430,54 @@ void ff_mov_write_chan(AVIOContext *pb, int64_t channel_layout) } avio_wb32(pb, 0); // mNumberChannelDescriptions } + +int ff_mov_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, GetBitContext *gb) +{ + AVDOVIDecoderConfigurationRecord *dovi; + size_t dovi_size; + int ret; + + if (gb->size_in_bits < 32) + return AVERROR_INVALIDDATA; + + dovi = av_dovi_alloc(&dovi_size); + if (!dovi) + return AVERROR(ENOMEM); + + dovi->dv_version_major = get_bits(gb, 8); + dovi->dv_version_minor = get_bits(gb, 8); + + dovi->dv_profile = get_bits(gb, 7); + dovi->dv_level = get_bits(gb, 6); + dovi->rpu_present_flag = get_bits1(gb); + dovi->el_present_flag = get_bits1(gb); + dovi->bl_present_flag = get_bits1(gb); + + // Has enough remaining data + if (gb->size_in_bits >= 36) { + dovi->dv_bl_signal_compatibility_id = get_bits(gb, 4); + } else { + // 0 stands for None + // Dolby Vision V1.2.93 profiles and levels + dovi->dv_bl_signal_compatibility_id = 0; + } + + ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, + (uint8_t *)dovi, dovi_size); + if (ret < 0) { + av_free(dovi); + return ret; + } + + av_log(s, AV_LOG_TRACE, "DOVI, version: %d.%d, profile: %d, level: %d, " + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", + dovi->dv_version_major, dovi->dv_version_minor, + dovi->dv_profile, dovi->dv_level, + dovi->rpu_present_flag, + dovi->el_present_flag, + dovi->bl_present_flag, + dovi->dv_bl_signal_compatibility_id + ); + + return 0; +} diff --git a/libavformat/isom.h b/libavformat/isom.h index 34a58c79b7..44bd839852 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -27,6 +27,9 @@ #include #include +#include "libavcodec/get_bits.h" + +#include "libavutil/dovi_meta.h" #include "libavutil/encryption_info.h" #include "libavutil/mastering_display_metadata.h" #include "libavutil/spherical.h" @@ -390,4 +393,6 @@ static inline enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags) #define MOV_ISMV_TTML_TAG MKTAG('d', 'f', 'x', 'p') #define MOV_MP4_TTML_TAG MKTAG('s', 't', 'p', 'p') +int ff_mov_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, GetBitContext *gb); + #endif /* AVFORMAT_ISOM_H */ diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 8ae553953d..4633067d48 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2323,6 +2323,14 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, return 0; } +static int mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaTrack *track, + EbmlBin *bin) +{ + GetBitContext gb; + init_get_bits8(&gb, bin->data, bin->size); + return ff_mov_parse_dvcc_dvvc(s, st, &gb); +} + static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track) { int i, ret; @@ -2333,6 +2341,11 @@ static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, c MatroskaBlockAdditionMapping *mapping = &mappings[i]; switch (mapping->type) { + case MKBETAG('d','v','c','C'): + case MKBETAG('d','v','v','C'): + if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) + return ret; + break; default: av_log(s, AV_LOG_DEBUG, "Unknown block additional mapping type %i, value %i, name \"%s\"\n", From patchwork Thu Sep 23 00:46:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 30464 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6506:0:0:0:0:0 with SMTP id z6csp1087833iob; Wed, 22 Sep 2021 17:47:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzq8clYEjwldDs6tczhJjXhUrKnSVmMHwPZ/CMet5JPkrPqzsAdtbJBGsg5tnur9qu5971M X-Received: by 2002:a17:906:b80b:: with SMTP id dv11mr2305985ejb.156.1632358020851; Wed, 22 Sep 2021 17:47:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632358020; cv=none; d=google.com; s=arc-20160816; b=GS+V/I4huacKafTsSBDI38q+Su954zJYYVYDBl32I3MEzT63qxbgScdrKYafFgMFqu xgjCkp3k4XjgD3dI7YD6JGvlQjCFR78lXgOMMjLDl2KwO2oNdDM9fRQvglr/Vdm+umf0 rzH0yLT8BMasBCY7ZBQNEZp9kq6jSoAdR5U0uKwFu5VmDJW+tsvnUZnqqPE6mcL2gTNL Ft7ebT1lDxcW12g6CQ+GiXwIfcfP9lH49ke++QzaUxzSXr6X1ck1TAtyFRU6kHAD5SHv pQU6Zo58kAHn8W0be77nnTRWHYTuYVmbmUqTE3UXuyuzArTtnNUXytpCl2o9YB1X0Bn/ Kv0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=4YTCU8zT1m+L/ZMLm5uywZ5nuwoC9iWR1XhKvnxZzWE=; b=b7UMemvIEOBJk4YghXkAldmlyHuDa/MaYcjSeHxDfQcuPEV0zTQDJ7sPgkYGgg5+ty +rCC5/ptYSELeWwQytt44tIGPFlcYJ1QH7+jODNXBHUGsnUyxDMpQBy7G0SHXxzAlYv0 DENgEWIJ6vnkHF7xSlPQjnn/+/JANWpxXwna5ps9ArEBjLopc3dUID0ZMoPhB7pIwIy6 Q65Go21yw7rXNl+6zk+Xd3cJwqGOfc3UlrU600YP+B+5jdxd9RDrqcIdGoyQ/wSg6oIH XVKJecjfLDK9M5P5NUS8vrXI6BL8czd73723QeoyfpDleAUmIveq/tPqh27TI0rHeKUC e8Uw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=kp8BYOB3; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r12si4521985edp.414.2021.09.22.17.47.00; Wed, 22 Sep 2021 17:47:00 -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 header.s=20210112 header.b=kp8BYOB3; 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 sp=QUARANTINE 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 C033468AAFE; Thu, 23 Sep 2021 03:46:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5F34468A9EE for ; Thu, 23 Sep 2021 03:46:29 +0300 (EEST) Received: by mail-qv1-f46.google.com with SMTP id w8so3228834qvu.1 for ; Wed, 22 Sep 2021 17:46:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C6z4a9Y6zxXOEonX6f5K2NLtYw5726+XGKe9x4u3MnY=; b=kp8BYOB39lvV147u6yNPDYdOSjR4BXhr6yNpn+pIx5Ag9pJCIXWrXlF8Fk+erHly8I xydg/a5SX+geSsFP83d845YMRmL8UcgFp/rF94/68WTsA8NDI1v6fBPdU+8dqpHXK1xV 8FPydnUfFFtL5QTDRr0jyBwTTW3bi2QYePDa88zPztp4ibPb7McBuFL1djX3a6AOrpaY RXVfjCh5BV+VIkBcPyOcGg0X6V270VZTHR+H0s+uuRMwFHyHwzabO80hGgvrEWCJwBfJ 8YWK/e93/kJrbWJHeKRsE2AoxRWvcUbTjqi27mFHLdL5InTQ4ijN512EjmmMZGKVtF9R Scmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C6z4a9Y6zxXOEonX6f5K2NLtYw5726+XGKe9x4u3MnY=; b=UXV8r+FZ0xC8w584cgymprPQeJ2Ubfi03cGbsTSFNp+u9QmBKT1o1GwEkc+h9ReL3k R8s2/Ef2y+OTBj1HJLjwENwkJ6mKtk+z+K2sBlO1mOGbuXhNCWFNuiY1cf9KJauGKdtx cs+EcGzhOPhnEEn26c1Dg6fNH9hyG57HJWYcZHZVII955pDCBq6qEavQspjIyNz++sYu 7haZ1ALAtMWslDCvcs85+G1LZcvwsXQfnCfAeDtZ3NXx+mn5tuYyybvfErFdt9qbl19+ Lso7/wE/wSykdjIX0JiCFplkvIET6moAzVCHVbgfh+aFnNCF6ImoDq6aO2zXiwzYcUR8 hHfg== X-Gm-Message-State: AOAM530yYLCu63/day7Y+8WylX7D+vDsBmsMMFN0TEv7wnUJKAHKo2b4 M/Ukszw2QtxYH1uA2774X1a+erGpU4Rptg== X-Received: by 2002:ad4:430f:: with SMTP id c15mr713101qvs.21.1632357988116; Wed, 22 Sep 2021 17:46:28 -0700 (PDT) Received: from nark.. (modemcable017.92-130-66.mc.videotron.ca. [66.130.92.17]) by smtp.gmail.com with ESMTPSA id j26sm2511618qtr.53.2021.09.22.17.46.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 17:46:27 -0700 (PDT) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Sep 2021 20:46:22 -0400 Message-Id: <20210923004624.476145-3-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210923004624.476145-1-tcChlisop0@gmail.com> References: <20210923004624.476145-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avformat/matroskaenc: Write dvcC/dvvC block additional mapping X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: bm0dW92QhIBW When muxing to Matroska, write the Block Additional Mapping if there is AV_PKT_DATA_DOVI_CONF side data present. Most of the code was implemented by Plex developers. Signed-off-by: quietvoid --- libavformat/isom.c | 42 +++++++++++++++++++++++++++++++++++++++ libavformat/isom.h | 4 ++++ libavformat/matroskaenc.c | 33 ++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/libavformat/isom.c b/libavformat/isom.c index 80a8f4d7b0..a5eb2e0caf 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -481,3 +481,45 @@ int ff_mov_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, GetBitContext *gb) return 0; } + +int ff_mov_put_dvcc_dvvc(AVFormatContext *s, uint8_t *out, int size, uint32_t *type, + AVDOVIDecoderConfigurationRecord *dovi) +{ + PutBitContext pb; + init_put_bits(&pb, out, size); + + if (size < MOV_DVCC_DVVC_SIZE) + return AVERROR(EINVAL); + + if (dovi->dv_profile > 7) + *type = MKBETAG('d', 'v', 'v', 'C'); + else + *type = MKBETAG('d', 'v', 'c', 'C'); + + put_bits(&pb, 8, dovi->dv_version_major); + put_bits(&pb, 8, dovi->dv_version_minor); + put_bits(&pb, 7, dovi->dv_profile); + put_bits(&pb, 6, dovi->dv_level); + put_bits(&pb, 1, dovi->rpu_present_flag); + put_bits(&pb, 1, dovi->el_present_flag); + put_bits(&pb, 1, dovi->bl_present_flag); + put_bits(&pb, 4, dovi->dv_bl_signal_compatibility_id); + put_bits(&pb, 28, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + flush_put_bits(&pb); + + av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d, profile: %d, level: %d, " + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", + dovi->dv_profile > 7 ? "dvvC" : "dvcC", + dovi->dv_version_major, dovi->dv_version_minor, + dovi->dv_profile, dovi->dv_level, + dovi->rpu_present_flag, + dovi->el_present_flag, + dovi->bl_present_flag, + dovi->dv_bl_signal_compatibility_id); + + return put_bits_count(&pb) / 8; +} diff --git a/libavformat/isom.h b/libavformat/isom.h index 44bd839852..6214180c00 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -28,6 +28,7 @@ #include #include "libavcodec/get_bits.h" +#include "libavcodec/put_bits.h" #include "libavutil/dovi_meta.h" #include "libavutil/encryption_info.h" @@ -393,6 +394,9 @@ static inline enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags) #define MOV_ISMV_TTML_TAG MKTAG('d', 'f', 'x', 'p') #define MOV_MP4_TTML_TAG MKTAG('s', 't', 'p', 'p') +#define MOV_DVCC_DVVC_SIZE 24 int ff_mov_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, GetBitContext *gb); +int ff_mov_put_dvcc_dvvc(AVFormatContext *s, uint8_t *out, int size, uint32_t *type, + AVDOVIDecoderConfigurationRecord *dovi); #endif /* AVFORMAT_ISOM_H */ diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 039f20988a..e99bd655cc 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1115,6 +1115,33 @@ static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, return 0; } +static int mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) +{ + int ret; + AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) + av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); + + if (dovi) { + ebml_master mapping; + uint8_t buf[MOV_DVCC_DVVC_SIZE]; + uint32_t type; + int size; + + if ((ret = ff_mov_put_dvcc_dvvc(s, buf, sizeof(buf), &type, dovi)) < 0) + return ret; + + size = ret; + + mapping = start_ebml_master(pb, MATROSKA_ID_TRACKBLKADDMAPPING, 0); + put_ebml_string(pb, MATROSKA_ID_BLKADDIDNAME, "Dolby Vision configuration"); + put_ebml_uint(pb, MATROSKA_ID_BLKADDIDTYPE, type); + put_ebml_binary(pb, MATROSKA_ID_BLKADDIDEXTRADATA, buf, size); + end_ebml_master(pb, mapping); + } + + return 0; +} + static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, AVStream *st, mkv_track *track, AVIOContext *pb, int is_default) @@ -1380,6 +1407,12 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, return AVERROR(EINVAL); } + // After video track, before private data + if (par->codec_type == AVMEDIA_TYPE_VIDEO) { + if ((ret = mkv_write_dovi(s, pb, st)) < 0) + return ret; + } + if (mkv->mode != MODE_WEBM || par->codec_id != AV_CODEC_ID_WEBVTT) { track->codecpriv_offset = avio_tell(pb); ret = mkv_write_codecprivate(s, pb, par, native_id, qt_id); From patchwork Thu Sep 23 00:46:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 30461 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6506:0:0:0:0:0 with SMTP id z6csp1087948iob; Wed, 22 Sep 2021 17:47:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz1FJrMxQSHgdBN/kCYKdcWRYuogAGW8WC7QeqPGO375T/NRJ1mg2wKMcHbxUNUWdRgdCru X-Received: by 2002:a17:907:2064:: with SMTP id qp4mr2260084ejb.317.1632358032416; Wed, 22 Sep 2021 17:47:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632358032; cv=none; d=google.com; s=arc-20160816; b=bZca0tRKvhqOXgceUj8rrf6CLgsrN43nAAQtuYXvzUyhgAU+INXyXca5cxKmlksgLp 7K0sGtZCimFIj3wZiNmRKTRKfEpyOMeMJuiFknosKpsFFsHsLVa81BAsw/xM9WFAC/6p gowoioYFvKt7nlqgzvw+Nx1pVSFZTUaORBDFlVOnd7kakAxPZnIYORfxdhnS+Ri95fa2 xMlwWT1Hrc4YzUQFu3+7WCeRRYuMMqaYiSd5UTgOMSX9WFqy+Ac3ZqZPQmv8jLo5DNIV IrIVnWxK1remhRNFQiYtlcPpJHF3JG63ei+Y0+iGWbnMSF520ObB7CSR96e9GRfLOXMf DtwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=3h4Ijr586E+P32hjIxJeiHVMLd4vRHk0A86OhHtmhkk=; b=A3OLDos29YGebtH4V8EbpSya71T6fhQtYBw3yf5I80ysjQZUiddZxr+kpZtg5ds+Hz fRi0OMiuLfeCxG0FVjt/faXIY1kag7jS6nCC74x/QehiURzzKpSsr4BB/lm4IWwiAzaW yenpLCWNl7xnyN57m8LwUD93oZmP7Lno8yQJLitqWtgdF/b/Z3GFY5Dakn0CXyXXoeyd vGBwEbmZi7xq3h5RkUXfjqbF507reAcs2GximJLuCMoe5t2cmvUo6oqs86AP+nqu6hn/ gSnLfHdNnJCHOWr9H7qVAPYpKZBXKhDbuaMMjJhGzQEmPji1Uz5YLeh68I77YbGeBmfj OvBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=KexSXA+f; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ka17si4463152ejc.609.2021.09.22.17.47.12; Wed, 22 Sep 2021 17:47:12 -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 header.s=20210112 header.b=KexSXA+f; 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 sp=QUARANTINE 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 EE79268AB27; Thu, 23 Sep 2021 03:46:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f176.google.com (mail-qk1-f176.google.com [209.85.222.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6C3C168AA84 for ; Thu, 23 Sep 2021 03:46:30 +0300 (EEST) Received: by mail-qk1-f176.google.com with SMTP id 73so16385301qki.4 for ; Wed, 22 Sep 2021 17:46:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CTaW5nj5F034RFL/u3CYNxalzF6Xsz42hPPOjPJQ/0M=; b=KexSXA+ffk5dWHWv/F5v6qLsuS1l0Cbx3bngME7/s9dZ5IgQim/ONY6G96F771wE4z KqDdEcukTQr6QEODf/LrdvyCcXuAuoRUeXxE4r6ProPIb7Z+PWo7mO2sPLPzhgOT1EYd Nro4Jh8ThxyyqkvfwJ5ojpT+6luFrRzWlnXiGMHQvuaNaeOL/LHImoT6nVht1ubr/i8z J61LL3Ds1sRoqQdaZoDjyhBXM2ninzc7yVp8A0mKguOsO7Nq5sRoaIBJ2oJRq/92Wurl We1rKBPS/KZ1THfimnHXYjbEEpAWUjBZCnd2R/2Ay4xQza/Kw0kwgaEAxQ4m8C4PNJtv tPlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CTaW5nj5F034RFL/u3CYNxalzF6Xsz42hPPOjPJQ/0M=; b=q9kxejstzVrr+YjQyHwNJU8bc2QTMvvqoAvst6qKgIX9Z2nibCZUmiWntYsvUTwWSn XsQgKM1f3KpkS0HkRBDe39gJlZNgQhczQm5uvILQUExls2cz4pNC24jEBvkEdJGXqyQG n6YNGVHYdnWtpAGQJDxsBHL82HQJibehaqcK+ycWq+3FPwkBc8Iov38+rvLt/3qEejgg ngsdeIpdgaw0lOsoouIVur+odVe/QNxMU4t0CmJg2XpSRyI8eLWhlfsePtNh3vkSu7A2 Gdn67ngrj8LW3GrZUTD72Xnn/wHBATBNO5I7G+XUavkpPElKUoLS6cmdlD3OouXwKIH1 j83g== X-Gm-Message-State: AOAM530ATNK8gztXSGk4BbRmxa/acvsZUzHkGB9fUdZYSOp4w2iZmYZF i/4mdBX4vQS7EXYZDatTLLv/4uc455cUUw== X-Received: by 2002:a37:9d16:: with SMTP id g22mr2337998qke.158.1632357988632; Wed, 22 Sep 2021 17:46:28 -0700 (PDT) Received: from nark.. (modemcable017.92-130-66.mc.videotron.ca. [66.130.92.17]) by smtp.gmail.com with ESMTPSA id j26sm2511618qtr.53.2021.09.22.17.46.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 17:46:28 -0700 (PDT) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Sep 2021 20:46:23 -0400 Message-Id: <20210923004624.476145-4-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210923004624.476145-1-tcChlisop0@gmail.com> References: <20210923004624.476145-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avformat/mov: Refactor DOVI box parsing to use ff_mov_parse_dvcc_dvvc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ArTrqh7VqT4P Read at most 24 bytes, but in reality only 5 bytes are used for parsing. The rest of the bytes are reserved in the specification. Signed-off-by: quietvoid --- libavformat/mov.c | 48 +++++++++-------------------------------------- 1 file changed, 9 insertions(+), 39 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index ca14646a38..d3c483a2f1 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -6797,10 +6797,10 @@ static int mov_read_dmlp(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_dvcc_dvvc(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; - uint32_t buf; - AVDOVIDecoderConfigurationRecord *dovi; - size_t dovi_size; + uint8_t buf[MOV_DVCC_DVVC_SIZE + AV_INPUT_BUFFER_PADDING_SIZE]; + GetBitContext gb; int ret; + int64_t read_size = atom.size; if (c->fc->nb_streams < 1) return 0; @@ -6809,46 +6809,16 @@ static int mov_read_dvcc_dvvc(MOVContext *c, AVIOContext *pb, MOVAtom atom) if ((uint64_t)atom.size > (1<<30) || atom.size < 4) return AVERROR_INVALIDDATA; - dovi = av_dovi_alloc(&dovi_size); - if (!dovi) - return AVERROR(ENOMEM); - - dovi->dv_version_major = avio_r8(pb); - dovi->dv_version_minor = avio_r8(pb); - - buf = avio_rb16(pb); - dovi->dv_profile = (buf >> 9) & 0x7f; // 7 bits - dovi->dv_level = (buf >> 3) & 0x3f; // 6 bits - dovi->rpu_present_flag = (buf >> 2) & 0x01; // 1 bit - dovi->el_present_flag = (buf >> 1) & 0x01; // 1 bit - dovi->bl_present_flag = buf & 0x01; // 1 bit - if (atom.size >= 24) { // 4 + 4 + 4 * 4 - buf = avio_r8(pb); - dovi->dv_bl_signal_compatibility_id = (buf >> 4) & 0x0f; // 4 bits - } else { - // 0 stands for None - // Dolby Vision V1.2.93 profiles and levels - dovi->dv_bl_signal_compatibility_id = 0; + // At most 24 bytes + if (read_size > MOV_DVCC_DVVC_SIZE) { + read_size = MOV_DVCC_DVVC_SIZE; } - ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, - (uint8_t *)dovi, dovi_size); - if (ret < 0) { - av_free(dovi); + if ((ret = ffio_read_size(pb, buf, read_size)) < 0) return ret; - } - av_log(c, AV_LOG_TRACE, "DOVI in dvcC/dvvC box, version: %d.%d, profile: %d, level: %d, " - "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", - dovi->dv_version_major, dovi->dv_version_minor, - dovi->dv_profile, dovi->dv_level, - dovi->rpu_present_flag, - dovi->el_present_flag, - dovi->bl_present_flag, - dovi->dv_bl_signal_compatibility_id - ); - - return 0; + init_get_bits8(&gb, buf, read_size); + return ff_mov_parse_dvcc_dvvc(c->fc, st, &gb); } static const MOVParseTableEntry mov_default_parse_table[] = { From patchwork Thu Sep 23 00:46:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 30463 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6506:0:0:0:0:0 with SMTP id z6csp1088051iob; Wed, 22 Sep 2021 17:47:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx03JYunKl7nfjhIj11YFyCmh37FI5PGbJ1f1OjktOMcBMOx3E6rQg5RsPPuvZdL4/Fpe3X X-Received: by 2002:a17:906:c005:: with SMTP id e5mr2228777ejz.480.1632358043440; Wed, 22 Sep 2021 17:47:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632358043; cv=none; d=google.com; s=arc-20160816; b=bkwKBF3HIKnDV3TBt94l6GXohuBTj1rcaqASZIJA9R7PD7lAgpYOH28MJXg8MxqBTo kzPhh7gtaVcQNslCX7Rm5ZVLg29YbOjtrSu5JYHdFANSIbVykVBv52sdHKakyYfRGFy9 n3DqHJCvFW9HgEaaNOk2xZ5sul4FFlw1XdE9Wgm5lP7jTCAItpwXHX2qLuKIqrn8XcVg OYBXdCg1K9jlMGGaH0PD8QfTHDfJYj/EzAjLmOXIOVlgpwYA469kHs3NsiA2zxYUmvZ8 bu+TTBDMlhmqQoSh7wQEHU38gWSJnQpKso2nm+jHuj0fohVAuq0T24lUvybGhtFf7fcd nu2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=BfCXdr3U2WkC+LwEX5efq5jAxRJeF337xbUyKPFMhz0=; b=xCyLkF1hbt76U0Xw3VHGa/KBaq3ekCyrTXj+LgYzt/A0la0MNtk3Mnoq8WKVK9wd25 YXuDwoFq8oo90mCEs07izqmAVWDlkUKfQdKQHJb/WOtJTGHXONeyYptSKdpF2FtqKz/p /WUvCtcFiCZ9SgWjyiRZ+YJ9a94pTBsTbltGeWP5xEoq82I+ZHWn/d/8FJ/16/WcwhEO CYCjst48HSvLkGYZqRpJqxY4Gd8MSBYcDrYUi+yVK4AjyuabJLnH9HrFBLxEdj0mNShI xgIn/iFEYjYa7R08w8jTDF3rAjYCamTLF8t2ozH9toq6C5xVMXwzYoo/tP+3TnB8emXR 4w4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="VC5Sj3/f"; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z5si4243833edr.302.2021.09.22.17.47.23; Wed, 22 Sep 2021 17:47:23 -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 header.s=20210112 header.b="VC5Sj3/f"; 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 sp=QUARANTINE 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 0549968ABA7; Thu, 23 Sep 2021 03:46:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76EC568AA90 for ; Thu, 23 Sep 2021 03:46:30 +0300 (EEST) Received: by mail-qk1-f177.google.com with SMTP id q125so1695042qkd.12 for ; Wed, 22 Sep 2021 17:46:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Euq4+44rGSLVFC+XbvG5/bqVdQlA4GYArxvUvDxFtWc=; b=VC5Sj3/fMEbwPaM2txdai2kSvvMMmO8Egc6Eoo7CH1+tbx2rVV32y4bPzHtGFmCO6u r17VVIUras8B2tOCeqLxZ7Y+Vn/PU+tlG96/CdbQ5H4fIJWWRckEbyy94JWQ9Do1zULB 3uy0qKsZvXN8cpYSbuT+l6p1jOPZBY3aq7Tz7ZsynFxAHn8UJfAbVKsPH1m7iRrOikAq 7w0w1LJILX8kNQXqvC6QjgMaZpab728aLZoa03K8KGmF2LPtcjvib4AU9BEQnx/b1glV 2fwJb29WrCxKRg7kylaLXCKqQd6bUkhWCMhi7P0x37EACEuCzL0YNzs/H971cTnigfKJ wNiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Euq4+44rGSLVFC+XbvG5/bqVdQlA4GYArxvUvDxFtWc=; b=MNOQFwZ1yZ9EwNwswgRjIGICYVj5d/Vl1sNxZ+oTlJ3siji7veQAD3R6Uf+9iep4yv 4D01RTcJEBWRt+shwHod/5Fi9UOwvoGUuGAiq4HkPXCBBytSh9Z6ip2IIAeXlAhdcroj 5FXoY0A3E9IptFJUudsSrf/Gt31CWpyqR/GmS6ls+pQ67RtoyUp9OpXjfj7MT3z7EywS 6NqZwLhaEowPLGEDbEmp2/f0Cui+fFXh84eA/8VNDM8b/oklwC/zvXDxCt+ar2MHndF8 EzH/ThcIac0xUOfh+tBTY1Lw7bLLbriDCDgwfjWK5x8naIgtcjjhBOPiCPObMxt0CPwd vGNw== X-Gm-Message-State: AOAM532q7GxKScwghB5F4G/MQEouKOlxs5ia0HWNlyeVS2PPGeMo+dn9 XwMzMUzPDMK5Tt+n5Tm1zGmVID0epOhV6w== X-Received: by 2002:a05:620a:4da:: with SMTP id 26mr2267827qks.178.1632357989229; Wed, 22 Sep 2021 17:46:29 -0700 (PDT) Received: from nark.. (modemcable017.92-130-66.mc.videotron.ca. [66.130.92.17]) by smtp.gmail.com with ESMTPSA id j26sm2511618qtr.53.2021.09.22.17.46.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 17:46:28 -0700 (PDT) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Sep 2021 20:46:24 -0400 Message-Id: <20210923004624.476145-5-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210923004624.476145-1-tcChlisop0@gmail.com> References: <20210923004624.476145-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avformat/mpegts: Refactor DOVI descriptor parsing to use ff_mov_parse_dvcc_dvvc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Kdo1A6JHqhRk Signed-off-by: quietvoid --- libavformat/mpegts.c | 41 +++-------------------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index da8eee2414..19d26ef375 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -2162,49 +2162,14 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type break; case 0xb0: /* DOVI video stream descriptor */ { - uint32_t buf; - AVDOVIDecoderConfigurationRecord *dovi; - size_t dovi_size; + GetBitContext gb; int ret; - if (desc_end - *pp < 4) // (8 + 8 + 7 + 6 + 1 + 1 + 1) / 8 - return AVERROR_INVALIDDATA; - - dovi = av_dovi_alloc(&dovi_size); - if (!dovi) - return AVERROR(ENOMEM); - dovi->dv_version_major = get8(pp, desc_end); - dovi->dv_version_minor = get8(pp, desc_end); - buf = get16(pp, desc_end); - dovi->dv_profile = (buf >> 9) & 0x7f; // 7 bits - dovi->dv_level = (buf >> 3) & 0x3f; // 6 bits - dovi->rpu_present_flag = (buf >> 2) & 0x01; // 1 bit - dovi->el_present_flag = (buf >> 1) & 0x01; // 1 bit - dovi->bl_present_flag = buf & 0x01; // 1 bit - if (desc_end - *pp >= 20) { // 4 + 4 * 4 - buf = get8(pp, desc_end); - dovi->dv_bl_signal_compatibility_id = (buf >> 4) & 0x0f; // 4 bits - } else { - // 0 stands for None - // Dolby Vision V1.2.93 profiles and levels - dovi->dv_bl_signal_compatibility_id = 0; - } + init_get_bits8(&gb, *pp, desc_len); - ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, - (uint8_t *)dovi, dovi_size); - if (ret < 0) { - av_free(dovi); + if ((ret = ff_mov_parse_dvcc_dvvc(fc, st, &gb)) < 0) { return ret; } - - av_log(fc, AV_LOG_TRACE, "DOVI, version: %d.%d, profile: %d, level: %d, " - "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", - dovi->dv_version_major, dovi->dv_version_minor, - dovi->dv_profile, dovi->dv_level, - dovi->rpu_present_flag, - dovi->el_present_flag, - dovi->bl_present_flag, - dovi->dv_bl_signal_compatibility_id); } break; default: