annotate dvdata.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents fae5731a5543
children
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 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 10432
diff changeset
23 * @file
10409
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,
12527
fae5731a5543 In dv decoder, use the expected aspect ratio logic, like other decoders do,
bcoudurier
parents: 11644
diff changeset
55 .sar = {{8, 9}, {32, 27}},
10409
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,
12527
fae5731a5543 In dv decoder, use the expected aspect ratio logic, like other decoders do,
bcoudurier
parents: 11644
diff changeset
75 .sar = {{16, 15}, {64, 45}},
10409
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,
12527
fae5731a5543 In dv decoder, use the expected aspect ratio logic, like other decoders do,
bcoudurier
parents: 11644
diff changeset
95 .sar = {{16, 15}, {64, 45}},
10409
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,
12527
fae5731a5543 In dv decoder, use the expected aspect ratio logic, like other decoders do,
bcoudurier
parents: 11644
diff changeset
115 .sar = {{8, 9}, {32, 27}},
10409
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,
12527
fae5731a5543 In dv decoder, use the expected aspect ratio logic, like other decoders do,
bcoudurier
parents: 11644
diff changeset
135 .sar = {{16, 15}, {64, 45}},
10409
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,
12527
fae5731a5543 In dv decoder, use the expected aspect ratio logic, like other decoders do,
bcoudurier
parents: 11644
diff changeset
235 .sar = {{16, 15}, {64, 45}},
10409
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