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
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
30
/** Markers used in VC-1 AP frame data */
31
//@{
32
enum
VC1Code
{
33
VC1_CODE_RES0
= 0x00000100,
34
VC1_CODE_ENDOFSEQ
= 0x0000010A,
35
VC1_CODE_SLICE
,
36
VC1_CODE_FIELD
,
37
VC1_CODE_FRAME
,
38
VC1_CODE_ENTRYPOINT
,
39
VC1_CODE_SEQHDR
,
40
};
41
//@}
42
43
#define IS_MARKER(x) (((x) & ~0xFF) == VC1_CODE_RES0)
44
45
/** Available Profiles */
46
//@{
47
enum
Profile
{
48
PROFILE_SIMPLE
,
49
PROFILE_MAIN
,
50
PROFILE_COMPLEX
,
///< TODO: WMV9 specific
51
PROFILE_ADVANCED
52
};
53
//@}
54
55
/** Find VC-1 marker in buffer
56
* @return position where next marker starts or end of buffer if no marker found
57
*/
58
static
av_always_inline
const
uint8_t
*
find_next_marker
(
const
uint8_t
*
src
,
const
uint8_t
*
end
)
59
{
60
uint32_t mrk = 0xFFFFFFFF;
61
62
if
(end-src < 4)
63
return
end
;
64
while
(src < end) {
65
mrk = (mrk << 8) | *src++;
66
if
(
IS_MARKER
(mrk))
67
return
src - 4;
68
}
69
return
end
;
70
}
71
72
static
av_always_inline
int
vc1_unescape_buffer
(
const
uint8_t
*
src
,
int
size
,
uint8_t
*dst)
73
{
74
int
dsize = 0, i;
75
76
if
(size < 4) {
77
for
(dsize = 0; dsize <
size
; dsize++)
78
*dst++ = *src++;
79
return
size
;
80
}
81
for
(i = 0; i <
size
; i++, src++) {
82
if
(src[0] == 3 && i >= 2 && !src[-1] && !src[-2] && i < size-1 && src[1] < 4) {
83
dst[dsize++] = src[1];
84
src++;
85
i++;
86
}
else
87
dst[dsize++] = *
src
;
88
}
89
return
dsize;
90
}
91
92
#endif
/* AVCODEC_VC1_COMMON_H */
Generated on Fri Dec 5 2014 04:42:04 for FFmpeg by
1.8.2