FFmpeg
libavcodec
vc1_common.h
Go to the documentation of this file.
1
/*
2
* VC-1 and WMV3 decoder
3
* Copyright (c) 2006-2007 Konstantin Shishkov
4
* Partly based on vc9.c (c) 2005 Anonymous, Alex Beregszaszi, Michael Niedermayer
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_VC1_COMMON_H
24
#define AVCODEC_VC1_COMMON_H
25
26
#include <stdint.h>
27
28
#include "
libavutil/attributes.h
"
29
#include "
startcode.h
"
30
31
/** Markers used in VC-1 AP frame data */
32
//@{
33
enum
VC1Code
{
34
VC1_CODE_RES0
= 0x00000100,
35
VC1_CODE_ENDOFSEQ
= 0x0000010A,
36
VC1_CODE_SLICE
,
37
VC1_CODE_FIELD
,
38
VC1_CODE_FRAME
,
39
VC1_CODE_ENTRYPOINT
,
40
VC1_CODE_SEQHDR
,
41
};
42
//@}
43
44
#define IS_MARKER(x) (((x) & ~0xFF) == VC1_CODE_RES0)
45
46
/** Available Profiles */
47
//@{
48
enum
Profile
{
49
PROFILE_SIMPLE
,
50
PROFILE_MAIN
,
51
PROFILE_COMPLEX
,
///< TODO: WMV9 specific
52
PROFILE_ADVANCED
53
};
54
//@}
55
56
/** Find VC-1 marker in buffer
57
* @return position where next marker starts or end of buffer if no marker found
58
*/
59
static
av_always_inline
const
uint8_t*
find_next_marker
(
const
uint8_t *
src
,
const
uint8_t *end)
60
{
61
if
(end -
src
>= 4) {
62
uint32_t mrk = 0xFFFFFFFF;
63
src
=
avpriv_find_start_code
(
src
, end, &mrk);
64
if
(
IS_MARKER
(mrk))
65
return
src
- 4;
66
}
67
return
end;
68
}
69
70
static
av_always_inline
int
vc1_unescape_buffer
(
const
uint8_t *
src
,
int
size
, uint8_t *
dst
)
71
{
72
int
dsize = 0,
i
;
73
74
if
(
size
< 4) {
75
for
(dsize = 0; dsize <
size
; dsize++)
76
*
dst
++ = *
src
++;
77
return
size
;
78
}
79
for
(
i
= 0;
i
<
size
;
i
++,
src
++) {
80
if
(
src
[0] == 3 &&
i
>= 2 && !
src
[-1] && !
src
[-2] &&
i
<
size
-1 &&
src
[1] < 4) {
81
dst
[dsize++] =
src
[1];
82
src
++;
83
i
++;
84
}
else
85
dst
[dsize++] = *
src
;
86
}
87
return
dsize;
88
}
89
90
#endif
/* AVCODEC_VC1_COMMON_H */
PROFILE_MAIN
@ PROFILE_MAIN
Definition:
vc1_common.h:50
Profile
Profile
Available Profiles.
Definition:
vc1_common.h:48
PROFILE_SIMPLE
@ PROFILE_SIMPLE
Definition:
vc1_common.h:49
find_next_marker
static const av_always_inline uint8_t * find_next_marker(const uint8_t *src, const uint8_t *end)
Find VC-1 marker in buffer.
Definition:
vc1_common.h:59
PROFILE_COMPLEX
@ PROFILE_COMPLEX
TODO: WMV9 specific.
Definition:
vc1_common.h:51
VC1Code
VC1Code
Markers used in VC-1 AP frame data.
Definition:
vc1_common.h:33
VC1_CODE_RES0
@ VC1_CODE_RES0
Definition:
vc1_common.h:34
VC1_CODE_SLICE
@ VC1_CODE_SLICE
Definition:
vc1_common.h:36
PROFILE_ADVANCED
@ PROFILE_ADVANCED
Definition:
vc1_common.h:52
vc1_unescape_buffer
static av_always_inline int vc1_unescape_buffer(const uint8_t *src, int size, uint8_t *dst)
Definition:
vc1_common.h:70
VC1_CODE_SEQHDR
@ VC1_CODE_SEQHDR
Definition:
vc1_common.h:40
VC1_CODE_FIELD
@ VC1_CODE_FIELD
Definition:
vc1_common.h:37
VC1_CODE_ENTRYPOINT
@ VC1_CODE_ENTRYPOINT
Definition:
vc1_common.h:39
avpriv_find_start_code
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
IS_MARKER
#define IS_MARKER(x)
Definition:
vc1_common.h:44
VC1_CODE_FRAME
@ VC1_CODE_FRAME
Definition:
vc1_common.h:38
startcode.h
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition:
dsp.h:83
size
int size
Definition:
twinvq_data.h:10344
attributes.h
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:256
av_always_inline
#define av_always_inline
Definition:
attributes.h:49
VC1_CODE_ENDOFSEQ
@ VC1_CODE_ENDOFSEQ
Definition:
vc1_common.h:35
src
#define src
Definition:
vp8dsp.c:248
Generated on Thu Dec 5 2024 19:22:09 for FFmpeg by
1.8.17