comparison libavcodec/h264_ompss.c @ 7:c8259123d224

hide animating VP and entry point
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 15 May 2013 15:26:14 +0200
parents 55fb61482128
children 6c1433f5a562
comparison
equal deleted inserted replaced
4:b3c99b2b41db 5:51c170445ade
38 38
39 int32 parse_taskArgTypes[4] = {INOUT, INOUT, OUTPUT, NONCTLD}; 39 int32 parse_taskArgTypes[4] = {INOUT, INOUT, OUTPUT, NONCTLD};
40 int32 parse_taskArgSizes[4] = {sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry), sizeof(H264Context)}; 40 int32 parse_taskArgSizes[4] = {sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
41 41
42 //#pragma omp task inout(*pc, *nc) output(*sbe) 42 //#pragma omp task inout(*pc, *nc) output(*sbe)
43 static void parse_task(void *_data, SlaveVP *animatingSlv){ 43 static void parse_task(void *_data){
44 parse_taskArgs* args = (parse_taskArgs*) _data; 44 parse_taskArgs* args = (parse_taskArgs*) _data;
45 ParserContext *pc = args->pc; 45 ParserContext *pc = args->pc;
46 NalContext *nc = args->nc; 46 NalContext *nc = args->nc;
47 SliceBufferEntry *sbe = args->sbe; 47 SliceBufferEntry *sbe = args->sbe;
48 H264Context *h = args->h; 48 H264Context *h = args->h;
56 av_read_frame_internal(pc, &sbe->gb); 56 av_read_frame_internal(pc, &sbe->gb);
57 s = &sbe->slice; 57 s = &sbe->slice;
58 58
59 decode_nal_units(nc, s, &sbe->gb); 59 decode_nal_units(nc, s, &sbe->gb);
60 60
61 VSs__end_task( animatingSlv ); 61 VSs__end_task();
62 } 62 }
63 63
64 VSsTaskType parse_taskType = { 64 VSsTaskType parse_taskType = {
65 .fn = &parse_task, 65 .fn = &parse_task,
66 .numCtldArgs = 3, 66 .numCtldArgs = 3,
78 78
79 int32 decode_slice_entropy_taskArgTypes[3] = {INOUT, INOUT, NONCTLD}; 79 int32 decode_slice_entropy_taskArgTypes[3] = {INOUT, INOUT, NONCTLD};
80 int32 decode_slice_entropy_taskArgSizes[3] = {sizeof(EntropyContext), sizeof(SliceBufferEntry), sizeof(H264Context)}; 80 int32 decode_slice_entropy_taskArgSizes[3] = {sizeof(EntropyContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
81 81
82 //#pragma omp task inout(*ec) inout(*sbe) 82 //#pragma omp task inout(*ec) inout(*sbe)
83 static void decode_slice_entropy_task(void *_data, SlaveVP *animatingSlv){ 83 static void decode_slice_entropy_task(void *_data){
84 decode_slice_entropy_taskArgs* args = (decode_slice_entropy_taskArgs*) _data; 84 decode_slice_entropy_taskArgs* args = (decode_slice_entropy_taskArgs*) _data;
85 EntropyContext *ec = args->ec; 85 EntropyContext *ec = args->ec;
86 SliceBufferEntry *sbe = args->sbe; 86 SliceBufferEntry *sbe = args->sbe;
87 H264Context *h = args->h; 87 H264Context *h = args->h;
88 int i,j; 88 int i,j;
92 // GetBitContext *gb = s->gb; 92 // GetBitContext *gb = s->gb;
93 CABACContext *c = &ec->c; 93 CABACContext *c = &ec->c;
94 94
95 if( !s->pps.cabac ){ 95 if( !s->pps.cabac ){
96 av_log(AV_LOG_ERROR, "Only cabac encoded streams are supported\n"); 96 av_log(AV_LOG_ERROR, "Only cabac encoded streams are supported\n");
97 VSs__end_task( animatingSlv ); 97 VSs__end_task();
98 } 98 }
99 99
100 init_dequant_tables(s, ec); 100 init_dequant_tables(s, ec);
101 ec->curr_qscale = s->qscale; 101 ec->curr_qscale = s->qscale;
102 ec->last_qscale_diff = 0; 102 ec->last_qscale_diff = 0;
122 ret = ff_h264_decode_mb_cabac(ec, s, c); 122 ret = ff_h264_decode_mb_cabac(ec, s, c);
123 eos = get_cabac_terminate( c); 123 eos = get_cabac_terminate( c);
124 (void) eos; 124 (void) eos;
125 if( ret < 0 || c->bytestream > c->bytestream_end + 2) { 125 if( ret < 0 || c->bytestream > c->bytestream_end + 2) {
126 av_log(AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%td)\n", m->mb_x, m->mb_y, c->bytestream_end - c->bytestream); 126 av_log(AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%td)\n", m->mb_x, m->mb_y, c->bytestream_end - c->bytestream);
127 VSs__end_task( animatingSlv ); 127 VSs__end_task();
128 } 128 }
129 } 129 }
130 } 130 }
131 VSs__end_task( animatingSlv ); 131 VSs__end_task();
132 } 132 }
133 133
134 VSsTaskType decode_slice_entropy_taskType = { 134 VSsTaskType decode_slice_entropy_taskType = {
135 .fn = &decode_slice_entropy_task, 135 .fn = &decode_slice_entropy_task,
136 .numCtldArgs = 2, 136 .numCtldArgs = 2,
165 165
166 int32 decode_super_mb_taskArgTypes[6] = {IN, IN, IN, IN, INOUT, NONCTLD}; 166 int32 decode_super_mb_taskArgTypes[6] = {IN, IN, IN, IN, INOUT, NONCTLD};
167 int32 decode_super_mb_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBContext)}; 167 int32 decode_super_mb_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBContext)};
168 168
169 //#pragma omp task input(*d, *sbe, *ml, *mur) inout(*m) 169 //#pragma omp task input(*d, *sbe, *ml, *mur) inout(*m)
170 static void decode_super_mb_task(void *_data, SlaveVP *animatingSlv){ 170 static void decode_super_mb_task(void *_data){
171 decode_super_mb_taskArgs* args = (decode_super_mb_taskArgs*) _data; 171 decode_super_mb_taskArgs* args = (decode_super_mb_taskArgs*) _data;
172 MBRecContext *d = args->d; 172 MBRecContext *d = args->d;
173 SliceBufferEntry *sbe = args->sbe; 173 SliceBufferEntry *sbe = args->sbe;
174 SuperMBTask *ml = args->ml; 174 SuperMBTask *ml = args->ml;
175 SuperMBTask *mur = args->mur; 175 SuperMBTask *mur = args->mur;
176 SuperMBTask *m = args->m; 176 SuperMBTask *m = args->m;
177 SuperMBContext *smbc = args->smbc; 177 SuperMBContext *smbc = args->smbc;
178 H264Slice *s = &sbe->slice; 178 H264Slice *s = &sbe->slice;
179 H264Mb *mbs = sbe->mbs; 179 H264Mb *mbs = sbe->mbs;
180 decode_super_mb_block(d, s, smbc, mbs, m->smb_x, m->smb_y); 180 decode_super_mb_block(d, s, smbc, mbs, m->smb_x, m->smb_y);
181 VSs__end_task( animatingSlv ); 181 VSs__end_task();
182 } 182 }
183 183
184 VSsTaskType decode_super_mb_taskType = { 184 VSsTaskType decode_super_mb_taskType = {
185 .fn = &decode_super_mb_task, 185 .fn = &decode_super_mb_task,
186 .numCtldArgs = 5, 186 .numCtldArgs = 5,
201 201
202 int32 draw_edges_taskArgTypes[5] = {IN, IN, INOUT, NONCTLD, NONCTLD}; 202 int32 draw_edges_taskArgTypes[5] = {IN, IN, INOUT, NONCTLD, NONCTLD};
203 int32 draw_edges_taskArgSizes[5] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),sizeof(SuperMBContext),sizeof(int)}; 203 int32 draw_edges_taskArgSizes[5] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),sizeof(SuperMBContext),sizeof(int)};
204 204
205 //#pragma omp task input(*d, *sbe) inout(*sm) 205 //#pragma omp task input(*d, *sbe) inout(*sm)
206 static void draw_edges_task(void *_data, SlaveVP *animatingSlv){ 206 static void draw_edges_task(void *_data){
207 draw_edges_taskArgs* args = (draw_edges_taskArgs*) _data; 207 draw_edges_taskArgs* args = (draw_edges_taskArgs*) _data;
208 MBRecContext *d = args->d; 208 MBRecContext *d = args->d;
209 SliceBufferEntry *sbe = args->sbe; 209 SliceBufferEntry *sbe = args->sbe;
210 SuperMBTask *sm = args->sm; 210 SuperMBTask *sm = args->sm;
211 SuperMBContext *smbc = args->smbc; 211 SuperMBContext *smbc = args->smbc;
212 int line = *(args->line); 212 int line = *(args->line);
213 H264Slice *s = &sbe->slice; 213 H264Slice *s = &sbe->slice;
214 for (int i=line*smbc->smb_height; i< (line+1)*smbc->smb_height && i< d->mb_height; i++) 214 for (int i=line*smbc->smb_height; i< (line+1)*smbc->smb_height && i< d->mb_height; i++)
215 draw_edges(d, s, i); 215 draw_edges(d, s, i);
216 VMS_App__free(args->line); 216 VMS_App__free(args->line);
217 VSs__end_task( animatingSlv ); 217 VSs__end_task();
218 } 218 }
219 VSsTaskType draw_edges_taskType = { 219 VSsTaskType draw_edges_taskType = {
220 .fn = &draw_edges_task, 220 .fn = &draw_edges_task,
221 .numCtldArgs = 3, 221 .numCtldArgs = 3,
222 .numTotalArgs = 5, 222 .numTotalArgs = 5,
223 .sizeOfArgs = sizeof(draw_edges_taskArgs), 223 .sizeOfArgs = sizeof(draw_edges_taskArgs),
224 .argTypes = draw_edges_taskArgTypes, 224 .argTypes = draw_edges_taskArgTypes,
225 .argSizes = draw_edges_taskArgSizes}; 225 .argSizes = draw_edges_taskArgSizes};
226 226
227 227
228 static void decode_mb_in_slice(H264Context *h, MBRecContext *d, SliceBufferEntry *sbe, SlaveVP* animSlv){ 228 static void decode_mb_in_slice(H264Context *h, MBRecContext *d, SliceBufferEntry *sbe){
229 int i,j; 229 int i,j;
230 230
231 SuperMBContext *smbc = acquire_smbc(h); 231 SuperMBContext *smbc = acquire_smbc(h);
232 int smb_height =smbc->nsmb_height, smb_width= smbc->nsmb_width; 232 int smb_height =smbc->nsmb_height, smb_width= smbc->nsmb_width;
233 SuperMBTask *smbs = smbc->smbs[0]; 233 SuperMBTask *smbs = smbc->smbs[0];
243 decode_super_mb_task_args.sbe = sbe; 243 decode_super_mb_task_args.sbe = sbe;
244 decode_super_mb_task_args.smbc = smbc; 244 decode_super_mb_task_args.smbc = smbc;
245 decode_super_mb_task_args.ml = sml; 245 decode_super_mb_task_args.ml = sml;
246 decode_super_mb_task_args.mur = smur; 246 decode_super_mb_task_args.mur = smur;
247 decode_super_mb_task_args.m = sm; 247 decode_super_mb_task_args.m = sm;
248 VSs__submit_task(&decode_super_mb_taskType, &decode_super_mb_task_args, animSlv); 248 VSs__submit_task(&decode_super_mb_taskType, &decode_super_mb_task_args);
249 } 249 }
250 draw_edges_taskArgs draw_edges_task_args; 250 draw_edges_taskArgs draw_edges_task_args;
251 draw_edges_task_args.d = d; 251 draw_edges_task_args.d = d;
252 draw_edges_task_args.sbe = sbe; 252 draw_edges_task_args.sbe = sbe;
253 draw_edges_task_args.sm = sm; 253 draw_edges_task_args.sm = sm;
254 draw_edges_task_args.smbc = smbc; 254 draw_edges_task_args.smbc = smbc;
255 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) ); 255 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
256 *(draw_edges_task_args.line) = j; 256 *(draw_edges_task_args.line) = j;
257 VSs__submit_task(&draw_edges_taskType, &draw_edges_task_args, animSlv); 257 VSs__submit_task(&draw_edges_taskType, &draw_edges_task_args);
258 } 258 }
259 VSs__taskwait_on(animSlv,sm); 259 VSs__taskwait_on(sm);
260 //#pragma omp taskwait on(*sm) 260 //#pragma omp taskwait on(*sm)
261 261
262 release_smbc(h, smbc); 262 release_smbc(h, smbc);
263 } 263 }
264 264
270 270
271 int32 decode_slice_mb_taskArgTypes[3] = {INOUT, INOUT, NONCTLD}; 271 int32 decode_slice_mb_taskArgTypes[3] = {INOUT, INOUT, NONCTLD};
272 int32 decode_slice_mb_taskArgSizes[3] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(H264Context)}; 272 int32 decode_slice_mb_taskArgSizes[3] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
273 273
274 //#pragma omp task inout(*d) inout(*sbe) 274 //#pragma omp task inout(*d) inout(*sbe)
275 static void decode_slice_mb_task(void *_data, SlaveVP *animatingSlv){ 275 static void decode_slice_mb_task(void *_data){
276 decode_slice_mb_taskArgs* args = (decode_slice_mb_taskArgs*) _data; 276 decode_slice_mb_taskArgs* args = (decode_slice_mb_taskArgs*) _data;
277 MBRecContext *d = args->d; 277 MBRecContext *d = args->d;
278 SliceBufferEntry *sbe = args->sbe; 278 SliceBufferEntry *sbe = args->sbe;
279 H264Context *h = args->h; 279 H264Context *h = args->h;
280 280
293 } 293 }
294 } 294 }
295 } 295 }
296 296
297 //#pragma omp critical (dpb) 297 //#pragma omp critical (dpb)
298 VSs__start_critical(animatingSlv,0); 298 VSs__start_critical(0);
299 get_dpb_entry(h, s); 299 get_dpb_entry(h, s);
300 VSs__end_critical(animatingSlv,0); 300 VSs__end_critical(0);
301 301
302 if (!h->no_mbd){ 302 if (!h->no_mbd){
303 decode_mb_in_slice (h, d, sbe, animatingSlv); 303 decode_mb_in_slice (h, d, sbe);
304 } 304 }
305 305
306 for (int i=0; i<s->release_cnt; i++){ 306 for (int i=0; i<s->release_cnt; i++){
307 for(int j=0; j<h->max_dpb_cnt; j++){ 307 for(int j=0; j<h->max_dpb_cnt; j++){
308 if(h->dpb[j].cpn== s->release_ref_cpn[i]){ 308 if(h->dpb[j].cpn== s->release_ref_cpn[i]){
309 //#pragma omp critical (dpb) 309 //#pragma omp critical (dpb)
310 VSs__start_critical(animatingSlv,0); 310 VSs__start_critical(0);
311 release_dpb_entry(h, &h->dpb[j], 2); 311 release_dpb_entry(h, &h->dpb[j], 2);
312 VSs__end_critical(animatingSlv,0); 312 VSs__end_critical(0);
313 break; 313 break;
314 } 314 }
315 } 315 }
316 } 316 }
317 s->release_cnt=0; 317 s->release_cnt=0;
318 VSs__end_task( animatingSlv ); 318 VSs__end_task();
319 } 319 }
320 320
321 VSsTaskType decode_slice_mb_taskType = { 321 VSsTaskType decode_slice_mb_taskType = {
322 .fn = &decode_slice_mb_task, 322 .fn = &decode_slice_mb_task,
323 .numCtldArgs = 2, 323 .numCtldArgs = 2,
341 int32 decode_3dwave_super_mb_taskArgTypes[7] = {IN, IN, IN, IN, IN, INOUT, NONCTLD}; 341 int32 decode_3dwave_super_mb_taskArgTypes[7] = {IN, IN, IN, IN, IN, INOUT, NONCTLD};
342 int32 decode_3dwave_super_mb_taskArgSizes[7] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), 342 int32 decode_3dwave_super_mb_taskArgSizes[7] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),
343 sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBContext)}; 343 sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBContext)};
344 344
345 //#pragma omp task input(*d, *sbe, *ml, *mur, *mprev) inout(*m) 345 //#pragma omp task input(*d, *sbe, *ml, *mur, *mprev) inout(*m)
346 static void decode_3dwave_super_mb_task(void *_data, SlaveVP *animatingSlv){ 346 static void decode_3dwave_super_mb_task(void *_data){
347 decode_3dwave_super_mb_taskArgs* args = (decode_3dwave_super_mb_taskArgs*) _data; 347 decode_3dwave_super_mb_taskArgs* args = (decode_3dwave_super_mb_taskArgs*) _data;
348 MBRecContext *d = args->d; 348 MBRecContext *d = args->d;
349 SliceBufferEntry *sbe = args->sbe; 349 SliceBufferEntry *sbe = args->sbe;
350 SuperMBTask *ml = args->ml; 350 SuperMBTask *ml = args->ml;
351 SuperMBTask *mur = args->mur; 351 SuperMBTask *mur = args->mur;
355 355
356 H264Slice *s = &sbe->slice; 356 H264Slice *s = &sbe->slice;
357 H264Mb *mbs = sbe->mbs; 357 H264Mb *mbs = sbe->mbs;
358 358
359 decode_super_mb_block(d, s, smbc, mbs, m->smb_x, m->smb_y); 359 decode_super_mb_block(d, s, smbc, mbs, m->smb_x, m->smb_y);
360 VSs__end_task( animatingSlv ); 360 VSs__end_task();
361 } 361 }
362 362
363 VSsTaskType decode_3dwave_super_mb_taskType = { 363 VSsTaskType decode_3dwave_super_mb_taskType = {
364 .fn = &decode_3dwave_super_mb_task, 364 .fn = &decode_3dwave_super_mb_task,
365 .numCtldArgs = 6, 365 .numCtldArgs = 6,
378 378
379 int32 init_ref_list_and_get_dpb_taskArgTypes[4] = {INOUT, INOUT, INOUT, NONCTLD}; 379 int32 init_ref_list_and_get_dpb_taskArgTypes[4] = {INOUT, INOUT, INOUT, NONCTLD};
380 int32 init_ref_list_and_get_dpb_taskArgSizes[4] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(int), sizeof(H264Context)}; 380 int32 init_ref_list_and_get_dpb_taskArgSizes[4] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(int), sizeof(H264Context)};
381 381
382 //#pragma omp task inout(*d, *sbe, *init) 382 //#pragma omp task inout(*d, *sbe, *init)
383 static void init_ref_list_and_get_dpb_task(void *_data, SlaveVP *animatingSlv){ 383 static void init_ref_list_and_get_dpb_task(void *_data){
384 init_ref_list_and_get_dpb_taskArgs* args = (init_ref_list_and_get_dpb_taskArgs*) _data; 384 init_ref_list_and_get_dpb_taskArgs* args = (init_ref_list_and_get_dpb_taskArgs*) _data;
385 MBRecContext *d = args->d; 385 MBRecContext *d = args->d;
386 SliceBufferEntry *sbe = args->sbe; 386 SliceBufferEntry *sbe = args->sbe;
387 int* initp = args->init; 387 int* initp = args->init;
388 H264Context *h = args->h; 388 H264Context *h = args->h;
401 } 401 }
402 } 402 }
403 } 403 }
404 404
405 //#pragma omp critical (dpb) 405 //#pragma omp critical (dpb)
406 VSs__start_critical(animatingSlv,0); 406 VSs__start_critical(0);
407 get_dpb_entry(h, s); 407 get_dpb_entry(h, s);
408 VSs__end_critical(animatingSlv,0); 408 VSs__end_critical(0);
409 409
410 VSs__end_task( animatingSlv ); 410 VSs__end_task();
411 } 411 }
412 412
413 VSsTaskType init_ref_list_and_get_dpb_taskType = { 413 VSsTaskType init_ref_list_and_get_dpb_taskType = {
414 .fn = &init_ref_list_and_get_dpb_task, 414 .fn = &init_ref_list_and_get_dpb_task,
415 .numCtldArgs = 3, 415 .numCtldArgs = 3,
416 .numTotalArgs = 4, 416 .numTotalArgs = 4,
417 .sizeOfArgs = sizeof(init_ref_list_and_get_dpb_taskArgs), 417 .sizeOfArgs = sizeof(init_ref_list_and_get_dpb_taskArgs),
418 .argTypes = init_ref_list_and_get_dpb_taskArgTypes, 418 .argTypes = init_ref_list_and_get_dpb_taskArgTypes,
419 .argSizes = init_ref_list_and_get_dpb_taskArgSizes}; 419 .argSizes = init_ref_list_and_get_dpb_taskArgSizes};
420 420
421 static SuperMBTask* add_decode_slice_3dwave_tasks(MBRecContext *d, SliceBufferEntry *sbe, SuperMBContext *smbc, int k, SlaveVP* animSlv){ 421 static SuperMBTask* add_decode_slice_3dwave_tasks(MBRecContext *d, SliceBufferEntry *sbe, SuperMBContext *smbc, int k){
422 int i,j; 422 int i,j;
423 423
424 int32* taskID; 424 int32* taskID;
425 425
426 int smb_3d_height =smbc->nsmb_3dheight; 426 int smb_3d_height =smbc->nsmb_3dheight;
443 decode_3dwave_super_mb_task_args.smbc = smbc; 443 decode_3dwave_super_mb_task_args.smbc = smbc;
444 decode_3dwave_super_mb_task_args.ml = sml; 444 decode_3dwave_super_mb_task_args.ml = sml;
445 decode_3dwave_super_mb_task_args.mur = smur; 445 decode_3dwave_super_mb_task_args.mur = smur;
446 decode_3dwave_super_mb_task_args.mprev = smprev; 446 decode_3dwave_super_mb_task_args.mprev = smprev;
447 decode_3dwave_super_mb_task_args.m = sm; 447 decode_3dwave_super_mb_task_args.m = sm;
448 taskID = VSs__create_taskID_of_size(3,animSlv ); 448 taskID = VSs__create_taskID_of_size(3 );
449 taskID[1] = k; 449 taskID[1] = k;
450 taskID[2] = j; 450 taskID[2] = j;
451 taskID[3] = i; 451 taskID[3] = i;
452 VSs__submit_task_with_ID(&decode_3dwave_super_mb_taskType, &decode_3dwave_super_mb_task_args, taskID, animSlv); 452 VSs__submit_task_with_ID(&decode_3dwave_super_mb_taskType, &decode_3dwave_super_mb_task_args, taskID);
453 } 453 }
454 draw_edges_taskArgs draw_edges_task_args; 454 draw_edges_taskArgs draw_edges_task_args;
455 draw_edges_task_args.d = d; 455 draw_edges_task_args.d = d;
456 draw_edges_task_args.sbe = sbe; 456 draw_edges_task_args.sbe = sbe;
457 draw_edges_task_args.sm = sm; 457 draw_edges_task_args.sm = sm;
458 draw_edges_task_args.smbc = smbc; 458 draw_edges_task_args.smbc = smbc;
459 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) ); 459 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
460 *(draw_edges_task_args.line) = j; 460 *(draw_edges_task_args.line) = j;
461 taskID = VSs__create_taskID_of_size(3, animSlv); 461 taskID = VSs__create_taskID_of_size(3);
462 taskID[1] = k; 462 taskID[1] = k;
463 taskID[2] = j; 463 taskID[2] = j;
464 taskID[3] = i; 464 taskID[3] = i;
465 VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID, animSlv); 465 VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID);
466 } 466 }
467 467
468 for(; j< smb_height; j++){ 468 for(; j< smb_height; j++){
469 for(i=0; i< smb_width; i++){ 469 for(i=0; i< smb_width; i++){
470 sm = smbs + j*smb_width + i; 470 sm = smbs + j*smb_width + i;
475 decode_super_mb_task_args.sbe = sbe; 475 decode_super_mb_task_args.sbe = sbe;
476 decode_super_mb_task_args.smbc = smbc; 476 decode_super_mb_task_args.smbc = smbc;
477 decode_super_mb_task_args.ml = sml; 477 decode_super_mb_task_args.ml = sml;
478 decode_super_mb_task_args.mur = smur; 478 decode_super_mb_task_args.mur = smur;
479 decode_super_mb_task_args.m = sm; 479 decode_super_mb_task_args.m = sm;
480 taskID = VSs__create_taskID_of_size(3,animSlv ); 480 taskID = VSs__create_taskID_of_size(3 );
481 taskID[1] = k; 481 taskID[1] = k;
482 taskID[2] = j; 482 taskID[2] = j;
483 taskID[3] = i; 483 taskID[3] = i;
484 VSs__submit_task_with_ID(&decode_super_mb_taskType, &decode_super_mb_task_args, taskID, animSlv); 484 VSs__submit_task_with_ID(&decode_super_mb_taskType, &decode_super_mb_task_args, taskID);
485 } 485 }
486 draw_edges_taskArgs draw_edges_task_args; 486 draw_edges_taskArgs draw_edges_task_args;
487 draw_edges_task_args.d = d; 487 draw_edges_task_args.d = d;
488 draw_edges_task_args.sbe = sbe; 488 draw_edges_task_args.sbe = sbe;
489 draw_edges_task_args.sm = sm; 489 draw_edges_task_args.sm = sm;
490 draw_edges_task_args.smbc = smbc; 490 draw_edges_task_args.smbc = smbc;
491 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) ); 491 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
492 *(draw_edges_task_args.line) = j; 492 *(draw_edges_task_args.line) = j;
493 taskID = VSs__create_taskID_of_size(3, animSlv); 493 taskID = VSs__create_taskID_of_size(3);
494 taskID[1] = k; 494 taskID[1] = k;
495 taskID[2] = j; 495 taskID[2] = j;
496 taskID[3] = i; 496 taskID[3] = i;
497 VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID, animSlv); 497 VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID);
498 } 498 }
499 return sm; 499 return sm;
500 } 500 }
501 501
502 typedef struct{ 502 typedef struct{
510 510
511 int32 release_ref_list_taskArgTypes[6] = {INOUT, INOUT, IN, INOUT, NONCTLD, NONCTLD}; 511 int32 release_ref_list_taskArgTypes[6] = {INOUT, INOUT, IN, INOUT, NONCTLD, NONCTLD};
512 int32 release_ref_list_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(int), sizeof(H264Context), sizeof(SuperMBContext)}; 512 int32 release_ref_list_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(int), sizeof(H264Context), sizeof(SuperMBContext)};
513 513
514 //#pragma omp task inout(*d, *sbe, *release) input (*lastsmb) 514 //#pragma omp task inout(*d, *sbe, *release) input (*lastsmb)
515 static void release_ref_list_task(void *_data, SlaveVP *animatingSlv){ 515 static void release_ref_list_task(void *_data){
516 release_ref_list_taskArgs* args = (release_ref_list_taskArgs*) _data; 516 release_ref_list_taskArgs* args = (release_ref_list_taskArgs*) _data;
517 MBRecContext *d = args->d; 517 MBRecContext *d = args->d;
518 SliceBufferEntry *sbe = args->sbe; 518 SliceBufferEntry *sbe = args->sbe;
519 SuperMBTask *lastsmb = args->lastsmb; 519 SuperMBTask *lastsmb = args->lastsmb;
520 int* releasep = args->release; 520 int* releasep = args->release;
524 H264Slice *s = &sbe->slice; 524 H264Slice *s = &sbe->slice;
525 for (int i=0; i<s->release_cnt; i++){ 525 for (int i=0; i<s->release_cnt; i++){
526 for(int j=0; j<h->max_dpb_cnt; j++){ 526 for(int j=0; j<h->max_dpb_cnt; j++){
527 if(h->dpb[j].cpn== s->release_ref_cpn[i]){ 527 if(h->dpb[j].cpn== s->release_ref_cpn[i]){
528 //#pragma omp critical (dpb) 528 //#pragma omp critical (dpb)
529 VSs__start_critical(animatingSlv,0); 529 VSs__start_critical(0);
530 release_dpb_entry(h, &h->dpb[j], 2); 530 release_dpb_entry(h, &h->dpb[j], 2);
531 VSs__end_critical(animatingSlv,0); 531 VSs__end_critical(0);
532 break; 532 break;
533 } 533 }
534 } 534 }
535 } 535 }
536 s->release_cnt=0; 536 s->release_cnt=0;
537 537
538 release_smbc(h, smbc); 538 release_smbc(h, smbc);
539 539
540 VSs__end_task( animatingSlv ); 540 VSs__end_task();
541 } 541 }
542 542
543 VSsTaskType release_ref_list_taskType = { 543 VSsTaskType release_ref_list_taskType = {
544 .fn = &release_ref_list_task, 544 .fn = &release_ref_list_task,
545 .numCtldArgs = 4, 545 .numCtldArgs = 4,
562 562
563 int32 output_taskArgTypes[3] = {INOUT, IN, NONCTLD}; 563 int32 output_taskArgTypes[3] = {INOUT, IN, NONCTLD};
564 int32 output_taskArgSizes[3] = {sizeof(OutputContext), sizeof(SliceBufferEntry), sizeof(H264Context)}; 564 int32 output_taskArgSizes[3] = {sizeof(OutputContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
565 565
566 //#pragma omp task inout (*oc) input(*sbe) 566 //#pragma omp task inout (*oc) input(*sbe)
567 static void output_task(void *_data, SlaveVP *animatingSlv){ 567 static void output_task(void *_data){
568 output_taskArgs* args = (output_taskArgs*) _data; 568 output_taskArgs* args = (output_taskArgs*) _data;
569 OutputContext *oc = args->oc; 569 OutputContext *oc = args->oc;
570 SliceBufferEntry *sbe = args->sbe; 570 SliceBufferEntry *sbe = args->sbe;
571 H264Context *h = args->h; 571 H264Context *h = args->h;
572 572
573 DecodedPicture* out =output_frame(h, oc, sbe->slice.curr_pic, h->ofile, h->frame_width, h->frame_height); 573 DecodedPicture* out =output_frame(h, oc, sbe->slice.curr_pic, h->ofile, h->frame_width, h->frame_height);
574 if (out){ 574 if (out){
575 //#pragma omp critical (dpb) 575 //#pragma omp critical (dpb)
576 VSs__start_critical(animatingSlv,0); 576 VSs__start_critical(0);
577 release_dpb_entry(h, out, 1); 577 release_dpb_entry(h, out, 1);
578 VSs__end_critical(animatingSlv,0); 578 VSs__end_critical(0);
579 } 579 }
580 //print_report(oc->frame_number, oc->video_size, 0, h->verbose); 580 //print_report(oc->frame_number, oc->video_size, 0, h->verbose);
581 581
582 VSs__end_task( animatingSlv ); 582 VSs__end_task();
583 } 583 }
584 584
585 VSsTaskType output_taskType = { 585 VSsTaskType output_taskType = {
586 .fn = &output_task, 586 .fn = &output_task,
587 .numCtldArgs = 2, 587 .numCtldArgs = 2,
591 .argSizes = output_taskArgSizes}; 591 .argSizes = output_taskArgSizes};
592 592
593 /* 593 /*
594 * The following code is the main loop of the file converter 594 * The following code is the main loop of the file converter
595 */ 595 */
596 //Put VMS entry point here 596
597 597 int h264_decode_ompss( H264Context *h) {
598 void h264_decode_ompss( void *_params, SlaveVP *animSlv) {
599 H264Context* h = (H264Context*) _params;
600 598
601 const int bufs = h->pipe_bufs; 599 const int bufs = h->pipe_bufs;
602 600
603 ParserContext *pc; 601 ParserContext *pc;
604 NalContext *nc; 602 NalContext *nc;
645 parse_taskArgs parse_task_args; 643 parse_taskArgs parse_task_args;
646 parse_task_args.h = h; 644 parse_task_args.h = h;
647 parse_task_args.pc = pc; 645 parse_task_args.pc = pc;
648 parse_task_args.nc = nc; 646 parse_task_args.nc = nc;
649 parse_task_args.sbe = &sbe[k%bufs]; 647 parse_task_args.sbe = &sbe[k%bufs];
650 taskID = VSs__create_taskID_of_size(2,animSlv ); 648 taskID = VSs__create_taskID_of_size(2);
651 taskID[1] = 1; 649 taskID[1] = 1;
652 taskID[2] = k; 650 taskID[2] = k;
653 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv); 651 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID);
654 652
655 decode_slice_entropy_taskArgs decode_slice_entropy_task_args; 653 decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
656 decode_slice_entropy_task_args.h = h; 654 decode_slice_entropy_task_args.h = h;
657 decode_slice_entropy_task_args.ec = ec[k%bufs]; 655 decode_slice_entropy_task_args.ec = ec[k%bufs];
658 decode_slice_entropy_task_args.sbe = &sbe[k%bufs]; 656 decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
659 taskID = VSs__create_taskID_of_size(2,animSlv ); 657 taskID = VSs__create_taskID_of_size(2);
660 taskID[1] = 2; 658 taskID[1] = 2;
661 taskID[2] = k; 659 taskID[2] = k;
662 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID, animSlv); 660 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID);
663 //#pragma omp taskwait on(*pc) 661 //#pragma omp taskwait on(*pc)
664 VSs__taskwait_on(animSlv,pc); 662 VSs__taskwait_on(pc);
665 k++; 663 k++;
666 } 664 }
667 665
668 while(!pc->final_frame && frames++ < h->num_frames && !h->quit){ 666 while(!pc->final_frame && frames++ < h->num_frames && !h->quit){
669 parse_taskArgs parse_task_args; 667 parse_taskArgs parse_task_args;
670 parse_task_args.h = h; 668 parse_task_args.h = h;
671 parse_task_args.pc = pc; 669 parse_task_args.pc = pc;
672 parse_task_args.nc = nc; 670 parse_task_args.nc = nc;
673 parse_task_args.sbe = &sbe[k%bufs]; 671 parse_task_args.sbe = &sbe[k%bufs];
674 taskID = VSs__create_taskID_of_size(2,animSlv ); 672 taskID = VSs__create_taskID_of_size(2);
675 taskID[1] = 3; 673 taskID[1] = 3;
676 taskID[2] = k; 674 taskID[2] = k;
677 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv); 675 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID);
678 676
679 decode_slice_entropy_taskArgs decode_slice_entropy_task_args; 677 decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
680 decode_slice_entropy_task_args.h = h; 678 decode_slice_entropy_task_args.h = h;
681 decode_slice_entropy_task_args.ec = ec[k%bufs]; 679 decode_slice_entropy_task_args.ec = ec[k%bufs];
682 decode_slice_entropy_task_args.sbe = &sbe[k%bufs]; 680 decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
683 taskID = VSs__create_taskID_of_size(2,animSlv ); 681 taskID = VSs__create_taskID_of_size(2);
684 taskID[1] = 4; 682 taskID[1] = 4;
685 taskID[2] = k; 683 taskID[2] = k;
686 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID, animSlv); 684 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID);
687 685
688 k++; 686 k++;
689 687
690 init_ref_list_and_get_dpb_taskArgs init_ref_list_and_get_dpb_task_args; 688 init_ref_list_and_get_dpb_taskArgs init_ref_list_and_get_dpb_task_args;
691 init_ref_list_and_get_dpb_task_args.h = h; 689 init_ref_list_and_get_dpb_task_args.h = h;
692 init_ref_list_and_get_dpb_task_args.d = rc[k%2]; 690 init_ref_list_and_get_dpb_task_args.d = rc[k%2];
693 init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs]; 691 init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs];
694 init_ref_list_and_get_dpb_task_args.init = &init; 692 init_ref_list_and_get_dpb_task_args.init = &init;
695 taskID = VSs__create_taskID_of_size(2,animSlv ); 693 taskID = VSs__create_taskID_of_size(2);
696 taskID[1] = 5; 694 taskID[1] = 5;
697 taskID[2] = k; 695 taskID[2] = k;
698 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID, animSlv); 696 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID);
699 697
700 smbc = acquire_smbc(h); 698 smbc = acquire_smbc(h);
701 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k, animSlv); 699 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k);
702 release_ref_list_taskArgs release_ref_list_task_args; 700 release_ref_list_taskArgs release_ref_list_task_args;
703 release_ref_list_task_args.h = h; 701 release_ref_list_task_args.h = h;
704 release_ref_list_task_args.smbc = smbc; 702 release_ref_list_task_args.smbc = smbc;
705 release_ref_list_task_args.d = rc[k%2]; 703 release_ref_list_task_args.d = rc[k%2];
706 release_ref_list_task_args.sbe = &sbe[k%bufs]; 704 release_ref_list_task_args.sbe = &sbe[k%bufs];
707 release_ref_list_task_args.lastsmb = lastsmb; 705 release_ref_list_task_args.lastsmb = lastsmb;
708 release_ref_list_task_args.release = &release; 706 release_ref_list_task_args.release = &release;
709 taskID = VSs__create_taskID_of_size(2,animSlv ); 707 taskID = VSs__create_taskID_of_size(2);
710 taskID[1] = 6; 708 taskID[1] = 6;
711 taskID[2] = k; 709 taskID[2] = k;
712 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID, animSlv); 710 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID);
713 711
714 output_taskArgs output_task_args; 712 output_taskArgs output_task_args;
715 output_task_args.h = h; 713 output_task_args.h = h;
716 output_task_args.oc = oc; 714 output_task_args.oc = oc;
717 output_task_args.sbe = &sbe[k%bufs]; 715 output_task_args.sbe = &sbe[k%bufs];
718 taskID = VSs__create_taskID_of_size(2,animSlv ); 716 taskID = VSs__create_taskID_of_size(2);
719 taskID[1] = 7; 717 taskID[1] = 7;
720 taskID[2] = k; 718 taskID[2] = k;
721 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID, animSlv); 719 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID);
722 //#pragma omp taskwait on(*pc) 720 //#pragma omp taskwait on(*pc)
723 VSs__taskwait_on(animSlv,pc); 721 VSs__taskwait_on(pc);
724 } 722 }
725 723
726 for (int i=0; i< num_pre_ed; i++){ 724 for (int i=0; i< num_pre_ed; i++){
727 k++; 725 k++;
728 init_ref_list_and_get_dpb_taskArgs init_ref_list_and_get_dpb_task_args; 726 init_ref_list_and_get_dpb_taskArgs init_ref_list_and_get_dpb_task_args;
729 init_ref_list_and_get_dpb_task_args.h = h; 727 init_ref_list_and_get_dpb_task_args.h = h;
730 init_ref_list_and_get_dpb_task_args.d = rc[k%2]; 728 init_ref_list_and_get_dpb_task_args.d = rc[k%2];
731 init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs]; 729 init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs];
732 init_ref_list_and_get_dpb_task_args.init = &init; 730 init_ref_list_and_get_dpb_task_args.init = &init;
733 taskID = VSs__create_taskID_of_size(2,animSlv ); 731 taskID = VSs__create_taskID_of_size(2);
734 taskID[1] = 8; 732 taskID[1] = 8;
735 taskID[2] = i; 733 taskID[2] = i;
736 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID, animSlv); 734 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID);
737 smbc = acquire_smbc(h); 735 smbc = acquire_smbc(h);
738 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k, animSlv); 736 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k);
739 release_ref_list_taskArgs release_ref_list_task_args; 737 release_ref_list_taskArgs release_ref_list_task_args;
740 release_ref_list_task_args.h = h; 738 release_ref_list_task_args.h = h;
741 release_ref_list_task_args.smbc = smbc; 739 release_ref_list_task_args.smbc = smbc;
742 release_ref_list_task_args.d = rc[k%2]; 740 release_ref_list_task_args.d = rc[k%2];
743 release_ref_list_task_args.sbe = &sbe[k%bufs]; 741 release_ref_list_task_args.sbe = &sbe[k%bufs];
744 release_ref_list_task_args.lastsmb = lastsmb; 742 release_ref_list_task_args.lastsmb = lastsmb;
745 release_ref_list_task_args.release = &release; 743 release_ref_list_task_args.release = &release;
746 taskID = VSs__create_taskID_of_size(2,animSlv ); 744 taskID = VSs__create_taskID_of_size(2);
747 taskID[1] = 9; 745 taskID[1] = 9;
748 taskID[2] = k; 746 taskID[2] = k;
749 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID, animSlv); 747 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID);
750 748
751 output_taskArgs output_task_args; 749 output_taskArgs output_task_args;
752 output_task_args.h = h; 750 output_task_args.h = h;
753 output_task_args.oc = oc; 751 output_task_args.oc = oc;
754 output_task_args.sbe = &sbe[k%bufs]; 752 output_task_args.sbe = &sbe[k%bufs];
755 taskID = VSs__create_taskID_of_size(2,animSlv ); 753 taskID = VSs__create_taskID_of_size(2);
756 taskID[1] = 10; 754 taskID[1] = 10;
757 taskID[2] = k; 755 taskID[2] = k;
758 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID, animSlv); 756 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID);
759 } 757 }
760 758
761 } else { 759 } else {
762 while(!pc->final_frame && frames++ < h->num_frames && !h->quit){ 760 while(!pc->final_frame && frames++ < h->num_frames && !h->quit){
763 761
764 taskID = VSs__create_taskID_of_size(1,animSlv ); 762 taskID = VSs__create_taskID_of_size(1);
765 taskID[1] = frames*10+1; 763 taskID[1] = frames*10+1;
766 parse_taskArgs parse_task_args; 764 parse_taskArgs parse_task_args;
767 parse_task_args.h = h; 765 parse_task_args.h = h;
768 parse_task_args.pc = pc; 766 parse_task_args.pc = pc;
769 parse_task_args.nc = nc; 767 parse_task_args.nc = nc;
770 parse_task_args.sbe = &sbe[k%bufs]; 768 parse_task_args.sbe = &sbe[k%bufs];
771 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv); 769 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID);
772 770
773 taskID = VSs__create_taskID_of_size(1,animSlv ); 771 taskID = VSs__create_taskID_of_size(1);
774 taskID[1] = frames*10+2; 772 taskID[1] = frames*10+2;
775 decode_slice_entropy_taskArgs decode_slice_entropy_task_args; 773 decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
776 decode_slice_entropy_task_args.h = h; 774 decode_slice_entropy_task_args.h = h;
777 decode_slice_entropy_task_args.ec = ec[k%bufs]; 775 decode_slice_entropy_task_args.ec = ec[k%bufs];
778 decode_slice_entropy_task_args.sbe = &sbe[k%bufs]; 776 decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
779 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args,taskID, animSlv); 777 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args,taskID);
780 778
781 taskID = VSs__create_taskID_of_size(1,animSlv ); 779 taskID = VSs__create_taskID_of_size(1);
782 taskID[1] = frames*10+3; 780 taskID[1] = frames*10+3;
783 decode_slice_mb_taskArgs decode_slice_mb_task_args; 781 decode_slice_mb_taskArgs decode_slice_mb_task_args;
784 decode_slice_mb_task_args.h = h; 782 decode_slice_mb_task_args.h = h;
785 decode_slice_mb_task_args.d = rc[0]; 783 decode_slice_mb_task_args.d = rc[0];
786 decode_slice_mb_task_args.sbe = &sbe[k%bufs]; 784 decode_slice_mb_task_args.sbe = &sbe[k%bufs];
787 VSs__submit_task_with_ID(&decode_slice_mb_taskType, &decode_slice_mb_task_args,taskID, animSlv); 785 VSs__submit_task_with_ID(&decode_slice_mb_taskType, &decode_slice_mb_task_args,taskID);
788 786
789 taskID = VSs__create_taskID_of_size(1,animSlv ); 787 taskID = VSs__create_taskID_of_size(1);
790 taskID[1] = frames*10+4; 788 taskID[1] = frames*10+4;
791 output_taskArgs output_task_args; 789 output_taskArgs output_task_args;
792 output_task_args.h = h; 790 output_task_args.h = h;
793 output_task_args.oc = oc; 791 output_task_args.oc = oc;
794 output_task_args.sbe = &sbe[k%bufs]; 792 output_task_args.sbe = &sbe[k%bufs];
795 VSs__submit_task_with_ID(&output_taskType, &output_task_args,taskID, animSlv); 793 VSs__submit_task_with_ID(&output_taskType, &output_task_args,taskID);
796 //#pragma omp taskwait on(*pc) 794 //#pragma omp taskwait on(*pc)
797 VSs__taskwait_on(animSlv,pc); 795 VSs__taskwait_on(pc);
798 k++; 796 k++;
799 } 797 }
800 } 798 }
801 //#pragma omp taskwait 799 //#pragma omp taskwait
802 VSs__taskwait(animSlv); 800 VSs__taskwait();
803 801
804 while ((out=output_frame(h, oc, NULL, h->ofile, h->frame_width, h->frame_height))) ; 802 while ((out=output_frame(h, oc, NULL, h->ofile, h->frame_width, h->frame_height))) ;
805 803
806 //print_report(oc->frame_number, oc->video_size, 1, h->verbose); 804 //print_report(oc->frame_number, oc->video_size, 1, h->verbose);
807 h->num_frames = oc->frame_number; 805 h->num_frames = oc->frame_number;
825 signal_sdl_exit(h); 823 signal_sdl_exit(h);
826 pthread_join(sdl_thr, NULL); 824 pthread_join(sdl_thr, NULL);
827 } 825 }
828 #endif 826 #endif
829 827
830 VSs__end_thread( animSlv ); 828 return 0;
831 } 829 }