FFmpeg
libavformat
argo_asf.h
Go to the documentation of this file.
1
/*
2
* Argonaut Games ASF (de)muxer
3
*
4
* Copyright (C) 2020 Zane van Iperen (zane@zanevaniperen.com)
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVFORMAT_ARGO_ASF_H
24
#define AVFORMAT_ARGO_ASF_H
25
26
#include <stdint.h>
27
#include "
libavutil/common.h
"
28
29
#include "
avformat.h
"
30
31
#define ASF_TAG MKTAG('A', 'S', 'F', '\0')
32
#define ASF_FILE_HEADER_SIZE 24
33
#define ASF_CHUNK_HEADER_SIZE 20
34
#define ASF_SAMPLE_COUNT 32
35
#define ASF_MIN_BUFFER_SIZE FFMAX(ASF_FILE_HEADER_SIZE, ASF_CHUNK_HEADER_SIZE)
36
37
typedef
struct
ArgoASFFileHeader
{
38
uint32_t
magic
;
/*< Magic Number, {'A', 'S', 'F', '\0'} */
39
uint16_t
version_major
;
/*< File Major Version. */
40
uint16_t
version_minor
;
/*< File Minor Version. */
41
uint32_t
num_chunks
;
/*< No. chunks in the file. */
42
uint32_t
chunk_offset
;
/*< Offset to the first chunk from the start of the file. */
43
int8_t
name
[8];
/*< Name. */
44
}
ArgoASFFileHeader
;
45
46
typedef
struct
ArgoASFChunkHeader
{
47
uint32_t
num_blocks
;
/*< No. blocks in the chunk. */
48
uint32_t
num_samples
;
/*< No. samples per channel in a block. Always 32. */
49
uint32_t
unk1
;
/*< Unknown */
50
uint16_t
sample_rate
;
/*< Sample rate. */
51
uint16_t
unk2
;
/*< Unknown. */
52
uint32_t
flags
;
/*< Stream flags. */
53
}
ArgoASFChunkHeader
;
54
55
enum
{
56
ASF_CF_BITS_PER_SAMPLE
= (1 << 0),
/*< 16-bit if set, 8 otherwise. */
57
ASF_CF_STEREO
= (1 << 1),
/*< Stereo if set, mono otherwise. */
58
ASF_CF_ALWAYS1_1
= (1 << 2),
/*< Unknown, always seems to be set. */
59
ASF_CF_ALWAYS1_2
= (1 << 3),
/*< Unknown, always seems to be set. */
60
61
ASF_CF_ALWAYS1
=
ASF_CF_ALWAYS1_1
|
ASF_CF_ALWAYS1_2
,
62
ASF_CF_ALWAYS0
= ~(
ASF_CF_BITS_PER_SAMPLE
|
ASF_CF_STEREO
|
ASF_CF_ALWAYS1
)
63
};
64
65
void
ff_argo_asf_parse_file_header
(
ArgoASFFileHeader
*hdr,
const
uint8_t
*buf);
66
int
ff_argo_asf_validate_file_header
(
AVFormatContext
*
s
,
const
ArgoASFFileHeader
*hdr);
67
void
ff_argo_asf_parse_chunk_header
(
ArgoASFChunkHeader
*hdr,
const
uint8_t
*buf);
68
int
ff_argo_asf_fill_stream
(
AVFormatContext
*
s
,
AVStream
*st,
const
ArgoASFFileHeader
*fhdr,
69
const
ArgoASFChunkHeader
*ckhdr);
70
71
#endif
/* AVFORMAT_ARGO_ASF_H */
ArgoASFChunkHeader::sample_rate
uint16_t sample_rate
Definition:
argo_asf.h:50
ArgoASFChunkHeader::num_samples
uint32_t num_samples
Definition:
argo_asf.h:48
ArgoASFChunkHeader::flags
uint32_t flags
Definition:
argo_asf.h:52
ArgoASFChunkHeader::unk2
uint16_t unk2
Definition:
argo_asf.h:51
ASF_CF_ALWAYS1_2
@ ASF_CF_ALWAYS1_2
Definition:
argo_asf.h:59
ASF_CF_BITS_PER_SAMPLE
@ ASF_CF_BITS_PER_SAMPLE
Definition:
argo_asf.h:56
ArgoASFFileHeader::version_minor
uint16_t version_minor
Definition:
argo_asf.h:40
ArgoASFChunkHeader
Definition:
argo_asf.h:46
ff_argo_asf_validate_file_header
int ff_argo_asf_validate_file_header(AVFormatContext *s, const ArgoASFFileHeader *hdr)
Definition:
argo_asf.c:57
s
#define s(width, name)
Definition:
cbs_vp9.c:257
ArgoASFFileHeader::num_chunks
uint32_t num_chunks
Definition:
argo_asf.h:41
ASF_CF_STEREO
@ ASF_CF_STEREO
Definition:
argo_asf.h:57
ff_argo_asf_parse_chunk_header
void ff_argo_asf_parse_chunk_header(ArgoASFChunkHeader *hdr, const uint8_t *buf)
Definition:
argo_asf.c:68
AVFormatContext
Format I/O context.
Definition:
avformat.h:1232
ASF_CF_ALWAYS0
@ ASF_CF_ALWAYS0
Definition:
argo_asf.h:62
ff_argo_asf_fill_stream
int ff_argo_asf_fill_stream(AVFormatContext *s, AVStream *st, const ArgoASFFileHeader *fhdr, const ArgoASFChunkHeader *ckhdr)
Definition:
argo_asf.c:78
ArgoASFFileHeader::version_major
uint16_t version_major
Definition:
argo_asf.h:39
ArgoASFFileHeader::chunk_offset
uint32_t chunk_offset
Definition:
argo_asf.h:42
common.h
uint8_t
uint8_t
Definition:
audio_convert.c:194
ff_argo_asf_parse_file_header
void ff_argo_asf_parse_file_header(ArgoASFFileHeader *hdr, const uint8_t *buf)
Definition:
argo_asf.c:46
AVStream
Stream structure.
Definition:
avformat.h:873
ArgoASFChunkHeader::num_blocks
uint32_t num_blocks
Definition:
argo_asf.h:47
avformat.h
ArgoASFFileHeader
Definition:
argo_asf.h:37
ArgoASFChunkHeader::unk1
uint32_t unk1
Definition:
argo_asf.h:49
ArgoASFFileHeader::name
int8_t name[8]
Definition:
argo_asf.h:43
ASF_CF_ALWAYS1
@ ASF_CF_ALWAYS1
Definition:
argo_asf.h:61
ASF_CF_ALWAYS1_1
@ ASF_CF_ALWAYS1_1
Definition:
argo_asf.h:58
ArgoASFFileHeader::magic
uint32_t magic
Definition:
argo_asf.h:38
Generated on Wed Aug 24 2022 21:34:39 for FFmpeg by
1.8.17