網頁

2023年3月21日 星期二

deepstream create_pipeline 分析

/opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps/deepstream-app/deepstream_app.c
create_pipeline (AppCtx * appCtx,
    bbox_generated_callback bbox_generated_post_analytics_cb,
    bbox_generated_callback all_bbox_generated_cb, perf_callback perf_cb,
    overlay_graphics_callback overlay_graphics_cb)
{
    multi_src_bin = create_multi_source_bin {
        sub_bins[] = create_camera_source_bin | 
            create_uridecode_src_bin | 
            create_rtsp_src_bin | 
            create_uridecode_src_bin_audio;
        sub_bins[] - nvstreammux;
    };
    create_common_elements {
        secondary_gie_bin = create_secondary_gie_bin {
            sub_bins[] = create_secondary_gie {
                secondary_gie = nvinfer | nvinferserver
                if (num_children == 0) {
                    queue - secondary_gie - fakesink
                } else {
                    queue - secondary_gie - tee
                }
            };
            tee - queue
            tee - sub_bins[]...
        };
        dsanalytics_bin = create_dsanalytics_bin {
            queue - nvdsanalytics
        };
        tracker_bin = create_tracking_bin { nvtracker };
        primary_gie_bin = create_primary_gie_bin {
            queue - nvvideoconvert - (nvinfer | nvinferserver) 
        };
        preprocess_bin = create_preprocess_bin {
            queue | nvdspreprocess
        };
        common_elements = nvmsgconv - tee
        {   preprocess_bin - primary_gie_bin - tracker_bin - 
            dsanalytics_bin - secondary_gie_bin - common_elements - 
            tee
        };
        secondary_gie_bin(src) -> bbox_generated_post_analytics_cb()
        sink_elem = preprocess_bin
        src_elem = tee
    };
    dsexample_bin = create_dsexample_bin { 
        queue - nvvideoconvert - capsfilter - dsexample 
    };
    demuxer = { nvstreamdemux };
    instance_bins[] = create_processing_instance {
        osd_bin = create_osd_bin { 
            queue - nvvideoconvert - queue - nvdsosd 
        };
        sink_bin = create_sink_bin {
            sub_bins[] = create_render_bin | 
                create_encode_file_bin | 
                create_udpsink_bin | 
                create_msg_conv_broker_bin
            queue - tee - sub_bins[]
        };
        osd_bin - sink_bin
        (sink)osd_bin -> all_bbox_generated_cb()
        (sink)osd_bin -> overlay_graphics_cb()
    };
    demux_instance_bins[] = create_demux_pipeline {
        osd_bin = create_osd_bin {
            queue - nvvideoconvert - queue - nvdsosd 
        };
        demux_sink_bin = create_demux_sink_bin {
            sub_bins[] = create_render_bin |
                create_encode_file_bin |
                create_udpsink_bin |
                create_msg_conv_broker_bin
            queue - tee - sub_bins[]
        };
        osd_bin - demux_sink_bin
    };
    tiled_display_bin = create_tiled_display_bin {
        queue - nvmultistreamtiler
    };
    if (tiled_display_config.enable) {
        multi_src_bin - (sink_elem-src_elem) - dsexample_bin - tiler_tee
            tiler_tee - nvstreamdemux - demux_instance_bins[]
            tiler_tee - tiled_display_bin - instance_bins[]
    } else {
        multi_src_bin - (sink_elem-src_elem) - dsexample_bin - demuxer - instance_bins[]
    };
};

沒有留言:

張貼留言