FFmpeg
libavcodec
dca_core_bsf.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2016 Paul B Mahol
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "
avcodec.h
"
22
#include "
bsf.h
"
23
#include "
bytestream.h
"
24
#include "
dca_syncwords.h
"
25
#include "
libavutil/mem.h
"
26
27
static
int
dca_core_filter
(
AVBSFContext
*
ctx
,
AVPacket
*
pkt
)
28
{
29
GetByteContext
gb;
30
uint32_t syncword;
31
int
core_size = 0,
ret
;
32
33
ret
=
ff_bsf_get_packet_ref
(
ctx
,
pkt
);
34
if
(
ret
< 0)
35
return
ret
;
36
37
bytestream2_init
(&gb,
pkt
->
data
,
pkt
->
size
);
38
syncword = bytestream2_get_be32(&gb);
39
bytestream2_skip
(&gb, 1);
40
41
switch
(syncword) {
42
case
DCA_SYNCWORD_CORE_BE
:
43
core_size = ((bytestream2_get_be24(&gb) >> 4) & 0x3fff) + 1;
44
break
;
45
}
46
47
if
(core_size > 0 && core_size <= pkt->
size
) {
48
pkt
->
size
= core_size;
49
}
50
51
return
0;
52
}
53
54
static
const
enum
AVCodecID
codec_ids
[] = {
55
AV_CODEC_ID_DTS
,
AV_CODEC_ID_NONE
,
56
};
57
58
const
AVBitStreamFilter
ff_dca_core_bsf
= {
59
.
name
=
"dca_core"
,
60
.filter =
dca_core_filter
,
61
.codec_ids =
codec_ids
,
62
};
GetByteContext
Definition:
bytestream.h:33
AVBitStreamFilter::name
const char * name
Definition:
avcodec.h:5813
AVPacket::data
uint8_t * data
Definition:
avcodec.h:1477
ff_dca_core_bsf
const AVBitStreamFilter ff_dca_core_bsf
Definition:
dca_core_bsf.c:58
AVBSFContext
The bitstream filter state.
Definition:
avcodec.h:5763
bytestream2_skip
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
Definition:
bytestream.h:164
bsf.h
ctx
AVFormatContext * ctx
Definition:
movenc.c:48
dca_syncwords.h
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition:
avcodec.h:215
DCA_SYNCWORD_CORE_BE
#define DCA_SYNCWORD_CORE_BE
Definition:
dca_syncwords.h:22
AVPacket::size
int size
Definition:
avcodec.h:1478
AV_CODEC_ID_DTS
@ AV_CODEC_ID_DTS
Definition:
avcodec.h:568
size
int size
Definition:
twinvq_data.h:11134
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition:
avcodec.h:216
dca_core_filter
static int dca_core_filter(AVBSFContext *ctx, AVPacket *pkt)
Definition:
dca_core_bsf.c:27
avcodec.h
ret
ret
Definition:
filter_design.txt:187
pkt
static AVPacket pkt
Definition:
demuxing_decoding.c:54
AVBitStreamFilter
Definition:
avcodec.h:5812
mem.h
AVPacket
This structure stores compressed data.
Definition:
avcodec.h:1454
bytestream.h
bytestream2_init
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
Definition:
bytestream.h:133
ff_bsf_get_packet_ref
int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt)
Called by bitstream filters to get packet for filtering.
Definition:
bsf.c:239
codec_ids
static enum AVCodecID codec_ids[]
Definition:
dca_core_bsf.c:54
Generated on Wed Aug 24 2022 21:26:36 for FFmpeg by
1.8.17