annotate dvdata.c @ 11203:10c06a9bd3d9 libavcodec

H264: use alias-safe macros This eliminates all aliasing violation warnings in h264 code. No measurable speed difference with gcc-4.4.3 on i7.
author mru
date Thu, 18 Feb 2010 16:24:31 +0000
parents 227077518e00
children 7dd2a45249a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10409
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
1 /*
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
2 * Constants for DV codec
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
3 * Copyright (c) 2002 Fabrice Bellard
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
4 *
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
5 * This file is part of FFmpeg.
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
6 *
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
11 *
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
15 * Lesser General Public License for more details.
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
16 *
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
20 */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
21
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
22 /**
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
23 * @file libavcodec/dvdata.c
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
24 * Constants for DV codec.
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
25 */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
26
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
27 #include "libavutil/rational.h"
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
28 #include "avcodec.h"
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
29 #include "dvdata.h"
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
30
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
31 static DVwork_chunk work_chunks_dv25pal [1*12*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
32 static DVwork_chunk work_chunks_dv25pal411[1*12*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
33 static DVwork_chunk work_chunks_dv25ntsc [1*10*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
34 static DVwork_chunk work_chunks_dv50pal [2*12*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
35 static DVwork_chunk work_chunks_dv50ntsc [2*10*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
36 static DVwork_chunk work_chunks_dv100palp [2*12*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
37 static DVwork_chunk work_chunks_dv100ntscp[2*10*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
38 static DVwork_chunk work_chunks_dv100pali [4*12*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
39 static DVwork_chunk work_chunks_dv100ntsci[4*10*27];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
40
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
41 static uint32_t dv_idct_factor_sd [2*2*22*64];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
42 static uint32_t dv_idct_factor_hd1080[2*4*16*64];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
43 static uint32_t dv_idct_factor_hd720 [2*4*16*64];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
44
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
45 static const DVprofile dv_profiles[] = {
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
46 { .dsf = 0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
47 .video_stype = 0x0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
48 .frame_size = 120000, /* IEC 61834, SMPTE-314M - 525/60 (NTSC) */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
49 .difseg_size = 10,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
50 .n_difchan = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
51 .time_base = { 1001, 30000 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
52 .ltc_divisor = 30,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
53 .height = 480,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
54 .width = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
55 .sar = {{10, 11}, {40, 33}},
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
56 .work_chunks = &work_chunks_dv25ntsc[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
57 .idct_factor = &dv_idct_factor_sd[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
58 .pix_fmt = PIX_FMT_YUV411P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
59 .bpm = 6,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
60 .block_sizes = block_sizes_dv2550,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
61 .audio_stride = 90,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
62 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
63 .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 }, /* per SMPTE-314M */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
64 .audio_shuffle = dv_audio_shuffle525,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
65 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
66 { .dsf = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
67 .video_stype = 0x0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
68 .frame_size = 144000, /* IEC 61834 - 625/50 (PAL) */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
69 .difseg_size = 12,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
70 .n_difchan = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
71 .time_base = { 1, 25 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
72 .ltc_divisor = 25,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
73 .height = 576,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
74 .width = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
75 .sar = {{59, 54}, {118, 81}},
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
76 .work_chunks = &work_chunks_dv25pal[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
77 .idct_factor = &dv_idct_factor_sd[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
78 .pix_fmt = PIX_FMT_YUV420P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
79 .bpm = 6,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
80 .block_sizes = block_sizes_dv2550,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
81 .audio_stride = 108,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
82 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
83 .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
84 .audio_shuffle = dv_audio_shuffle625,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
85 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
86 { .dsf = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
87 .video_stype = 0x0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
88 .frame_size = 144000, /* SMPTE-314M - 625/50 (PAL) */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
89 .difseg_size = 12,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
90 .n_difchan = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
91 .time_base = { 1, 25 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
92 .ltc_divisor = 25,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
93 .height = 576,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
94 .width = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
95 .sar = {{59, 54}, {118, 81}},
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
96 .work_chunks = &work_chunks_dv25pal411[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
97 .idct_factor = &dv_idct_factor_sd[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
98 .pix_fmt = PIX_FMT_YUV411P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
99 .bpm = 6,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
100 .block_sizes = block_sizes_dv2550,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
101 .audio_stride = 108,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
102 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
103 .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
104 .audio_shuffle = dv_audio_shuffle625,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
105 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
106 { .dsf = 0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
107 .video_stype = 0x4,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
108 .frame_size = 240000, /* SMPTE-314M - 525/60 (NTSC) 50 Mbps */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
109 .difseg_size = 10, /* also known as "DVCPRO50" */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
110 .n_difchan = 2,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
111 .time_base = { 1001, 30000 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
112 .ltc_divisor = 30,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
113 .height = 480,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
114 .width = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
115 .sar = {{10, 11}, {40, 33}},
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
116 .work_chunks = &work_chunks_dv50ntsc[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
117 .idct_factor = &dv_idct_factor_sd[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
118 .pix_fmt = PIX_FMT_YUV422P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
119 .bpm = 6,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
120 .block_sizes = block_sizes_dv2550,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
121 .audio_stride = 90,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
122 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
123 .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 }, /* per SMPTE-314M */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
124 .audio_shuffle = dv_audio_shuffle525,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
125 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
126 { .dsf = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
127 .video_stype = 0x4,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
128 .frame_size = 288000, /* SMPTE-314M - 625/50 (PAL) 50 Mbps */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
129 .difseg_size = 12, /* also known as "DVCPRO50" */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
130 .n_difchan = 2,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
131 .time_base = { 1, 25 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
132 .ltc_divisor = 25,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
133 .height = 576,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
134 .width = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
135 .sar = {{59, 54}, {118, 81}},
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
136 .work_chunks = &work_chunks_dv50pal[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
137 .idct_factor = &dv_idct_factor_sd[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
138 .pix_fmt = PIX_FMT_YUV422P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
139 .bpm = 6,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
140 .block_sizes = block_sizes_dv2550,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
141 .audio_stride = 108,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
142 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
143 .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
144 .audio_shuffle = dv_audio_shuffle625,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
145 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
146 { .dsf = 0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
147 .video_stype = 0x14,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
148 .frame_size = 480000, /* SMPTE-370M - 1080i60 100 Mbps */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
149 .difseg_size = 10, /* also known as "DVCPRO HD" */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
150 .n_difchan = 4,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
151 .time_base = { 1001, 30000 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
152 .ltc_divisor = 30,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
153 .height = 1080,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
154 .width = 1280,
10432
227077518e00 fix sar for dvcpro hd, patch by Charles Yates, charles dot yates at gmail dot com
bcoudurier
parents: 10409
diff changeset
155 .sar = {{1, 1}, {3, 2}},
10409
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
156 .work_chunks = &work_chunks_dv100ntsci[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
157 .idct_factor = &dv_idct_factor_hd1080[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
158 .pix_fmt = PIX_FMT_YUV422P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
159 .bpm = 8,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
160 .block_sizes = block_sizes_dv100,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
161 .audio_stride = 90,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
162 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
163 .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 }, /* per SMPTE-314M */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
164 .audio_shuffle = dv_audio_shuffle525,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
165 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
166 { .dsf = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
167 .video_stype = 0x14,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
168 .frame_size = 576000, /* SMPTE-370M - 1080i50 100 Mbps */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
169 .difseg_size = 12, /* also known as "DVCPRO HD" */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
170 .n_difchan = 4,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
171 .time_base = { 1, 25 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
172 .ltc_divisor = 25,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
173 .height = 1080,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
174 .width = 1440,
10432
227077518e00 fix sar for dvcpro hd, patch by Charles Yates, charles dot yates at gmail dot com
bcoudurier
parents: 10409
diff changeset
175 .sar = {{1, 1}, {4, 3}},
10409
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
176 .work_chunks = &work_chunks_dv100pali[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
177 .idct_factor = &dv_idct_factor_hd1080[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
178 .pix_fmt = PIX_FMT_YUV422P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
179 .bpm = 8,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
180 .block_sizes = block_sizes_dv100,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
181 .audio_stride = 108,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
182 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
183 .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
184 .audio_shuffle = dv_audio_shuffle625,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
185 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
186 { .dsf = 0,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
187 .video_stype = 0x18,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
188 .frame_size = 240000, /* SMPTE-370M - 720p60 100 Mbps */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
189 .difseg_size = 10, /* also known as "DVCPRO HD" */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
190 .n_difchan = 2,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
191 .time_base = { 1001, 60000 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
192 .ltc_divisor = 60,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
193 .height = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
194 .width = 960,
10432
227077518e00 fix sar for dvcpro hd, patch by Charles Yates, charles dot yates at gmail dot com
bcoudurier
parents: 10409
diff changeset
195 .sar = {{1, 1}, {4, 3}},
10409
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
196 .work_chunks = &work_chunks_dv100ntscp[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
197 .idct_factor = &dv_idct_factor_hd720[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
198 .pix_fmt = PIX_FMT_YUV422P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
199 .bpm = 8,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
200 .block_sizes = block_sizes_dv100,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
201 .audio_stride = 90,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
202 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
203 .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 }, /* per SMPTE-314M */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
204 .audio_shuffle = dv_audio_shuffle525,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
205 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
206 { .dsf = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
207 .video_stype = 0x18,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
208 .frame_size = 288000, /* SMPTE-370M - 720p50 100 Mbps */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
209 .difseg_size = 12, /* also known as "DVCPRO HD" */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
210 .n_difchan = 2,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
211 .time_base = { 1, 50 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
212 .ltc_divisor = 50,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
213 .height = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
214 .width = 960,
10432
227077518e00 fix sar for dvcpro hd, patch by Charles Yates, charles dot yates at gmail dot com
bcoudurier
parents: 10409
diff changeset
215 .sar = {{1, 1}, {4, 3}},
10409
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
216 .work_chunks = &work_chunks_dv100palp[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
217 .idct_factor = &dv_idct_factor_hd720[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
218 .pix_fmt = PIX_FMT_YUV422P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
219 .bpm = 8,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
220 .block_sizes = block_sizes_dv100,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
221 .audio_stride = 90,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
222 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
223 .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
224 .audio_shuffle = dv_audio_shuffle625,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
225 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
226 { .dsf = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
227 .video_stype = 0x1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
228 .frame_size = 144000, /* IEC 61883-5 - 625/50 (PAL) */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
229 .difseg_size = 12,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
230 .n_difchan = 1,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
231 .time_base = { 1, 25 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
232 .ltc_divisor = 25,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
233 .height = 576,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
234 .width = 720,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
235 .sar = {{59, 54}, {118, 81}},
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
236 .work_chunks = &work_chunks_dv25pal[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
237 .idct_factor = &dv_idct_factor_sd[0],
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
238 .pix_fmt = PIX_FMT_YUV420P,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
239 .bpm = 6,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
240 .block_sizes = block_sizes_dv2550,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
241 .audio_stride = 108,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
242 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
243 .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
244 .audio_shuffle = dv_audio_shuffle625,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
245 }
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
246 };
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
247
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
248 const DVprofile* ff_dv_frame_profile(const DVprofile *sys,
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
249 const uint8_t* frame, unsigned buf_size)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
250 {
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
251 int i;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
252
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
253 int dsf = (frame[3] & 0x80) >> 7;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
254
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
255 int stype = frame[80*5 + 48 + 3] & 0x1f;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
256
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
257 /* 576i50 25Mbps 4:1:1 is a special case */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
258 if (dsf == 1 && stype == 0 && frame[5] & 0x07) {
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
259 return &dv_profiles[2];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
260 }
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
261
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
262 for (i=0; i<FF_ARRAY_ELEMS(dv_profiles); i++)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
263 if (dsf == dv_profiles[i].dsf && stype == dv_profiles[i].video_stype)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
264 return &dv_profiles[i];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
265
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
266 /* check if old sys matches and assumes corrupted input */
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
267 if (sys && buf_size == sys->frame_size)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
268 return sys;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
269
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
270 return NULL;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
271 }
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
272
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
273 const DVprofile* ff_dv_codec_profile(AVCodecContext* codec)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
274 {
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
275 int i;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
276
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
277 for (i=0; i<FF_ARRAY_ELEMS(dv_profiles); i++)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
278 if (codec->height == dv_profiles[i].height &&
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
279 codec->pix_fmt == dv_profiles[i].pix_fmt &&
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
280 codec->width == dv_profiles[i].width)
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
281 return &dv_profiles[i];
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
282
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
283 return NULL;
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
284 }
3c13cad19e29 Split parts of dvdata.h into dvdata.c, this ensures that things like
reimar
parents:
diff changeset
285