From patchwork Tue May 31 03:13:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Anthony Lemieux X-Patchwork-Id: 35995 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp2607052pzj; Mon, 30 May 2022 20:14:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzcaz/RxdFFYIBBhyPEY6Cu2wjZXdvdZ3PfOuxmEiS2axh3lIZ5aMQEn9F2q4+uG72SbeuK X-Received: by 2002:a17:906:1cd5:b0:6ff:5e8:3abb with SMTP id i21-20020a1709061cd500b006ff05e83abbmr29837466ejh.329.1653966879924; Mon, 30 May 2022 20:14:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653966879; cv=none; d=google.com; s=arc-20160816; b=PfRTSbHPoNEzbE4lQi1idVPnKYaG92CFlC7p+2eFYdhzPpJdOPoNJ43FK9BRl+Hyfj /EqcHttuy5moz2rNE3RXzV4kG+eMoMj2coVZkF++aEfXMe1Ianc8e5meUzyw/S1MtkNf T2/WS8drHTwOCJIt7McBF+ZxX4FBU8iz6PhIcRXCYTd4ARSWxhtdT2/6ByIysc3S1VSU OVFygnUPQ9PRNLZv22NJdHzeo1HleUO0huZ2dvxn90ulRTin27kGXI0g/zFQCv4gBYCK +cuIm4jmsGCeonhBXyA71YEWnGAOPPij6Ea1kta5RA4g+PxHRgdlx+R+3e4CvA515b4O PlWA== 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 :delivered-to; bh=3v52NkBRHpmQnIF6gHYChWVWOGagIKKI5rXVDFgb70E=; b=0XzirNVFMpdNRU+3TfDhFpQwgU63j0ySDzlRnJ58xlnNzcdFYjyaJ05c/5oYfjcIeD PgCKxpRnFXByZU5naL5eNqHE4K+SfR8WeFtkZdVChFHkxn47VVM92xb8Erni0rB9IJkI 4rS8EwUcokVQu4w7wcginAz4pN7bUF7hj7vlgTdYKhosQCv20bZDIVRLWb2eVUUn9lVf lrOQOKcXVzwg1JDgLc3wN5+H4tHxk0XVpdJhumWpBXCmhYERX7F7IF3orsUXhbjWtf3w r6yWexkKhNLcSCw34tw5/3QWpsDkL4hn2gbEDxM6joYtKkiA/02wnJiHKaCnQRnusqm4 +wxA== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v8-20020a056402174800b0042dc303b651si6538913edx.443.2022.05.30.20.14.38; Mon, 30 May 2022 20:14: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; 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 D2F1768B623; Tue, 31 May 2022 06:14:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4932668B3A4 for ; Tue, 31 May 2022 06:14:28 +0300 (EEST) Received: by mail-pj1-f52.google.com with SMTP id gc3-20020a17090b310300b001e33092c737so976168pjb.3 for ; Mon, 30 May 2022 20:14:28 -0700 (PDT) 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=iC5b9ZztsQHWfLrcLV8Bfy+3KZZfxVWunxiWUx22DIM=; b=FSTXT1xHeNuzXGDbBrFVA/BgydV4WrgqrhPVX9sxy194hTIjhPZoXiEbILgo9sHVQk 3oashKTDus6zC0YhmU6+VFrqk4hw4MiGJ5QxLwes2fYgvzdVMmxG5hkbRPEX6q4PqYn3 fl4ij9EJEo70sv7ZFZmWrQiGXcOlZTTsAVbfanqDR32qbXL7Nk2I9GdCBzlLHcHZn3eW NyooASDLWW/f7PzC5p54SztnL6tKyjsjWk/tO68w4otoFrcMdmqOX9E2Nbw62IyzNWYi MsArDbXNkieqOsAq0ZqDTFEUE68LAKiqUPUCWznyGOW9FP8WEi8VamiXKNEcwOIqOT2n Fpyg== X-Gm-Message-State: AOAM530AfXYZKxyeIwyhm3GHD1BBgqoOW9iZqmG0EgeQU00n6Bx5zqs9 5nj0bcCDkso/dFzEARo/3YGBm+PGE/c= X-Received: by 2002:a17:90b:4a8a:b0:1e0:239c:fdcb with SMTP id lp10-20020a17090b4a8a00b001e0239cfdcbmr26395513pjb.31.1653966866010; Mon, 30 May 2022 20:14:26 -0700 (PDT) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id f11-20020a170902860b00b0015e8d4eb248sm9780410plo.146.2022.05.30.20.14.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 20:14:25 -0700 (PDT) Received: by localhost (sSMTP sendmail emulation); Mon, 30 May 2022 20:14:22 -0700 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 May 2022 20:13:30 -0700 Message-Id: <20220531031334.19488-1-pal@sandflow.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/6] avutil/uuid: add utility library for manipulating UUIDs as specified in RFC 4122 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: Zane van Iperen , Pierre-Anthony Lemieux Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Yh/xCZiZhNvS From: Zane van Iperen Addresses review comments including: * simplifying av_uuid_parse_range() * removing avcodec/cbs_sei from this refactoring exercise Co-authored-by: Pierre-Anthony Lemieux Signed-off-by: Zane van Iperen --- libavutil/Makefile | 2 + libavutil/uuid.c | 142 +++++++++++++++++++++++++++++++++++++++++++ libavutil/uuid.h | 147 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 291 insertions(+) create mode 100644 libavutil/uuid.c create mode 100644 libavutil/uuid.h diff --git a/libavutil/Makefile b/libavutil/Makefile index 234de62a4b..a0c5cacef4 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -82,6 +82,7 @@ HEADERS = adler32.h \ timestamp.h \ tree.h \ twofish.h \ + uuid.h \ version.h \ video_enc_params.h \ xtea.h \ @@ -174,6 +175,7 @@ OBJS = adler32.o \ tx_float.o \ tx_double.o \ tx_int32.o \ + uuid.o \ version.o \ video_enc_params.o \ film_grain_params.o \ diff --git a/libavutil/uuid.c b/libavutil/uuid.c new file mode 100644 index 0000000000..8943212f30 --- /dev/null +++ b/libavutil/uuid.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2022 Pierre-Anthony Lemieux + * Zane van Iperen + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Copyright (C) 1996, 1997 Theodore Ts'o. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, and the entire permission notice in its entirety, + * including the disclaimer of warranties. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF + * WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + */ + +/** + * @file + * UUID parsing and serialization utilities. + * The library treat the UUID as an opaque sequence of 16 unsigned bytes, + * i.e. ignoring the internal layout of the UUID, which depends on the type + * of the UUID. + * + * @author Pierre-Anthony Lemieux + * @author Zane van Iperen + */ + +#include "uuid.h" +#include "error.h" +#include "avstring.h" +#include + +int av_uuid_parse(const char *in, AVUUID uu) +{ + if (strlen(in) != 36) + return AVERROR(EINVAL); + + return av_uuid_parse_range(in, in + 36, uu); +} + +static int xdigit_to_int(char c) +{ + c = av_tolower(c); + + if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + + if (c >= '0' && c <= '9') + return c - '0'; + + return -1; +} + +int av_uuid_parse_range(const char *in_start, const char *in_end, AVUUID uu) +{ + int i; + const char *cp; + + if ((in_end - in_start) != 36) + return AVERROR(EINVAL); + + for (i = 0, cp = in_start; i < 16; i++) { + int hi; + int lo; + + if (i == 4 || i == 6 || i == 8 || i == 10) + cp++; + + hi = xdigit_to_int(*cp++); + lo = xdigit_to_int(*cp++); + + if (hi == -1 || lo == -1) + return AVERROR(EINVAL); + + uu[i] = (hi << 4) + lo; + } + + return 0; +} + +static char const hexdigits_lower[16] = "0123456789abcdef"; + +void av_uuid_unparse(const AVUUID uuid, char *out) +{ + char *p = out; + + for (int i = 0; i < 16; i++) { + uint8_t tmp; + + if (i == 4 || i == 6 || i == 8 || i == 10) + *p++ = '-'; + + tmp = uuid[i]; + *p++ = hexdigits_lower[tmp >> 4]; + *p++ = hexdigits_lower[tmp & 15]; + } + + *p = '\0'; +} + +int av_uuid_urn_parse(const char *in, AVUUID uu) +{ + if (av_stristr(in, "urn:uuid:") != in) + return AVERROR(EINVAL); + + return av_uuid_parse(in + 9, uu); +} diff --git a/libavutil/uuid.h b/libavutil/uuid.h new file mode 100644 index 0000000000..4b5088911c --- /dev/null +++ b/libavutil/uuid.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2022 Pierre-Anthony Lemieux + * Zane van Iperen + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * UUID parsing and serialization utilities. + * The library treats the UUID as an opaque sequence of 16 unsigned bytes, + * i.e. ignoring the internal layout of the UUID, which depends on the type + * of the UUID. + * + * @author Pierre-Anthony Lemieux + * @author Zane van Iperen + */ + +#ifndef AVUTIL_UUID_H +#define AVUTIL_UUID_H + +#include +#include + +#define AV_PRI_UUID \ + "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \ + "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" + +#define AV_PRI_URN_UUID \ + "urn:uuid:%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \ + "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" + +/* AV_UUID_ARG() is used together with AV_PRI_UUID() or AV_PRI_URN_UUID + * to print UUIDs, e.g. + * av_log(NULL, AV_LOG_DEBUG, "UUID: " AV_PRI_UUID, AV_UUID_ARG(uuid)); + */ +#define AV_UUID_ARG(x) \ + (x)[ 0], (x)[ 1], (x)[ 2], (x)[ 3], \ + (x)[ 4], (x)[ 5], (x)[ 6], (x)[ 7], \ + (x)[ 8], (x)[ 9], (x)[10], (x)[11], \ + (x)[12], (x)[13], (x)[14], (x)[15] + +#define AV_UUID_LEN 16 + +/* Binary representation of a UUID */ +typedef uint8_t AVUUID[AV_UUID_LEN]; + +/** + * Parses a string representation of a UUID formatted according to IETF RFC 4122 + * into an AVUUID. The parsing is case-insensitive. The string must be 37 + * characters long, including the terminating NUL character. + * + * Example string representation: "2fceebd0-7017-433d-bafb-d073a7116696" + * + * @param[in] in String representation of a UUID, + * e.g. 2fceebd0-7017-433d-bafb-d073a7116696 + * @param[out] uu AVUUID + * @return A non-zero value in case of an error. + */ +int av_uuid_parse(const char *in, AVUUID uu); + +/** + * Parses a URN representation of a UUID, as specified at IETF RFC 4122, + * into an AVUUID. The parsing is case-insensitive. The string must be 46 + * characters long, including the terminating NUL character. + * + * Example string representation: "urn:uuid:2fceebd0-7017-433d-bafb-d073a7116696" + * + * @param[in] in URN UUID + * @param[out] uu AVUUID + * @return A non-zero value in case of an error. + */ +int av_uuid_urn_parse(const char *in, AVUUID uu); + +/** + * Parses a string representation of a UUID formatted according to IETF RFC 4122 + * into an AVUUID. The parsing is case-insensitive. + * + * @param[in] in_start Pointer to the first character of the string representation + * @param[in] in_end Pointer to the character after the last character of the + * string representation. That memory location is never + * accessed. It is an error if `in_end - in_start != 36`. + * @param[out] uu AVUUID + * @return A non-zero value in case of an error. + */ +int av_uuid_parse_range(const char *in_start, const char *in_end, AVUUID uu); + +/** + * Serializes a AVUUID into a string representation according to IETF RFC 4122. + * The string is lowercase and always 37 characters long, including the + * terminating NUL character. + * + * @param[in] uu AVUUID + * @param[out] out Pointer to an array of no less than 37 characters. + * @return A non-zero value in case of an error. + */ +void av_uuid_unparse(const AVUUID uu, char *out); + +/** + * Compares two UUIDs for equality. + * + * @param[in] uu1 AVUUID + * @param[in] uu2 AVUUID + * @return Nonzero if uu1 and uu2 are identical, 0 otherwise + */ +static inline int av_uuid_equal(const AVUUID uu1, const AVUUID uu2) +{ + return memcmp(uu1, uu2, AV_UUID_LEN) == 0; +} + +/** + * Copies the bytes of src into dest. + * + * @param[out] dest AVUUID + * @param[in] src AVUUID + */ +static inline void av_uuid_copy(AVUUID dest, const AVUUID src) +{ + memcpy(dest, src, AV_UUID_LEN); +} + +/** + * Sets a UUID to the nil UUID, i.e. a UUID with have all + * its 128 bits set to zero. + * + * @param[in,out] uu UUID to be set to the nil UUID + */ +static inline void av_uuid_nil(AVUUID uu) +{ + memset(uu, 0, AV_UUID_LEN); +} + +#endif /* AVUTIL_UUID_H */ From patchwork Tue May 31 03:13:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Anthony Lemieux X-Patchwork-Id: 35996 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp2607093pzj; Mon, 30 May 2022 20:14:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxPOEGugm19qzCR/LSZGacxCUS67H8yuwWAH2+yTDvacgbvsO/JzvXMy+jOEUOtzdBU2ctF X-Received: by 2002:a05:6402:2682:b0:42b:5ace:b0e5 with SMTP id w2-20020a056402268200b0042b5aceb0e5mr45687901edd.358.1653966891050; Mon, 30 May 2022 20:14:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653966891; cv=none; d=google.com; s=arc-20160816; b=k7nu/eWKXUN5uLFEjFWpJydUx8Q0Sg1In6in5kmX05IeedxtQUBZW3hF5NrwLf7Gwa +IptM3RSL0XBESRLWD9im1eex3LOypVTDgSsuweL/KltcVHT9GmARUS38R+O3g/ytv+N BdVshSKUhCbj6h2O4fmXIs1FKGM/TwH0DBjRvy3+2RS/Sbuqmr7p4585khMYLkdFNzgb 41z7Lq54xGTfA/TI0cpBPB6jrN+QaRqamwo5vVpdZj/YUzZ/IWsjvRQH59ZaITnVIS6o REL9o7HWQRAkYikXSpu/vYs9hI1ic8DKLskmbI9j9T1VUgWZ/ZN5PMGkRNA/B0ahe/Pg zvqg== 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:delivered-to; bh=nDBMqcJRg+8SDbBD38sou3gdimoLeHTgjbRReSGK0ZE=; b=cay91E9jIJTiw1jyoMrfm3qOlmclT4GAVd1V6jeO0gRf/ZPkBmadhMaGMZcYECcZAL +9u6uBN73uFRIB2iTbMyNJKWRwyC1EeTJgC4utEifSfHr6S2yTPrqUQWdj1JzW9c0y4E V0RObx9qVBWnwjrzw0RUPxgvV+lLHmujlucjD3AbrZo/Kkkzz1CC1wHoxlASwZpQNkIs Sz8R81JYNS4XkBhRAc5fB3rj2W4XBlDXUPL3R6JDjxSB/8KreBwAvOkGGoSF6uwarqju XLQ4P6qLJ1OfCVwB6gyRayoFwT174EgjdcNYINaPbsIuKPtAQa6HwUl80765W1rf1dDi FglA== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hz3-20020a1709072ce300b006febcb1be15si12790991ejc.309.2022.05.30.20.14.50; Mon, 30 May 2022 20:14:51 -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; 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 05FED68B518; Tue, 31 May 2022 06:14:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 96FFE68B518 for ; Tue, 31 May 2022 06:14:33 +0300 (EEST) Received: by mail-pf1-f169.google.com with SMTP id 15so644302pfy.3 for ; Mon, 30 May 2022 20:14:33 -0700 (PDT) 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=fEQhv6FeTKETHnUqKBIak/1OT2JTV4ywf5O6lwGXBIM=; b=0/cxVXkLKD36gvwbq2CWHMqknjdzb/jOda+Qoy21zgEPZdC7yZRQxX4fmLTENl+UUU vkKx6HLi2UTWbrGL7/It0s9MZh0Ns5bYbVnbetsOzJrBGsgWqfTzrJlSBkRAmBQ5tNyO efBI0zPGJ+mdAULY9vtNyyeWk0HMcCQzxC4gDDV+lHZnbtCQQ8lpge/wu7IhIn4uyOI0 FE693RNLyY/nklLSi1EHIxq/wueDnq7DTQBKxLRdWi01ZAN9bN3TUzdm1IuUPB8LaT2o 9b5s3QQKvsHI0db/jjlqyPBhj75rkdqxsoBLlSDVaxSsXbOwAnKQCFlkrxbxMqfazD4c SxdA== X-Gm-Message-State: AOAM530DX6uanEesSPzMKBHg5Nl3qBRWKG8HB7WugAHFKr71tzQJJaUx hb88p3s7J3WXwRkOxmeOl2J/poUFi+c= X-Received: by 2002:a63:88c6:0:b0:3fc:41bc:d60d with SMTP id l189-20020a6388c6000000b003fc41bcd60dmr3043153pgd.296.1653966871280; Mon, 30 May 2022 20:14:31 -0700 (PDT) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id m11-20020a17090b068b00b001e307d66123sm459819pjz.25.2022.05.30.20.14.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 20:14:30 -0700 (PDT) Received: by localhost (sSMTP sendmail emulation); Mon, 30 May 2022 20:14:27 -0700 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 May 2022 20:13:31 -0700 Message-Id: <20220531031334.19488-2-pal@sandflow.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220531031334.19488-1-pal@sandflow.com> References: <20220531031334.19488-1-pal@sandflow.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/6] avutil/tests/uuid: add uuid tests 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: Pierre-Anthony Lemieux Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Zj6dAVSxmlqA From: Pierre-Anthony Lemieux --- libavutil/Makefile | 1 + libavutil/tests/.gitignore | 1 + libavutil/tests/uuid.c | 141 +++++++++++++++++++++++++++++++++++++ tests/fate/libavutil.mak | 5 ++ 4 files changed, 148 insertions(+) create mode 100644 libavutil/tests/uuid.c diff --git a/libavutil/Makefile b/libavutil/Makefile index a0c5cacef4..5c2ff319cc 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -261,6 +261,7 @@ TESTPROGS = adler32 \ tree \ twofish \ utf8 \ + uuid \ xtea \ tea \ diff --git a/libavutil/tests/.gitignore b/libavutil/tests/.gitignore index 9d90827954..919010e4fc 100644 --- a/libavutil/tests/.gitignore +++ b/libavutil/tests/.gitignore @@ -48,4 +48,5 @@ /tree /twofish /utf8 +/uuid /xtea diff --git a/libavutil/tests/uuid.c b/libavutil/tests/uuid.c new file mode 100644 index 0000000000..ff688be030 --- /dev/null +++ b/libavutil/tests/uuid.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2022 Pierre-Anthony Lemieux + * Zane van Iperen + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/uuid.h" +#include "libavutil/log.h" + +static const char *UUID_1 = "6021b21e-894e-43ff-8317-1ca891c1c49b"; +static const char *UUID_1_UC = "6021B21E-894E-43FF-8317-1CA891C1C49B"; +static const char *UUID_1_MIXED = "6021b21e-894E-43fF-8317-1CA891C1c49b"; +static const char *UUID_1_URN = "urn:uuid:6021b21e-894e-43ff-8317-1ca891c1c49b"; +static const AVUUID UUID_1_BYTES = {0x60, 0x21, 0xb2, 0x1e, 0x89, 0x4e, 0x43, 0xff, + 0x83, 0x17, 0x1c, 0xa8, 0x91, 0xc1, 0xc4, 0x9b}; + +static const AVUUID UUID_NIL = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static const char *UUID_BAD_1 = "16a2c9f8-afbc-4767-8621-8cb2b27599"; +static const char *UUID_BAD_2 = "75df62c2999b4bd38c9d8058fcde9123"; +static const char *UUID_BAD_3 = "a1b9a05e-f1d1-464g-a951-1ba0a374f02"; +static const char *UUID_BAD_4 = "279c66d432-7b39-41d5-966f-5e8138265c20"; + +int main(int argc, char **argv) +{ + AVUUID uuid; + AVUUID uuid2 = {0x32, 0xc7, 0x00, 0xc4, 0xd5, 0xd7, 0x42, 0x0, + 0x93, 0xc0, 0x3b, 0x6d, 0xea, 0x1b, 0x20, 0x5b}; + + /* test parsing */ + + if (av_uuid_parse(UUID_1, uuid)) + return 1; + + if (!av_uuid_equal(uuid, UUID_1_BYTES)) + return 1; + + /* test nil */ + + av_uuid_nil(uuid); + + if (!av_uuid_equal(uuid, UUID_NIL)) + return 1; + + /* test equality */ + + if (av_uuid_equal(UUID_1_BYTES, uuid2)) + return 1; + + /* test copy */ + + av_uuid_copy(uuid2, UUID_1_BYTES); + + if (!av_uuid_equal(uuid2, UUID_1_BYTES)) + return 1; + + /* test uppercase parsing */ + + if (av_uuid_parse(UUID_1_UC, uuid)) + return 1; + + if (!av_uuid_equal(uuid, UUID_1_BYTES)) + return 1; + + /* test mixed-case parsing */ + + if (av_uuid_parse(UUID_1_MIXED, uuid)) + return 1; + + if (!av_uuid_equal(uuid, UUID_1_BYTES)) + return 1; + + /* test URN uuid parse */ + + if (av_uuid_urn_parse(UUID_1_URN, uuid)) + return 1; + + if (!av_uuid_equal(uuid, UUID_1_BYTES)) + return 1; + + /* test parse range */ + + if (av_uuid_parse_range(UUID_1_URN + 9, UUID_1_URN + 45, uuid)) + return 1; + + if (!av_uuid_equal(uuid, UUID_1_BYTES)) + return 1; + + /* test bad parse range */ + + if (!av_uuid_parse_range(UUID_1_URN + 9, UUID_1_URN + 44, uuid)) + return 1; + + /* test bad parse range 2 */ + + if (!av_uuid_parse_range(UUID_1_URN + 8, UUID_1_URN + 44, uuid)) + return 1; + + /* test bad parse range 2 */ + + if (!av_uuid_parse_range(UUID_1_URN + 8, UUID_1_URN + 45, uuid)) + return 1; + + /* test bad uuid 1 */ + + if (!av_uuid_parse(UUID_BAD_1, uuid)) + return 1; + + /* test bad uuid 2 */ + + if (!av_uuid_parse(UUID_BAD_2, uuid)) + return 1; + + /* test bad uuid 3 */ + + if (!av_uuid_parse(UUID_BAD_3, uuid)) + return 1; + + /* test bad uuid 4 */ + + if (!av_uuid_parse(UUID_BAD_4, uuid)) + return 1; + + return 0; +} diff --git a/tests/fate/libavutil.mak b/tests/fate/libavutil.mak index c32cf2e706..80153f4395 100644 --- a/tests/fate/libavutil.mak +++ b/tests/fate/libavutil.mak @@ -170,6 +170,11 @@ FATE_LIBAVUTIL += fate-opt fate-opt: libavutil/tests/opt$(EXESUF) fate-opt: CMD = run libavutil/tests/opt$(EXESUF) +FATE_LIBAVUTIL += fate-uuid +fate-uuid: libavutil/tests/uuid$(EXESUF) +fate-uuid: CMD = run libavutil/tests/uuid$(EXESUF) +fate-uuid: CMP = null + FATE_LIBAVUTIL += $(FATE_LIBAVUTIL-yes) FATE-$(CONFIG_AVUTIL) += $(FATE_LIBAVUTIL) fate-libavutil: $(FATE_LIBAVUTIL) From patchwork Tue May 31 03:13:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Anthony Lemieux X-Patchwork-Id: 35997 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp2607119pzj; Mon, 30 May 2022 20:15:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw/rSoVQ3IbLujfxKrAJCQ81ysSEjLaOTlqjN3Sc6WqI4y9RPq9XRiko2vpvM4VBDU6QAlK X-Received: by 2002:a17:906:b10f:b0:6fe:a059:f6f4 with SMTP id u15-20020a170906b10f00b006fea059f6f4mr48896933ejy.194.1653966900229; Mon, 30 May 2022 20:15:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653966900; cv=none; d=google.com; s=arc-20160816; b=cqE5ueDpr+tVYiOEEq0rEuDi15ukD0eWML3jTtGnYTy/JFy+Cq3D7a+cq22jh+6bsp HCkBp5LWfD+ReMpX9XmOnxnj+7tDoFXFLy2VSFpnGuM3XVAk+cIjskZx9wr6QxHiV9+R 3CWlwinEQIIXzEsaMX/j7DakXbULo8+P8wv9rYkkfpM483jC8XXlWuyKkMVhM8pt1zQu HYhbXWSfo14i+W/UHwNarXR5cO9shA5oGAhGHrtj1+KDMJE8T9E/iWNf4Y7VW6LR95z8 yjf2rvm68ITvVbqJkovNT7tNmrdLB+JOzlBCN3Y2qE4URCXLLeg7eeql5lpp1vownZca 5iQg== 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:delivered-to; bh=tlp/r1Wxu3czjqCEbHkLI/CqSBVWZ3XIHofZOIRHgGo=; b=Wkh1VPBNvqVI8DMV0F5ngUbIuG521RSXeTohGt0vthufxnlSRI95Fn3Z2g3kGn3kx8 Iflee1ePkfrs5GnyyOCbkNgwybabjDFpb8CwH33Z9Pc4vBkdOjQD141Ww0a2e0qb+3ZR BUYsiYiXp+D5X9GQZnL2bhQDHKP4HFfSz47JscABVAuJbSgYkE/32lQMidqXQZ8uZXKu ZEll8+1+rUk5foVM8WHxsg9mmyieM8qVWEcuPXubyf6li3V8KWOCPn1sW9zwMoTPS+2o vn7TrX9E6gpjr5JUX8lx4NHNeboa9ztc05oUucQA6sBpfejsfr/mWXLoN8MU7ddyGquC Gkpw== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dt4-20020a170907728400b006f429eb5456si14333505ejc.836.2022.05.30.20.14.59; Mon, 30 May 2022 20:15: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; 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 2757168B63F; Tue, 31 May 2022 06:14:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 93FAC68AE7C for ; Tue, 31 May 2022 06:14:35 +0300 (EEST) Received: by mail-pl1-f176.google.com with SMTP id b5so11712069plx.10 for ; Mon, 30 May 2022 20:14:35 -0700 (PDT) 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=607MiutuA6X5Dja8NNSeYInwJNAgCLiHOCtV+yuJuYA=; b=DpcAunsx7Ps5QKDwh75IVR3POo+le6yV3x9O/Asn4aSsYpD/jVOfzLs/YrJwOScLYk Q6CDek2lIwOTOGN+T1gKCCHhKCXoEiMbLOwxNoXLb6M4+kyaAxo8DPaY4ZU8l/8UI7eO JVJjhZjvdamvntOLpzjiFFzOp04RfkovqCT+fNYmq4OaI+uuw3lf9sgu4ZcYLVVERPRj pjCJivMvKvJhZ5rPid6fQtFiT1/cxQ7iTGTrS3os7v5Jg3s32sX7PT4/bTyhDc5pdSQp s/5Yz2QMyC3zHuxPlqg2mmFJHVKutOJeGLcMtw7LLHA5maVGQqwdefJiNDGauAgMg+gd sbAw== X-Gm-Message-State: AOAM530o5tb5nAiIt4h8PizeJuIVkmt6G6Zu37ChbEeA/XFzmdEaWOOe ila/8/qzvHFnpSHjJ9BvcoMjGrBrUtI= X-Received: by 2002:a17:90a:550d:b0:1e2:eb94:588e with SMTP id b13-20020a17090a550d00b001e2eb94588emr10540434pji.15.1653966873591; Mon, 30 May 2022 20:14:33 -0700 (PDT) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id ik19-20020a170902ab1300b0015e8d4eb283sm6462523plb.205.2022.05.30.20.14.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 20:14:33 -0700 (PDT) Received: by localhost (sSMTP sendmail emulation); Mon, 30 May 2022 20:14:29 -0700 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 May 2022 20:13:32 -0700 Message-Id: <20220531031334.19488-3-pal@sandflow.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220531031334.19488-1-pal@sandflow.com> References: <20220531031334.19488-1-pal@sandflow.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 3/6] avformat/mov: refactor to use avutil/uuid 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: Pierre-Anthony Lemieux Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 3V5TaxQ1x8YP From: Pierre-Anthony Lemieux --- libavformat/mov.c | 25 +++++++++++++------------ libavformat/movenc.c | 9 +++++---- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index d7be593a86..f8248ab65b 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -47,6 +47,7 @@ #include "libavutil/spherical.h" #include "libavutil/stereo3d.h" #include "libavutil/timecode.h" +#include "libavutil/uuid.h" #include "libavcodec/ac3tab.h" #include "libavcodec/flac.h" #include "libavcodec/hevc.h" @@ -5956,21 +5957,21 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) AVStream *st; MOVStreamContext *sc; int64_t ret; - uint8_t uuid[16]; - static const uint8_t uuid_isml_manifest[] = { + AVUUID uuid; + static const AVUUID uuid_isml_manifest = { 0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd, 0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }; - static const uint8_t uuid_xmp[] = { + static const AVUUID uuid_xmp = { 0xbe, 0x7a, 0xcf, 0xcb, 0x97, 0xa9, 0x42, 0xe8, 0x9c, 0x71, 0x99, 0x94, 0x91, 0xe3, 0xaf, 0xac }; - static const uint8_t uuid_spherical[] = { + static const AVUUID uuid_spherical = { 0xff, 0xcc, 0x82, 0x63, 0xf8, 0x55, 0x4a, 0x93, 0x88, 0x14, 0x58, 0x7a, 0x02, 0x52, 0x1f, 0xdd, }; - if (atom.size < sizeof(uuid) || atom.size >= FFMIN(INT_MAX, SIZE_MAX)) + if (atom.size < AV_UUID_LEN || atom.size >= FFMIN(INT_MAX, SIZE_MAX)) return AVERROR_INVALIDDATA; if (c->fc->nb_streams < 1) @@ -5978,13 +5979,13 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) st = c->fc->streams[c->fc->nb_streams - 1]; sc = st->priv_data; - ret = ffio_read_size(pb, uuid, sizeof(uuid)); + ret = ffio_read_size(pb, uuid, AV_UUID_LEN); if (ret < 0) return ret; - if (!memcmp(uuid, uuid_isml_manifest, sizeof(uuid))) { + if (av_uuid_equal(uuid, uuid_isml_manifest)) { uint8_t *buffer, *ptr; char *endptr; - size_t len = atom.size - sizeof(uuid); + size_t len = atom.size - AV_UUID_LEN; if (len < 4) { return AVERROR_INVALIDDATA; @@ -6022,9 +6023,9 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) } av_free(buffer); - } else if (!memcmp(uuid, uuid_xmp, sizeof(uuid))) { + } else if (av_uuid_equal(uuid, uuid_xmp)) { uint8_t *buffer; - size_t len = atom.size - sizeof(uuid); + size_t len = atom.size - AV_UUID_LEN; if (c->export_xmp) { buffer = av_mallocz(len + 1); if (!buffer) { @@ -6044,8 +6045,8 @@ static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (ret < 0) return ret; } - } else if (!memcmp(uuid, uuid_spherical, sizeof(uuid))) { - size_t len = atom.size - sizeof(uuid); + } else if (av_uuid_equal(uuid, uuid_spherical)) { + size_t len = atom.size - AV_UUID_LEN; ret = mov_parse_uuid_spherical(sc, pb, len); if (ret < 0) return ret; diff --git a/libavformat/movenc.c b/libavformat/movenc.c index de971f94e8..b7b2f46a17 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -57,6 +57,7 @@ #include "libavutil/timecode.h" #include "libavutil/dovi_meta.h" #include "libavutil/color_utils.h" +#include "libavutil/uuid.h" #include "hevc.h" #include "rtpenc.h" #include "mov_chan.h" @@ -4487,14 +4488,14 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat int64_t pos = avio_tell(pb); int i; - static const uint8_t uuid[] = { + static const AVUUID uuid = { 0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd, 0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }; avio_wb32(pb, 0); ffio_wfourcc(pb, "uuid"); - avio_write(pb, uuid, sizeof(uuid)); + avio_write(pb, uuid, AV_UUID_LEN); avio_wb32(pb, 0); avio_printf(pb, "\n"); @@ -4753,7 +4754,7 @@ static int mov_write_tfxd_tag(AVIOContext *pb, MOVTrack *track) avio_wb32(pb, 0); /* size placeholder */ ffio_wfourcc(pb, "uuid"); - avio_write(pb, uuid, sizeof(uuid)); + avio_write(pb, uuid, AV_UUID_LEN); avio_w8(pb, 1); avio_wb24(pb, 0); avio_wb64(pb, track->cluster[0].dts + track->cluster[0].cts); @@ -4779,7 +4780,7 @@ static int mov_write_tfrf_tag(AVIOContext *pb, MOVMuxContext *mov, avio_seek(pb, track->frag_info[entry].tfrf_offset, SEEK_SET); avio_wb32(pb, size); ffio_wfourcc(pb, "uuid"); - avio_write(pb, uuid, sizeof(uuid)); + avio_write(pb, uuid, AV_UUID_LEN); avio_w8(pb, 1); avio_wb24(pb, 0); avio_w8(pb, n); From patchwork Tue May 31 03:13:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Anthony Lemieux X-Patchwork-Id: 35998 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp2607162pzj; Mon, 30 May 2022 20:15:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyDlE5TQoaOYBFwnSlut3ZNdTDGg21tZFEpguszgfRFgbygPCagyTefEMJm7yyAmPZaSk8b X-Received: by 2002:aa7:d614:0:b0:42b:f24e:e4c2 with SMTP id c20-20020aa7d614000000b0042bf24ee4c2mr21167477edr.322.1653966910149; Mon, 30 May 2022 20:15:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653966910; cv=none; d=google.com; s=arc-20160816; b=usW5r/XGihp3wHwb1dTI4OPiMiJGYzDqNWg7Csm8ukKyrGr2TytdwONqt7xzGtEu3H /wMvbcG62gXkbi9LKVq+KkRONBKfe2Hw/cXceAHqRS5+ekFg3QsFUFfsFLY9vzcLJMgh RmLPtuUrFBNf1dgzWQYC7bsLalNrflxt9aSvqHO8ffiNTHGnD1pZatoxJiNXKGPm2hKo FcvNJadZ1Bec3HaOgQSpdbC5TYPggsl6JX2R5CDkbeLCSDhV28524ghI05HU5Or3cpg/ 66yxn4Zcm1Tr6d/eDtHAPKX2DbhD+hmRoDRohZv/ATKPj5IUePV46IAO8cskCWr/lol9 Fdtg== 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:delivered-to; bh=te9oryQbOG3zeQUR52dXJK8990S8zzufkcbKFlV+sUI=; b=g2gvJSPqM6pdGNkiu0617PL8VmyISwA4Mdkds1xEvQg7meOxVtqMdClC+iTx0M5VkA N3NHyojU4oECKjGPnoLvwsRD6xFJZCcuw6odZGJ2FJyt5267trVpBRkICiKTxk9kzKH8 YzugjPxMvE07DD+Jj3Yq6iztAftn11DzueX58GDsuNj7MSB9DR7YHzB68eRbgUomAy2Z 7wjwIngy1nYZip1YuNoesXIX5mngzJDP8JYc4k/NtkYLv0c+Q2l+k9F0TQEtNvlF2ALz VZL0vrgVRloLMuqo5G3AAHIXQOmuRsof8xFsbr6i3ny+NEaKwVqOtbCJaUNNyUqZaOau rSow== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h13-20020a0564020e0d00b0042de2965cf0si726244edh.178.2022.05.30.20.15.09; Mon, 30 May 2022 20:15:10 -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; 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 3EA1668B1DD; Tue, 31 May 2022 06:14:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DF1E868B635 for ; Tue, 31 May 2022 06:14:37 +0300 (EEST) Received: by mail-pl1-f172.google.com with SMTP id t2so4119697pld.4 for ; Mon, 30 May 2022 20:14:37 -0700 (PDT) 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=inOmA3C9ICUbIrIDk7VOwMY3IWzQMQ6mpJixCyln1ns=; b=IV4T0s9GpHObvGKZnK77YjXGSWkCjkywhF7PtC8K0a2TobCmZGq0zSftj4zBTVnvFt u4sI4z/D5NCb6nhqQNwisN8/zbvDdJy5g7MUHUpbh9ecYnOLelJobADA2Magz3ClXUBm Wcty5gv/fn7LnhDMr6Hb04mu1XrklGjSUp1xnKuRim6Jpd+kJ7K9pZWuiX9ekASwuzCr nN2fhFNm1OjbUXb0QtLkuI6g7YwUQXdE3qXXZHcvBDnWr2K4/A05qjnj/yPwactEaPHp PHgVnQJKn4gcJja55dV1sgZy0Z1RO7c9jRXLg6LmujDOTFLuErIc4n7cLUVmXToHKty3 uBkQ== X-Gm-Message-State: AOAM53045Y0OY+udzd+KJSO237zV5IFWYsvf2jtBYYWsdyWSdAS5y8JY 66AbxLpYERsm350XLfwxBlnTjIE2YbE= X-Received: by 2002:a17:902:aa07:b0:162:467:db94 with SMTP id be7-20020a170902aa0700b001620467db94mr47964409plb.26.1653966875939; Mon, 30 May 2022 20:14:35 -0700 (PDT) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id v20-20020a1709028d9400b0016378bfeb90sm9829384plo.227.2022.05.30.20.14.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 20:14:35 -0700 (PDT) Received: by localhost (sSMTP sendmail emulation); Mon, 30 May 2022 20:14:32 -0700 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 May 2022 20:13:33 -0700 Message-Id: <20220531031334.19488-4-pal@sandflow.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220531031334.19488-1-pal@sandflow.com> References: <20220531031334.19488-1-pal@sandflow.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 4/6] avformat/smoothstreamingenc: refactor to use avutil/uuid 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: Pierre-Anthony Lemieux Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: APw90NMdBv84 From: Pierre-Anthony Lemieux --- libavformat/smoothstreamingenc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c index 1713dd9009..ade6d5723b 100644 --- a/libavformat/smoothstreamingenc.c +++ b/libavformat/smoothstreamingenc.c @@ -34,6 +34,7 @@ #include "libavutil/opt.h" #include "libavutil/avstring.h" #include "libavutil/mathematics.h" +#include "libavutil/uuid.h" typedef struct Fragment { int64_t start_time, duration; @@ -416,13 +417,13 @@ static int parse_fragment(AVFormatContext *s, const char *filename, int64_t *sta if (len < 8 || len >= *moof_size) goto fail; if (tag == MKTAG('u','u','i','d')) { - static const uint8_t tfxd[] = { + static const AVUUID tfxd = { 0x6d, 0x1d, 0x9b, 0x05, 0x42, 0xd5, 0x44, 0xe6, 0x80, 0xe2, 0x14, 0x1d, 0xaf, 0xf7, 0x57, 0xb2 }; - uint8_t uuid[16]; + AVUUID uuid; avio_read(in, uuid, 16); - if (!memcmp(uuid, tfxd, 16) && len >= 8 + 16 + 4 + 16) { + if (av_uuid_equal(uuid, tfxd) && len >= 8 + 16 + 4 + 16) { avio_seek(in, 4, SEEK_CUR); *start_ts = avio_rb64(in); *duration = avio_rb64(in); From patchwork Tue May 31 03:13:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Anthony Lemieux X-Patchwork-Id: 35999 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp2607220pzj; Mon, 30 May 2022 20:15:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJynf+Eg5aoFJS59rccmU5Af/fU0Ub75g+BPyXnIdJB24yM8CGMBH3lPqKoYCZI8iDPvs+Yz X-Received: by 2002:a17:907:8a0a:b0:6fe:cede:95d8 with SMTP id sc10-20020a1709078a0a00b006fecede95d8mr38521620ejc.59.1653966919631; Mon, 30 May 2022 20:15:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653966919; cv=none; d=google.com; s=arc-20160816; b=lSQq1OhKauzGplGm7zR6lqbOg/nLEe2rFHkhe1CUzlrT8AtY8QAaYZ+Z5GgX5kB//+ fDPdEi1y8tMfPwUAbpYBv8gtDPIqCu/gOn5hYrQ7IMjdyrkAVasUu53jMUw6Y/2LqYBD hEd6/BUOAxJqQikz3MhyM/tdd/8vVFU+kwdmOmnEobuoesPte7MB+mNXMueajtXE7QEH zK/eu0dYUlh3uGsaJfWFyC4YKgLXNsGC3T/Tp+spBkxfaBi/fn0Efe9EaL+7HkNhDV3R PzqODbPEZt+EatXMKBWHyCcAswNTRFaEJIBVdwctcM73uMDylqmEVqOiugex/3Wx85zt Rg0g== 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:delivered-to; bh=BUyNQgO2x2aTk2Wyu7FZbsYN5s+GI4HJoV2gf1hmaI8=; b=EhMlWaxEaVI/OpJgij59dQBx459Hm8j1AGLmY8dy/skkUtbfFlSQww+eY7x4Jgb7iJ FknMF/lW2T9qeMWnCYgXCa9z5aXPx/4RbJTIy55KZbkE9tusC/2egM9V0XUHpgXs/X6l q1W1bGk7BhUb2pySjIhb8mHKEbQqdFkiiL9EmL0C6QIWBgC4x/Pm4+PFX9uHXydP2w80 gdbQ09SOMrghjJHa67IcoF8zrT9XAU9XfBgumgdIyEA6d5ZP1M3ShcEDxkY+cTBO2kwv ONFMy6XREJr4wiQZj0PdJPZNWxGDEsDi4SfyYpm39793CQHaHJhQlacxNKnmj5a1ItuM 6hkQ== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id cb25-20020a0564020b7900b0042dd562305asi3207872edb.589.2022.05.30.20.15.19; Mon, 30 May 2022 20:15:19 -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; 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 597E668B654; Tue, 31 May 2022 06:14:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8A71468B64B for ; Tue, 31 May 2022 06:14:40 +0300 (EEST) Received: by mail-pg1-f178.google.com with SMTP id q123so6586309pgq.6 for ; Mon, 30 May 2022 20:14:40 -0700 (PDT) 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=qv+KORmniv2beaT7E14dtiGpnszzlT1hvThaongm3bE=; b=QCNuP6V29Xc69qs1je6AHrBBOICne1rD5MmPlqK02SidJiT8vBzxmei0zhKWfdwr98 KMGnue68HGlKIKt5R9ktVvvDnwkmEDcHBGZ3iUKEUmmWeqbZ1tYrZa87zBwqZ4Eom3Wu Eq0fWSgVMMgae+HYg8L4NO6t6pwxYHw9sAIbokmVZs78f8IemR7jTnMQ5JW97SbqoEk/ lAd95iAtqAH2lwfF5ybbgHijSV7Lh1oTdB8MoEO4PEBO7Fe3tOVu/e0JQaDt4kDhcBUF GT+jK5XlI9klZURWmjR6dAIwTjTnjg7WudyG/PVZnl+lDGfBpyEhFby1ZwYJzerX159o eLow== X-Gm-Message-State: AOAM5303ox2szeaOCIInDjWJu6r6NhSqE/pDby1KuYVwXy5mqxb81ZsQ V14L2AqEZPbufkcjvlUGq6l4YfLwnWs= X-Received: by 2002:a63:90ca:0:b0:3fa:3e63:15f4 with SMTP id a193-20020a6390ca000000b003fa3e6315f4mr36122370pge.362.1653966878354; Mon, 30 May 2022 20:14:38 -0700 (PDT) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id z6-20020a170903018600b0015e8d4eb25bsm10034835plg.165.2022.05.30.20.14.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 20:14:37 -0700 (PDT) Received: by localhost (sSMTP sendmail emulation); Mon, 30 May 2022 20:14:34 -0700 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 May 2022 20:13:34 -0700 Message-Id: <20220531031334.19488-5-pal@sandflow.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220531031334.19488-1-pal@sandflow.com> References: <20220531031334.19488-1-pal@sandflow.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 5/6] avformat/imf: refactor to use avutil/uuid 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: Pierre-Anthony Lemieux Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 5LTR0/V1Ebm5 From: Pierre-Anthony Lemieux --- libavformat/imf.h | 18 ++++--------- libavformat/imf_cpl.c | 60 +++++++++++++++-------------------------- libavformat/imfdec.c | 34 +++++++++++------------ libavformat/tests/imf.c | 18 ++++++------- 4 files changed, 52 insertions(+), 78 deletions(-) diff --git a/libavformat/imf.h b/libavformat/imf.h index 62c4468ce9..4271cd9582 100644 --- a/libavformat/imf.h +++ b/libavformat/imf.h @@ -58,17 +58,9 @@ #include "avformat.h" #include "libavformat/avio.h" #include "libavutil/rational.h" +#include "libavutil/uuid.h" #include -#define FF_IMF_UUID_FORMAT \ - "urn:uuid:%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \ - "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" - -/** - * UUID as defined in IETF RFC 422 - */ -typedef uint8_t FFIMFUUID[16]; - /** * IMF Composition Playlist Base Resource */ @@ -84,7 +76,7 @@ typedef struct FFIMFBaseResource { */ typedef struct FFIMFTrackFileResource { FFIMFBaseResource base; - FFIMFUUID track_file_uuid; /**< TrackFileResourceType/TrackFileId */ + AVUUID track_file_uuid; /**< TrackFileResourceType/TrackFileId */ } FFIMFTrackFileResource; /** @@ -109,7 +101,7 @@ typedef struct FFIMFMarkerResource { * IMF Composition Playlist Virtual Track */ typedef struct FFIMFBaseVirtualTrack { - FFIMFUUID id_uuid; /**< TrackId associated with the Virtual Track */ + AVUUID id_uuid; /**< TrackId associated with the Virtual Track */ } FFIMFBaseVirtualTrack; /** @@ -135,7 +127,7 @@ typedef struct FFIMFMarkerVirtualTrack { * IMF Composition Playlist */ typedef struct FFIMFCPL { - FFIMFUUID id_uuid; /**< CompositionPlaylist/Id element */ + AVUUID id_uuid; /**< CompositionPlaylist/Id element */ xmlChar *content_title_utf8; /**< CompositionPlaylist/ContentTitle element */ AVRational edit_rate; /**< CompositionPlaylist/EditRate element */ FFIMFMarkerVirtualTrack *main_markers_track; /**< Main Marker Virtual Track */ @@ -196,7 +188,7 @@ int ff_imf_xml_read_rational(xmlNodePtr element, AVRational *rational); * Reads a UUID from an XML element * @return 0 on success, < 0 AVERROR code on error. */ -int ff_imf_xml_read_uuid(xmlNodePtr element, uint8_t uuid[16]); +int ff_imf_xml_read_uuid(xmlNodePtr element, AVUUID uuid); /** * Returns the first child element with the specified local name diff --git a/libavformat/imf_cpl.c b/libavformat/imf_cpl.c index 102a6b4549..4acc20feee 100644 --- a/libavformat/imf_cpl.c +++ b/libavformat/imf_cpl.c @@ -70,32 +70,14 @@ xmlNodePtr ff_imf_xml_get_child_element_by_name(xmlNodePtr parent, const char *n return NULL; } -int ff_imf_xml_read_uuid(xmlNodePtr element, uint8_t uuid[16]) +int ff_imf_xml_read_uuid(xmlNodePtr element, AVUUID uuid) { xmlChar *element_text = NULL; - int scanf_ret; int ret = 0; element_text = xmlNodeListGetString(element->doc, element->xmlChildrenNode, 1); - scanf_ret = sscanf(element_text, - FF_IMF_UUID_FORMAT, - &uuid[0], - &uuid[1], - &uuid[2], - &uuid[3], - &uuid[4], - &uuid[5], - &uuid[6], - &uuid[7], - &uuid[8], - &uuid[9], - &uuid[10], - &uuid[11], - &uuid[12], - &uuid[13], - &uuid[14], - &uuid[15]); - if (scanf_ret != 16) { + ret = av_uuid_urn_parse(element_text, uuid); + if (ret) { av_log(NULL, AV_LOG_ERROR, "Invalid UUID\n"); ret = AVERROR_INVALIDDATA; } @@ -370,7 +352,7 @@ static int fill_marker_resource(xmlNodePtr marker_resource_elem, static int push_marker_sequence(xmlNodePtr marker_sequence_elem, FFIMFCPL *cpl) { int ret = 0; - uint8_t uuid[16]; + AVUUID uuid; xmlNodePtr resource_list_elem = NULL; xmlNodePtr resource_elem = NULL; xmlNodePtr track_id_elem = NULL; @@ -388,8 +370,8 @@ static int push_marker_sequence(xmlNodePtr marker_sequence_elem, FFIMFCPL *cpl) } av_log(NULL, AV_LOG_DEBUG, - "Processing IMF CPL Marker Sequence for Virtual Track " FF_IMF_UUID_FORMAT "\n", - UID_ARG(uuid)); + "Processing IMF CPL Marker Sequence for Virtual Track " AV_PRI_UUID "\n", + AV_UUID_ARG(uuid)); /* create main marker virtual track if it does not exist */ if (!cpl->main_markers_track) { @@ -397,9 +379,9 @@ static int push_marker_sequence(xmlNodePtr marker_sequence_elem, FFIMFCPL *cpl) if (!cpl->main_markers_track) return AVERROR(ENOMEM); imf_marker_virtual_track_init(cpl->main_markers_track); - memcpy(cpl->main_markers_track->base.id_uuid, uuid, sizeof(uuid)); + av_uuid_copy(cpl->main_markers_track->base.id_uuid, uuid); - } else if (memcmp(cpl->main_markers_track->base.id_uuid, uuid, sizeof(uuid)) != 0) { + } else if (!av_uuid_equal(cpl->main_markers_track->base.id_uuid, uuid)) { av_log(NULL, AV_LOG_ERROR, "Multiple marker virtual tracks were found\n"); return AVERROR_INVALIDDATA; } @@ -457,7 +439,7 @@ static int has_stereo_resources(xmlNodePtr element) static int push_main_audio_sequence(xmlNodePtr audio_sequence_elem, FFIMFCPL *cpl) { int ret = 0; - uint8_t uuid[16]; + AVUUID uuid; xmlNodePtr resource_list_elem = NULL; xmlNodePtr resource_elem = NULL; xmlNodePtr track_id_elem = NULL; @@ -476,12 +458,12 @@ static int push_main_audio_sequence(xmlNodePtr audio_sequence_elem, FFIMFCPL *cp } av_log(NULL, AV_LOG_DEBUG, - "Processing IMF CPL Audio Sequence for Virtual Track " FF_IMF_UUID_FORMAT "\n", - UID_ARG(uuid)); + "Processing IMF CPL Audio Sequence for Virtual Track " AV_PRI_UUID "\n", + AV_UUID_ARG(uuid)); /* get the main audio virtual track corresponding to the sequence */ for (uint32_t i = 0; i < cpl->main_audio_track_count; i++) { - if (memcmp(cpl->main_audio_tracks[i].base.id_uuid, uuid, sizeof(uuid)) == 0) { + if (av_uuid_equal(cpl->main_audio_tracks[i].base.id_uuid, uuid)) { vt = &cpl->main_audio_tracks[i]; break; } @@ -501,7 +483,7 @@ static int push_main_audio_sequence(xmlNodePtr audio_sequence_elem, FFIMFCPL *cp vt = &cpl->main_audio_tracks[cpl->main_audio_track_count]; imf_trackfile_virtual_track_init(vt); cpl->main_audio_track_count++; - memcpy(vt->base.id_uuid, uuid, sizeof(uuid)); + av_uuid_copy(vt->base.id_uuid, uuid); } /* process resources */ @@ -544,7 +526,7 @@ static int push_main_audio_sequence(xmlNodePtr audio_sequence_elem, FFIMFCPL *cp static int push_main_image_2d_sequence(xmlNodePtr image_sequence_elem, FFIMFCPL *cpl) { int ret = 0; - uint8_t uuid[16]; + AVUUID uuid; xmlNodePtr resource_list_elem = NULL; xmlNodePtr resource_elem = NULL; xmlNodePtr track_id_elem = NULL; @@ -573,16 +555,16 @@ static int push_main_image_2d_sequence(xmlNodePtr image_sequence_elem, FFIMFCPL if (!cpl->main_image_2d_track) return AVERROR(ENOMEM); imf_trackfile_virtual_track_init(cpl->main_image_2d_track); - memcpy(cpl->main_image_2d_track->base.id_uuid, uuid, sizeof(uuid)); + av_uuid_copy(cpl->main_image_2d_track->base.id_uuid, uuid); - } else if (memcmp(cpl->main_image_2d_track->base.id_uuid, uuid, sizeof(uuid)) != 0) { + } else if (!av_uuid_equal(cpl->main_image_2d_track->base.id_uuid, uuid)) { av_log(NULL, AV_LOG_ERROR, "Multiple MainImage virtual tracks found\n"); return AVERROR_INVALIDDATA; } av_log(NULL, AV_LOG_DEBUG, - "Processing IMF CPL Main Image Sequence for Virtual Track " FF_IMF_UUID_FORMAT "\n", - UID_ARG(uuid)); + "Processing IMF CPL Main Image Sequence for Virtual Track " AV_PRI_UUID "\n", + AV_UUID_ARG(uuid)); /* process resources */ resource_list_elem = ff_imf_xml_get_child_element_by_name(image_sequence_elem, "ResourceList"); @@ -746,7 +728,7 @@ static void imf_trackfile_virtual_track_free(FFIMFTrackFileVirtualTrack *vt) static void imf_cpl_init(FFIMFCPL *cpl) { - memset(cpl->id_uuid, 0, sizeof(cpl->id_uuid)); + av_uuid_nil(cpl->id_uuid); cpl->content_title_utf8 = NULL; cpl->edit_rate = av_make_q(0, 1); cpl->main_markers_track = NULL; @@ -828,8 +810,8 @@ int ff_imf_parse_cpl(AVIOContext *in, FFIMFCPL **cpl) (*cpl)->content_title_utf8); av_log(NULL, AV_LOG_INFO, - "IMF CPL Id: " FF_IMF_UUID_FORMAT "\n", - UID_ARG((*cpl)->id_uuid)); + "IMF CPL Id: " AV_PRI_UUID "\n", + AV_UUID_ARG((*cpl)->id_uuid)); } xmlFreeDoc(doc); diff --git a/libavformat/imfdec.c b/libavformat/imfdec.c index 4019249f3e..71dfb26958 100644 --- a/libavformat/imfdec.c +++ b/libavformat/imfdec.c @@ -82,7 +82,7 @@ * IMF Asset locator */ typedef struct IMFAssetLocator { - FFIMFUUID uuid; + AVUUID uuid; char *absolute_uri; } IMFAssetLocator; @@ -238,7 +238,7 @@ static int parse_imf_asset_map_from_xml_dom(AVFormatContext *s, return AVERROR_INVALIDDATA; } - av_log(s, AV_LOG_DEBUG, "Found asset id: " FF_IMF_UUID_FORMAT "\n", UID_ARG(asset->uuid)); + av_log(s, AV_LOG_DEBUG, "Found asset id: " AV_PRI_URN_UUID "\n", AV_UUID_ARG(asset->uuid)); if (!(node = ff_imf_xml_get_child_element_by_name(asset_element, "ChunkList"))) { av_log(s, AV_LOG_ERROR, "Unable to parse asset map XML - missing ChunkList node\n"); @@ -343,7 +343,7 @@ clean_up: return ret; } -static IMFAssetLocator *find_asset_map_locator(IMFAssetLocatorMap *asset_map, FFIMFUUID uuid) +static IMFAssetLocator *find_asset_map_locator(IMFAssetLocatorMap *asset_map, AVUUID uuid) { for (uint32_t i = 0; i < asset_map->asset_count; i++) { if (memcmp(asset_map->assets[i].uuid, uuid, 16) == 0) @@ -453,15 +453,15 @@ static int open_track_file_resource(AVFormatContext *s, asset_locator = find_asset_map_locator(&c->asset_locator_map, track_file_resource->track_file_uuid); if (!asset_locator) { - av_log(s, AV_LOG_ERROR, "Could not find asset locator for UUID: " FF_IMF_UUID_FORMAT "\n", - UID_ARG(track_file_resource->track_file_uuid)); + av_log(s, AV_LOG_ERROR, "Could not find asset locator for UUID: " AV_PRI_URN_UUID "\n", + AV_UUID_ARG(track_file_resource->track_file_uuid)); return AVERROR_INVALIDDATA; } av_log(s, AV_LOG_DEBUG, - "Found locator for " FF_IMF_UUID_FORMAT ": %s\n", - UID_ARG(asset_locator->uuid), + "Found locator for " AV_PRI_URN_UUID ": %s\n", + AV_UUID_ARG(asset_locator->uuid), asset_locator->absolute_uri); if (track->resource_count > INT32_MAX - track_file_resource->base.repeat_count @@ -523,14 +523,14 @@ static int open_virtual_track(AVFormatContext *s, for (uint32_t i = 0; i < virtual_track->resource_count; i++) { av_log(s, AV_LOG_DEBUG, - "Open stream from file " FF_IMF_UUID_FORMAT ", stream %d\n", - UID_ARG(virtual_track->resources[i].track_file_uuid), + "Open stream from file " AV_PRI_URN_UUID ", stream %d\n", + AV_UUID_ARG(virtual_track->resources[i].track_file_uuid), i); if ((ret = open_track_file_resource(s, &virtual_track->resources[i], track)) != 0) { av_log(s, AV_LOG_ERROR, - "Could not open image track resource " FF_IMF_UUID_FORMAT "\n", - UID_ARG(virtual_track->resources[i].track_file_uuid)); + "Could not open image track resource " AV_PRI_URN_UUID "\n", + AV_UUID_ARG(virtual_track->resources[i].track_file_uuid)); goto clean_up; } } @@ -604,16 +604,16 @@ static int open_cpl_tracks(AVFormatContext *s) if (c->cpl->main_image_2d_track) { if ((ret = open_virtual_track(s, c->cpl->main_image_2d_track, track_index++)) != 0) { - av_log(s, AV_LOG_ERROR, "Could not open image track " FF_IMF_UUID_FORMAT "\n", - UID_ARG(c->cpl->main_image_2d_track->base.id_uuid)); + av_log(s, AV_LOG_ERROR, "Could not open image track " AV_PRI_URN_UUID "\n", + AV_UUID_ARG(c->cpl->main_image_2d_track->base.id_uuid)); return ret; } } for (uint32_t i = 0; i < c->cpl->main_audio_track_count; i++) { if ((ret = open_virtual_track(s, &c->cpl->main_audio_tracks[i], track_index++)) != 0) { - av_log(s, AV_LOG_ERROR, "Could not open audio track " FF_IMF_UUID_FORMAT "\n", - UID_ARG(c->cpl->main_audio_tracks[i].base.id_uuid)); + av_log(s, AV_LOG_ERROR, "Could not open audio track " AV_PRI_URN_UUID "\n", + AV_UUID_ARG(c->cpl->main_audio_tracks[i].base.id_uuid)); return ret; } } @@ -647,8 +647,8 @@ static int imf_read_header(AVFormatContext *s) av_log(s, AV_LOG_DEBUG, - "parsed IMF CPL: " FF_IMF_UUID_FORMAT "\n", - UID_ARG(c->cpl->id_uuid)); + "parsed IMF CPL: " AV_PRI_URN_UUID "\n", + AV_UUID_ARG(c->cpl->id_uuid)); if (!c->asset_map_paths) { c->asset_map_paths = av_append_path_component(c->base_url, "ASSETMAP.xml"); diff --git a/libavformat/tests/imf.c b/libavformat/tests/imf.c index 142aa04261..e65629ccbc 100644 --- a/libavformat/tests/imf.c +++ b/libavformat/tests/imf.c @@ -304,7 +304,7 @@ static int test_cpl_parsing(void) } printf("%s\n", cpl->content_title_utf8); - printf(FF_IMF_UUID_FORMAT "\n", UID_ARG(cpl->id_uuid)); + printf(AV_PRI_URN_UUID "\n", AV_UUID_ARG(cpl->id_uuid)); printf("%i %i\n", cpl->edit_rate.num, cpl->edit_rate.den); printf("Marker resource count: %" PRIu32 "\n", cpl->main_markers_track->resource_count); @@ -320,7 +320,7 @@ static int test_cpl_parsing(void) printf("Main image resource count: %" PRIu32 "\n", cpl->main_image_2d_track->resource_count); for (uint32_t i = 0; i < cpl->main_image_2d_track->resource_count; i++) { printf("Track file resource %" PRIu32 "\n", i); - printf(" " FF_IMF_UUID_FORMAT "\n", UID_ARG(cpl->main_image_2d_track->resources[i].track_file_uuid)); + printf(" " AV_PRI_URN_UUID "\n", AV_UUID_ARG(cpl->main_image_2d_track->resources[i].track_file_uuid)); } printf("Main audio track count: %" PRIu32 "\n", cpl->main_audio_track_count); @@ -329,7 +329,7 @@ static int test_cpl_parsing(void) printf(" Main audio resource count: %" PRIu32 "\n", cpl->main_audio_tracks[i].resource_count); for (uint32_t j = 0; j < cpl->main_audio_tracks[i].resource_count; j++) { printf(" Track file resource %" PRIu32 "\n", j); - printf(" " FF_IMF_UUID_FORMAT "\n", UID_ARG(cpl->main_audio_tracks[i].resources[j].track_file_uuid)); + printf(" " AV_PRI_URN_UUID "\n", AV_UUID_ARG(cpl->main_audio_tracks[i].resources[j].track_file_uuid)); } } @@ -363,15 +363,15 @@ static int test_bad_cpl_parsing(void) static int check_asset_locator_attributes(IMFAssetLocator *asset, IMFAssetLocator *expected_asset) { - printf("\tCompare " FF_IMF_UUID_FORMAT " to " FF_IMF_UUID_FORMAT ".\n", - UID_ARG(asset->uuid), - UID_ARG(expected_asset->uuid)); + printf("\tCompare " AV_PRI_URN_UUID " to " AV_PRI_URN_UUID ".\n", + AV_UUID_ARG(asset->uuid), + AV_UUID_ARG(expected_asset->uuid)); for (uint32_t i = 0; i < 16; ++i) { if (asset->uuid[i] != expected_asset->uuid[i]) { - printf("Invalid asset locator UUID: found " FF_IMF_UUID_FORMAT " instead of " FF_IMF_UUID_FORMAT " expected.\n", - UID_ARG(asset->uuid), - UID_ARG(expected_asset->uuid)); + printf("Invalid asset locator UUID: found " AV_PRI_URN_UUID " instead of " AV_PRI_URN_UUID " expected.\n", + AV_UUID_ARG(asset->uuid), + AV_UUID_ARG(expected_asset->uuid)); return 1; } } From patchwork Tue May 31 03:13:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Anthony Lemieux X-Patchwork-Id: 36000 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp2607251pzj; Mon, 30 May 2022 20:15:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzl/2JubWMzsL01sXQvhQOryJPIDc8fz3zXNyuaZaVDq+JuqmSGccMZV5RI1jUFKy88BJng X-Received: by 2002:a17:907:3ea9:b0:6fe:b416:fe20 with SMTP id hs41-20020a1709073ea900b006feb416fe20mr44716564ejc.358.1653966929335; Mon, 30 May 2022 20:15:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653966929; cv=none; d=google.com; s=arc-20160816; b=Z+drwpHY4FcKI67Pm15GJk0qoJTaZz00w6+GTUkzZtFhx0BaVHDpMsOuBY/iUSyTUY +PCxuFHvHVC6HR3s+oCBCBQ7y1FzhlRVmpvSBDwRUDqGY+LnIm5LylcG/mBoIPq+Vuz1 ieQ9H1Vy2PLWRsiF4Naj3YDis151cBJhBpJaCDRmJsXRI42UsYNEIuBV0wbB9bDkl/Pz SZbBmzqzTdsusNIOHxV6p2ZJTAgzoZ+W8LSKRzH4Hw4zLo+IhowX4uV/mR+MQUVEK8he D2D/hac1RxJu2sX0edH2KNqp1UpMOEsUXc2c9M2rjLDu+FKWLWozVIoffwxXhrDjEaTn ECUw== 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:delivered-to; bh=fXjluupM97OX+9rSWSb8qVldW6Y+e/F03GPPspd4960=; b=JNggfeDRYHknyZiCtte1FCTfdVNTgKsVT8gyTdm3Hx25f6/WlptUWoYXQA9B7kGBdr WiUpzNQvu+BDjHwKly28YNjGCABOwiqnJDauGMWu1dme91O4fBD2Tm9ypii4EPx9k6RU Lfm6fjE8Dl87cteqUM3jkgxNNTq7FEG1AgLyF1dhV13HKahSVq3rWIlh30HPmATJMEkI vQdO44gBDyIAznL1wnZol2h7wfw8KMYR4KtwvbbMc7TYTrWD/nPASghxd/bDMksRysNW JkXarcz9nlSksGKWd/1g30SKlZDasxYVhJNijQ7JxB8yJG73K7yzRrRkCTwrGaRTS5G1 fIPQ== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d28-20020a056402401c00b0042de087972asi1132059eda.56.2022.05.30.20.15.29; Mon, 30 May 2022 20:15:29 -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; 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 6428468B650; Tue, 31 May 2022 06:14:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BB25D68B636 for ; Tue, 31 May 2022 06:14:42 +0300 (EEST) Received: by mail-pj1-f41.google.com with SMTP id e24so3789065pjt.0 for ; Mon, 30 May 2022 20:14:42 -0700 (PDT) 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=pIfk672VbTGEJVXteGrP/o4S2imZvL9be0CCp7ZaPR8=; b=rZoTTlIkxTxxG3/CJlebX3WBkeq7KB2hOW2D4W0jRYL6xfBA8/WNbZd5ydiLwuxo+Q bt/upEMzYSwTdzoonzWH2bYtmSUv9dLjIj5FqSeiWaiFoCj9/8VwZ0SdYlZsHCl0zUiI Of+RpaepiKmQ1kyqLHfxSjulR107jGXhbJsqByB/r9tgXHVUHA6vy8pAozdVSQATDa7/ +fpmd3PpRz2+tfveri6sbVzryPr0Oqt+Q0RkBB1xyIlMeXBARCbyagCjE8nff09YClTU F6n3EXb0Y6h6VtDFLp/aFUJHKH4O7tEOa6cHra44/2h8J785s3qgc9KysUWDYL8L59MH T+OA== X-Gm-Message-State: AOAM531xO+72cpk3CvsoK9fJVauHyKAei0F2DjKzoOT9dpuZiozY/bwB ocnQDPsxkTx455N3ktE3cPveNo1JDDk= X-Received: by 2002:a17:903:248:b0:155:ecb7:dfaf with SMTP id j8-20020a170903024800b00155ecb7dfafmr59435593plh.84.1653966880729; Mon, 30 May 2022 20:14:40 -0700 (PDT) Received: from localhost (76-14-89-2.sf-cable.astound.net. [76.14.89.2]) by smtp.gmail.com with ESMTPSA id j15-20020a62e90f000000b0050dc7628168sm361637pfh.66.2022.05.30.20.14.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 20:14:40 -0700 (PDT) Received: by localhost (sSMTP sendmail emulation); Mon, 30 May 2022 20:14:36 -0700 From: pal@sandflow.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 30 May 2022 20:13:35 -0700 Message-Id: <20220531031334.19488-6-pal@sandflow.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220531031334.19488-1-pal@sandflow.com> References: <20220531031334.19488-1-pal@sandflow.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 6/6] avfilter/showinfo: refactor to use avutil/uuid 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: Pierre-Anthony Lemieux Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: F1kAigyTTfSa From: Pierre-Anthony Lemieux --- libavfilter/vf_showinfo.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 12d39310ef..0d6f2805bb 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -42,6 +42,7 @@ #include "libavutil/mastering_display_metadata.h" #include "libavutil/video_enc_params.h" #include "libavutil/detection_bbox.h" +#include "libavutil/uuid.h" #include "avfilter.h" #include "internal.h" @@ -421,29 +422,21 @@ static void dump_video_enc_params(AVFilterContext *ctx, const AVFrameSideData *s static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd) { - const int uuid_size = 16; const uint8_t *user_data = sd->data; int i; - if (sd->size < uuid_size) { + if (sd->size < AV_UUID_LEN) { av_log(ctx, AV_LOG_ERROR, "invalid data(%"SIZE_SPECIFIER" < " - "UUID(%d-bytes))\n", sd->size, uuid_size); + "UUID(%d-bytes))\n", sd->size, AV_UUID_LEN); return; } av_log(ctx, AV_LOG_INFO, "User Data Unregistered:\n"); - av_log(ctx, AV_LOG_INFO, "UUID="); - for (i = 0; i < uuid_size; i++) { - av_log(ctx, AV_LOG_INFO, "%02x", user_data[i]); - if (i == 3 || i == 5 || i == 7 || i == 9) - av_log(ctx, AV_LOG_INFO, "-"); - } - av_log(ctx, AV_LOG_INFO, "\n"); + av_log(ctx, AV_LOG_INFO, "UUID=" AV_PRI_UUID "\n", AV_UUID_ARG(user_data)); av_log(ctx, AV_LOG_INFO, "User Data="); - for (; i < sd->size; i++) { + for (i = 16; i < sd->size; i++) av_log(ctx, AV_LOG_INFO, "%02x", user_data[i]); - } av_log(ctx, AV_LOG_INFO, "\n"); }