FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
vp9_parser.c
Go to the documentation of this file.
1
/*
2
* VP9 compatible video decoder
3
*
4
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
5
* Copyright (C) 2013 Clément Bœsch <u pkh me>
6
*
7
* This file is part of FFmpeg.
8
*
9
* FFmpeg is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU Lesser General Public
11
* License as published by the Free Software Foundation; either
12
* version 2.1 of the License, or (at your option) any later version.
13
*
14
* FFmpeg is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public
20
* License along with FFmpeg; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
*/
23
24
#include "
libavutil/intreadwrite.h
"
25
#include "
libavcodec/get_bits.h
"
26
#include "
parser.h
"
27
28
static
int
parse
(
AVCodecParserContext
*
ctx
,
29
AVCodecContext
*avctx,
30
const
uint8_t
**out_data,
int
*
out_size
,
31
const
uint8_t
*
data
,
int
size
)
32
{
33
GetBitContext
gb;
34
int
res,
profile
, keyframe;
35
36
*out_data =
data
;
37
*out_size =
size
;
38
39
if
(!size || (res =
init_get_bits8
(&gb, data, size)) < 0)
40
return
size
;
// parsers can't return errors
41
get_bits
(&gb, 2);
// frame marker
42
profile =
get_bits1
(&gb);
43
profile |=
get_bits1
(&gb) << 1;
44
if
(profile == 3) profile +=
get_bits1
(&gb);
45
if
(profile > 3)
46
return
size
;
47
48
avctx->
profile
=
profile
;
49
50
if
(
get_bits1
(&gb)) {
51
keyframe = 0;
52
}
else
{
53
keyframe = !
get_bits1
(&gb);
54
}
55
56
if
(!keyframe) {
57
ctx->
pict_type
=
AV_PICTURE_TYPE_P
;
58
ctx->
key_frame
= 0;
59
}
else
{
60
ctx->
pict_type
=
AV_PICTURE_TYPE_I
;
61
ctx->
key_frame
= 1;
62
}
63
64
return
size
;
65
}
66
67
AVCodecParser
ff_vp9_parser
= {
68
.
codec_ids
= {
AV_CODEC_ID_VP9
},
69
.parser_parse =
parse
,
70
};
ff_vp9_parser
AVCodecParser ff_vp9_parser
Definition:
vp9_parser.c:67
AV_CODEC_ID_VP9
Definition:
avcodec.h:386
data
ptrdiff_t const GLvoid * data
Definition:
opengl_enc.c:101
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition:
get_bits.h:381
AVCodecParser::codec_ids
int codec_ids[5]
Definition:
avcodec.h:5216
out_size
int out_size
Definition:
movenc.c:55
AVCodecContext::profile
int profile
profile
Definition:
avcodec.h:2859
parse
static int parse(AVCodecParserContext *ctx, AVCodecContext *avctx, const uint8_t **out_data, int *out_size, const uint8_t *data, int size)
Definition:
vp9_parser.c:28
uint8_t
uint8_t
Definition:
audio_convert.c:194
get_bits.h
bitstream reader API header.
size
ptrdiff_t size
Definition:
opengl_enc.c:101
parser.h
AVCodecParserContext::pict_type
int pict_type
Definition:
avcodec.h:5056
AVCodecParser
Definition:
avcodec.h:5215
AV_PICTURE_TYPE_I
Intra.
Definition:
avutil.h:274
intreadwrite.h
ctx
AVFormatContext * ctx
Definition:
movenc.c:48
AVCodecParserContext
Definition:
avcodec.h:5048
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition:
get_bits.h:650
AVCodecContext
main external API structure.
Definition:
avcodec.h:1533
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition:
get_bits.h:487
profile
mfxU16 profile
Definition:
qsvenc.c:44
GetBitContext
Definition:
get_bits.h:61
AVCodecParserContext::key_frame
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition:
avcodec.h:5097
AV_PICTURE_TYPE_P
Predicted.
Definition:
avutil.h:275
Generated on Tue Nov 6 2018 18:11:16 for FFmpeg by
1.8.6