FFmpeg
Loading...
Searching...
No Matches
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
29#include "startcode.h"
30
31/** Markers used in VC-1 AP frame data */
32//@{
42//@}
43
44#define IS_MARKER(x) (((x) & ~0xFF) == VC1_CODE_RES0)
45
46/** Available Profiles */
47//@{
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 */
59static 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
70static 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 */
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
Macro definitions for various function/variable attributes.
#define av_always_inline
Definition attributes.h:72
Accelerated start code search function for start codes common to MPEG-1/2/4 video,...
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
#define src
Definition vp8dsp.c:248
int size
static av_always_inline int vc1_unescape_buffer(const uint8_t *src, int size, uint8_t *dst)
Definition vc1_common.h:70
static av_always_inline const 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
Available Profiles.
Definition vc1_common.h:48
@ PROFILE_ADVANCED
Definition vc1_common.h:52
@ PROFILE_MAIN
Definition vc1_common.h:50
@ PROFILE_COMPLEX
TODO: WMV9 specific.
Definition vc1_common.h:51
@ PROFILE_SIMPLE
Definition vc1_common.h:49
#define IS_MARKER(x)
Definition vc1_common.h:44
VC1Code
Markers used in VC-1 AP frame data.
Definition vc1_common.h:33
@ VC1_CODE_SEQHDR
Definition vc1_common.h:40
@ VC1_CODE_ENDOFSEQ
Definition vc1_common.h:35
@ VC1_CODE_FIELD
Definition vc1_common.h:37
@ VC1_CODE_FRAME
Definition vc1_common.h:38
@ VC1_CODE_RES0
Definition vc1_common.h:34
@ VC1_CODE_SLICE
Definition vc1_common.h:36
@ VC1_CODE_ENTRYPOINT
Definition vc1_common.h:39