1da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin## -*- coding: utf-8 -*-
2da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin/*
3da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * Copyright (C) 2012 The Android Open Source Project
4da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *
5da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License");
6da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * you may not use this file except in compliance with the License.
7da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * You may obtain a copy of the License at
8da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *
9da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *      http://www.apache.org/licenses/LICENSE-2.0
10da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *
11da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * Unless required by applicable law or agreed to in writing, software
12da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS,
13da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * See the License for the specific language governing permissions and
15da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * limitations under the License.
16da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin */
17da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
18da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin/**
19da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * !! Do not reference this file directly !!
20da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *
21da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * It is logically a part of camera_metadata.c.  It is broken out for ease of
22da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * maintaining the tag info.
23da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *
24da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * Array assignments are done using specified-index syntax to keep things in
25da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * sync with camera_metadata_tags.h
26da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin */
27da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
28da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin/**
29da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * ! Do not edit this file directly !
30da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin *
31da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin * Generated automatically from camera_metadata_tag_info.mako
32da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin */
33da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
34da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkinconst char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = {
35da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % for i in find_all_sections(metadata):
36da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin    ${"[%s]" %(path_name(i)) | csym,pad(36)} = "${path_name(i)}",
37da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % endfor
38da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin};
39da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
40da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkinunsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {
41da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % for i in find_all_sections(metadata):
42da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin    ${"[%s]" %(path_name(i)) | csym,pad(36)} = { ${path_name(i) | csym}_START,
43da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin                                       ${path_name(i) | csym}_END },
44da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % endfor
45da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin};
46da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
47da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin% for sec in find_all_sections(metadata):
48da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkinstatic tag_info_t ${path_name(sec) | csyml}[${path_name(sec) | csym}_END -
49da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin        ${path_name(sec) | csym}_START] = {
50da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % for entry in find_unique_entries(sec):
51da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin    [ ${entry.name | csym} - ${path_name(sec) | csym}_START ] =
52da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin    { ${'"%s",' %(entry.name_short) | pad(40)} ${entry.type | ctype_enum,ljust(11)} },
53da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % endfor
54da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin};
55da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
56da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin% endfor
57da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin
58da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkintag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
59da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % for i in find_all_sections(metadata):
60da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin    ${path_name(i) | csyml},
61da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin  % endfor
62da1c314e080d33eb6b93a1d3da070c99b41e7b22Igor Murashkin};
63eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin
64eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkinint camera_metadata_enum_snprint(uint32_t tag,
65eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                                 uint32_t value,
66eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                                 char *dst,
67eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                                 size_t size) {
68eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    const char *msg = "error: not an enum";
69eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    int ret = -1;
70eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin
71eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    switch(tag) {
72eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    % for sec in find_all_sections(metadata):
73eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin      % for idx,entry in enumerate(find_unique_entries(sec)):
74eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin        case ${entry.name | csym}: {
75b556bc47068d816cb319a5d0e2f6841b007b38f2Igor Murashkin          % if entry.enum:
76eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin            switch (value) {
77eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin              % for val in entry.enum.values:
78eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                case ${entry.name | csym}_${val.name}:
79eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                    msg = "${val.name}";
80eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                    ret = 0;
81eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                    break;
82eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin              % endfor
83eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                default:
84eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin                    msg = "error: enum value out of range";
85eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin            }
86eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin          % endif
87eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin            break;
88eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin        }
89eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin      % endfor
90eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin
91eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    %endfor
92eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    }
93eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin
94eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    strncpy(dst, msg, size - 1);
95eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    dst[size - 1] = '\0';
96eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin
97eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin    return ret;
98eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin}
99eaddcd48df722556c1bd541a37e4b2cc1391e9aeIgor Murashkin
100375cfd3889aa72160273af802370c8f47f5c64d1Igor Murashkin<%
101375cfd3889aa72160273af802370c8f47f5c64d1Igor Murashkin  find_values = lambda x: isinstance(x, metadata_model.EnumValue)
102375cfd3889aa72160273af802370c8f47f5c64d1Igor Murashkin  enum_values = metadata.find_all(find_values)
103375cfd3889aa72160273af802370c8f47f5c64d1Igor Murashkin  enum_value_max_len = max([len(value.name) for value in enum_values]) + 1
104375cfd3889aa72160273af802370c8f47f5c64d1Igor Murashkin%>
105375cfd3889aa72160273af802370c8f47f5c64d1Igor Murashkin#define CAMERA_METADATA_ENUM_STRING_MAX_SIZE ${enum_value_max_len}
106