@@ -432,49 +432,37 @@ public static String fpsToFramerate(float fps) {
432432
433433
434434 protected void initCustomPipeline (String pstr ) {
435- // String[] parts = pstr.split("!");
436- // int n = parts.length;
435+ String PIPELINE_END = " ! videorate ! videoscale ! videoconvert ! appsink name=sink" ;
437436
437+ pipeline = (Pipeline ) Gst .parseLaunch (pstr + PIPELINE_END );
438438
439- int n = 1 ;
440- Element [] elements = new Element [n + 4 ];
441-
442- Element el = Gst .parseLaunch (pstr );
443- elements [0 ] = el ;
444-
445- // for (int i = 0; i < n; i++) {
446- // String el = parts[i].trim();
447- // elements[i] = ElementFactory.make(el, null);
448- // }
449-
450- pipeline = new Pipeline ();
451-
452- Element videoscale = ElementFactory .make ("videoscale" , null );
453- Element videoconvert = ElementFactory .make ("videoconvert" , null );
454- Element capsfilter = ElementFactory .make ("capsfilter" , null );
455-
456- String frameRateString ;
439+ String caps = ", width=" + width + ", height=" + height ;
457440 if (frameRate != 0.0 ) {
458- frameRateString = ", framerate=" + fpsToFramerate (frameRate );
459- } else {
460- frameRateString = "" ;
441+ caps += ", framerate=" + fpsToFramerate (frameRate );
461442 }
462- capsfilter .set ("caps" , Caps .fromString ("video/x-raw, width=" + width + ", height=" + height + frameRateString ));
463443
464- initSink ( );
465-
466- elements [ n + 0 ] = videoscale ;
467- elements [ n + 1 ] = videoconvert ;
468- elements [ n + 2 ] = capsfilter ;
469- elements [ n + 3 ] = rgbSink ;
444+ rgbSink = ( AppSink ) pipeline . getElementByName ( "sink" );
445+ rgbSink . set ( "emit-signals" , true );
446+ newSampleListener = new NewSampleListener () ;
447+ newPrerollListener = new NewPrerollListener ();
448+ rgbSink . connect ( newSampleListener ) ;
449+ rgbSink . connect ( newPrerollListener ) ;
470450
471- pipeline .addMany (elements );
472- Element .linkMany (elements );
451+ useBufferSink = Video .useGLBufferSink && parent .g .isGL ();
452+ if (ByteOrder .nativeOrder () == ByteOrder .LITTLE_ENDIAN ) {
453+ if (useBufferSink ) {
454+ rgbSink .setCaps (Caps .fromString ("video/x-raw, format=RGBx" + caps ));
455+ } else {
456+ rgbSink .setCaps (Caps .fromString ("video/x-raw, format=BGRx" + caps ));
457+ }
458+ } else {
459+ rgbSink .setCaps (Caps .fromString ("video/x-raw, format=xRGB" + caps ));
460+ }
473461
474462 makeBusConnections (pipeline .getBus ());
475463 }
476464
477-
465+
478466 protected void initDevicePipeline () {
479467 Element srcElement = null ;
480468 if (device == null ) {
0 commit comments