FFmpeg
libavcodec
roqvideo.h
1
/*
2
* Copyright (C) 2003 Mike Melanson
3
* Copyright (C) 2003 Dr. Tim Ferguson
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#ifndef AVCODEC_ROQVIDEO_H
23
#define AVCODEC_ROQVIDEO_H
24
25
#include "libavutil/lfg.h"
26
#include "
avcodec.h
"
27
#include "bytestream.h"
28
29
typedef
struct
roq_cell
{
30
unsigned
char
y[4];
31
unsigned
char
u, v;
32
}
roq_cell
;
33
34
typedef
struct
roq_qcell
{
35
int
idx[4];
36
}
roq_qcell
;
37
38
typedef
struct
motion_vect
{
39
int
d[2];
40
}
motion_vect
;
41
42
struct
RoqTempData
;
43
44
typedef
struct
RoqContext
{
45
46
const
AVClass
*
class
;
47
AVCodecContext
*avctx;
48
AVFrame
*last_frame;
49
AVFrame
*current_frame;
50
int
first_frame;
51
52
roq_cell
cb2x2[256];
53
roq_qcell
cb4x4[256];
54
55
GetByteContext
gb;
56
int
width, height;
57
58
/* Encoder only data */
59
AVLFG
randctx;
60
uint64_t lambda;
61
62
motion_vect
*this_motion4;
63
motion_vect
*last_motion4;
64
65
motion_vect
*this_motion8;
66
motion_vect
*last_motion8;
67
68
unsigned
int
framesSinceKeyframe;
69
70
const
AVFrame
*frame_to_enc;
71
uint8_t *out_buf;
72
struct
RoqTempData
*tmpData;
73
74
int
quake3_compat;
// Quake 3 compatibility option
75
76
}
RoqContext
;
77
78
#define RoQ_INFO 0x1001
79
#define RoQ_QUAD_CODEBOOK 0x1002
80
#define RoQ_QUAD_VQ 0x1011
81
#define RoQ_SOUND_MONO 0x1020
82
#define RoQ_SOUND_STEREO 0x1021
83
84
#define RoQ_ID_MOT 0x00
85
#define RoQ_ID_FCC 0x01
86
#define RoQ_ID_SLD 0x02
87
#define RoQ_ID_CCC 0x03
88
89
void
ff_apply_vector_2x2(
RoqContext
*ri,
int
x,
int
y,
roq_cell
*
cell
);
90
void
ff_apply_vector_4x4(
RoqContext
*ri,
int
x,
int
y,
roq_cell
*cell);
91
92
void
ff_apply_motion_4x4(
RoqContext
*ri,
int
x,
int
y,
int
deltax,
int
deltay);
93
94
void
ff_apply_motion_8x8(
RoqContext
*ri,
int
x,
int
y,
int
deltax,
int
deltay);
95
96
#endif
/* AVCODEC_ROQVIDEO_H */
AVLFG
Definition:
lfg.h:27
GetByteContext
Definition:
bytestream.h:33
AVFrame
This structure describes decoded (raw) audio or video data.
Definition:
frame.h:218
motion_vect
Definition:
roqvideo.h:38
roq_cell
Definition:
roqvideo.h:29
RoqContext
Definition:
roqvideo.h:44
roq_qcell
Definition:
roqvideo.h:34
avcodec.h
Libavcodec external API header.
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
AVClass
Describe the class of an AVClass context structure.
Definition:
log.h:67
RoqTempData
Temporary vars.
Definition:
roqvideoenc.c:222
cell_s
In the ELBG jargon, a cell is the set of points that are closest to a codebook entry.
Definition:
elbg.c:39
Generated by
1.8.12