From patchwork Sat Jul 21 17:28:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 9772 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp4070284jad; Sat, 21 Jul 2018 10:33:59 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfERwf4PQ/g1wz4k1V0ZLEpeZP+VuSjTJXfzKb49d/9KT5lYhR3+W7XBBxf84+w+1wqPLxk X-Received: by 2002:adf:e584:: with SMTP id l4-v6mr4070570wrm.190.1532194439326; Sat, 21 Jul 2018 10:33:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532194439; cv=none; d=google.com; s=arc-20160816; b=ei3K90ZsuT8J3s+iL8Sldpzlpz17mCWfYtApEsZ51wM7jpF9Q/RR229bsdVXhqXYH3 GukIMm+erDe8vzP7kfuwmyTpZeQAqzN9LZJ+MqFWFTwLQz0ddZQRQ4NZ/95oX72JATKO tupZETPxh3Wrl+hWaPkS0ICNCNn1s9Qyw4IXta+X9owQaKs5idDBWsGfYR+9CAcbagf2 4h/TePesanE4W6+Y2cindmUqDhe/3OUZ1nzYBp/TcHPMi7zN1dYqGLW0It5ebhdYCdjn E+hxFz6qdVepGOqajKaQAR0t+zTOPNT9YkJxvf/0LJucHdz1jThpDXowgNBtIwC522al fUfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=WAtQrpB3g67S918aqt7R7V5DjOc/56vNS1XaDrlFPSo=; b=PedzB90s2Zaan0KG607G0Bzjg9MaiB6G3MUUijz/UcdVRI0eOqB21CgeUHbYq9hUXT H+peYGfOV8DbeK7N/CKWQaoSQtjzRCMWUEnRj4aiGAV3H+ev8ua+UVnTAIb5yn8HDlnF +EvI56gM1W1mMBHaEa5i/itRr4GHJQOIKh1THvratZdfnVebZWSC2ihmhyKBb8c1yf4L r3nGyPti21OM01JljTr9CZ2UHFs2m1lGGxX8Uvdxjk924k5a1S6ysCp4rMpG5p+Waewv PHLX+wOuIMkOXoVBGCOpNtoiduBEKxVkwqztW43PUbTut8AY/6q2vn8Eg5VO2i3mWhiF oO0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ZqBN4BmD; 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 c187-v6si3008027wmd.52.2018.07.21.10.33.58; Sat, 21 Jul 2018 10:33:59 -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=20161025 header.b=ZqBN4BmD; 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 6C40668A2FE; Sat, 21 Jul 2018 20:33:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f176.google.com (mail-qk0-f176.google.com [209.85.220.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DAF4868A28A for ; Sat, 21 Jul 2018 20:33:37 +0300 (EEST) Received: by mail-qk0-f176.google.com with SMTP id u21-v6so7986046qku.2 for ; Sat, 21 Jul 2018 10:33:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=My/a3MnGkZ4lgOyIiUs3jHP36ES85xch/Y3VPdmvLMU=; b=ZqBN4BmDTvvq4aM1ISQ5RLYHW6qhS5ptXhyUcRDYwX4ij1aMqh6ySFPcytEnUAQEM0 zEL64Q/LEG3E39T16Z9HCmyiXbcU7StvrlLV2cCoOrb2769+O2DsT5rRpCySSwtV93H8 ZBS0gX8DHb1Qb6PJJO+zXb0pz25CjvziZFv+y7MnQppMjymGqqg//V+Zv4rY0q+y+Gwg uT6CNrQSVvW9x7yx/jIijdTQoscHwWDa5lIT6cGVQV/ySG1fa20PGv+HIoT6zg4oQYku W0Yepk3BrR9LOfBEnLJ2xPSFFmOFsVnrww8ybOlrQYhwli5N+6fbS8nlBTlRpM59Krqb tyUA== 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; bh=My/a3MnGkZ4lgOyIiUs3jHP36ES85xch/Y3VPdmvLMU=; b=SCBiY5lN/oFPLUm5WblJ6A7x2S+vZN22MvzuA5nerZYVUp2gxpZsh7hv+fBj2prG25 9EIb8AwAxfr8pB6QzNFNmbbU8b/Ts07E43ttt/825k2dG+tyroRrOIdch/KzOuexP3fg M5t7lH+I6pszRpw39RyfLClGu2RNRrfS3fTUICPOgrdzpdntBc53gF5wha7pJJnZJ+Jh 4vZAxQfqzDzzZOQ2HDXOppsa979Qe4rASgbFSkgTnNz8bMjnTvbQRSCVIWjCKvBKWQ6w B+FcVzkk8k51RRvbigA5h+C5SAfczXUi6F1t0YoTU/gOzBuk2j4vs1atAGGjhsxAu1M2 H1Dw== X-Gm-Message-State: AOUpUlHTyJABLysVFPRfkQiIYbc5pVfNt4BeDdNcHa9IqmxtFYgpJgDU rc3rKoa8j6RRNLCUoyLKlSQ79CDy X-Received: by 2002:a37:6b84:: with SMTP id g126-v6mr5937437qkc.231.1532194119781; Sat, 21 Jul 2018 10:28:39 -0700 (PDT) Received: from localhost.localdomain ([190.188.171.140]) by smtp.gmail.com with ESMTPSA id s6-v6sm2956409qkb.26.2018.07.21.10.28.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 21 Jul 2018 10:28:39 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 21 Jul 2018 14:28:21 -0300 Message-Id: <20180721172821.5732-1-jamrial@gmail.com> X-Mailer: git-send-email 2.18.0 Subject: [FFmpeg-devel] [PATCH] avcodec/parser: move parsers list and related API to its own file X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" And add it to the list of configurable components in Makefile, so changes to the file will be tracked and the usual warning to suggest re-running configure will be shown. Signed-off-by: James Almer --- Makefile | 1 + configure | 2 +- libavcodec/Makefile | 1 + libavcodec/parser.c | 85 ---------------------------------- libavcodec/parsers.c | 106 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 86 deletions(-) create mode 100644 libavcodec/parsers.c diff --git a/Makefile b/Makefile index 0cd0a1d6f2..4bf1dfedcf 100644 --- a/Makefile +++ b/Makefile @@ -58,6 +58,7 @@ tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS) CONFIGURABLE_COMPONENTS = \ $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \ $(SRC_PATH)/libavcodec/bitstream_filters.c \ + $(SRC_PATH)/libavcodec/parsers.c \ $(SRC_PATH)/libavformat/protocols.c \ config.h: ffbuild/.config diff --git a/configure b/configure index 534c62ed98..741f56d565 100755 --- a/configure +++ b/configure @@ -3679,7 +3679,7 @@ CODEC_LIST=" $ENCODER_LIST $DECODER_LIST " -PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parser.c) +PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parsers.c) BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c) HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h) PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 2d4bc48dab..e62603f0dd 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -44,6 +44,7 @@ OBJS = ac3_parser.o \ options.o \ mjpegenc_huffman.o \ parser.o \ + parsers.o \ profiles.o \ qsv_api.o \ raw.o \ diff --git a/libavcodec/parser.c b/libavcodec/parser.c index f43b197d5e..0a994a3f30 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -27,95 +27,10 @@ #include "libavutil/avassert.h" #include "libavutil/internal.h" #include "libavutil/mem.h" -#include "libavutil/thread.h" #include "internal.h" #include "parser.h" -/* Parsers */ -extern AVCodecParser ff_aac_parser; -extern AVCodecParser ff_aac_latm_parser; -extern AVCodecParser ff_ac3_parser; -extern AVCodecParser ff_adx_parser; -extern AVCodecParser ff_bmp_parser; -extern AVCodecParser ff_cavsvideo_parser; -extern AVCodecParser ff_cook_parser; -extern AVCodecParser ff_dca_parser; -extern AVCodecParser ff_dirac_parser; -extern AVCodecParser ff_dnxhd_parser; -extern AVCodecParser ff_dpx_parser; -extern AVCodecParser ff_dvaudio_parser; -extern AVCodecParser ff_dvbsub_parser; -extern AVCodecParser ff_dvdsub_parser; -extern AVCodecParser ff_dvd_nav_parser; -extern AVCodecParser ff_flac_parser; -extern AVCodecParser ff_g729_parser; -extern AVCodecParser ff_gsm_parser; -extern AVCodecParser ff_h261_parser; -extern AVCodecParser ff_h263_parser; -extern AVCodecParser ff_h264_parser; -extern AVCodecParser ff_hevc_parser; -extern AVCodecParser ff_mjpeg_parser; -extern AVCodecParser ff_mlp_parser; -extern AVCodecParser ff_mpeg4video_parser; -extern AVCodecParser ff_mpegaudio_parser; -extern AVCodecParser ff_mpegvideo_parser; -extern AVCodecParser ff_opus_parser; -extern AVCodecParser ff_png_parser; -extern AVCodecParser ff_pnm_parser; -extern AVCodecParser ff_rv30_parser; -extern AVCodecParser ff_rv40_parser; -extern AVCodecParser ff_sbc_parser; -extern AVCodecParser ff_sipr_parser; -extern AVCodecParser ff_tak_parser; -extern AVCodecParser ff_vc1_parser; -extern AVCodecParser ff_vorbis_parser; -extern AVCodecParser ff_vp3_parser; -extern AVCodecParser ff_vp8_parser; -extern AVCodecParser ff_vp9_parser; -extern AVCodecParser ff_xma_parser; - -#include "libavcodec/parser_list.c" - -static AVOnce av_parser_next_init = AV_ONCE_INIT; - -static void av_parser_init_next(void) -{ - AVCodecParser *prev = NULL, *p; - int i = 0; - while ((p = (AVCodecParser*)parser_list[i++])) { - if (prev) - prev->next = p; - prev = p; - } -} - -AVCodecParser *av_parser_next(const AVCodecParser *p) -{ - ff_thread_once(&av_parser_next_init, av_parser_init_next); - - if (p) - return p->next; - else - return (AVCodecParser*)parser_list[0]; -} - -const AVCodecParser *av_parser_iterate(void **opaque) -{ - uintptr_t i = (uintptr_t)*opaque; - const AVCodecParser *p = parser_list[i]; - - if (p) - *opaque = (void*)(i + 1); - - return p; -} - -void av_register_codec_parser(AVCodecParser *parser) -{ - ff_thread_once(&av_parser_next_init, av_parser_init_next); -} - AVCodecParserContext *av_parser_init(int codec_id) { AVCodecParserContext *s = NULL; diff --git a/libavcodec/parsers.c b/libavcodec/parsers.c new file mode 100644 index 0000000000..f2886ff45f --- /dev/null +++ b/libavcodec/parsers.c @@ -0,0 +1,106 @@ +/* + * 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 + +#include "libavutil/thread.h" + +#include "avcodec.h" + +extern AVCodecParser ff_aac_parser; +extern AVCodecParser ff_aac_latm_parser; +extern AVCodecParser ff_ac3_parser; +extern AVCodecParser ff_adx_parser; +extern AVCodecParser ff_bmp_parser; +extern AVCodecParser ff_cavsvideo_parser; +extern AVCodecParser ff_cook_parser; +extern AVCodecParser ff_dca_parser; +extern AVCodecParser ff_dirac_parser; +extern AVCodecParser ff_dnxhd_parser; +extern AVCodecParser ff_dpx_parser; +extern AVCodecParser ff_dvaudio_parser; +extern AVCodecParser ff_dvbsub_parser; +extern AVCodecParser ff_dvdsub_parser; +extern AVCodecParser ff_dvd_nav_parser; +extern AVCodecParser ff_flac_parser; +extern AVCodecParser ff_g729_parser; +extern AVCodecParser ff_gsm_parser; +extern AVCodecParser ff_h261_parser; +extern AVCodecParser ff_h263_parser; +extern AVCodecParser ff_h264_parser; +extern AVCodecParser ff_hevc_parser; +extern AVCodecParser ff_mjpeg_parser; +extern AVCodecParser ff_mlp_parser; +extern AVCodecParser ff_mpeg4video_parser; +extern AVCodecParser ff_mpegaudio_parser; +extern AVCodecParser ff_mpegvideo_parser; +extern AVCodecParser ff_opus_parser; +extern AVCodecParser ff_png_parser; +extern AVCodecParser ff_pnm_parser; +extern AVCodecParser ff_rv30_parser; +extern AVCodecParser ff_rv40_parser; +extern AVCodecParser ff_sbc_parser; +extern AVCodecParser ff_sipr_parser; +extern AVCodecParser ff_tak_parser; +extern AVCodecParser ff_vc1_parser; +extern AVCodecParser ff_vorbis_parser; +extern AVCodecParser ff_vp3_parser; +extern AVCodecParser ff_vp8_parser; +extern AVCodecParser ff_vp9_parser; +extern AVCodecParser ff_xma_parser; + +#include "libavcodec/parser_list.c" + +static AVOnce av_parser_next_init = AV_ONCE_INIT; + +static void av_parser_init_next(void) +{ + AVCodecParser *prev = NULL, *p; + int i = 0; + while ((p = (AVCodecParser*)parser_list[i++])) { + if (prev) + prev->next = p; + prev = p; + } +} + +AVCodecParser *av_parser_next(const AVCodecParser *p) +{ + ff_thread_once(&av_parser_next_init, av_parser_init_next); + + if (p) + return p->next; + else + return (AVCodecParser*)parser_list[0]; +} + +const AVCodecParser *av_parser_iterate(void **opaque) +{ + uintptr_t i = (uintptr_t)*opaque; + const AVCodecParser *p = parser_list[i]; + + if (p) + *opaque = (void*)(i + 1); + + return p; +} + +void av_register_codec_parser(AVCodecParser *parser) +{ + ff_thread_once(&av_parser_next_init, av_parser_init_next); +}