Doxygen Book
Todo List
Member _backtrace_to_string (void)
The .c file location of this function might be not appropriate.
Member _get_filenames (nnsconf_type_path type, const gchar *dir, GSList **listF, GSList **listN, guint *counter)
This assumes .so/.dylib for all sub plugins. Support Windows!
Member _gst_tensor_debug_output (GstTensorDebug *self, GstBuffer *buffer)
NYI: do the debug task
Member _GstTensorDecoder::tensor_config
support tensors in the future
Member _strdup_getenv (const gchar *name)
Evaluate if we need to use secure_getenv() here (and compatible with other OS
Member _validate_file (nnsconf_type_path type, const gchar *fullpath)
how to validate with nnsconf type.
Member ACCL_NPU
Define ACCL_DSP
Member ACCL_NPU_STR
Define ACCL_DSP_STR
Member custom_loadlib (const GstTensorFilterProperties *prop, void **private_data)

: Check the integrity of filter->data and filter->model_file, nnfw

Double check if this check is really required and safe

Member EVENT_NAME_UPDATE_MODEL
rename & move this to better location
Member g_tensor_filter_single_invoke (GTensorFilterSingle *self, const GstTensorMemory *input, GstTensorMemory *output, gboolean allocate)

refactor this local variable

how can we remove memcpy if output data is already allocated single-shot should fill the output data, but sub-plugin allocates new memory.

Member gst_mqtt_sink_set_host_address (GstMqttSink *self, const gchar *addr)
Handle the case where the addr is changed at runtime
Member gst_mqtt_sink_start (GstBaseSink *basesink)
Support other persistence mechanisms MQTTCLIENT_PERSISTENCE_NONE: A memory-based persistence mechanism MQTTCLIENT_PERSISTENCE_DEFAULT: The default file system-based persistence mechanism MQTTCLIENT_PERSISTENCE_USER: An application-specific persistence mechanism
Member gst_mqtt_src_create (GstBaseSrc *basesrc, guint64 offset, guint size, GstBuffer **buf)

DEFAULT_MQTT_SUB_TIMEOUT_MIN is too long

If the difference between new latency and old latency, gst_element_post_message (GST_ELEMENT_CAST (self), gst_message_new_latency (GST_OBJECT_CAST (self))); is needed.

: Send EoS here

Member gst_mqtt_src_set_host_address (GstMqttSrc *self, const gchar *addr)
Handle the case where the addr is changed at runtime
Member gst_mqtt_src_start (GstBaseSrc *basesrc)
Support other persistence mechanisms MQTTCLIENT_PERSISTENCE_NONE: A memory-based persistence mechanism MQTTCLIENT_PERSISTENCE_DEFAULT: The default file system-based persistence mechanism MQTTCLIENT_PERSISTENCE_USER: An application-specific persistence mechanism
Member gst_tensor_aggregator_chain (GstPad *pad, GstObject *parent, GstBuffer *buf)
flush data Invalid state, tried to flush large size. We have to determine how to handle this case. (flush the out-size or all available bytes) Now all available bytes in adapter will be flushed.
Member gst_tensor_aggregator_parse_caps (GstTensorAggregator *self, const GstCaps *caps)
flush data Check properties to detect invalid case. Assertion when in=5 out=10 flush=20 or in=10 out=5 flush=20
Member gst_tensor_buffer_append_memory (GstBuffer *buffer, GstMemory *memory, const GstTensorInfo *info)
Make custom gst_allocator later?
Member gst_tensor_converter_chain (GstPad *pad, GstObject *parent, GstBuffer *buf)

need rewrite. do not use assert

expand mem if given property is larger than mem size. Now compare same size, later we should modify mem block if developer sets different dimension.

identify and printout the given input stream caps.

Member gst_tensor_converter_parse_video (GstTensorConverter *self, const GstCaps *caps, GstTensorsConfig *config)

Add more conditions!

need rewrite.

Member gst_tensor_converter_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
detects framework based on the script extension
Member gst_tensor_converter_video_stride (GstVideoFormat format, gint width)
The actual list is much longer, fill them. (read https://gstreamer.freedesktop.org/documentation/design/mediatype-video-raw.html)
Member gst_tensor_crop_do_cropping (GstTensorCrop *self, GstBuffer *raw, tensor_crop_info_s *cinfo)
Add various mode to crop tensor.
Member gst_tensor_crop_get_crop_info (GstTensorCrop *self, GstBuffer *info, tensor_crop_info_s *cinfo)
Add various mode to crop tensor. Now tensor-crop handles NHWC data format only.
Member gst_tensor_debug_class_init (GstTensorDebugClass *klass)
check the behavior of name and nick (output methods vs output)
Member gst_tensor_filter_configure_tensor (GstTensorFilter *self, const GstCaps *incaps)

We do not support this (flexible tensor for flexible input model). Cap-negotiation of the current tensor-filter requires either side of "model / set-property" or "incoming gstcaps" to be static/explicit. Ideally, this should support flexible tensor for flexible input model, leaving the negotiation to other elements, but we didn't implement it yet.

framerate of output tensors How can we update the framerate? GstTensorFilter cannot assure the framerate. Simply set the framerate of out-tensor from incaps.

Member gst_tensor_filter_transform_caps (GstBaseTransform *trans, GstPadDirection direction, GstCaps *caps, GstCaps *filter)

how to set the framerate of output tensors

We do not have a testcase hitting here. Thus, we do not ensure the validity here. However, according to gstreamer doxygen entry, if filter is given, that's not to be ignored. For now, we assume that if caps-size is 0, filter is "ANY".

Member gst_tensor_info_convert_to_meta (GstTensorInfo *info, GstTensorMetaInfo *meta)
handle rank from info.dimension
Member gst_tensor_meta_info_parse_header (GstTensorMetaInfo *meta, gpointer header)
update meta info for each version
Member gst_tensor_query_client_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
DO NOT update properties (host, port, ..) while pipeline is running.
Member gst_tensor_sparse_dec_chain (GstPad *pad, GstObject *parent, GstBuffer *buf)
consider more error handling
Member gst_tensor_trainer_set_prop_framework (GstTensorTrainer *trainer, const GValue *value)
Check valid framework
Member gst_tensor_transform_arithmetic (GstTensorTransform *filter, GstTensorInfo *in_info, GstTensorInfo *out_info, const uint8_t *inptr, uint8_t *outptr)
add more options
Member gst_tensor_transform_dimchg (GstTensorTransform *filter, GstTensorInfo *in_info, GstTensorInfo *out_info, const uint8_t *inptr, uint8_t *outptr)

do "IP" operation

CRITICAL-TODO: Optimize the performance!

NYI

Member gst_tensor_transform_padding (GstTensorTransform *filter, GstTensorInfo *in_info, GstTensorInfo *out_info, const uint8_t *inptr, uint8_t *outptr)
Add constant option instead of using zero padding value
Member gst_tensor_transform_transform (GstBaseTransform *trans, GstBuffer *inbuf, GstBuffer *outbuf)
max rank supported in tensor-transform is 4
Member gst_tensor_transform_transform_caps (GstBaseTransform *trans, GstPadDirection direction, GstCaps *caps, GstCaps *filtercap)
Get to know what the heck is @filtercap and use it!
Member gst_tensordec_transform_caps (GstBaseTransform *trans, GstPadDirection direction, GstCaps *caps, GstCaps *filter)
We may do more specific actions here
Member gst_tensordec_transform_size (GstBaseTransform *trans, GstPadDirection direction, GstCaps *caps, gsize size, GstCaps *othercaps, gsize *othersize)
If direction = SRC, you may need different interpretation!
Member gst_tensorsinfo_compare_print (const GstTensorsInfo *info1, const GstTensorsInfo *info2)
If this is going to be used by other elements, move this to nnstreamer/tensor_common.
File gsttensor_converter.c

For flatbuffers, support other/tensors with properties

Subplugins are not tested, yet.

File gsttensor_if.h
Add "event/signal" to reload FILL_WITH_FILE* file??? (TBD)
File gsttensor_srciio.c

support specific channels as input

handle timestamp received from device

Member mlagent_get_model_path_from (const GValue *val)

The specification of the data layout filled in the third argument (i.e., stringified_json) by the callee is not fully decided.

Parse stringified_json to get the model's path

Member nnsconf_dump (gchar *str, gulong size)
Add more configuration values to dump.
File ntputil.c
Need to support caching and polling timer mechanism
Member register_subplugin (subpluginType type, const char *name, const void *data)
data out of scope at add
Member TDBG_OUTPUT_CIRCULARBUF
NYI NOT_SUPPORTED)
Member TDBG_OUTPUT_FILEWRITE
NYI NOT_SUPPORTED)
Class tensor_crop_info_s
Add various mode to crop tensor. Now tensor-crop handles NHWC data format only.
File tensor_filter.c

set priority among properties

logic for dynamic properties(like model change)

File tensor_filter.h
TBD: Should we disable "in-place" mode? (what if output size > input size?)