From patchwork Mon Jul 3 19:17:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Lou X-Patchwork-Id: 42408 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1e:b0:12b:9ae3:586d with SMTP id c30csp4581346pzh; Mon, 3 Jul 2023 12:17:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6ZPLtTrnafn+gaJGVdJnRdgO5dIxShrMZaNDVyJFAX5kgS048YrHDpws2yeyoKK6cbkAjd X-Received: by 2002:a17:907:3e07:b0:985:259f:6f50 with SMTP id hp7-20020a1709073e0700b00985259f6f50mr15853640ejc.34.1688411875744; Mon, 03 Jul 2023 12:17:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688411875; cv=none; d=google.com; s=arc-20160816; b=EnplA5+eTraQ0RVAx+XFYV811FFK7ikLe4XZ/58IoEUgJDoI9VqpJ2iqZ6xVJqXq1D p6W7Ak2yzV+gQxc2GtSBK99EU31eiySooAahnsdXbmU+oKR86sorUq0ic5nezPOXF74S J3bi/rMEqXeXmFiNhSLEsj+JVrkueqnmNlQorMZiQZI91ZDyFLBmFag08bXYAe6KZIrC 5kmTdihG6dhC4/NPXR4pHHAONwo6rDIvrMC+gFKzjAGQfEkz6TufFJLyBHjgFSEwfM5/ X/NvnKreeCHej1Ptr5uwqm1dwS15twYvuNjId/Pz91dDOfjuwM8onyQHyGnv71/ML8mR 7D2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:content-language:to:from:user-agent:mime-version :date:message-id:dkim-signature:delivered-to; bh=NtJwAiDEpzdS48pH0f00yeD07PRGfdxCY2Qqw0w7Dq4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=yDzaeTl70JZkg8cMTeHPm/0PqfBLSs+oURBNvGj22xpJ50I3E4l0b6wvDaJ0fyOGtQ sy4JC957tlkCCEgoe0WfZCYCG923CsMA4H9+4qx3Tdn//NhxfFBtdI2av6km/bKLfV4Z BuXiKmdMneRud6N27WbFQ14HOxGN2ZO6FK6mlk+phRmetxHCK1hFVF5cMHKOoHUhSMTp pvx6VjzrqkmI8H5OpwZ22zjPrUExr6OeMneDko1feNCMqIhVIhxubl0hSht58/kgQ/F4 FIUu1Vd0VE0RcBzsMXVWJ8nG1TBrx2Bbe+wosVmMEUo+t8gG9pyeEwCDQZKMviKeDfYg C0Qw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=stSRQKu0; 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 y2-20020a170906914200b0099317a3240esi3169345ejw.396.2023.07.03.12.17.55; Mon, 03 Jul 2023 12:17:55 -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=20221208 header.b=stSRQKu0; 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 8B54D68C580; Mon, 3 Jul 2023 22:17:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f48.google.com (mail-oa1-f48.google.com [209.85.160.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3274268C551 for ; Mon, 3 Jul 2023 22:17:46 +0300 (EEST) Received: by mail-oa1-f48.google.com with SMTP id 586e51a60fabf-1b00b0ab0daso4315412fac.0 for ; Mon, 03 Jul 2023 12:17:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688411864; x=1691003864; h=content-transfer-encoding:content-language:to:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=3fJ4BW07eXgh5dT58IWD5IWiGgq9mU8Bzi26T7eFx10=; b=stSRQKu0qAesWjlFHBlnEAHkRgpEn6aM2sYRv1+UcmRexLId0WwvPRSqr30kleGdlo ad2TyADLkvu99UPnlqEj2ij5UyTK1v1ungSwBaCpjEd6VYzZerE/nzL4p8yP+6YmRlVL nacMhV76Q9o4HOSel2XrQtDh8u5lqVlt2jwmAyd2UoaEFd2UXPUeb6jZ/Th5Zk9MvJVe 8rZk6eO2JBcOR+O+eGEwdm7aRnfrY9YyNzUJdh7o9WQtaoIXjBUtE5eImciBrN5R2Ofn 7ucpjEA9KTE8I8wDvgUrCJlbopXAGPTohaer6CaC0XcNt+z+YjCs0BtbwzjNPDpB3piE a1SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688411864; x=1691003864; h=content-transfer-encoding:content-language:to:subject:from :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=3fJ4BW07eXgh5dT58IWD5IWiGgq9mU8Bzi26T7eFx10=; b=JCjoe+D0KjtabN9DaphuWNwsZPNa33YvCTrXyCntBZG6L7X7NnLeNBb8HjhR+1k/sA eM25pqYFGMYhlHVEHqTVhCDFNjx8KZRvJcnOVffdjEP/jWDpCsSCaAn8gtFe9PXck0JL DaiFgQW4FNXOTr/kieDsPOkIXyQsug+iD1C2KMDoXQCkbWmzhivoFIjWl5P/PmHN4jzk QH5C0c565J8KuBck9tmXuTbg0QprpdiNRoeo6/gy5OfEfjJfjok/j85Hhn2g8qpVxTl/ 9yIDnI15arzAvwMI6DVwuqPPcOSe1HMMFfSXsFmHiyIbG9gKAH1thBfjT7xvcFItLhpd fOig== X-Gm-Message-State: AC+VfDynYnTZ+eUiEEH7IrADEcDgsemRDS9jGdOHvMkdQj34Jqw2+o2b DRcInaLh6qiodoc2ojolHlYes54EPdHGYjOK X-Received: by 2002:a05:6870:e0cb:b0:1b0:c99:fd1e with SMTP id a11-20020a056870e0cb00b001b00c99fd1emr9806721oab.4.1688411863947; Mon, 03 Jul 2023 12:17:43 -0700 (PDT) Received: from [192.168.1.10] ([222.164.24.244]) by smtp.gmail.com with ESMTPSA id m9-20020a654389000000b00553d42a7cb5sm13338721pgp.68.2023.07.03.12.17.42 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 03 Jul 2023 12:17:43 -0700 (PDT) Message-ID: <143d82a2-e523-189c-a16a-07271ac0da78@gmail.com> Date: Tue, 4 Jul 2023 03:17:40 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 From: David Lou To: ffmpeg-devel@ffmpeg.org Content-Language: en-US Subject: [FFmpeg-devel] [PATCH v2] libavformat/data_uri: export mime_type of data urls 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: AYeKSuvsr5cu Fix the fact that ffprobe no longer detects m3u8 in a data url correctly. For example, ffprobe data:application/vnd.apple.mpegurl;base64,I0VYVE0zVQojRVhULVgtVkVSU0lPTjozCiNFWFQtWC1UQVJHRVREVVJBVElPTjozMAojRVhUSU5GOjMwLApodHRwczovL2Rvd25sb2FkLnNhbXBsZWxpYi5jb20vbXA0L3NhbXBsZS0zMHMubXA0 This provides the mime_type hls detection requires. Thank you. Hopefully this patch doesn't get truncated by email again. Signed-off-by: David Lou --- libavformat/data_uri.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/libavformat/data_uri.c b/libavformat/data_uri.c index 28eb2b9e08..fdc1a2eef9 100644 --- a/libavformat/data_uri.c +++ b/libavformat/data_uri.c @@ -19,18 +19,24 @@ */ #include + #include "libavutil/avstring.h" #include "libavutil/avutil.h" #include "libavutil/base64.h" +#include "libavutil/opt.h" + #include "url.h" typedef struct { + const AVClass *class; const uint8_t *data; void *tofree; size_t size; size_t pos; + char *mime_type; } DataContext; + static av_cold int data_open(URLContext *h, const char *uri, int flags) { DataContext *dc = h->priv_data; @@ -56,8 +62,10 @@ static av_cold int data_open(URLContext *h, const char *uri, int flags) (int)(next - opt), opt); return AVERROR(EINVAL); } - av_log(h, AV_LOG_VERBOSE, "Content-type: %.*s\n", - (int)(next - opt), opt); + av_free(dc->mime_type); + dc->mime_type = av_strndup(opt, (int)(next - opt)); + av_log(h, AV_LOG_VERBOSE, "Content-type: %s\n", + dc->mime_type); } else { if (!av_strncasecmp(opt, "base64", next - opt)) { base64 = 1; @@ -110,10 +118,25 @@ static int data_read(URLContext *h, unsigned char *buf, int size) return size; } +#define OFFSET(x) offsetof(DataContext, x) + +static const AVOption options[] = { + { "mime_type", "export the MIME type", OFFSET(mime_type), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, + { NULL } +}; + +static const AVClass data_context_class = { + .class_name = "data", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + const URLProtocol ff_data_protocol = { - .name = "data", - .url_open = data_open, - .url_close = data_close, - .url_read = data_read, - .priv_data_size = sizeof(DataContext), + .name = "data", + .url_open = data_open, + .url_close = data_close, + .url_read = data_read, + .priv_data_size = sizeof(DataContext), + .priv_data_class = &data_context_class, };