Hi,
It might not be easy for us to put custom properties in nvivafilter. Is it possible to use global variables in your usecase?
For example, please put the variable in nvsample_cudaprocess.cu
int property_test = 0;
add print in gpu_process():
printf("property = %d \n", property_test);
and you can set it in gstreamer app:
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <gst/gst.h>
using namespace std;
#define USE(x) ((void)(x))
static GstPipeline *gst_pipeline = nullptr;
static string launch_string;
GstClockTime usec = 1000000;
static int w = 1920;
static int h = 1080;
<b>extern int property_test;</b>
int main(int argc, char** argv) {
USE(argc);
USE(argv);
gst_init (&argc, &argv);
GMainLoop *main_loop;
main_loop = g_main_loop_new (NULL, FALSE);
ostringstream launch_stream;
launch_stream
<< "videotestsrc name=mysource ! "
<< "video/x-raw,width="<< w <<",height="<< h <<",framerate=30/1,format=NV12 ! "
<< "nvvidconv ! video/x-raw(memory:NVMM),format=NV12 ! "
<< "nvivafilter cuda-process=true customer-lib-name=libnvsample_cudaprocess.so ! "
<< "video/x-raw(memory:NVMM), format=(string)RGBA ! "
<< "nvoverlaysink ";
launch_string = launch_stream.str();
g_print("Using launch string: %s\n", launch_string.c_str());
GError *error = nullptr;
gst_pipeline = (GstPipeline*) gst_parse_launch(launch_string.c_str(), &error);
if (gst_pipeline == nullptr) {
g_print( "Failed to parse launch: %s\n", error->message);
return -1;
}
if(error) g_error_free(error);
gst_element_set_state((GstElement*)gst_pipeline, GST_STATE_PLAYING);
g_usleep(10*usec);
<b>property_test=10;</b>
g_usleep(10*usec);
GstElement* src = gst_bin_get_by_name(GST_BIN(gst_pipeline), "mysource");
gst_element_send_event (src, gst_event_new_eos ());
// Wait for EOS message
GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(gst_pipeline));
gst_bus_poll(bus, GST_MESSAGE_EOS, GST_CLOCK_TIME_NONE);
gst_element_set_state((GstElement*)gst_pipeline, GST_STATE_NULL);
gst_object_unref(GST_OBJECT(gst_pipeline));
g_main_loop_unref(main_loop);
g_print("going to exit \n");
return 0;
}
Build command:
$ g++ -Wall -std=c++11 test.cpp -o test $(pkg-config --cflags --libs gstreamer-app-1.0) -L/usr/lib/aarch64-linux-gnu/ -lnvsample_cudaprocess
In this demo, you should be able to set properties in app and get update value in gpu_process().