From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Subject: [FFmpeg-devel] [PATCH 08/11] avcodec/flac: Move decoder+parser stuff into a new header, flac_parse.h Date: Sun, 28 Aug 2022 23:19:54 +0200 Message-ID: <AS8P250MB074438DF9C5F43A8011C16968F779@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw) In-Reply-To: <AS8P250MB07442EF78806549AFE15D6D98F779@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (The FLAC parser currently ignores the streaminfo block; therefore some of this is decoder-only. Given that the FLAC parser should probably use the streaminfo block, this stuff is moved to flac_parse.h.) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/flac.c | 1 + libavcodec/flac.h | 66 +---------------------------- libavcodec/flac_parse.h | 89 ++++++++++++++++++++++++++++++++++++++++ libavcodec/flac_parser.c | 2 +- libavcodec/flacdec.c | 1 + 5 files changed, 94 insertions(+), 65 deletions(-) create mode 100644 libavcodec/flac_parse.h diff --git a/libavcodec/flac.c b/libavcodec/flac.c index 1da8aed21b..352d663c67 100644 --- a/libavcodec/flac.c +++ b/libavcodec/flac.c @@ -26,6 +26,7 @@ #include "get_bits.h" #include "flac.h" #include "flacdata.h" +#include "flac_parse.h" static const int8_t sample_size_table[] = { 0, 8, 12, 0, 16, 20, 24, 0 }; diff --git a/libavcodec/flac.h b/libavcodec/flac.h index dbfca546cf..fd899ef72c 100644 --- a/libavcodec/flac.h +++ b/libavcodec/flac.h @@ -1,5 +1,5 @@ /* - * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions + * FLAC (Free Lossless Audio Codec) common stuff * Copyright (c) 2008 Justin Ruggles * * This file is part of FFmpeg. @@ -21,15 +21,13 @@ /** * @file - * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions + * FLAC (Free Lossless Audio Codec) common stuff */ #ifndef AVCODEC_FLAC_H #define AVCODEC_FLAC_H -#include "avcodec.h" #include "bytestream.h" -#include "get_bits.h" #define FLAC_STREAMINFO_SIZE 34 #define FLAC_MAX_CHANNELS 8 @@ -55,66 +53,6 @@ enum { FLAC_METADATA_TYPE_INVALID = 127 }; -/** - * Data needed from the Streaminfo header for use by the raw FLAC demuxer - * and/or the FLAC decoder. - */ -typedef struct FLACStreaminfo { - int samplerate; /**< sample rate */ - int channels; /**< number of channels */ - int bps; /**< bits-per-sample */ - int max_blocksize; /**< maximum block size, in samples */ - int max_framesize; /**< maximum frame size, in bytes */ - int64_t samples; /**< total number of samples */ -} FLACStreaminfo; - -typedef struct FLACFrameInfo { - int samplerate; /**< sample rate */ - int channels; /**< number of channels */ - int bps; /**< bits-per-sample */ - int blocksize; /**< block size of the frame */ - int ch_mode; /**< channel decorrelation mode */ - int64_t frame_or_sample_num; /**< frame number or sample number */ - int is_var_size; /**< specifies if the stream uses variable - block sizes or a fixed block size; - also determines the meaning of - frame_or_sample_num */ -} FLACFrameInfo; - -/** - * Parse the Streaminfo metadata block - * @param[out] avctx codec context to set basic stream parameters - * @param[out] s where parsed information is stored - * @param[in] buffer pointer to start of 34-byte streaminfo data - * - * @return negative error code on faiure or >= 0 on success - */ -int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, - const uint8_t *buffer); - -/** - * Validate the FLAC extradata. - * @param[in] avctx codec context containing the extradata. - * @param[out] format extradata format. - * @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data. - * @return 1 if valid, 0 if not valid. - */ -int ff_flac_is_extradata_valid(AVCodecContext *avctx, - uint8_t **streaminfo_start); - -/** - * Validate and decode a frame header. - * @param avctx AVCodecContext to use as av_log() context - * @param gb GetBitContext from which to read frame header - * @param[out] fi frame information - * @param log_level_offset log level offset. can be used to silence error messages. - * @return non-zero on error, 0 if ok - */ -int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, - FLACFrameInfo *fi, int log_level_offset); - -void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels); - /** * Parse the metadata block parameters from the header. * @param[in] block_header header data, at least 4 bytes diff --git a/libavcodec/flac_parse.h b/libavcodec/flac_parse.h new file mode 100644 index 0000000000..67a7320bea --- /dev/null +++ b/libavcodec/flac_parse.h @@ -0,0 +1,89 @@ +/* + * FLAC (Free Lossless Audio Codec) decoder/parser common functions + * Copyright (c) 2008 Justin Ruggles + * + * 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 + * FLAC (Free Lossless Audio Codec) decoder/parser common functions + */ + +#ifndef AVCODEC_FLAC_PARSE_H +#define AVCODEC_FLAC_PARSE_H + +#include "avcodec.h" +#include "get_bits.h" + +typedef struct FLACStreaminfo { + int samplerate; /**< sample rate */ + int channels; /**< number of channels */ + int bps; /**< bits-per-sample */ + int max_blocksize; /**< maximum block size, in samples */ + int max_framesize; /**< maximum frame size, in bytes */ + int64_t samples; /**< total number of samples */ +} FLACStreaminfo; + +typedef struct FLACFrameInfo { + int samplerate; /**< sample rate */ + int channels; /**< number of channels */ + int bps; /**< bits-per-sample */ + int blocksize; /**< block size of the frame */ + int ch_mode; /**< channel decorrelation mode */ + int64_t frame_or_sample_num; /**< frame number or sample number */ + int is_var_size; /**< specifies if the stream uses variable + block sizes or a fixed block size; + also determines the meaning of + frame_or_sample_num */ +} FLACFrameInfo; + +/** + * Parse the Streaminfo metadata block + * @param[out] avctx codec context to set basic stream parameters + * @param[out] s where parsed information is stored + * @param[in] buffer pointer to start of 34-byte streaminfo data + * + * @return negative error code on faiure or >= 0 on success + */ +int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, + const uint8_t *buffer); + +/** + * Validate the FLAC extradata. + * @param[in] avctx codec context containing the extradata. + * @param[out] format extradata format. + * @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data. + * @return 1 if valid, 0 if not valid. + */ +int ff_flac_is_extradata_valid(AVCodecContext *avctx, + uint8_t **streaminfo_start); + +/** + * Validate and decode a frame header. + * @param avctx AVCodecContext to use as av_log() context + * @param gb GetBitContext from which to read frame header + * @param[out] fi frame information + * @param log_level_offset log level offset. can be used to silence error messages. + * @return non-zero on error, 0 if ok + */ +int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, + FLACFrameInfo *fi, int log_level_offset); + +void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels); + +#endif /* AVCODEC_FLAC_PARSE_H */ diff --git a/libavcodec/flac_parser.c b/libavcodec/flac_parser.c index 81b6f12ab3..a1d9cd7f29 100644 --- a/libavcodec/flac_parser.c +++ b/libavcodec/flac_parser.c @@ -36,7 +36,7 @@ #include "libavutil/crc.h" #include "bytestream.h" #include "parser.h" -#include "flac.h" +#include "flac_parse.h" /** maximum number of adjacent headers that compare CRCs against each other */ #define FLAC_MAX_SEQUENTIAL_HEADERS 4 diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index 23e9eba4ad..c5d9e95168 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -44,6 +44,7 @@ #include "flac.h" #include "flacdata.h" #include "flacdsp.h" +#include "flac_parse.h" #include "thread.h" #include "unary.h" -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-08-28 21:21 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-08-28 21:18 [FFmpeg-devel] [PATCH 01/11] avcodec/mpeg4video: Factor non-codec stuff out into a header of its own Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 02/11] avcodec/flac: Remove unnecessary FLACSTREAMINFO define Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 03/11] avcodec/flacdec: Shorten name Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 04/11] avcodec/flacdec: Don't infer max_framesize unnecessarily Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 05/11] avcodec/flac: Move ff_flac_get_max_frame_size() to flacenc.c Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 06/11] avcodec/flac: Remove unused parameter from ff_flac_is_extradata_valid() Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 07/11] avcodec/flac: Remove pointless define Andreas Rheinhardt 2022-08-28 21:19 ` Andreas Rheinhardt [this message] 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 09/11] avcodec/flac: Don't use bytestream API unnecessarily Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 10/11] avcodec/encode: Avoid unreferencing blank AVFrames Andreas Rheinhardt 2022-09-02 20:16 ` Andreas Rheinhardt 2022-08-28 21:19 ` [FFmpeg-devel] [PATCH 11/11] avcodec/frame_thread_encoder: Stop serializing unreferencing AVFrames Andreas Rheinhardt 2022-08-28 23:34 ` [FFmpeg-devel] [PATCH 12/16] avutil/internal: Remove unused ff_rint64_clip() Andreas Rheinhardt 2022-08-28 23:34 ` [FFmpeg-devel] [PATCH 13/16] avutil/internal: Remove unused FF_SYMVER Andreas Rheinhardt 2022-08-28 23:34 ` [FFmpeg-devel] [PATCH 14/16] avutil/dict: Move avpriv_dict_set_timestamp() to a header of its own Andreas Rheinhardt 2022-08-28 23:34 ` [FFmpeg-devel] [PATCH 15/16] avutil/internal: Move avpriv-file API " Andreas Rheinhardt 2022-08-28 23:34 ` [FFmpeg-devel] [PATCH 16/16] avutil/fifo: Properly deprecate av_tempfile() Andreas Rheinhardt 2022-08-31 3:30 ` Anton Khirnov 2022-08-31 3:34 ` Andreas Rheinhardt 2022-08-29 13:45 ` [FFmpeg-devel] [PATCH 17/18] avcodec/codec_internal: Add macro to set AVCodec.long_name Andreas Rheinhardt 2022-08-29 13:45 ` [FFmpeg-devel] [PATCH 18/18] avcodec/codec_internal: Add macros for update_thread_context(_for_user) Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=AS8P250MB074438DF9C5F43A8011C16968F779@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git