diff --git a/camera/gstCamera.cpp b/camera/gstCamera.cpp index 282c975..82350f9 100644 --- a/camera/gstCamera.cpp +++ b/camera/gstCamera.cpp @@ -43,6 +43,7 @@ const char* gstCameraSrcToString( gstCameraSrc src ) if( src == GST_SOURCE_NVCAMERA ) return "GST_SOURCE_NVCAMERA"; else if( src == GST_SOURCE_NVARGUS ) return "GST_SOURCE_NVARGUS"; else if( src == GST_SOURCE_V4L2 ) return "GST_SOURCE_V4L2"; + else if (src == GST_SOURCE_USERPIPELINE) return "GST_SOURCE_USERPIPELINE"; return "UNKNOWN"; } @@ -423,7 +424,7 @@ bool gstCamera::buildLaunchStr( gstCameraSrc src ) ss << "video/x-raw ! appsink name=mysink"; } - else + else if( GST_SOURCE_V4L2 == src ) { ss << "v4l2src device=" << mCameraStr << " ! "; ss << "video/x-raw, width=(int)" << mWidth << ", height=(int)" << mHeight << ", "; @@ -438,7 +439,14 @@ bool gstCamera::buildLaunchStr( gstCameraSrc src ) mSource = GST_SOURCE_V4L2; } - + else // GST_SOURCE_USERPIPELINE + { + ss << mCameraStr; + ss << " ! videoconvert ! video/x-raw, format=RGB, width=(int)" << mWidth << ", height=(int)" << mHeight << " ! "; + ss << "appsink name=mysink"; + mSource = GST_SOURCE_USERPIPELINE; + } + mLaunchStr = ss.str(); printf(LOG_GSTREAMER "gstCamera pipeline string:\n"); @@ -477,8 +485,10 @@ bool gstCamera::parseCameraStr( const char* camera ) return true; } - printf(LOG_GSTREAMER "gstCamera::Create('%s') -- invalid camera device requested\n", camera); - return false; + printf(LOG_GSTREAMER "gstCamera::Create('%s') as user pipeline, may fail...\n", camera); + + mCameraStr = camera; + return true; } diff --git a/camera/gstCamera.h b/camera/gstCamera.h index e148c15..8d00dfe 100644 --- a/camera/gstCamera.h +++ b/camera/gstCamera.h @@ -42,7 +42,8 @@ enum gstCameraSrc { GST_SOURCE_NVCAMERA, /* use nvcamerasrc element */ GST_SOURCE_NVARGUS, /* use nvargussrc element */ - GST_SOURCE_V4L2 /* use v4l2src element */ + GST_SOURCE_V4L2, /* use v4l2src element */ + GST_SOURCE_USERPIPELINE /* use user pipeline */ }; /**