summaryrefslogtreecommitdiff
path: root/libs/support/tflite/src/nnapi_delegate_ex_AddOpsAndParams_lambda.inc
blob: ea485fe4582d1883b8faa8c03ca8a283dfd6c401 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// This file is included from AddOpsAndParams defined in nnapi_delegate.cc
// and contains lambda for extened implementation to original Tensorflow Lite.
    auto add_resize_bilinear_params = [&add_scalar_int32, &interpreter, &augmented_inputs](void* data) {
      auto builtin = reinterpret_cast<TfLiteResizeBilinearParams*>(data);
      if  (builtin->align_corners) {
        FATAL("Resize bilinear does not support align corners in NNAPI");
      }

      TfLiteTensor* tensor = interpreter->tensor(augmented_inputs.back());
      assert(tensor->type == kTfLiteInt32);
      assert(tensor->bytes == sizeof(int)*2);
      augmented_inputs.pop_back();

      int height = ((int*)(tensor->data.raw))[1];
      int width = ((int*)(tensor->data.raw))[0];
      add_scalar_int32(height);
      add_scalar_int32(width);
    };

    auto add_strided_slice_params = [&add_scalar_int32](void* data) {
      auto builtin = reinterpret_cast<TfLiteStridedSliceParams*>(data);
      add_scalar_int32(builtin->begin_mask);
      add_scalar_int32(builtin->end_mask);
      // ellipsis_mask and new_axis_mask are not supported on nn runtime
      // cf) tflite interpreter supports both operations
      if (builtin->ellipsis_mask) {
        FATAL("STRIDE_SLICE does not support ellipsis_mask in NNAPI");
      }
      if (builtin->new_axis_mask) {
        FATAL("STRIDE_SLICE does not support new_axis_mask in NNAPI");
      }
      add_scalar_int32(builtin->shrink_axis_mask);
    };

    auto add_gather_ex_params = [&add_scalar_int32](void* data) {
      auto builtin = reinterpret_cast<TfLiteGatherParams*>(data);
      add_scalar_int32(builtin->axis);
      if (builtin->axis != 0) {
        FATAL("GATHER does not support axis>0 in NNAPI");
      }
    };