FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
dvdata.h
Go to the documentation of this file.
1
/*
2
* Constants for DV codec
3
* Copyright (c) 2002 Fabrice Bellard
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
/**
23
* @file
24
* Constants for DV codec.
25
*/
26
27
#ifndef AVCODEC_DVDATA_H
28
#define AVCODEC_DVDATA_H
29
30
#include "
avcodec.h
"
31
#include "
dsputil.h
"
32
#include "
get_bits.h
"
33
#include "
dv_profile.h
"
34
35
typedef
struct
DVVideoContext
{
36
const
DVprofile
*
sys
;
37
AVFrame
picture
;
38
AVCodecContext
*
avctx
;
39
uint8_t
*
buf
;
40
41
uint8_t
dv_zigzag
[2][64];
42
43
void
(*
get_pixels
)(
DCTELEM
*
block
,
const
uint8_t
*pixels,
int
line_size);
44
void
(*
fdct
[2])(
DCTELEM
*
block
);
45
void
(*
idct_put
[2])(
uint8_t
*dest,
int
line_size,
DCTELEM
*
block
);
46
me_cmp_func
ildct_cmp
;
47
}
DVVideoContext
;
48
49
enum
dv_section_type
{
50
dv_sect_header
= 0x1f,
51
dv_sect_subcode
= 0x3f,
52
dv_sect_vaux
= 0x56,
53
dv_sect_audio
= 0x76,
54
dv_sect_video
= 0x96,
55
};
56
57
enum
dv_pack_type
{
58
dv_header525
= 0x3f,
/* see dv_write_pack for important details on */
59
dv_header625
= 0xbf,
/* these two packs */
60
dv_timecode
= 0x13,
61
dv_audio_source
= 0x50,
62
dv_audio_control
= 0x51,
63
dv_audio_recdate
= 0x52,
64
dv_audio_rectime
= 0x53,
65
dv_video_source
= 0x60,
66
dv_video_control
= 0x61,
67
dv_video_recdate
= 0x62,
68
dv_video_rectime
= 0x63,
69
dv_unknown_pack
= 0xff,
70
};
71
72
extern
const
uint8_t
ff_dv_quant_shifts
[22][4];
73
extern
const
uint8_t
ff_dv_quant_offset
[4];
74
75
extern
const
int
ff_dv_iweight_88
[64];
76
extern
const
int
ff_dv_iweight_248
[64];
77
extern
const
int
ff_dv_iweight_1080_y
[64];
78
extern
const
int
ff_dv_iweight_1080_c
[64];
79
extern
const
int
ff_dv_iweight_720_y
[64];
80
extern
const
int
ff_dv_iweight_720_c
[64];
81
82
#define DV_PROFILE_IS_HD(p) ((p)->video_stype & 0x10)
83
#define DV_PROFILE_IS_1080i50(p) (((p)->video_stype == 0x14) && ((p)->dsf == 1))
84
#define DV_PROFILE_IS_720p50(p) (((p)->video_stype == 0x18) && ((p)->dsf == 1))
85
86
/**
87
* largest possible DV frame, in bytes (1080i50)
88
*/
89
#define DV_MAX_FRAME_SIZE 576000
90
91
/**
92
* maximum number of blocks per macroblock in any DV format
93
*/
94
#define DV_MAX_BPM 8
95
96
#define TEX_VLC_BITS 9
97
98
extern
RL_VLC_ELEM
ff_dv_rl_vlc
[1184];
99
100
int
ff_dv_init_dynamic_tables
(
const
DVprofile
*d);
101
int
ff_dvvideo_init
(
AVCodecContext
*avctx);
102
103
static
inline
int
dv_work_pool_size
(
const
DVprofile
*d)
104
{
105
int
size
= d->
n_difchan
*d->
difseg_size
*27;
106
if
(
DV_PROFILE_IS_1080i50
(d))
107
size -= 3*27;
108
if
(
DV_PROFILE_IS_720p50
(d))
109
size -= 4*27;
110
return
size
;
111
}
112
113
static
inline
void
dv_calculate_mb_xy
(
DVVideoContext
*s,
DVwork_chunk
*work_chunk,
int
m
,
int
*mb_x,
int
*mb_y)
114
{
115
*mb_x = work_chunk->
mb_coordinates
[
m
] & 0xff;
116
*mb_y = work_chunk->
mb_coordinates
[
m
] >> 8;
117
118
/* We work with 720p frames split in half. The odd half-frame (chan==2,3) is displaced :-( */
119
if
(s->
sys
->
height
== 720 && !(s->
buf
[1]&0x0C)) {
120
*mb_y -= (*mb_y>17)?18:-72;
/* shifting the Y coordinate down by 72/2 macro blocks */
121
}
122
}
123
124
#endif
/* AVCODEC_DVDATA_H */
Generated on Sat May 25 2013 03:58:33 for FFmpeg by
1.8.2