{"id":4705,"date":"2019-06-17T03:37:46","date_gmt":"2019-06-17T01:37:46","guid":{"rendered":"https:\/\/demdlx704as001.ad.harman.com\/index.php\/section\/dynamic-metadata\/"},"modified":"2024-05-08T16:14:33","modified_gmt":"2024-05-08T14:14:33","slug":"dynamic-metadata","status":"publish","type":"post","link":"https:\/\/audioworx.transfunnel.co\/old\/?p=4705","title":{"rendered":"Dynamic Metadata"},"content":{"rendered":"<p>Dynamic metadata creation is similiar to static, but accepts arguments for the creation process, hence the <strong><em>dynamic<\/em><\/strong>. The object receives all configuration data being considered (in most cases this would be by GTT) and writes relevant information to the member <em><strong>m_DynamicMetadata<\/strong><\/em> in response.<\/p>\n<pre class=\"text\">virtual void createDynamicMetadata(ioObjectConfigInput&amp; configIn, ioObjectConfigOutput&amp; configOut);\r\ndynamicMetadata getDynamicMetadata() { return m_DynamicMetadata; }<\/pre>\n<p class=\"heading\"><strong>Create Dynamic Metadata<\/strong><\/p>\n<p><em><strong>createDynamicMetadata<\/strong><\/em> is called after a successful call to <strong><em>getObjectIo<\/em><\/strong>. It can further restrict values in the <strong><em>ioObjectConfigOutput<\/em><\/strong> struct. All required information is passed in with <strong><em>configIn<\/em><\/strong>.<\/p>\n<ul>\n<li><strong>audioIn &amp; audioOut<\/strong> \u2013 instances of type metaDataDescription which label and set restrictions for inputs and outputs. Label need not be specified if a generic label will suffice. (eg: Input 1) If not, supply a label for each input and output.<\/li>\n<li><strong>controlIn &amp; controlOut<\/strong> \u2013 are vectors of type metaDataControlDescription which label and specify value ranges for each control input. The number of controls is dictated by other. parameters, so we don\u2019t have to bound the min and max. Note: Min and Max are not enforced, they are only informative to the user.<\/li>\n<li><strong>estMemory<\/strong> \u2013 Estimated memory consumption for the current configuration (in bytes).<\/li>\n<li><strong>estMIPS<\/strong> \u2013 estimated consumption of processor (in millions of cycles per second, so not really MIPS).<\/li>\n<\/ul>\n<p class=\"heading\"><strong>Get Dynamic Metadata<\/strong><\/p>\n<p class=\"text\">This method simply returns a copy of <strong><em>m_DynamicMetadata<\/em><\/strong>. Note that it is not virtual.<\/p>\n<p class=\"heading\"><strong>Description of Structures<\/strong><\/p>\n<p>These structures are used by the tool during signal design. The input configuration struct holds all *attempted* parameters, the output struct is used to constrain audio inputs and outputs and report the correct number of control inputs and outputs.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/dynamic_metadata_structure.jpg\" alt=\"\" width=\"791\" height=\"246\" \/><\/p>\n<p class=\"heading\"><strong>In-Place Computation<\/strong><\/p>\n<p>This feature allows Audio Objects to give the GTT the ability to operate in in-place computation mode. In this mode, the audio object uses the same buffers for input and output. This option has been moved from static metadata to dynamic metadata to support a kernel-based decision. This allows the AO developer to decide, based on the target architecture, whether or not it is beneficial to run the calc function in-place.<\/p>\n<p>GTT analyses the signal flow and calculates the amount of buffers required for the given signal flow. If <strong><em>isInplaceComputationSupported<\/em><\/strong> is set by the audio object developer, GTT tells the framework to allocate only input buffers only.<\/p>\n<p>The <em><strong>isInplaceComputationSupported<\/strong><\/em> flag can be checked in the the audio object&#8217;s dynamic metadata.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/06\/dynamic_metadata_in-place.jpg\" alt=\"\" width=\"444\" height=\"492\" \/><\/p>\n<p>For example,\u00a0 Gain configured for 6 channels :<\/p>\n<ul>\n<li>If isInplaceComputationSupported is not set, it will use a total of 12 buffers.<\/li>\n<li>If isInplaceComputationSupported is set, it will use a total of 6 buffers.<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone wp-image-12940\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/05\/IndicesWithInPlace.png\" alt=\"\" width=\"448\" height=\"188\" \/>\u00a0 \u00a0 \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12942\" src=\"https:\/\/audioworx.transfunnel.co\/old\/wp-content\/uploads\/2019\/05\/WihoutInPlace.png\" alt=\"\" width=\"451\" height=\"189\" \/><\/p>\n<p>In-place computation feature has the following benefits:<\/p>\n<ul>\n<li>reduces flash size.<\/li>\n<li>reduces number of IO streams which improves the memory performance on embedded.<\/li>\n<\/ul>\n<p class=\"note\">Current Limitation or Additional conditions<\/p>\n<p>An Audio Object Marked is considered for in-place has to satisfy following three conditions:<\/p>\n<ul>\n<li>Audio Object should have dynamic metadata flag isInplaceComputationSupported set to true for the selected core type.<\/li>\n<li>Audio Object should have equal number of input and output pins.<\/li>\n<li>All audio pins should be connected.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Dynamic metadata creation is similiar to static, but accepts arguments for the creation process, hence the dynamic. The object receives all configuration data being considered (in most cases this would be by GTT) and writes relevant information to the member m_DynamicMetadata in response. virtual void createDynamicMetadata(ioObjectConfigInput&amp; configIn, ioObjectConfigOutput&amp; configOut); dynamicMetadata getDynamicMetadata() { return m_DynamicMetadata; } [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","footnotes":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[]},"categories":[],"tags":[],"coauthors":[165],"_links":{"self":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/posts\/4705"}],"collection":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4705"}],"version-history":[{"count":6,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/posts\/4705\/revisions"}],"predecessor-version":[{"id":27963,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=\/wp\/v2\/posts\/4705\/revisions\/27963"}],"wp:attachment":[{"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4705"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/audioworx.transfunnel.co\/old\/index.php?rest_route=%2Fwp%2Fv2%2Fcoauthors&post=4705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}