From patchwork Wed Sep 9 06:02:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 22216 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 0077044BC6F for ; Wed, 9 Sep 2020 09:02:36 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D936168B811; Wed, 9 Sep 2020 09:02:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BF69268B817 for ; Wed, 9 Sep 2020 09:02:27 +0300 (EEST) Received: by mail-io1-f47.google.com with SMTP id d190so1945007iof.3 for ; Tue, 08 Sep 2020 23:02:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Yf/BwuAsv/EksP8akrX3XFz0b8AwxX+WnAkrgC8FVZU=; b=oDBgyTZQG5YUrnngu4CUZDTsz6d2CiYlMJFBcttHVAU8W2C7W3lgvEmjMpLBeXxeJl MsanRw4gHoAeIeqKu0BNnfkOwBnl4Xwbra9JN6RNLlyMHMpGNr/ulUPu5lmoogOm58PW zDWqzUl1/cwOFErbxxsABa5HnPeXMeb2+s6VrAv8VCY7QoG5aGrwDPUQhGb8AhiUCHKJ s46KYLmrdq1tDq9UY7PSkWZcIf/aY/slJvUUsOZmyP25ZyuCkYBfVOWt61gBwb7Aj/Jf VfCkGBulA2AKuBfs1T+fFFkuV2r4HnPyndySAVPUTYIyTBtzGbC12Tno/oDbzLby4+co QLRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Yf/BwuAsv/EksP8akrX3XFz0b8AwxX+WnAkrgC8FVZU=; b=S/MPw5/MCdkx2hjUbiQyi7Shp8yi9ejm8s4x5/Z2K7J2srlVzvLc5zUGrKvaQKvpCU G2LS8xrT8IZNl47hINgpUWJ/IeW3KUYuzg+qNjQMgkdE7E8d6sz+KcfVmedr70sf9kKm D1gWQ2pfhYvvQRtpEIlLS+ryVuerWeRhc7jf3iqGX0kradBVDm9KMkwSKgRudtG1hK5R 24rlv4IoVfEZbMvr5aPaGCpb/IztTO6IbzkowEIszB2p9wbJl3bvrFICXKQP19FbglyH Ev4Oqj1dvbnJC+6EVtI1t2bb1K1EduWD/LMg42HhjFo0xV3h7YZxHlAsu+EQu6fAFWtd eSag== X-Gm-Message-State: AOAM533pZMVyutS7YdGFI1X8Yeb0y2tiPVnKISrl69IS6a6gRoeICjze nGJg8ygcLISW9QeL8zRNFzL57+sHUhj/ X-Google-Smtp-Source: ABdhPJxGV8ElGtmD1s9THeO5IoDXsFJ0kAhMnhVzcR/yJE/r+TTt0gGx6EtVeMwI6YA900U1kvMVow== X-Received: by 2002:a02:94ee:: with SMTP id x101mr2591642jah.23.1599631346011; Tue, 08 Sep 2020 23:02:26 -0700 (PDT) Received: from rcombs-mbp.localdomain (c-73-50-128-8.hsd1.il.comcast.net. [73.50.128.8]) by smtp.gmail.com with ESMTPSA id j20sm864575ilq.6.2020.09.08.23.02.25 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Sep 2020 23:02:25 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Wed, 9 Sep 2020 01:02:08 -0500 Message-Id: <20200909060217.25794-6-rcombs@rcombs.me> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200909060217.25794-1-rcombs@rcombs.me> References: <20200909060217.25794-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/15] lavc/codec_desc: add avcodec_descriptor_get_by_mime_type X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/codec_desc.c | 41 +++++++++++++++++++++++++++++++++++++++++ libavcodec/codec_desc.h | 12 ++++++++++++ libavcodec/version.h | 2 +- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index ad044318c7..61b7f8d74f 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -21,6 +21,7 @@ #include +#include "libavutil/avstring.h" #include "libavutil/common.h" #include "libavutil/internal.h" @@ -3480,6 +3481,46 @@ const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name) return NULL; } +const AVCodecDescriptor *avcodec_descriptor_get_by_mime_type(const char *search, const char *prefix) +{ + const AVCodecDescriptor *desc = NULL; + int len, prefix_len; + if (!search) + return NULL; + + len = strlen(search); + if (!len) + return NULL; + + if (strchr(search, '/')) + prefix = NULL; + + if (prefix) + prefix_len = strlen(prefix); + + while ((desc = avcodec_descriptor_next(desc))) { + if (desc->mime_types) { + int i; + for (i = 0; desc->mime_types[i]; i++) { + const char *check = desc->mime_types[i]; + if (prefix) { + if (!av_strncasecmp(check, prefix, prefix_len) && + check[prefix_len] == '/') + check += prefix_len + 1; + else + continue; + } + + if (!av_strncasecmp(check, search, len) && + (check[len] == 0 || check[len] == '+' || check[len] == ';')) + return desc; + } + } + } + + return NULL; +} + enum AVMediaType avcodec_get_type(enum AVCodecID codec_id) { const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id); diff --git a/libavcodec/codec_desc.h b/libavcodec/codec_desc.h index 126b52df47..da38784a49 100644 --- a/libavcodec/codec_desc.h +++ b/libavcodec/codec_desc.h @@ -121,6 +121,18 @@ const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); */ const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); +/** + * Locate a codec descriptor with a particular MIME type + * + * @param search the MIME type to search for. + * @param prefix a prefix to use if the search type does not contain a media type. + * NULL if no default prefix should be used. + * + * @return codec descriptor with the given MIME type or NULL if no such + * descriptor exists. + */ +const AVCodecDescriptor *avcodec_descriptor_get_by_mime_type(const char *search, const char *prefix); + /** * @} */ diff --git a/libavcodec/version.h b/libavcodec/version.h index 4b221f96ad..5ce4ba55d9 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 105 +#define LIBAVCODEC_VERSION_MINOR 106 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \