comparison libavcodec/h264_ompss.c @ 5:808fe898c011

give more tasks IDs
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Fri, 01 Feb 2013 17:11:39 +0100
parents 96e628866d41
children 55fb61482128
comparison
equal deleted inserted replaced
2:a195d11d2a84 3:da9d5e255731
415 .numTotalArgs = 4, 415 .numTotalArgs = 4,
416 .sizeOfArgs = sizeof(init_ref_list_and_get_dpb_taskArgs), 416 .sizeOfArgs = sizeof(init_ref_list_and_get_dpb_taskArgs),
417 .argTypes = init_ref_list_and_get_dpb_taskArgTypes, 417 .argTypes = init_ref_list_and_get_dpb_taskArgTypes,
418 .argSizes = init_ref_list_and_get_dpb_taskArgSizes}; 418 .argSizes = init_ref_list_and_get_dpb_taskArgSizes};
419 419
420 static SuperMBTask* add_decode_slice_3dwave_tasks(MBRecContext *d, SliceBufferEntry *sbe, SuperMBContext *smbc, SlaveVP* animSlv){ 420 static SuperMBTask* add_decode_slice_3dwave_tasks(MBRecContext *d, SliceBufferEntry *sbe, SuperMBContext *smbc, int k, SlaveVP* animSlv){
421 int i,j; 421 int i,j;
422
423 int32* taskID;
422 424
423 int smb_3d_height =smbc->nsmb_3dheight; 425 int smb_3d_height =smbc->nsmb_3dheight;
424 int smb_height =smbc->nsmb_height, smb_width= smbc->nsmb_width; 426 int smb_height =smbc->nsmb_height, smb_width= smbc->nsmb_width;
425 int smb_diff_prev = smb_height - smb_3d_height; 427 int smb_diff_prev = smb_height - smb_3d_height;
426 SuperMBTask *sm=NULL, *sml, *smur, *smprev; 428 SuperMBTask *sm=NULL, *sml, *smur, *smprev;
440 decode_3dwave_super_mb_task_args.smbc = smbc; 442 decode_3dwave_super_mb_task_args.smbc = smbc;
441 decode_3dwave_super_mb_task_args.ml = sml; 443 decode_3dwave_super_mb_task_args.ml = sml;
442 decode_3dwave_super_mb_task_args.mur = smur; 444 decode_3dwave_super_mb_task_args.mur = smur;
443 decode_3dwave_super_mb_task_args.mprev = smprev; 445 decode_3dwave_super_mb_task_args.mprev = smprev;
444 decode_3dwave_super_mb_task_args.m = sm; 446 decode_3dwave_super_mb_task_args.m = sm;
445 VSs__submit_task(&decode_3dwave_super_mb_taskType, &decode_3dwave_super_mb_task_args, animSlv); 447 taskID = VSs__create_taskID_of_size(3,animSlv );
448 taskID[1] = k;
449 taskID[2] = j;
450 taskID[3] = i;
451 VSs__submit_task_with_ID(&decode_3dwave_super_mb_taskType, &decode_3dwave_super_mb_task_args, taskID, animSlv);
446 } 452 }
447 draw_edges_taskArgs draw_edges_task_args; 453 draw_edges_taskArgs draw_edges_task_args;
448 draw_edges_task_args.d = d; 454 draw_edges_task_args.d = d;
449 draw_edges_task_args.sbe = sbe; 455 draw_edges_task_args.sbe = sbe;
450 draw_edges_task_args.sm = sm; 456 draw_edges_task_args.sm = sm;
451 draw_edges_task_args.smbc = smbc; 457 draw_edges_task_args.smbc = smbc;
452 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) ); 458 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
453 *(draw_edges_task_args.line) = j; 459 *(draw_edges_task_args.line) = j;
454 VSs__submit_task(&draw_edges_taskType, &draw_edges_task_args, animSlv); 460 taskID = VSs__create_taskID_of_size(3, animSlv);
461 taskID[1] = k;
462 taskID[2] = j;
463 taskID[3] = i;
464 VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID, animSlv);
455 } 465 }
456 466
457 for(; j< smb_height; j++){ 467 for(; j< smb_height; j++){
458 for(i=0; i< smb_width; i++){ 468 for(i=0; i< smb_width; i++){
459 sm = smbs + j*smb_width + i; 469 sm = smbs + j*smb_width + i;
464 decode_super_mb_task_args.sbe = sbe; 474 decode_super_mb_task_args.sbe = sbe;
465 decode_super_mb_task_args.smbc = smbc; 475 decode_super_mb_task_args.smbc = smbc;
466 decode_super_mb_task_args.ml = sml; 476 decode_super_mb_task_args.ml = sml;
467 decode_super_mb_task_args.mur = smur; 477 decode_super_mb_task_args.mur = smur;
468 decode_super_mb_task_args.m = sm; 478 decode_super_mb_task_args.m = sm;
469 VSs__submit_task(&decode_super_mb_taskType, &decode_super_mb_task_args, animSlv); 479 taskID = VSs__create_taskID_of_size(3,animSlv );
480 taskID[1] = k;
481 taskID[2] = j;
482 taskID[3] = i;
483 VSs__submit_task_with_ID(&decode_super_mb_taskType, &decode_super_mb_task_args, taskID, animSlv);
470 } 484 }
471 draw_edges_taskArgs draw_edges_task_args; 485 draw_edges_taskArgs draw_edges_task_args;
472 draw_edges_task_args.d = d; 486 draw_edges_task_args.d = d;
473 draw_edges_task_args.sbe = sbe; 487 draw_edges_task_args.sbe = sbe;
474 draw_edges_task_args.sm = sm; 488 draw_edges_task_args.sm = sm;
475 draw_edges_task_args.smbc = smbc; 489 draw_edges_task_args.smbc = smbc;
476 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) ); 490 draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
477 *(draw_edges_task_args.line) = j; 491 *(draw_edges_task_args.line) = j;
478 VSs__submit_task(&draw_edges_taskType, &draw_edges_task_args, animSlv); 492 taskID = VSs__create_taskID_of_size(3, animSlv);
493 taskID[1] = k;
494 taskID[2] = j;
495 taskID[3] = i;
496 VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID, animSlv);
479 } 497 }
480 return sm; 498 return sm;
481 } 499 }
482 500
483 typedef struct{ 501 typedef struct{
628 parse_task_args.pc = pc; 646 parse_task_args.pc = pc;
629 parse_task_args.nc = nc; 647 parse_task_args.nc = nc;
630 parse_task_args.sbe = &sbe[k%bufs]; 648 parse_task_args.sbe = &sbe[k%bufs];
631 taskID = VSs__create_taskID_of_size(2,animSlv ); 649 taskID = VSs__create_taskID_of_size(2,animSlv );
632 taskID[1] = 1; 650 taskID[1] = 1;
633 taskID[2] = num_pre_ed; 651 taskID[2] = k;
634 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv); 652 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv);
635 653
636 decode_slice_entropy_taskArgs decode_slice_entropy_task_args; 654 decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
637 decode_slice_entropy_task_args.h = h; 655 decode_slice_entropy_task_args.h = h;
638 decode_slice_entropy_task_args.ec = ec[k%bufs]; 656 decode_slice_entropy_task_args.ec = ec[k%bufs];
639 decode_slice_entropy_task_args.sbe = &sbe[k%bufs]; 657 decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
640 taskID = VSs__create_taskID_of_size(2,animSlv ); 658 taskID = VSs__create_taskID_of_size(2,animSlv );
641 taskID[1] = 2; 659 taskID[1] = 2;
642 taskID[2] = num_pre_ed; 660 taskID[2] = k;
643 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID, animSlv); 661 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID, animSlv);
644 //#pragma omp taskwait on(*pc) 662 //#pragma omp taskwait on(*pc)
645 VSs__taskwait_on(animSlv,pc); 663 VSs__taskwait_on(animSlv,pc);
646 k++; 664 k++;
647 } 665 }
652 parse_task_args.pc = pc; 670 parse_task_args.pc = pc;
653 parse_task_args.nc = nc; 671 parse_task_args.nc = nc;
654 parse_task_args.sbe = &sbe[k%bufs]; 672 parse_task_args.sbe = &sbe[k%bufs];
655 taskID = VSs__create_taskID_of_size(2,animSlv ); 673 taskID = VSs__create_taskID_of_size(2,animSlv );
656 taskID[1] = 3; 674 taskID[1] = 3;
657 taskID[2] = frames; 675 taskID[2] = k;
658 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv); 676 VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID, animSlv);
659 677
660 decode_slice_entropy_taskArgs decode_slice_entropy_task_args; 678 decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
661 decode_slice_entropy_task_args.h = h; 679 decode_slice_entropy_task_args.h = h;
662 decode_slice_entropy_task_args.ec = ec[k%bufs]; 680 decode_slice_entropy_task_args.ec = ec[k%bufs];
663 decode_slice_entropy_task_args.sbe = &sbe[k%bufs]; 681 decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
664 taskID = VSs__create_taskID_of_size(2,animSlv ); 682 taskID = VSs__create_taskID_of_size(2,animSlv );
665 taskID[1] = 4; 683 taskID[1] = 4;
666 taskID[2] = frames; 684 taskID[2] = k;
667 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID, animSlv); 685 VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID, animSlv);
668 686
669 k++; 687 k++;
670 688
671 init_ref_list_and_get_dpb_taskArgs init_ref_list_and_get_dpb_task_args; 689 init_ref_list_and_get_dpb_taskArgs init_ref_list_and_get_dpb_task_args;
673 init_ref_list_and_get_dpb_task_args.d = rc[k%2]; 691 init_ref_list_and_get_dpb_task_args.d = rc[k%2];
674 init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs]; 692 init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs];
675 init_ref_list_and_get_dpb_task_args.init = &init; 693 init_ref_list_and_get_dpb_task_args.init = &init;
676 taskID = VSs__create_taskID_of_size(2,animSlv ); 694 taskID = VSs__create_taskID_of_size(2,animSlv );
677 taskID[1] = 5; 695 taskID[1] = 5;
678 taskID[2] = frames; 696 taskID[2] = k;
679 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID, animSlv); 697 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID, animSlv);
680 698
681 smbc = acquire_smbc(h); 699 smbc = acquire_smbc(h);
682 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, animSlv); 700 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k, animSlv);
683 release_ref_list_taskArgs release_ref_list_task_args; 701 release_ref_list_taskArgs release_ref_list_task_args;
684 release_ref_list_task_args.h = h; 702 release_ref_list_task_args.h = h;
685 release_ref_list_task_args.smbc = smbc; 703 release_ref_list_task_args.smbc = smbc;
686 release_ref_list_task_args.d = rc[k%2]; 704 release_ref_list_task_args.d = rc[k%2];
687 release_ref_list_task_args.sbe = &sbe[k%bufs]; 705 release_ref_list_task_args.sbe = &sbe[k%bufs];
688 release_ref_list_task_args.lastsmb = lastsmb; 706 release_ref_list_task_args.lastsmb = lastsmb;
689 release_ref_list_task_args.release = &release; 707 release_ref_list_task_args.release = &release;
690 taskID = VSs__create_taskID_of_size(2,animSlv ); 708 taskID = VSs__create_taskID_of_size(2,animSlv );
691 taskID[1] = 6; 709 taskID[1] = 6;
692 taskID[2] = frames; 710 taskID[2] = k;
693 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID, animSlv); 711 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID, animSlv);
694 712
695 output_taskArgs output_task_args; 713 output_taskArgs output_task_args;
696 output_task_args.h = h; 714 output_task_args.h = h;
697 output_task_args.oc = oc; 715 output_task_args.oc = oc;
698 output_task_args.sbe = &sbe[k%bufs]; 716 output_task_args.sbe = &sbe[k%bufs];
699 taskID = VSs__create_taskID_of_size(2,animSlv ); 717 taskID = VSs__create_taskID_of_size(2,animSlv );
700 taskID[1] = 7; 718 taskID[1] = 7;
701 taskID[2] = frames; 719 taskID[2] = k;
702 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID, animSlv); 720 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID, animSlv);
703 //#pragma omp taskwait on(*pc) 721 //#pragma omp taskwait on(*pc)
704 VSs__taskwait_on(animSlv,pc); 722 VSs__taskwait_on(animSlv,pc);
705 } 723 }
706 724
714 taskID = VSs__create_taskID_of_size(2,animSlv ); 732 taskID = VSs__create_taskID_of_size(2,animSlv );
715 taskID[1] = 8; 733 taskID[1] = 8;
716 taskID[2] = i; 734 taskID[2] = i;
717 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID, animSlv); 735 VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID, animSlv);
718 smbc = acquire_smbc(h); 736 smbc = acquire_smbc(h);
719 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, animSlv); 737 SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k, animSlv);
720 release_ref_list_taskArgs release_ref_list_task_args; 738 release_ref_list_taskArgs release_ref_list_task_args;
721 release_ref_list_task_args.h = h; 739 release_ref_list_task_args.h = h;
722 release_ref_list_task_args.smbc = smbc; 740 release_ref_list_task_args.smbc = smbc;
723 release_ref_list_task_args.d = rc[k%2]; 741 release_ref_list_task_args.d = rc[k%2];
724 release_ref_list_task_args.sbe = &sbe[k%bufs]; 742 release_ref_list_task_args.sbe = &sbe[k%bufs];
725 release_ref_list_task_args.lastsmb = lastsmb; 743 release_ref_list_task_args.lastsmb = lastsmb;
726 release_ref_list_task_args.release = &release; 744 release_ref_list_task_args.release = &release;
727 taskID = VSs__create_taskID_of_size(2,animSlv ); 745 taskID = VSs__create_taskID_of_size(2,animSlv );
728 taskID[1] = 9; 746 taskID[1] = 9;
729 taskID[2] = frames; 747 taskID[2] = k;
730 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID, animSlv); 748 VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID, animSlv);
731 749
732 output_taskArgs output_task_args; 750 output_taskArgs output_task_args;
733 output_task_args.h = h; 751 output_task_args.h = h;
734 output_task_args.oc = oc; 752 output_task_args.oc = oc;
735 output_task_args.sbe = &sbe[k%bufs]; 753 output_task_args.sbe = &sbe[k%bufs];
736 taskID = VSs__create_taskID_of_size(2,animSlv ); 754 taskID = VSs__create_taskID_of_size(2,animSlv );
737 taskID[1] = 10; 755 taskID[1] = 10;
738 taskID[2] = frames; 756 taskID[2] = k;
739 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID, animSlv); 757 VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID, animSlv);
740 } 758 }
741 759
742 } else { 760 } else {
743 while(!pc->final_frame && frames++ < h->num_frames && !h->quit){ 761 while(!pc->final_frame && frames++ < h->num_frames && !h->quit){