comparison dvdata.h @ 8118:890df98a7848 libavcodec

implementing more efficient (and direct) allocation of work for DV codec workers
author romansh
date Sat, 08 Nov 2008 00:18:00 +0000
parents fed91eaa6444
children c30bdda1adb1
comparison
equal deleted inserted replaced
8117:a0f9045e0a82 8118:890df98a7848
45 AVRational time_base; /* 1/framerate */ 45 AVRational time_base; /* 1/framerate */
46 int ltc_divisor; /* FPS from the LTS standpoint */ 46 int ltc_divisor; /* FPS from the LTS standpoint */
47 int height; /* picture height in pixels */ 47 int height; /* picture height in pixels */
48 int width; /* picture width in pixels */ 48 int width; /* picture width in pixels */
49 AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ 49 AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */
50 void **work_chunks; /* each thread gets its own chunk of frame to work on */
50 const uint16_t *video_place; /* positions of all DV macroblocks */ 51 const uint16_t *video_place; /* positions of all DV macroblocks */
51 enum PixelFormat pix_fmt; /* picture pixel format */ 52 enum PixelFormat pix_fmt; /* picture pixel format */
52 int bpm; /* blocks per macroblock */ 53 int bpm; /* blocks per macroblock */
53 const uint8_t *block_sizes; /* AC block sizes, in bits */ 54 const uint8_t *block_sizes; /* AC block sizes, in bits */
54 int audio_stride; /* size of audio_shuffle table */ 55 int audio_stride; /* size of audio_shuffle table */
6157 6158
6158 static const uint8_t block_sizes_dv100[8] = { 6159 static const uint8_t block_sizes_dv100[8] = {
6159 80, 80, 80, 80, 80, 80, 64, 64, 6160 80, 80, 80, 80, 80, 80, 64, 64,
6160 }; 6161 };
6161 6162
6163 static void *work_chunks_dv25pal [1*12*27];
6164 static void *work_chunks_dv25pal411[1*12*27];
6165 static void *work_chunks_dv25ntsc [1*10*27];
6166 static void *work_chunks_dv50pal [2*12*27];
6167 static void *work_chunks_dv50ntsc [2*10*27];
6168 static void *work_chunks_dv100palp [2*12*27];
6169 static void *work_chunks_dv100ntscp[2*10*27];
6170 static void *work_chunks_dv100pali [4*12*27];
6171 static void *work_chunks_dv100ntsci[4*10*27];
6172
6162 static const DVprofile dv_profiles[] = { 6173 static const DVprofile dv_profiles[] = {
6163 { .dsf = 0, 6174 { .dsf = 0,
6164 .video_stype = 0x0, 6175 .video_stype = 0x0,
6165 .frame_size = 120000, /* IEC 61834, SMPTE-314M - 525/60 (NTSC) */ 6176 .frame_size = 120000, /* IEC 61834, SMPTE-314M - 525/60 (NTSC) */
6166 .difseg_size = 10, 6177 .difseg_size = 10,
6169 .ltc_divisor = 30, 6180 .ltc_divisor = 30,
6170 .height = 480, 6181 .height = 480,
6171 .width = 720, 6182 .width = 720,
6172 .sar = {{10, 11}, {40, 33}}, 6183 .sar = {{10, 11}, {40, 33}},
6173 .video_place = dv_place_411, 6184 .video_place = dv_place_411,
6185 .work_chunks = &work_chunks_dv25ntsc[0],
6174 .pix_fmt = PIX_FMT_YUV411P, 6186 .pix_fmt = PIX_FMT_YUV411P,
6175 .bpm = 6, 6187 .bpm = 6,
6176 .block_sizes = block_sizes_dv2550, 6188 .block_sizes = block_sizes_dv2550,
6177 .audio_stride = 90, 6189 .audio_stride = 90,
6178 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */ 6190 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
6188 .ltc_divisor = 25, 6200 .ltc_divisor = 25,
6189 .height = 576, 6201 .height = 576,
6190 .width = 720, 6202 .width = 720,
6191 .sar = {{59, 54}, {118, 81}}, 6203 .sar = {{59, 54}, {118, 81}},
6192 .video_place = dv_place_420, 6204 .video_place = dv_place_420,
6205 .work_chunks = &work_chunks_dv25pal[0],
6193 .pix_fmt = PIX_FMT_YUV420P, 6206 .pix_fmt = PIX_FMT_YUV420P,
6194 .bpm = 6, 6207 .bpm = 6,
6195 .block_sizes = block_sizes_dv2550, 6208 .block_sizes = block_sizes_dv2550,
6196 .audio_stride = 108, 6209 .audio_stride = 108,
6197 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */ 6210 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
6207 .ltc_divisor = 25, 6220 .ltc_divisor = 25,
6208 .height = 576, 6221 .height = 576,
6209 .width = 720, 6222 .width = 720,
6210 .sar = {{59, 54}, {118, 81}}, 6223 .sar = {{59, 54}, {118, 81}},
6211 .video_place = dv_place_411P, 6224 .video_place = dv_place_411P,
6225 .work_chunks = &work_chunks_dv25pal411[0],
6212 .pix_fmt = PIX_FMT_YUV411P, 6226 .pix_fmt = PIX_FMT_YUV411P,
6213 .bpm = 6, 6227 .bpm = 6,
6214 .block_sizes = block_sizes_dv2550, 6228 .block_sizes = block_sizes_dv2550,
6215 .audio_stride = 108, 6229 .audio_stride = 108,
6216 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */ 6230 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
6226 .ltc_divisor = 30, 6240 .ltc_divisor = 30,
6227 .height = 480, 6241 .height = 480,
6228 .width = 720, 6242 .width = 720,
6229 .sar = {{10, 11}, {40, 33}}, 6243 .sar = {{10, 11}, {40, 33}},
6230 .video_place = dv_place_422_525, 6244 .video_place = dv_place_422_525,
6245 .work_chunks = &work_chunks_dv50ntsc[0],
6231 .pix_fmt = PIX_FMT_YUV422P, 6246 .pix_fmt = PIX_FMT_YUV422P,
6232 .bpm = 6, 6247 .bpm = 6,
6233 .block_sizes = block_sizes_dv2550, 6248 .block_sizes = block_sizes_dv2550,
6234 .audio_stride = 90, 6249 .audio_stride = 90,
6235 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */ 6250 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
6245 .ltc_divisor = 25, 6260 .ltc_divisor = 25,
6246 .height = 576, 6261 .height = 576,
6247 .width = 720, 6262 .width = 720,
6248 .sar = {{59, 54}, {118, 81}}, 6263 .sar = {{59, 54}, {118, 81}},
6249 .video_place = dv_place_422_625, 6264 .video_place = dv_place_422_625,
6265 .work_chunks = &work_chunks_dv50pal[0],
6250 .pix_fmt = PIX_FMT_YUV422P, 6266 .pix_fmt = PIX_FMT_YUV422P,
6251 .bpm = 6, 6267 .bpm = 6,
6252 .block_sizes = block_sizes_dv2550, 6268 .block_sizes = block_sizes_dv2550,
6253 .audio_stride = 108, 6269 .audio_stride = 108,
6254 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */ 6270 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
6264 .ltc_divisor = 30, 6280 .ltc_divisor = 30,
6265 .height = 1080, 6281 .height = 1080,
6266 .width = 1280, 6282 .width = 1280,
6267 .sar = {{1, 1}, {1, 1}}, 6283 .sar = {{1, 1}, {1, 1}},
6268 .video_place = dv_place_1080i60, 6284 .video_place = dv_place_1080i60,
6285 .work_chunks = &work_chunks_dv100ntsci[0],
6269 .pix_fmt = PIX_FMT_YUV422P, 6286 .pix_fmt = PIX_FMT_YUV422P,
6270 .bpm = 8, 6287 .bpm = 8,
6271 .block_sizes = block_sizes_dv100, 6288 .block_sizes = block_sizes_dv100,
6272 .audio_stride = 90, 6289 .audio_stride = 90,
6273 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */ 6290 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
6283 .ltc_divisor = 25, 6300 .ltc_divisor = 25,
6284 .height = 1080, 6301 .height = 1080,
6285 .width = 1440, 6302 .width = 1440,
6286 .sar = {{1, 1}, {1, 1}}, 6303 .sar = {{1, 1}, {1, 1}},
6287 .video_place = dv_place_1080i50, 6304 .video_place = dv_place_1080i50,
6305 .work_chunks = &work_chunks_dv100pali[0],
6288 .pix_fmt = PIX_FMT_YUV422P, 6306 .pix_fmt = PIX_FMT_YUV422P,
6289 .bpm = 8, 6307 .bpm = 8,
6290 .block_sizes = block_sizes_dv100, 6308 .block_sizes = block_sizes_dv100,
6291 .audio_stride = 108, 6309 .audio_stride = 108,
6292 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */ 6310 .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32kHz */
6302 .ltc_divisor = 60, 6320 .ltc_divisor = 60,
6303 .height = 720, 6321 .height = 720,
6304 .width = 960, 6322 .width = 960,
6305 .sar = {{1, 1}, {1, 1}}, 6323 .sar = {{1, 1}, {1, 1}},
6306 .video_place = dv_place_720p60, 6324 .video_place = dv_place_720p60,
6325 .work_chunks = &work_chunks_dv100ntscp[0],
6307 .pix_fmt = PIX_FMT_YUV422P, 6326 .pix_fmt = PIX_FMT_YUV422P,
6308 .bpm = 8, 6327 .bpm = 8,
6309 .block_sizes = block_sizes_dv100, 6328 .block_sizes = block_sizes_dv100,
6310 .audio_stride = 90, 6329 .audio_stride = 90,
6311 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */ 6330 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */
6321 .ltc_divisor = 50, 6340 .ltc_divisor = 50,
6322 .height = 720, 6341 .height = 720,
6323 .width = 960, 6342 .width = 960,
6324 .sar = {{1, 1}, {1, 1}}, 6343 .sar = {{1, 1}, {1, 1}},
6325 .video_place = dv_place_720p50, 6344 .video_place = dv_place_720p50,
6345 .work_chunks = &work_chunks_dv100palp[0],
6326 .pix_fmt = PIX_FMT_YUV422P, 6346 .pix_fmt = PIX_FMT_YUV422P,
6327 .bpm = 8, 6347 .bpm = 8,
6328 .block_sizes = block_sizes_dv100, 6348 .block_sizes = block_sizes_dv100,
6329 .audio_stride = 90, 6349 .audio_stride = 90,
6330 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */ 6350 .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32kHz */