FFmpeg
opus_parse.h
Go to the documentation of this file.
1 /*
2  * Opus decoder/parser common functions and structures
3  * Copyright (c) 2012 Andrew D'Addesio
4  * Copyright (c) 2013-2014 Mozilla Corporation
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 AVCODEC_OPUS_PARSE_H
24 #define AVCODEC_OPUS_PARSE_H
25 
26 #include <stdint.h>
27 
28 #include "avcodec.h"
29 #include "opus.h"
30 
31 typedef struct OpusPacket {
32  int packet_size; /**< packet size */
33  int data_size; /**< size of the useful data -- packet size - padding */
34  int code; /**< packet code: specifies the frame layout */
35  int stereo; /**< whether this packet is mono or stereo */
36  int vbr; /**< vbr flag */
37  int config; /**< configuration: tells the audio mode,
38  ** bandwidth, and frame duration */
39  int frame_count; /**< frame count */
40  int frame_offset[OPUS_MAX_FRAMES]; /**< frame offsets */
41  int frame_size[OPUS_MAX_FRAMES]; /**< frame sizes */
42  int frame_duration; /**< frame duration, in samples @ 48kHz */
43  enum OpusMode mode; /**< mode */
44  enum OpusBandwidth bandwidth; /**< bandwidth */
45 } OpusPacket;
46 
47 // a mapping between an opus stream and an output channel
48 typedef struct ChannelMap {
51 
52  // when a single decoded channel is mapped to multiple output channels, we
53  // write to the first output directly and copy from it to the others
54  // this field is set to 1 for those copied output channels
55  int copy;
56  // this is the index of the output channel to copy from
57  int copy_idx;
58 
59  // this channel is silent
60  int silence;
61 } ChannelMap;
62 
63 typedef struct OpusParseContext {
66 
67  int16_t gain_i;
68 
71 
72 int ff_opus_parse_packet(OpusPacket *pkt, const uint8_t *buf, int buf_size,
73  int self_delimited);
74 
76 
77 #endif /* AVCODEC_OPUS_PARSE_H */
OpusPacket::bandwidth
enum OpusBandwidth bandwidth
bandwidth
Definition: opus_parse.h:44
OpusPacket::code
int code
packet code: specifies the frame layout
Definition: opus_parse.h:34
OpusMode
OpusMode
Definition: opus.h:41
OpusPacket::frame_offset
int frame_offset[OPUS_MAX_FRAMES]
frame offsets
Definition: opus_parse.h:40
opus.h
OpusPacket::vbr
int vbr
vbr flag
Definition: opus_parse.h:36
ChannelMap::copy
int copy
Definition: opus_parse.h:55
OpusParseContext::nb_stereo_streams
int nb_stereo_streams
Definition: opus_parse.h:65
OpusPacket::frame_size
int frame_size[OPUS_MAX_FRAMES]
frame sizes
Definition: opus_parse.h:41
pkt
AVPacket * pkt
Definition: movenc.c:59
ff_opus_parse_packet
int ff_opus_parse_packet(OpusPacket *pkt, const uint8_t *buf, int buf_size, int self_delimited)
Parse Opus packet info from raw packet data.
Definition: opus_parse.c:95
s
#define s(width, name)
Definition: cbs_vp9.c:198
OpusPacket::frame_duration
int frame_duration
frame duration, in samples @ 48kHz
Definition: opus_parse.h:42
OpusParseContext::channel_maps
ChannelMap * channel_maps
Definition: opus_parse.h:69
ff_opus_parse_extradata
int ff_opus_parse_extradata(AVCodecContext *avctx, OpusParseContext *s)
Definition: opus_parse.c:296
OpusParseContext::nb_streams
int nb_streams
Definition: opus_parse.h:64
OpusParseContext
Definition: opus_parse.h:63
OpusPacket::data_size
int data_size
size of the useful data – packet size - padding
Definition: opus_parse.h:33
ChannelMap::silence
int silence
Definition: opus_parse.h:60
OPUS_MAX_FRAMES
#define OPUS_MAX_FRAMES
Definition: opus.h:29
avcodec.h
OpusPacket::mode
enum OpusMode mode
mode
Definition: opus_parse.h:43
AVCodecContext
main external API structure.
Definition: avcodec.h:445
OpusParseContext::gain_i
int16_t gain_i
Definition: opus_parse.h:67
OpusPacket::config
int config
configuration: tells the audio mode, bandwidth, and frame duration
Definition: opus_parse.h:37
OpusPacket
Definition: opus_parse.h:31
ChannelMap
Definition: opus_parse.h:48
ChannelMap::stream_idx
int stream_idx
Definition: opus_parse.h:49
ChannelMap::copy_idx
int copy_idx
Definition: opus_parse.h:57
ChannelMap::channel_idx
int channel_idx
Definition: opus_parse.h:50
OpusPacket::stereo
int stereo
whether this packet is mono or stereo
Definition: opus_parse.h:35
OpusPacket::packet_size
int packet_size
packet size
Definition: opus_parse.h:32
OpusBandwidth
OpusBandwidth
Definition: opus.h:49
OpusPacket::frame_count
int frame_count
frame count
Definition: opus_parse.h:39