diff libavcodec/h264_ompss.c @ 9:ea1ba68cf0ed

update to match api changes + add sscc produced source
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 05 Jun 2013 14:43:26 +0200
parents 6c1433f5a562
children
line diff
     1.1 --- a/libavcodec/h264_ompss.c	Fri May 17 17:50:05 2013 +0200
     1.2 +++ b/libavcodec/h264_ompss.c	Wed Jun 05 14:43:26 2013 +0200
     1.3 @@ -36,8 +36,8 @@
     1.4      H264Context *h;
     1.5  } parse_taskArgs;
     1.6  
     1.7 -int32 parse_taskArgTypes[4] = {INOUT, INOUT, OUTPUT, NONCTLD};
     1.8 -int32 parse_taskArgSizes[4] = {sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
     1.9 +int32 parse_taskArgTypes[3] = {INOUT, INOUT, OUTPUT};
    1.10 +size_t parse_taskArgSizes[3] = {sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry)};
    1.11  
    1.12  //#pragma omp task inout(*pc, *nc) output(*sbe)
    1.13  static void parse_task(void *_data){
    1.14 @@ -63,11 +63,10 @@
    1.15  
    1.16  VSsTaskType parse_taskType = {
    1.17      .fn = &parse_task,
    1.18 -    .numCtldArgs = 3,
    1.19 -    .numTotalArgs = 4,
    1.20 +    .numDeps = 3,
    1.21      .sizeOfArgs = sizeof(parse_taskArgs),
    1.22 -    .argTypes = parse_taskArgTypes,
    1.23 -    .argSizes = parse_taskArgSizes};
    1.24 +    .depsTypes = parse_taskArgTypes,
    1.25 +    .depsSizes = parse_taskArgSizes};
    1.26  
    1.27  
    1.28  typedef struct{
    1.29 @@ -76,8 +75,8 @@
    1.30      H264Context *h;
    1.31  } decode_slice_entropy_taskArgs;
    1.32  
    1.33 -int32 decode_slice_entropy_taskArgTypes[3] = {INOUT, INOUT, NONCTLD};
    1.34 -int32 decode_slice_entropy_taskArgSizes[3] = {sizeof(EntropyContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
    1.35 +int32 decode_slice_entropy_taskArgTypes[2] = {INOUT, INOUT};
    1.36 +size_t decode_slice_entropy_taskArgSizes[2] = {sizeof(EntropyContext), sizeof(SliceBufferEntry)};
    1.37  
    1.38  //#pragma omp task inout(*ec) inout(*sbe)
    1.39  static void decode_slice_entropy_task(void *_data){
    1.40 @@ -133,11 +132,10 @@
    1.41  
    1.42  VSsTaskType decode_slice_entropy_taskType = {
    1.43      .fn = &decode_slice_entropy_task,
    1.44 -    .numCtldArgs = 2,
    1.45 -    .numTotalArgs = 3,
    1.46 +    .numDeps = 2,
    1.47      .sizeOfArgs = sizeof(decode_slice_entropy_taskArgs),
    1.48 -    .argTypes = decode_slice_entropy_taskArgTypes,
    1.49 -    .argSizes = decode_slice_entropy_taskArgSizes};
    1.50 +    .depsTypes = decode_slice_entropy_taskArgTypes,
    1.51 +    .depsSizes = decode_slice_entropy_taskArgSizes};
    1.52  
    1.53  
    1.54  static void decode_super_mb_block(MBRecContext *d, H264Slice *s, SuperMBContext *smbc, H264Mb *mbs, int smb_x, int smb_y){
    1.55 @@ -163,8 +161,8 @@
    1.56      SuperMBContext *smbc;
    1.57  } decode_super_mb_taskArgs;
    1.58  
    1.59 -int32 decode_super_mb_taskArgTypes[6] = {IN, IN, IN, IN, INOUT, NONCTLD};
    1.60 -int32 decode_super_mb_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBContext)};
    1.61 +int32 decode_super_mb_taskArgTypes[5] = {IN, IN, IN, IN, INOUT};
    1.62 +size_t decode_super_mb_taskArgSizes[5] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask)};
    1.63  
    1.64  //#pragma omp task input(*d, *sbe, *ml, *mur) inout(*m)
    1.65  static void decode_super_mb_task(void *_data){
    1.66 @@ -183,11 +181,10 @@
    1.67  
    1.68  VSsTaskType decode_super_mb_taskType = {
    1.69      .fn = &decode_super_mb_task,
    1.70 -    .numCtldArgs = 5,
    1.71 -    .numTotalArgs = 6,
    1.72 +    .numDeps = 5,
    1.73      .sizeOfArgs = sizeof(decode_super_mb_taskArgs),
    1.74 -    .argTypes = decode_super_mb_taskArgTypes,
    1.75 -    .argSizes = decode_super_mb_taskArgSizes};
    1.76 +    .depsTypes = decode_super_mb_taskArgTypes,
    1.77 +    .depsSizes = decode_super_mb_taskArgSizes};
    1.78  
    1.79  
    1.80  
    1.81 @@ -199,8 +196,8 @@
    1.82      int* line;
    1.83  } draw_edges_taskArgs;
    1.84  
    1.85 -int32 draw_edges_taskArgTypes[5] = {IN, IN, INOUT, NONCTLD, NONCTLD};
    1.86 -int32 draw_edges_taskArgSizes[5] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),sizeof(SuperMBContext),sizeof(int)};
    1.87 +int32 draw_edges_taskArgTypes[3] = {IN, IN, INOUT};
    1.88 +size_t draw_edges_taskArgSizes[3] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask)};
    1.89  
    1.90  //#pragma omp task input(*d, *sbe) inout(*sm)
    1.91  static void draw_edges_task(void *_data){
    1.92 @@ -218,11 +215,10 @@
    1.93  }
    1.94  VSsTaskType draw_edges_taskType = {
    1.95      .fn = &draw_edges_task,
    1.96 -    .numCtldArgs = 3,
    1.97 -    .numTotalArgs = 5,
    1.98 +    .numDeps = 3,
    1.99      .sizeOfArgs = sizeof(draw_edges_taskArgs),
   1.100 -    .argTypes = draw_edges_taskArgTypes,
   1.101 -    .argSizes = draw_edges_taskArgSizes};
   1.102 +    .depsTypes = draw_edges_taskArgTypes,
   1.103 +    .depsSizes = draw_edges_taskArgSizes};
   1.104  
   1.105  
   1.106  static void decode_mb_in_slice(H264Context *h, MBRecContext *d, SliceBufferEntry *sbe){
   1.107 @@ -245,7 +241,14 @@
   1.108              decode_super_mb_task_args.ml = sml;
   1.109              decode_super_mb_task_args.mur = smur;
   1.110              decode_super_mb_task_args.m = sm;
   1.111 -            VSs__submit_task(&decode_super_mb_taskType, &decode_super_mb_task_args);
   1.112 +            void** depsAddrs = malloc(decode_super_mb_taskType.numDeps * sizeof(void*));
   1.113 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask)*/
   1.114 +            depsAddrs[0] = d;
   1.115 +            depsAddrs[1] = sbe;
   1.116 +            depsAddrs[2] = sml;
   1.117 +            depsAddrs[3] = smur;
   1.118 +            depsAddrs[4] = sm;
   1.119 +            VSs__submit_task(&decode_super_mb_taskType, &decode_super_mb_task_args, depsAddrs);
   1.120          }
   1.121          draw_edges_taskArgs draw_edges_task_args;
   1.122          draw_edges_task_args.d = d;
   1.123 @@ -254,7 +257,12 @@
   1.124          draw_edges_task_args.smbc = smbc;
   1.125          draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
   1.126          *(draw_edges_task_args.line) = j;
   1.127 -        VSs__submit_task(&draw_edges_taskType, &draw_edges_task_args);
   1.128 +        void** depsAddrs = malloc(sizeof (void*) * draw_edges_taskType.numDeps);
   1.129 +        /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask)*/
   1.130 +        depsAddrs[0] = d;
   1.131 +        depsAddrs[1] = sbe;
   1.132 +        depsAddrs[2] = sm;
   1.133 +        VSs__submit_task(&draw_edges_taskType, &draw_edges_task_args, depsAddrs);
   1.134      }
   1.135      VSs__taskwait_on(sm);
   1.136      //#pragma omp taskwait on(*sm)
   1.137 @@ -268,8 +276,8 @@
   1.138      H264Context *h;
   1.139  } decode_slice_mb_taskArgs;
   1.140  
   1.141 -int32 decode_slice_mb_taskArgTypes[3] = {INOUT, INOUT, NONCTLD};
   1.142 -int32 decode_slice_mb_taskArgSizes[3] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
   1.143 +int32 decode_slice_mb_taskArgTypes[2] = {INOUT, INOUT};
   1.144 +size_t decode_slice_mb_taskArgSizes[2] = {sizeof(MBRecContext), sizeof(SliceBufferEntry)};
   1.145  
   1.146  //#pragma omp task inout(*d) inout(*sbe)
   1.147  static void decode_slice_mb_task(void *_data){
   1.148 @@ -320,11 +328,10 @@
   1.149  
   1.150  VSsTaskType decode_slice_mb_taskType = {
   1.151      .fn = &decode_slice_mb_task,
   1.152 -    .numCtldArgs = 2,
   1.153 -    .numTotalArgs = 3,
   1.154 +    .numDeps = 2,
   1.155      .sizeOfArgs = sizeof(decode_slice_mb_taskArgs),
   1.156 -    .argTypes = decode_slice_mb_taskArgTypes,
   1.157 -    .argSizes = decode_slice_mb_taskArgSizes};
   1.158 +    .depsTypes = decode_slice_mb_taskArgTypes,
   1.159 +    .depsSizes = decode_slice_mb_taskArgSizes};
   1.160  
   1.161  // for static 3d wave
   1.162  /*-------------------------------------------------------------------------------*/
   1.163 @@ -338,9 +345,9 @@
   1.164      SuperMBContext *smbc;
   1.165  } decode_3dwave_super_mb_taskArgs;
   1.166  
   1.167 -int32 decode_3dwave_super_mb_taskArgTypes[7] = {IN, IN, IN, IN, IN, INOUT, NONCTLD};
   1.168 -int32 decode_3dwave_super_mb_taskArgSizes[7] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),
   1.169 -        sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBContext)};
   1.170 +int32 decode_3dwave_super_mb_taskArgTypes[6] = {IN, IN, IN, IN, IN, INOUT};
   1.171 +size_t decode_3dwave_super_mb_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),
   1.172 +        sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask)};
   1.173  
   1.174  //#pragma omp task input(*d, *sbe, *ml, *mur, *mprev) inout(*m)
   1.175  static void decode_3dwave_super_mb_task(void *_data){
   1.176 @@ -362,11 +369,10 @@
   1.177  
   1.178  VSsTaskType decode_3dwave_super_mb_taskType = {
   1.179      .fn = &decode_3dwave_super_mb_task,
   1.180 -    .numCtldArgs = 6,
   1.181 -    .numTotalArgs = 7,
   1.182 +    .numDeps = 6,
   1.183      .sizeOfArgs = sizeof(decode_3dwave_super_mb_taskArgs),
   1.184 -    .argTypes = decode_3dwave_super_mb_taskArgTypes,
   1.185 -    .argSizes = decode_3dwave_super_mb_taskArgSizes};
   1.186 +    .depsTypes = decode_3dwave_super_mb_taskArgTypes,
   1.187 +    .depsSizes = decode_3dwave_super_mb_taskArgSizes};
   1.188  
   1.189  // int init_ref_count=0;
   1.190  typedef struct{
   1.191 @@ -376,8 +382,8 @@
   1.192      H264Context *h;
   1.193  } init_ref_list_and_get_dpb_taskArgs;
   1.194  
   1.195 -int32 init_ref_list_and_get_dpb_taskArgTypes[4] = {INOUT, INOUT, INOUT, NONCTLD};
   1.196 -int32 init_ref_list_and_get_dpb_taskArgSizes[4] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(int), sizeof(H264Context)};
   1.197 +int32 init_ref_list_and_get_dpb_taskArgTypes[3] = {INOUT, INOUT, INOUT};
   1.198 +size_t init_ref_list_and_get_dpb_taskArgSizes[3] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(int)};
   1.199  
   1.200  //#pragma omp task inout(*d, *sbe, *init)
   1.201  static void init_ref_list_and_get_dpb_task(void *_data){
   1.202 @@ -412,11 +418,10 @@
   1.203  
   1.204  VSsTaskType init_ref_list_and_get_dpb_taskType = {
   1.205      .fn = &init_ref_list_and_get_dpb_task,
   1.206 -    .numCtldArgs = 3,
   1.207 -    .numTotalArgs = 4,
   1.208 +    .numDeps = 3,
   1.209      .sizeOfArgs = sizeof(init_ref_list_and_get_dpb_taskArgs),
   1.210 -    .argTypes = init_ref_list_and_get_dpb_taskArgTypes,
   1.211 -    .argSizes = init_ref_list_and_get_dpb_taskArgSizes};
   1.212 +    .depsTypes = init_ref_list_and_get_dpb_taskArgTypes,
   1.213 +    .depsSizes = init_ref_list_and_get_dpb_taskArgSizes};
   1.214  
   1.215  static SuperMBTask* add_decode_slice_3dwave_tasks(MBRecContext *d, SliceBufferEntry *sbe, SuperMBContext *smbc, int k){
   1.216      int i,j;
   1.217 @@ -446,10 +451,18 @@
   1.218              decode_3dwave_super_mb_task_args.mprev = smprev;
   1.219              decode_3dwave_super_mb_task_args.m = sm;
   1.220              taskID = VSs__create_taskID_of_size(3 );
   1.221 +            void** depsAddrs = malloc(sizeof(void*) * decode_3dwave_super_mb_taskType.numDeps);
   1.222 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask),
   1.223 +        sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask)*/
   1.224 +            depsAddrs[0] = d;
   1.225 +            depsAddrs[1] = sbe;
   1.226 +            depsAddrs[2] = sml;
   1.227 +            depsAddrs[3] = smur;
   1.228 +            depsAddrs[4] = smprev;
   1.229              taskID[1] = k;
   1.230              taskID[2] = j;
   1.231              taskID[3] = i;
   1.232 -            VSs__submit_task_with_ID(&decode_3dwave_super_mb_taskType, &decode_3dwave_super_mb_task_args, taskID);
   1.233 +            VSs__submit_task_with_ID(&decode_3dwave_super_mb_taskType, &decode_3dwave_super_mb_task_args, depsAddrs, taskID);
   1.234          }
   1.235          draw_edges_taskArgs draw_edges_task_args;
   1.236          draw_edges_task_args.d = d;
   1.237 @@ -458,11 +471,16 @@
   1.238          draw_edges_task_args.smbc = smbc;
   1.239          draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
   1.240          *(draw_edges_task_args.line) = j;
   1.241 +        void** depsAddrs = malloc(sizeof (void*) * draw_edges_taskType.numDeps);
   1.242 +        /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask)*/
   1.243 +        depsAddrs[0] = d;
   1.244 +        depsAddrs[1] = sbe;
   1.245 +        depsAddrs[2] = sm;
   1.246          taskID = VSs__create_taskID_of_size(3);
   1.247          taskID[1] = k;
   1.248          taskID[2] = j;
   1.249          taskID[3] = i;
   1.250 -        VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID);
   1.251 +        VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, depsAddrs, taskID);
   1.252      }
   1.253  
   1.254      for(; j< smb_height; j++){
   1.255 @@ -477,11 +495,18 @@
   1.256              decode_super_mb_task_args.ml = sml;
   1.257              decode_super_mb_task_args.mur = smur;
   1.258              decode_super_mb_task_args.m = sm;
   1.259 +            void** depsAddrs = malloc(sizeof(void*) * decode_super_mb_taskType.numDeps);
   1.260 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(SuperMBTask), sizeof(SuperMBTask)*/
   1.261 +            depsAddrs[0] = d;
   1.262 +            depsAddrs[1] = sbe;
   1.263 +            depsAddrs[2] = sml;
   1.264 +            depsAddrs[3] = smur;
   1.265 +            depsAddrs[4] = sm;
   1.266              taskID = VSs__create_taskID_of_size(3 );
   1.267              taskID[1] = k;
   1.268              taskID[2] = j;
   1.269              taskID[3] = i;
   1.270 -            VSs__submit_task_with_ID(&decode_super_mb_taskType, &decode_super_mb_task_args, taskID);
   1.271 +            VSs__submit_task_with_ID(&decode_super_mb_taskType, &decode_super_mb_task_args, depsAddrs, taskID);
   1.272          }
   1.273          draw_edges_taskArgs draw_edges_task_args;
   1.274          draw_edges_task_args.d = d;
   1.275 @@ -490,11 +515,16 @@
   1.276          draw_edges_task_args.smbc = smbc;
   1.277          draw_edges_task_args.line = VMS_App__malloc( sizeof(int) );
   1.278          *(draw_edges_task_args.line) = j;
   1.279 +        void** depsAddrs = malloc(sizeof (void*) * draw_edges_taskType.numDeps);
   1.280 +        /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask)*/
   1.281 +        depsAddrs[0] = d;
   1.282 +        depsAddrs[1] = sbe;
   1.283 +        depsAddrs[2] = sm;
   1.284          taskID = VSs__create_taskID_of_size(3);
   1.285          taskID[1] = k;
   1.286          taskID[2] = j;
   1.287          taskID[3] = i;
   1.288 -        VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, taskID);
   1.289 +        VSs__submit_task_with_ID(&draw_edges_taskType, &draw_edges_task_args, depsAddrs, taskID);
   1.290      }
   1.291      return sm;
   1.292  }
   1.293 @@ -508,8 +538,8 @@
   1.294      SuperMBContext *smbc;
   1.295  } release_ref_list_taskArgs;
   1.296  
   1.297 -int32 release_ref_list_taskArgTypes[6] = {INOUT, INOUT, IN, INOUT, NONCTLD, NONCTLD};
   1.298 -int32 release_ref_list_taskArgSizes[6] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(int), sizeof(H264Context), sizeof(SuperMBContext)};
   1.299 +int32 release_ref_list_taskArgTypes[4] = {INOUT, INOUT, IN, INOUT};
   1.300 +size_t release_ref_list_taskArgSizes[4] = {sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(int)};
   1.301  
   1.302  //#pragma omp task inout(*d, *sbe, *release) input (*lastsmb)
   1.303  static void release_ref_list_task(void *_data){
   1.304 @@ -542,11 +572,10 @@
   1.305  
   1.306  VSsTaskType release_ref_list_taskType = {
   1.307      .fn = &release_ref_list_task,
   1.308 -    .numCtldArgs = 4,
   1.309 -    .numTotalArgs = 6,
   1.310 +    .numDeps = 4,
   1.311      .sizeOfArgs = sizeof(release_ref_list_taskArgs),
   1.312 -    .argTypes = release_ref_list_taskArgTypes,
   1.313 -    .argSizes = release_ref_list_taskArgSizes};
   1.314 +    .depsTypes = release_ref_list_taskArgTypes,
   1.315 +    .depsSizes = release_ref_list_taskArgSizes};
   1.316  
   1.317  // static void decode_mb_static_3dwave(H264Context *h, int mb_height, int mb_width, MBRecContext *d, H264Slice *s, H264Mb *mbs, SuperMBTask *smbs, SuperMBTask *smbs_prev){
   1.318  //
   1.319 @@ -560,8 +589,8 @@
   1.320      H264Context *h;
   1.321  } output_taskArgs;
   1.322  
   1.323 -int32 output_taskArgTypes[3] = {INOUT, IN, NONCTLD};
   1.324 -int32 output_taskArgSizes[3] = {sizeof(OutputContext), sizeof(SliceBufferEntry), sizeof(H264Context)};
   1.325 +int32 output_taskArgTypes[2] = {INOUT, IN};
   1.326 +size_t output_taskArgSizes[2] = {sizeof(OutputContext), sizeof(SliceBufferEntry)};
   1.327  
   1.328  //#pragma omp task inout (*oc) input(*sbe)
   1.329  static void output_task(void *_data){
   1.330 @@ -584,11 +613,10 @@
   1.331  
   1.332  VSsTaskType output_taskType = {
   1.333      .fn = &output_task,
   1.334 -    .numCtldArgs = 2,
   1.335 -    .numTotalArgs = 3,
   1.336 +    .numDeps = 2,
   1.337      .sizeOfArgs = sizeof(output_taskArgs),
   1.338 -    .argTypes = output_taskArgTypes,
   1.339 -    .argSizes = output_taskArgSizes};
   1.340 +    .depsTypes = output_taskArgTypes,
   1.341 +    .depsSizes = output_taskArgSizes};
   1.342  
   1.343  /*
   1.344  * The following code is the main loop of the file converter
   1.345 @@ -610,6 +638,7 @@
   1.346      int frames=0;
   1.347      
   1.348      int32* taskID;
   1.349 +    void** depsAddrs;
   1.350  
   1.351  #if HAVE_LIBSDL2
   1.352      pthread_t sdl_thr;
   1.353 @@ -645,19 +674,28 @@
   1.354              parse_task_args.pc = pc;
   1.355              parse_task_args.nc = nc;
   1.356              parse_task_args.sbe = &sbe[k%bufs];
   1.357 +            depsAddrs = malloc(sizeof(void*) * parse_taskType.numDeps);
   1.358 +            /*sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry)*/
   1.359 +            depsAddrs[0] = pc;
   1.360 +            depsAddrs[1] = nc;
   1.361 +            depsAddrs[2] = &sbe[k%bufs];
   1.362              taskID = VSs__create_taskID_of_size(2);
   1.363              taskID[1] = 1;
   1.364              taskID[2] = k;
   1.365 -            VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID);
   1.366 +            VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, depsAddrs, taskID);
   1.367              
   1.368              decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
   1.369              decode_slice_entropy_task_args.h = h;
   1.370              decode_slice_entropy_task_args.ec = ec[k%bufs];
   1.371              decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
   1.372 +            depsAddrs = malloc(sizeof(void*) * decode_slice_entropy_taskType.numDeps);
   1.373 +            /*sizeof(EntropyContext), sizeof(SliceBufferEntry)*/
   1.374 +            depsAddrs[0] = ec[k%bufs];
   1.375 +            depsAddrs[1] = &sbe[k%bufs];
   1.376              taskID = VSs__create_taskID_of_size(2);
   1.377              taskID[1] = 2;
   1.378              taskID[2] = k;
   1.379 -            VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID);        
   1.380 +            VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, depsAddrs, taskID);        
   1.381              //#pragma omp taskwait on(*pc)
   1.382              VSs__taskwait_on(pc);
   1.383              k++;
   1.384 @@ -669,19 +707,28 @@
   1.385              parse_task_args.pc = pc;
   1.386              parse_task_args.nc = nc;
   1.387              parse_task_args.sbe = &sbe[k%bufs];
   1.388 +            depsAddrs = malloc(sizeof(void*) * parse_taskType.numDeps);
   1.389 +            /*sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry)*/
   1.390 +            depsAddrs[0] = pc;
   1.391 +            depsAddrs[1] = nc;
   1.392 +            depsAddrs[2] = &sbe[k%bufs];
   1.393              taskID = VSs__create_taskID_of_size(2);
   1.394              taskID[1] = 3;
   1.395              taskID[2] = k;
   1.396 -            VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID);
   1.397 +            VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, depsAddrs, taskID);
   1.398              
   1.399              decode_slice_entropy_taskArgs decode_slice_entropy_task_args;
   1.400              decode_slice_entropy_task_args.h = h;
   1.401              decode_slice_entropy_task_args.ec = ec[k%bufs];
   1.402              decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
   1.403 +            depsAddrs = malloc(sizeof(void*) * decode_slice_entropy_taskType.numDeps);
   1.404 +            /*sizeof(EntropyContext), sizeof(SliceBufferEntry)*/
   1.405 +            depsAddrs[0] = ec[k%bufs];
   1.406 +            depsAddrs[1] = &sbe[k%bufs];
   1.407              taskID = VSs__create_taskID_of_size(2);
   1.408              taskID[1] = 4;
   1.409              taskID[2] = k;
   1.410 -            VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, taskID); 
   1.411 +            VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, depsAddrs, taskID); 
   1.412  
   1.413              k++;
   1.414              
   1.415 @@ -690,10 +737,15 @@
   1.416              init_ref_list_and_get_dpb_task_args.d = rc[k%2];
   1.417              init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs];
   1.418              init_ref_list_and_get_dpb_task_args.init = &init;
   1.419 +            depsAddrs = malloc(sizeof(void*) * init_ref_list_and_get_dpb_taskType.numDeps);
   1.420 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(int)*/
   1.421 +            depsAddrs[0] = rc[k%2];
   1.422 +            depsAddrs[1] = &sbe[k%bufs];
   1.423 +            depsAddrs[2] = &init;
   1.424              taskID = VSs__create_taskID_of_size(2);
   1.425              taskID[1] = 5;
   1.426              taskID[2] = k;
   1.427 -            VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID); 
   1.428 +            VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, depsAddrs, taskID); 
   1.429  
   1.430              smbc = acquire_smbc(h);
   1.431              SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k);            
   1.432 @@ -704,19 +756,29 @@
   1.433              release_ref_list_task_args.sbe = &sbe[k%bufs];
   1.434              release_ref_list_task_args.lastsmb = lastsmb;
   1.435              release_ref_list_task_args.release = &release;
   1.436 +            depsAddrs = malloc(sizeof(void*) * release_ref_list_taskType.numDeps);
   1.437 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(int)*/
   1.438 +            depsAddrs[0] = rc[k%2];
   1.439 +            depsAddrs[1] = &sbe[k%bufs];
   1.440 +            depsAddrs[2] = smbc;
   1.441 +            depsAddrs[3] = &release;
   1.442              taskID = VSs__create_taskID_of_size(2);
   1.443              taskID[1] = 6;
   1.444              taskID[2] = k;
   1.445 -            VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID);
   1.446 +            VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, depsAddrs, taskID);
   1.447  
   1.448              output_taskArgs output_task_args;
   1.449              output_task_args.h = h;
   1.450              output_task_args.oc = oc;
   1.451              output_task_args.sbe = &sbe[k%bufs];
   1.452 +            depsAddrs = malloc(sizeof(void*) * output_taskType.numDeps);
   1.453 +            /*sizeof(OutputContext), sizeof(SliceBufferEntry)*/
   1.454 +            depsAddrs[0] = oc;
   1.455 +            depsAddrs[1] = &sbe[k%bufs];
   1.456              taskID = VSs__create_taskID_of_size(2);
   1.457              taskID[1] = 7;
   1.458              taskID[2] = k;
   1.459 -            VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID);
   1.460 +            VSs__submit_task_with_ID(&output_taskType, &output_task_args, depsAddrs, taskID);
   1.461              //#pragma omp taskwait on(*pc)
   1.462              VSs__taskwait_on(pc);
   1.463          }
   1.464 @@ -728,10 +790,15 @@
   1.465              init_ref_list_and_get_dpb_task_args.d = rc[k%2];
   1.466              init_ref_list_and_get_dpb_task_args.sbe = &sbe[k%bufs];
   1.467              init_ref_list_and_get_dpb_task_args.init = &init;
   1.468 +            depsAddrs = malloc(sizeof(void*) * init_ref_list_and_get_dpb_taskType.numDeps);
   1.469 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(int)*/
   1.470 +            depsAddrs[0] = rc[k%2];
   1.471 +            depsAddrs[1] = &sbe[k%bufs];
   1.472 +            depsAddrs[2] = &init;
   1.473              taskID = VSs__create_taskID_of_size(2);
   1.474              taskID[1] = 8;
   1.475              taskID[2] = i;
   1.476 -            VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, taskID); 
   1.477 +            VSs__submit_task_with_ID(&init_ref_list_and_get_dpb_taskType, &init_ref_list_and_get_dpb_task_args, depsAddrs, taskID); 
   1.478              smbc = acquire_smbc(h);
   1.479              SuperMBTask *lastsmb= add_decode_slice_3dwave_tasks(rc[k%2], &sbe[k%bufs], smbc, k);
   1.480              release_ref_list_taskArgs release_ref_list_task_args;
   1.481 @@ -741,19 +808,29 @@
   1.482              release_ref_list_task_args.sbe = &sbe[k%bufs];
   1.483              release_ref_list_task_args.lastsmb = lastsmb;
   1.484              release_ref_list_task_args.release = &release;
   1.485 +            depsAddrs = malloc(sizeof(void*) * release_ref_list_taskType.numDeps);
   1.486 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry), sizeof(SuperMBTask), sizeof(int)*/
   1.487 +            depsAddrs[0] = rc[k%2];
   1.488 +            depsAddrs[1] = &sbe[k%bufs];
   1.489 +            depsAddrs[2] = smbc;
   1.490 +            depsAddrs[3] = &release;
   1.491              taskID = VSs__create_taskID_of_size(2);
   1.492              taskID[1] = 9;
   1.493              taskID[2] = k;
   1.494 -            VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, taskID); 
   1.495 +            VSs__submit_task_with_ID(&release_ref_list_taskType, &release_ref_list_task_args, depsAddrs, taskID); 
   1.496  
   1.497              output_taskArgs output_task_args;
   1.498              output_task_args.h = h;
   1.499              output_task_args.oc = oc;
   1.500              output_task_args.sbe = &sbe[k%bufs];
   1.501 +           depsAddrs = malloc(sizeof(void*) * output_taskType.numDeps);
   1.502 +            /*sizeof(OutputContext), sizeof(SliceBufferEntry)*/
   1.503 +            depsAddrs[0] = oc;
   1.504 +            depsAddrs[1] = &sbe[k%bufs];
   1.505              taskID = VSs__create_taskID_of_size(2);
   1.506              taskID[1] = 10;
   1.507              taskID[2] = k;
   1.508 -            VSs__submit_task_with_ID(&output_taskType, &output_task_args, taskID);
   1.509 +            VSs__submit_task_with_ID(&output_taskType, &output_task_args, depsAddrs, taskID);
   1.510          }
   1.511  
   1.512      } else {
   1.513 @@ -766,7 +843,12 @@
   1.514              parse_task_args.pc = pc;
   1.515              parse_task_args.nc = nc;
   1.516              parse_task_args.sbe = &sbe[k%bufs];
   1.517 -            VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, taskID);
   1.518 +            depsAddrs = malloc(sizeof(void*) * parse_taskType.numDeps);
   1.519 +            /*sizeof(ParserContext), sizeof(NalContext), sizeof(SliceBufferEntry)*/
   1.520 +            depsAddrs[0] = pc;
   1.521 +            depsAddrs[1] = nc;
   1.522 +            depsAddrs[2] = &sbe[k%bufs];
   1.523 +            VSs__submit_task_with_ID(&parse_taskType, &parse_task_args, depsAddrs, taskID);
   1.524  
   1.525              taskID = VSs__create_taskID_of_size(1);
   1.526              taskID[1] = frames*10+2;
   1.527 @@ -774,7 +856,11 @@
   1.528              decode_slice_entropy_task_args.h = h;
   1.529              decode_slice_entropy_task_args.ec = ec[k%bufs];
   1.530              decode_slice_entropy_task_args.sbe = &sbe[k%bufs];
   1.531 -            VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args,taskID);
   1.532 +            depsAddrs = malloc(sizeof(void*) * decode_slice_entropy_taskType.numDeps);
   1.533 +            /*sizeof(EntropyContext), sizeof(SliceBufferEntry)*/
   1.534 +            depsAddrs[0] = ec[k%bufs];
   1.535 +            depsAddrs[1] = &sbe[k%bufs];
   1.536 +            VSs__submit_task_with_ID(&decode_slice_entropy_taskType, &decode_slice_entropy_task_args, depsAddrs, taskID);
   1.537  
   1.538              taskID = VSs__create_taskID_of_size(1);
   1.539              taskID[1] = frames*10+3;
   1.540 @@ -782,7 +868,11 @@
   1.541              decode_slice_mb_task_args.h = h;
   1.542              decode_slice_mb_task_args.d = rc[0];
   1.543              decode_slice_mb_task_args.sbe = &sbe[k%bufs];
   1.544 -            VSs__submit_task_with_ID(&decode_slice_mb_taskType, &decode_slice_mb_task_args,taskID); 
   1.545 +            depsAddrs = malloc(sizeof(void*) * decode_slice_mb_taskType.numDeps);
   1.546 +            /*sizeof(MBRecContext), sizeof(SliceBufferEntry)*/
   1.547 +            depsAddrs[0] = rc[0];
   1.548 +            depsAddrs[1] = &sbe[k%bufs];
   1.549 +            VSs__submit_task_with_ID(&decode_slice_mb_taskType, &decode_slice_mb_task_args, depsAddrs, taskID); 
   1.550  
   1.551              taskID = VSs__create_taskID_of_size(1);
   1.552              taskID[1] = frames*10+4;
   1.553 @@ -790,7 +880,11 @@
   1.554              output_task_args.h = h;
   1.555              output_task_args.oc = oc;
   1.556              output_task_args.sbe = &sbe[k%bufs];
   1.557 -            VSs__submit_task_with_ID(&output_taskType, &output_task_args,taskID);
   1.558 +            depsAddrs = malloc(sizeof(void*) * output_taskType.numDeps);
   1.559 +            /*sizeof(OutputContext), sizeof(SliceBufferEntry)*/
   1.560 +            depsAddrs[0] = oc;
   1.561 +            depsAddrs[1] = &sbe[k%bufs];
   1.562 +            VSs__submit_task_with_ID(&output_taskType, &output_task_args, depsAddrs, taskID);
   1.563              //#pragma omp taskwait on(*pc)
   1.564              VSs__taskwait_on(pc);
   1.565              k++;