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
#include "
internal.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 */
Generated on Sun Mar 8 2015 02:35:01 for FFmpeg by
1.8.2