summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------common0
-rw-r--r--configure.ac35
-rw-r--r--docs/libs/Makefile.am4
-rw-r--r--docs/libs/gst-plugins-bad-libs-sections.txt2
-rw-r--r--docs/plugins/gst-plugins-bad-plugins-sections.txt2
-rw-r--r--ext/apexsink/gstapexsink.c8
-rw-r--r--ext/arts/gst_arts.c6
-rw-r--r--ext/artsd/gstartsdsink.c3
-rw-r--r--ext/assrender/gstassrender.c419
-rw-r--r--ext/assrender/gstassrender.h6
-rw-r--r--ext/audiofile/gstafparse.c8
-rw-r--r--ext/audiofile/gstafsink.c4
-rw-r--r--ext/audiofile/gstafsrc.c4
-rw-r--r--ext/audioresample/gstaudioresample.c8
-rw-r--r--ext/bz2/gstbz2dec.c6
-rw-r--r--ext/bz2/gstbz2enc.c6
-rw-r--r--ext/celt/gstceltdec.c40
-rw-r--r--ext/celt/gstceltenc.c6
-rw-r--r--ext/cog/gstcogcolorspace.c8
-rw-r--r--ext/cog/gstcogdownsample.c8
-rw-r--r--ext/cog/gstcogmse.c12
-rw-r--r--ext/cog/gstcogscale.c8
-rw-r--r--ext/cog/gstcolorconvert.c8
-rw-r--r--ext/cog/gstlogoinsert.c8
-rw-r--r--ext/curl/gstcurlsink.c3
-rw-r--r--ext/dc1394/gstdc1394.c8
-rw-r--r--ext/dirac/gstdiracdec.cc8
-rw-r--r--ext/dirac/gstdiracenc.cc8
-rw-r--r--ext/directfb/dfbvideosink.c273
-rw-r--r--ext/directfb/dfbvideosink.h25
-rw-r--r--ext/divx/gstdivxdec.c7
-rw-r--r--ext/divx/gstdivxenc.c7
-rw-r--r--ext/dts/gstdtsdec.c6
-rw-r--r--ext/faac/gstfaac.c82
-rw-r--r--ext/faad/gstfaad.c102
-rw-r--r--ext/flite/gstflitetestsrc.c68
-rw-r--r--ext/gme/gstgme.c118
-rw-r--r--ext/gsettings/gstswitchsink.c3
-rw-r--r--ext/gsettings/gstswitchsrc.c3
-rw-r--r--ext/gsm/gstgsmdec.c8
-rw-r--r--ext/gsm/gstgsmenc.c8
-rw-r--r--ext/hermes/gsthermescolorspace.c8
-rw-r--r--ext/jp2k/gstjasperdec.c8
-rw-r--r--ext/jp2k/gstjasperenc.c8
-rw-r--r--ext/kate/gstkatedec.c47
-rw-r--r--ext/kate/gstkateenc.c108
-rw-r--r--ext/kate/gstkateparse.c61
-rw-r--r--ext/kate/gstkatespu.c67
-rw-r--r--ext/kate/gstkatetag.c73
-rw-r--r--ext/kate/gstkatetiger.c10
-rw-r--r--ext/kate/gstkateutil.c64
-rw-r--r--ext/kate/gstkateutil.h2
-rw-r--r--ext/ladspa/Makefile.am4
-rw-r--r--ext/ladspa/gstladspa.c4
-rw-r--r--ext/lcs/gstcolorspace.c8
-rw-r--r--ext/libfame/gstlibfame.c7
-rw-r--r--ext/libmms/gstmms.c98
-rw-r--r--ext/libmms/gstmms.h2
-rw-r--r--ext/lv2/Makefile.am4
-rw-r--r--ext/lv2/gstlv2.c4
-rw-r--r--ext/mimic/gstmimdec.c6
-rw-r--r--ext/mimic/gstmimenc.c6
-rw-r--r--ext/modplug/gstmodplug.cc9
-rw-r--r--ext/mpeg2enc/gstmpeg2enc.cc7
-rw-r--r--ext/mplex/gstmplex.cc23
-rw-r--r--ext/musepack/gstmusepackdec.c7
-rw-r--r--ext/musicbrainz/gsttrm.c7
-rw-r--r--ext/mythtv/gstmythtvsrc.c3
-rw-r--r--ext/nas/nassink.c3
-rw-r--r--ext/neon/gstneonhttpsrc.c70
-rw-r--r--ext/neon/gstneonhttpsrc.h1
-rw-r--r--ext/openal/gstopenalsink.c5
-rw-r--r--ext/openal/gstopenalsrc.c4
-rw-r--r--ext/opencv/gstcvequalizehist.c6
-rw-r--r--ext/opencv/gstcvlaplace.c6
-rw-r--r--ext/opencv/gstcvsobel.c6
-rw-r--r--ext/opencv/gstedgedetect.c6
-rw-r--r--ext/opencv/gstfaceblur.c6
-rw-r--r--ext/opencv/gstfacedetect.c6
-rw-r--r--ext/opencv/gstmotioncells.c6
-rw-r--r--ext/opencv/gstopencvutils.c34
-rw-r--r--ext/opencv/gstopencvvideofilter.c25
-rw-r--r--ext/opencv/gstpyramidsegment.c6
-rw-r--r--ext/opencv/gsttemplatematch.c6
-rw-r--r--ext/opencv/gsttextoverlay.c6
-rw-r--r--ext/opus/gstopusdec.c101
-rw-r--r--ext/opus/gstopusenc.c124
-rw-r--r--ext/opus/gstopusheader.c59
-rw-r--r--ext/opus/gstopusparse.c17
-rw-r--r--ext/opus/gstrtpopusdepay.c43
-rw-r--r--ext/opus/gstrtpopusdepay.h6
-rw-r--r--ext/opus/gstrtpopuspay.c79
-rw-r--r--ext/opus/gstrtpopuspay.h6
-rw-r--r--ext/resindvd/resindvdbin.c24
-rw-r--r--ext/resindvd/resindvdsrc.c5
-rw-r--r--ext/resindvd/rsnaudiomunge.c7
-rw-r--r--ext/resindvd/rsndec.c16
-rw-r--r--ext/resindvd/rsnparsetter.c22
-rw-r--r--ext/resindvd/rsnstreamselector.c12
-rw-r--r--ext/resindvd/rsnwrappedbuffer.c123
-rw-r--r--ext/resindvd/rsnwrappedbuffer.h42
-rw-r--r--ext/rsvg/gstrsvgdec.c6
-rw-r--r--ext/rsvg/gstrsvgoverlay.c11
-rw-r--r--ext/rtmp/gstrtmpsink.c125
-rw-r--r--ext/rtmp/gstrtmpsrc.c102
-rw-r--r--ext/schroedinger/gstschrodec.c8
-rw-r--r--ext/schroedinger/gstschroenc.c8
-rw-r--r--ext/sdl/sdlaudiosink.c4
-rw-r--r--ext/sdl/sdlvideosink.c1
-rw-r--r--ext/shout/gstshout.c4
-rw-r--r--ext/snapshot/gstsnapshot.c8
-rw-r--r--ext/sndfile/gstsfsink.c8
-rw-r--r--ext/sndfile/gstsfsrc.c4
-rw-r--r--ext/soundtouch/Makefile.am2
-rw-r--r--ext/soundtouch/gstpitch.cc8
-rw-r--r--ext/soundtouch/plugin.c3
-rw-r--r--ext/spandsp/gstspanplc.c6
-rw-r--r--ext/spc/gstspc.c6
-rw-r--r--ext/swfdec/gstswfdec.c12
-rw-r--r--ext/teletextdec/gstteletextdec.c7
-rw-r--r--ext/timidity/gsttimidity.c6
-rw-r--r--ext/timidity/gstwildmidi.c6
-rw-r--r--ext/voamrwbenc/gstvoamrwbenc.c7
-rw-r--r--ext/vp8/gstvp8dec.c132
-rw-r--r--ext/vp8/gstvp8enc.c160
-rw-r--r--ext/xvid/gstxviddec.c7
-rw-r--r--ext/xvid/gstxvidenc.c6
-rw-r--r--ext/zbar/gstzbar.c106
-rw-r--r--ext/zbar/gstzbar.h10
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c43
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c12
-rw-r--r--gst-libs/gst/interfaces/photography.c16
-rw-r--r--gst-libs/gst/interfaces/photography.h6
-rw-r--r--gst-libs/gst/signalprocessor/Makefile.am4
-rw-r--r--gst-libs/gst/signalprocessor/gstsignalprocessor.c281
-rw-r--r--gst-libs/gst/signalprocessor/gstsignalprocessor.h2
-rw-r--r--gst-libs/gst/video/Makefile.am4
-rw-r--r--gst-libs/gst/video/gstbasevideocodec.c125
-rw-r--r--gst-libs/gst/video/gstbasevideocodec.h20
-rw-r--r--gst-libs/gst/video/gstbasevideodecoder.c467
-rw-r--r--gst-libs/gst/video/gstbasevideodecoder.h27
-rw-r--r--gst-libs/gst/video/gstbasevideoencoder.c333
-rw-r--r--gst-libs/gst/video/gstbasevideoencoder.h12
-rw-r--r--gst-libs/gst/video/gstsurfacebuffer.h93
-rw-r--r--gst-libs/gst/video/gstsurfaceconverter.c8
-rw-r--r--gst-libs/gst/video/gstsurfaceconverter.h11
-rw-r--r--gst-libs/gst/video/gstsurfacemeta.c (renamed from gst-libs/gst/video/gstsurfacebuffer.c)47
-rw-r--r--gst-libs/gst/video/gstsurfacemeta.h65
-rw-r--r--gst-libs/gst/video/videocontext.c21
-rw-r--r--gst-libs/gst/video/videocontext.h4
-rw-r--r--gst/adpcmdec/adpcmdec.c8
-rw-r--r--gst/adpcmenc/adpcmenc.c8
-rw-r--r--gst/aiff/aiffmux.c6
-rw-r--r--gst/aiff/aiffparse.c8
-rw-r--r--gst/asfmux/gstasfmux.c17
-rw-r--r--gst/asfmux/gstasfparse.c6
-rw-r--r--gst/asfmux/gstrtpasfpay.c8
-rw-r--r--gst/audiobuffer/gstaudioringbuffer.c8
-rw-r--r--gst/audiovisualizers/Makefile.am4
-rw-r--r--gst/audiovisualizers/gstbaseaudiovisualizer.c492
-rw-r--r--gst/audiovisualizers/gstbaseaudiovisualizer.h10
-rw-r--r--gst/audiovisualizers/gstspacescope.c48
-rw-r--r--gst/audiovisualizers/gstspectrascope.c61
-rw-r--r--gst/audiovisualizers/gstsynaescope.c52
-rw-r--r--gst/audiovisualizers/gstwavescope.c58
-rw-r--r--gst/audiovisualizers/plugin.c4
-rw-r--r--gst/autoconvert/gstautoconvert.c6
-rw-r--r--gst/autoconvert/gstautovideoconvert.c6
-rw-r--r--gst/bayer/gstbayer2rgb.c143
-rw-r--r--gst/bayer/gstrgb2bayer.c124
-rw-r--r--gst/bayer/gstrgb2bayer.h2
-rw-r--r--gst/camerabin/camerabinimage.c8
-rw-r--r--gst/camerabin/camerabinvideo.c21
-rw-r--r--gst/camerabin/gstcamerabin.c8
-rw-r--r--gst/camerabin/gstcamerabincolorbalance.c2
-rw-r--r--gst/camerabin/gstcamerabincolorbalance.h2
-rw-r--r--gst/camerabin/gstinputselector.c12
-rw-r--r--gst/camerabin2/camerabingeneral.c8
-rw-r--r--gst/camerabin2/gstcamerabin2.c108
-rw-r--r--gst/camerabin2/gstviewfinderbin.c27
-rw-r--r--gst/camerabin2/gstwrappercamerabinsrc.c111
-rw-r--r--gst/cdxaparse/gstcdxaparse.c8
-rw-r--r--gst/cdxaparse/gstvcdparse.c6
-rw-r--r--gst/chart/gstchart.c6
-rw-r--r--gst/coloreffects/Makefile.am2
-rw-r--r--gst/coloreffects/gstchromahold.c10
-rw-r--r--gst/coloreffects/gstcoloreffects.c8
-rw-r--r--gst/colorspace/Makefile.am35
-rw-r--r--gst/colorspace/colorspace.c2474
-rw-r--r--gst/colorspace/colorspace.h98
-rw-r--r--gst/colorspace/colorspace.vcproj154
-rw-r--r--gst/colorspace/gstcolorspace.c597
-rw-r--r--gst/colorspace/gstcolorspace.h69
-rw-r--r--gst/colorspace/gstcolorspaceorc-dist.c19395
-rw-r--r--gst/colorspace/gstcolorspaceorc-dist.h168
-rw-r--r--gst/colorspace/gstcolorspaceorc.orc1757
-rw-r--r--gst/dataurisrc/gstdataurisrc.c189
-rw-r--r--gst/dccp/gstdccpclientsink.c3
-rw-r--r--gst/dccp/gstdccpclientsrc.c3
-rw-r--r--gst/dccp/gstdccpserversink.c3
-rw-r--r--gst/dccp/gstdccpserversrc.c3
-rw-r--r--gst/debugutils/fpsdisplaysink.c4
-rw-r--r--gst/debugutils/gstchecksumsink.c8
-rw-r--r--gst/debugutils/gstchopmydata.c8
-rw-r--r--gst/debugutils/gstcompare.c10
-rw-r--r--gst/debugutils/gstdebugspy.c6
-rw-r--r--gst/dtmf/gstdtmfdetect.c6
-rw-r--r--gst/dtmf/gstdtmfsrc.c4
-rw-r--r--gst/dtmf/gstrtpdtmfdepay.c8
-rw-r--r--gst/dtmf/gstrtpdtmfsrc.c4
-rw-r--r--gst/dvbsuboverlay/gstdvbsuboverlay.c340
-rw-r--r--gst/dvbsuboverlay/gstdvbsuboverlay.h5
-rw-r--r--gst/dvdspu/gstdvdspu.c423
-rw-r--r--gst/dvdspu/gstdvdspu.h5
-rw-r--r--gst/dvdspu/gstspu-common.h1
-rw-r--r--gst/dvdspu/gstspu-pgs.c64
-rw-r--r--gst/dvdspu/gstspu-pgs.h2
-rw-r--r--gst/dvdspu/gstspu-vobsub-render.c78
-rw-r--r--gst/dvdspu/gstspu-vobsub.c16
-rw-r--r--gst/dvdspu/gstspu-vobsub.h2
-rw-r--r--gst/faceoverlay/gstfaceoverlay.c6
-rw-r--r--gst/festival/gstfestival.c8
-rw-r--r--gst/fieldanalysis/gstfieldanalysis.c8
-rw-r--r--gst/freeze/gstfreeze.c8
-rw-r--r--gst/frei0r/Makefile.am4
-rw-r--r--gst/frei0r/gstfrei0r.c3
-rw-r--r--gst/frei0r/gstfrei0rfilter.c4
-rw-r--r--gst/frei0r/gstfrei0rmixer.c2
-rw-r--r--gst/frei0r/gstfrei0rsrc.c3
-rw-r--r--gst/gaudieffects/Makefile.am4
-rw-r--r--gst/gaudieffects/gstburn.c8
-rw-r--r--gst/gaudieffects/gstchromium.c8
-rw-r--r--gst/gaudieffects/gstdilate.c8
-rw-r--r--gst/gaudieffects/gstdodge.c6
-rw-r--r--gst/gaudieffects/gstexclusion.c8
-rw-r--r--gst/gaudieffects/gstgaussblur.c8
-rw-r--r--gst/gaudieffects/gstplugin.c3
-rw-r--r--gst/gaudieffects/gstsolarize.c8
-rw-r--r--gst/geometrictransform/Makefile.am4
-rw-r--r--gst/geometrictransform/gstgeometrictransform.c10
-rw-r--r--gst/h264parse/gsth264parse.c8
-rw-r--r--gst/hdvparse/gsthdvparse.c7
-rw-r--r--gst/hls/gsthlsdemux.c8
-rw-r--r--gst/id3tag/gstid3mux.c7
-rw-r--r--gst/id3tag/id3tag.c4
-rw-r--r--gst/inter/gstinteraudiosink.c4
-rw-r--r--gst/inter/gstinteraudiosrc.c4
-rw-r--r--gst/inter/gstintervideosink.c4
-rw-r--r--gst/inter/gstintervideosrc.c4
-rw-r--r--gst/interlace/gstinterlace.c8
-rw-r--r--gst/ivfparse/gstivfparse.c6
-rw-r--r--gst/jp2kdecimator/gstjp2kdecimator.c8
-rw-r--r--gst/jp2kdecimator/jp2kcodestream.c16
-rw-r--r--gst/jpegformat/gstjifmux.c163
-rw-r--r--gst/jpegformat/gstjpegparse.c140
-rw-r--r--gst/legacyresample/gstlegacyresample.c8
-rw-r--r--gst/librfb/gstrfbsrc.c4
-rw-r--r--gst/liveadder/liveadder.c12
-rw-r--r--gst/mixmatrix/mixmatrix.c16
-rw-r--r--gst/mpeg1sys/gstmpeg1systemencode.c15
-rw-r--r--gst/mpegdemux/mpegtsparse.c19
-rw-r--r--gst/mpegpsmux/mpegpsmux.c10
-rw-r--r--gst/mpegtsdemux/mpegtsbase.c249
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.c238
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.h10
-rw-r--r--gst/mpegtsdemux/mpegtsparse.c63
-rw-r--r--gst/mpegtsdemux/tsdemux.c270
-rw-r--r--gst/mpegtsdemux/tsdemux.h1
-rw-r--r--gst/mpegtsmux/mpegtsmux.c10
-rw-r--r--gst/mpegvideoparse/mpegvideoparse.c7
-rw-r--r--gst/mve/gstmvedemux.c12
-rw-r--r--gst/mve/gstmvemux.c11
-rw-r--r--gst/mxf/mxfaes-bwf.c29
-rw-r--r--gst/mxf/mxfalaw.c4
-rw-r--r--gst/mxf/mxfdemux.c56
-rw-r--r--gst/mxf/mxfdms1.c298
-rw-r--r--gst/mxf/mxfdv-dif.c4
-rw-r--r--gst/mxf/mxfjpeg2000.c4
-rw-r--r--gst/mxf/mxfmetadata.c156
-rw-r--r--gst/mxf/mxfmetadata.h6
-rw-r--r--gst/mxf/mxfmpeg.c14
-rw-r--r--gst/mxf/mxfmux.c43
-rw-r--r--gst/mxf/mxfup.c12
-rw-r--r--gst/mxf/mxfvc3.c4
-rw-r--r--gst/nsf/gstnsf.c6
-rw-r--r--gst/nuvdemux/gstnuvdemux.c12
-rw-r--r--gst/overlay/gstoverlay.c16
-rw-r--r--gst/patchdetect/gstpatchdetect.c8
-rw-r--r--gst/pcapparse/gstirtspparse.c7
-rw-r--r--gst/pcapparse/gstpcapparse.c7
-rw-r--r--gst/pnm/gstpnmdec.c8
-rw-r--r--gst/pnm/gstpnmenc.c8
-rw-r--r--gst/rawparse/gstrawparse.c19
-rw-r--r--gst/rawparse/gstrawparse.h2
-rw-r--r--gst/real/gstrealaudiodec.c4
-rw-r--r--gst/real/gstrealvideodec.c4
-rw-r--r--gst/removesilence/gstremovesilence.c7
-rw-r--r--gst/rtpmux/gstrtpdtmfmux.c12
-rw-r--r--gst/rtpmux/gstrtpmux.c12
-rw-r--r--gst/rtpvp8/gstrtpvp8.c2
-rw-r--r--gst/rtpvp8/gstrtpvp8depay.c8
-rw-r--r--gst/rtpvp8/gstrtpvp8pay.c8
-rw-r--r--gst/scaletempo/gstscaletempo.c7
-rw-r--r--gst/sdi/gstsdidemux.c8
-rw-r--r--gst/sdi/gstsdimux.c8
-rw-r--r--gst/sdp/gstsdpdemux.c76
-rw-r--r--gst/segmentclip/gstaudiosegmentclip.c8
-rw-r--r--gst/segmentclip/gstvideosegmentclip.c8
-rw-r--r--gst/siren/gstsirendec.c6
-rw-r--r--gst/siren/gstsirenenc.c6
-rw-r--r--gst/smooth/gstsmooth.c8
-rw-r--r--gst/speed/gstspeed.c8
-rw-r--r--gst/stereo/Makefile.am4
-rw-r--r--gst/stereo/gststereo.c2
-rw-r--r--gst/subenc/Makefile.am4
-rw-r--r--gst/subenc/gstsrtenc.c9
-rw-r--r--gst/subenc/gstwebvttenc.c9
-rw-r--r--gst/tta/gstttadec.c6
-rw-r--r--gst/tta/gstttaparse.c6
-rw-r--r--gst/vbidec/gstvbidec.c8
-rw-r--r--gst/videodrop/gstvideodrop.c8
-rw-r--r--gst/videofilters/gstvideofilter2.c13
-rw-r--r--gst/videomaxrate/videomaxrate.c8
-rw-r--r--gst/videomeasure/gstvideomeasure_collector.c8
-rw-r--r--gst/videomeasure/gstvideomeasure_ssim.c28
-rw-r--r--gst/videoparsers/gstdiracparse.c82
-rw-r--r--gst/videoparsers/gsth263parse.c57
-rw-r--r--gst/videoparsers/gsth264parse.c247
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.c110
-rw-r--r--gst/videoparsers/gstmpegvideoparse.c122
-rw-r--r--gst/videoparsers/h263parse.c8
-rw-r--r--gst/videosignal/gstvideoanalyse.c8
-rw-r--r--gst/videosignal/gstvideodetect.c8
-rw-r--r--gst/videosignal/gstvideomark.c8
-rw-r--r--gst/vmnc/vmncdec.c8
-rw-r--r--gst/y4m/gsty4mdec.c249
-rw-r--r--gst/y4m/gsty4mdec.h15
-rw-r--r--sys/Makefile.am10
-rw-r--r--sys/acmenc/acmenc.c8
-rw-r--r--sys/acmmp3dec/acmmp3dec.c8
-rw-r--r--sys/applemedia/avfvideosrc.m3
-rw-r--r--sys/applemedia/celvideosrc.c3
-rw-r--r--sys/applemedia/miovideosrc.c3
-rw-r--r--sys/applemedia/qtkitvideosrc.m3
-rw-r--r--sys/applemedia/vtdec.c2
-rw-r--r--sys/applemedia/vtenc.c2
-rw-r--r--sys/applemedia/vth264decbin.c8
-rw-r--r--sys/applemedia/vth264encbin.c8
-rw-r--r--sys/avc/gstavcsrc.cpp4
-rw-r--r--sys/d3dvideosink/d3dvideosink.c4
-rw-r--r--sys/decklink/gstdecklinksink.cpp10
-rw-r--r--sys/decklink/gstdecklinksrc.cpp13
-rw-r--r--sys/decklink/win/DeckLinkAPI_i.c212
-rw-r--r--sys/directdraw/gstdirectdrawsink.c4
-rw-r--r--sys/directsound/gstdirectsoundsrc.c4
-rw-r--r--sys/dshowdecwrapper/gstdshowaudiodec.cpp3
-rw-r--r--sys/dshowdecwrapper/gstdshowvideodec.cpp3
-rw-r--r--sys/dshowsrcwrapper/gstdshowaudiosrc.cpp3
-rw-r--r--sys/dshowsrcwrapper/gstdshowvideosrc.cpp3
-rw-r--r--sys/dshowvideosink/dshowvideosink.cpp5
-rw-r--r--sys/dvb/dvbbasebin.c147
-rw-r--r--sys/dvb/gstdvbsrc.c52
-rw-r--r--sys/dvb/parsechannels.c4
-rw-r--r--sys/dxr3/dxr3audiosink.c15
-rw-r--r--sys/dxr3/dxr3spusink.c10
-rw-r--r--sys/dxr3/dxr3videosink.c11
-rw-r--r--sys/fbdev/gstfbdevsink.c4
-rw-r--r--sys/linsys/gstlinsyssdisink.c4
-rw-r--r--sys/linsys/gstlinsyssdisrc.c4
-rw-r--r--sys/osxvideo/osxvideosrc.c3
-rw-r--r--sys/pvr2d/gstpvr.c28
-rw-r--r--sys/pvr2d/gstpvr.h4
-rw-r--r--sys/pvr2d/gstpvrbufferpool.c517
-rw-r--r--sys/pvr2d/gstpvrbufferpool.h87
-rw-r--r--sys/pvr2d/gstpvrvideosink.c906
-rw-r--r--sys/pvr2d/gstpvrvideosink.h20
-rw-r--r--sys/qcam/gstqcamsrc.c4
-rw-r--r--sys/qtwrapper/audiodecoders.c6
-rw-r--r--sys/qtwrapper/videodecoders.c3
-rw-r--r--sys/shm/gstshmsink.c3
-rw-r--r--sys/shm/gstshmsrc.c3
-rw-r--r--sys/vcd/vcdsrc.c3
-rw-r--r--sys/vdpau/gstvdp/gstvdpdecoder.c1
-rw-r--r--sys/vdpau/gstvdpsink.c4
-rw-r--r--sys/vdpau/gstvdpvideopostprocess.c2
-rw-r--r--sys/vdpau/h264/gstvdph264dec.c4
-rw-r--r--sys/vdpau/mpeg/gstvdpmpegdec.c4
-rw-r--r--sys/vdpau/mpeg4/gstvdpmpeg4dec.c4
-rw-r--r--sys/wasapi/gstwasapisink.c4
-rw-r--r--sys/wasapi/gstwasapisrc.c3
-rw-r--r--sys/wininet/gstwininetsrc.c3
-rw-r--r--sys/winks/gstksvideosrc.c9
-rw-r--r--sys/winscreencap/gstdx9screencapsrc.c3
-rw-r--r--sys/winscreencap/gstgdiscreencapsrc.c3
-rw-r--r--tests/check/Makefile.am4
-rw-r--r--tests/check/elements/asfmux.c10
-rw-r--r--tests/check/elements/autoconvert.c20
-rw-r--r--tests/check/elements/baseaudiovisualizer.c12
-rw-r--r--tests/check/elements/camerabin2.c140
-rw-r--r--tests/check/elements/legacyresample.c13
-rw-r--r--tests/check/elements/mplex.c4
-rw-r--r--tests/check/elements/parser.c41
-rw-r--r--tests/check/elements/vp8dec.c5
-rw-r--r--tests/check/elements/vp8enc.c5
-rw-r--r--tests/check/pipelines/colorspace.c9
-rw-r--r--tests/examples/camerabin/Makefile.am2
-rw-r--r--tests/examples/camerabin/gst-camera-perf.c35
-rw-r--r--tests/examples/camerabin/gst-camera.c35
-rw-r--r--tests/examples/camerabin/gst-camerabin-test.c31
-rw-r--r--tests/examples/camerabin2/Makefile.am1
-rw-r--r--tests/examples/camerabin2/gst-camera2.c6
-rw-r--r--tests/examples/camerabin2/gst-camerabin2-test.c45
-rw-r--r--tests/examples/mxf/mxfdemux-structure.c10
-rw-r--r--tests/examples/opencv/gst_element_print_properties.c4
-rw-r--r--tests/examples/opencv/gstmotioncells_dynamic_test.c1
-rw-r--r--tests/examples/scaletempo/demo-player.c37
-rw-r--r--tests/icles/pitch-test.c8
-rw-r--r--tools/element-templates/element2
-rw-r--r--tools/element-templates/sinkpad4
-rw-r--r--tools/element-templates/sinkpad-simple4
-rw-r--r--tools/element-templates/srcpad4
-rw-r--r--tools/element-templates/srcpad-simple4
-rw-r--r--win32/common/config.h4
423 files changed, 7218 insertions, 31556 deletions
diff --git a/common b/common
-Subproject 11f0cd5a3fba36f85cf3e434150bfe66b1bf08d
+Subproject 0546e5881d1ec7137c71d35247729e28c1a4ab6
diff --git a/configure.ac b/configure.ac
index 0a35b0be5..4d179209c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.60)
dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, cvs and prerelease does Werror too
-AC_INIT(GStreamer Bad Plug-ins, 0.10.22.1,
+AC_INIT(GStreamer Bad Plug-ins, 0.11.0.1,
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
gst-plugins-bad)
@@ -38,7 +38,7 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],
dnl our libraries and install dirs use major.minor as a version
GST_MAJORMINOR=$GST_PLUGINS_BAD_VERSION_MAJOR.$GST_PLUGINS_BAD_VERSION_MINOR
dnl we override it here if we need to for the release candidate of new series
-GST_MAJORMINOR=0.10
+GST_MAJORMINOR=0.11
AC_SUBST(GST_MAJORMINOR)
AG_GST_LIBTOOL_PREPARE
@@ -52,8 +52,8 @@ AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
dnl *** required versions of GStreamer stuff ***
-GST_REQ=0.10.35.1
-GSTPB_REQ=0.10.35.1
+GST_REQ=0.11.0.1
+GSTPB_REQ=0.11.0.1
dnl *** autotools stuff ****
@@ -194,9 +194,9 @@ AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
AG_GST_CHECK_GST_PLUGINS_BASE($GST_MAJORMINOR, [$GSTPB_REQ], yes)
dnl check for uninstalled plugin directories for unit tests
-AG_GST_CHECK_GST_PLUGINS_GOOD($GST_MAJORMINOR, [0.10.25])
-AG_GST_CHECK_GST_PLUGINS_UGLY($GST_MAJORMINOR, [0.10.16])
-AG_GST_CHECK_GST_PLUGINS_FFMPEG($GST_MAJORMINOR, [0.10.11])
+AG_GST_CHECK_GST_PLUGINS_GOOD($GST_MAJORMINOR, [0.11.0])
+AG_GST_CHECK_GST_PLUGINS_UGLY($GST_MAJORMINOR, [0.11.0])
+AG_GST_CHECK_GST_PLUGINS_FFMPEG($GST_MAJORMINOR, [0.11.0])
dnl Check for documentation xrefs
GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
@@ -293,6 +293,24 @@ dnl used in examples
AG_GST_DEFAULT_ELEMENTS
dnl *** plug-ins to include ***
+dnl Non ported plugins (non-dependant, then dependant)
+dnl Make sure you have a space before and after all plugins
+GST_PLUGINS_NONPORTED=" adpcmdec adpcmenc aiff asfmux \
+ autoconvert camerabin cdxaparse coloreffects \
+ dccp debugutils dtmf faceoverlay festival \
+ fieldanalysis freeverb freeze frei0r gaudieffects geometrictransform h264parse \
+ hdvparse hls id3tag inter interlace ivfparse jpegformat jp2kdecimator \
+ kate liveadder legacyresample librfb mpegdemux mpegtsmux \
+ mpegpsmux mpegvideoparse mve mxf mythtv nsf nuvdemux \
+ patchdetect pcapparse pnm rawparse real removesilence rtpmux rtpvp8 scaletempo \
+ sdi segmentclip siren speed subenc stereo tta videofilters \
+ videomaxrate videomeasure videosignal vmnc \
+ decklink fbdev linsys shm vcd \
+ voaacenc apexsink bz2 cdaudio celt cog curl dc1394 dirac directfb dts resindvd \
+ gsettings gsm jp2k ladspa modplug mpeg2enc mplex mimic \
+ musepack musicbrainz nas neon ofa openal opencv rsvg schro sdl smooth sndfile soundtouch spandsp timidity \
+ wildmidi xvid apple_media "
+AC_SUBST(GST_PLUGINS_NONPORTED)
dnl these are all the gst plug-ins, compilable without additional libs
AG_GST_CHECK_PLUGIN(adpcmdec)
@@ -306,7 +324,6 @@ AG_GST_CHECK_PLUGIN(camerabin)
AG_GST_CHECK_PLUGIN(camerabin2)
AG_GST_CHECK_PLUGIN(cdxaparse)
AG_GST_CHECK_PLUGIN(coloreffects)
-AG_GST_CHECK_PLUGIN(colorspace)
AG_GST_CHECK_PLUGIN(dataurisrc)
AG_GST_CHECK_PLUGIN(dccp)
AG_GST_CHECK_PLUGIN(debugutils)
@@ -1870,6 +1887,7 @@ dnl FIXME: do we want to rename to GST_ALL_* ?
dnl prefer internal headers to already installed ones
dnl also add builddir include for enumtypes and marshal
dnl add GST_OPTION_CFLAGS, but overridable
+GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
GST_CXXFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CXXFLAGS)"
GST_CFLAGS="$GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
AC_SUBST(GST_CFLAGS)
@@ -1917,7 +1935,6 @@ gst/bayer/Makefile
gst/camerabin/Makefile
gst/camerabin2/Makefile
gst/cdxaparse/Makefile
-gst/colorspace/Makefile
gst/coloreffects/Makefile
gst/dataurisrc/Makefile
gst/dccp/Makefile
diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
index 1ab46ff3b..016b843c8 100644
--- a/docs/libs/Makefile.am
+++ b/docs/libs/Makefile.am
@@ -49,14 +49,14 @@ extra_files =
# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
# contains GtkObjects/GObjects and you want to document signals and properties.
-GTKDOC_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS)
+GTKDOC_CFLAGS = -DGST_USE_UNSTABLE_API $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS)
GTKDOC_LIBS = \
$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/signalprocessor/libgstsignalprocessor-@GST_MAJORMINOR@.la \
$(top_builddir)/gst-libs/gst/video/libgstbasevideo-@GST_MAJORMINOR@.la \
- $(GST_BASE_LIBS)
+ $(GST_BASE_LIBS)
GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt
index b949137df..ca341d3e6 100644
--- a/docs/libs/gst-plugins-bad-libs-sections.txt
+++ b/docs/libs/gst-plugins-bad-libs-sections.txt
@@ -248,7 +248,7 @@ GST_PHOTOGRAPHY
GST_IS_PHOTOGRAPHY
GST_TYPE_PHOTOGRAPHY
gst_photography_get_type
-GST_PHOTOGRAPHY_GET_IFACE
+GST_PHOTOGRAPHY_GET_INTERFACE
</SECTION>
<SECTION>
diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt
index d7fc96e95..4e9ec0b88 100644
--- a/docs/plugins/gst-plugins-bad-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt
@@ -1768,7 +1768,7 @@ gst_photography_get_config
<SUBSECTION Standard>
GST_PHOTOGRAPHY
GST_IS_PHOTOGRAPHY
-GST_PHOTOGRAPHY_GET_IFACE
+GST_PHOTOGRAPHY_GET_INTERFACE
gst_photography_get_type
</SECTION>
diff --git a/ext/apexsink/gstapexsink.c b/ext/apexsink/gstapexsink.c
index 5b3af3db1..9dec7bd6e 100644
--- a/ext/apexsink/gstapexsink.c
+++ b/ext/apexsink/gstapexsink.c
@@ -172,7 +172,7 @@ static GstStateChangeReturn gst_apexsink_change_state (GstElement * element,
static void gst_apexsink_interfaces_init (GType type);
static void gst_apexsink_implements_interface_init (GstImplementsInterfaceClass
* iface);
-static void gst_apexsink_mixer_interface_init (GstMixerClass * iface);
+static void gst_apexsink_mixer_interface_init (GstMixerInterface * iface);
static gboolean gst_apexsink_interface_supported (GstImplementsInterface *
iface, GType iface_type);
@@ -208,7 +208,7 @@ gst_apexsink_implements_interface_init (GstImplementsInterfaceClass * iface)
}
static void
-gst_apexsink_mixer_interface_init (GstMixerClass * iface)
+gst_apexsink_mixer_interface_init (GstMixerInterface * iface)
{
GST_MIXER_TYPE (iface) = GST_MIXER_SOFTWARE;
@@ -265,8 +265,8 @@ gst_apexsink_base_init (gpointer g_class)
"Apple AirPort Express Audio Sink", "Sink/Audio/Wireless",
"Output stream to an AirPort Express",
"Jérémie Bernard [GRemi] <gremimail@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_apexsink_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_apexsink_sink_factory));
}
/* sink class init */
diff --git a/ext/arts/gst_arts.c b/ext/arts/gst_arts.c
index 24a0aa348..90742289d 100644
--- a/ext/arts/gst_arts.c
+++ b/ext/arts/gst_arts.c
@@ -111,8 +111,10 @@ gst_arts_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sink_temp);
- gst_element_class_add_static_pad_template (element_class, &src_temp);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_temp));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_temp));
gst_element_class_set_details_simple (element_class, "aRts plugin",
"Filter/Audio", "aRts wrapper filter",
"Erik Walthinsen <omega@temple-baptist.com, "
diff --git a/ext/artsd/gstartsdsink.c b/ext/artsd/gstartsdsink.c
index a27b3ebb6..79dd28d85 100644
--- a/ext/artsd/gstartsdsink.c
+++ b/ext/artsd/gstartsdsink.c
@@ -97,7 +97,8 @@ gst_artsdsink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "aRtsd audio sink",
"Sink/Audio",
"Plays audio to an aRts server",
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
index b71e8e4d1..19016f5f6 100644
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -57,23 +57,19 @@ enum
PROP_EMBEDDEDFONTS
};
+#define FORMATS "{ RGB, BGR, xRGB, xBGR, RGBx, BGRx, I420 }"
+
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";"
- GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (FORMATS))
);
static GstStaticPadTemplate video_sink_factory =
- GST_STATIC_PAD_TEMPLATE ("video_sink",
+GST_STATIC_PAD_TEMPLATE ("video_sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";"
- GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (FORMATS))
);
static GstStaticPadTemplate text_sink_factory =
@@ -93,42 +89,30 @@ static void gst_ass_render_finalize (GObject * object);
static GstStateChangeReturn gst_ass_render_change_state (GstElement * element,
GstStateChange transition);
-GST_BOILERPLATE (GstAssRender, gst_ass_render, GstElement, GST_TYPE_ELEMENT);
+#define gst_ass_render_parent_class parent_class
+G_DEFINE_TYPE (GstAssRender, gst_ass_render, GST_TYPE_ELEMENT);
-static GstCaps *gst_ass_render_getcaps (GstPad * pad);
+static GstCaps *gst_ass_render_getcaps (GstPad * pad, GstCaps * filter);
static gboolean gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps);
static gboolean gst_ass_render_setcaps_text (GstPad * pad, GstCaps * caps);
-static GstFlowReturn gst_ass_render_chain_video (GstPad * pad, GstBuffer * buf);
-static GstFlowReturn gst_ass_render_chain_text (GstPad * pad, GstBuffer * buf);
-
-static gboolean gst_ass_render_event_video (GstPad * pad, GstEvent * event);
-static gboolean gst_ass_render_event_text (GstPad * pad, GstEvent * event);
-static gboolean gst_ass_render_event_src (GstPad * pad, GstEvent * event);
-
-static GstFlowReturn gst_ass_render_bufferalloc_video (GstPad * pad,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buffer);
-
-static gboolean gst_ass_render_query_src (GstPad * pad, GstQuery * query);
-
-static void
-gst_ass_render_base_init (gpointer gclass)
-{
- GstElementClass *element_class = (GstElementClass *) gclass;
+static GstFlowReturn gst_ass_render_chain_video (GstPad * pad,
+ GstObject * parent, GstBuffer * buf);
+static GstFlowReturn gst_ass_render_chain_text (GstPad * pad,
+ GstObject * parent, GstBuffer * buf);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &text_sink_factory);
+static gboolean gst_ass_render_event_video (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_ass_render_event_text (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_ass_render_event_src (GstPad * pad, GstObject * parent,
+ GstEvent * event);
- gst_element_class_set_details_simple (element_class, "ASS/SSA Render",
- "Mixer/Video/Overlay/Subtitle",
- "Renders ASS/SSA subtitles with libass",
- "Benjamin Schmitz <vortex@wolpzone.de>, "
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
+static gboolean gst_ass_render_query_video (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static gboolean gst_ass_render_query_src (GstPad * pad, GstObject * parent,
+ GstQuery * query);
/* initialize the plugin's class */
static void
@@ -152,6 +136,19 @@ gst_ass_render_class_init (GstAssRenderClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_ass_render_change_state);
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&video_sink_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&text_sink_factory));
+
+ gst_element_class_set_details_simple (gstelement_class, "ASS/SSA Render",
+ "Mixer/Video/Overlay/Subtitle",
+ "Renders ASS/SSA subtitles with libass",
+ "Benjamin Schmitz <vortex@wolpzone.de>, "
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
}
#if defined(LIBASS_VERSION) && LIBASS_VERSION >= 0x00907000
@@ -177,7 +174,7 @@ _libass_message_cb (gint level, const gchar * fmt, va_list args,
#endif
static void
-gst_ass_render_init (GstAssRender * render, GstAssRenderClass * gclass)
+gst_ass_render_init (GstAssRender * render)
{
GST_DEBUG_OBJECT (render, "init");
@@ -187,16 +184,6 @@ gst_ass_render_init (GstAssRender * render, GstAssRenderClass * gclass)
render->text_sinkpad =
gst_pad_new_from_static_template (&text_sink_factory, "text_sink");
- gst_pad_set_setcaps_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_ass_render_setcaps_video));
- gst_pad_set_setcaps_function (render->text_sinkpad,
- GST_DEBUG_FUNCPTR (gst_ass_render_setcaps_text));
-
- gst_pad_set_getcaps_function (render->srcpad,
- GST_DEBUG_FUNCPTR (gst_ass_render_getcaps));
- gst_pad_set_getcaps_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_ass_render_getcaps));
-
gst_pad_set_chain_function (render->video_sinkpad,
GST_DEBUG_FUNCPTR (gst_ass_render_chain_video));
gst_pad_set_chain_function (render->text_sinkpad,
@@ -209,18 +196,16 @@ gst_ass_render_init (GstAssRender * render, GstAssRenderClass * gclass)
gst_pad_set_event_function (render->srcpad,
GST_DEBUG_FUNCPTR (gst_ass_render_event_src));
- gst_pad_set_bufferalloc_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_ass_render_bufferalloc_video));
-
gst_pad_set_query_function (render->srcpad,
GST_DEBUG_FUNCPTR (gst_ass_render_query_src));
+ gst_pad_set_query_function (render->video_sinkpad,
+ GST_DEBUG_FUNCPTR (gst_ass_render_query_video));
gst_element_add_pad (GST_ELEMENT (render), render->srcpad);
gst_element_add_pad (GST_ELEMENT (render), render->video_sinkpad);
gst_element_add_pad (GST_ELEMENT (render), render->text_sinkpad);
- render->width = 0;
- render->height = 0;
+ gst_video_info_init (&render->info);
render->subtitle_mutex = g_mutex_new ();
render->subtitle_cond = g_cond_new ();
@@ -372,21 +357,34 @@ gst_ass_render_change_state (GstElement * element, GstStateChange transition)
}
static gboolean
-gst_ass_render_query_src (GstPad * pad, GstQuery * query)
+gst_ass_render_query_src (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstAssRender *render = GST_ASS_RENDER (gst_pad_get_parent (pad));
- gboolean ret;
+ gboolean res = FALSE;
- ret = gst_pad_peer_query (render->video_sinkpad, query);
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
- gst_object_unref (render);
- return ret;
+ gst_query_parse_caps (query, &filter);
+ caps = gst_ass_render_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
}
static gboolean
-gst_ass_render_event_src (GstPad * pad, GstEvent * event)
+gst_ass_render_event_src (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstAssRender *render = GST_ASS_RENDER (gst_pad_get_parent (pad));
+ GstAssRender *render = GST_ASS_RENDER (parent);
gboolean ret = FALSE;
switch (GST_EVENT_TYPE (event)) {
@@ -427,13 +425,11 @@ gst_ass_render_event_src (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (render);
-
return ret;
}
static GstCaps *
-gst_ass_render_getcaps (GstPad * pad)
+gst_ass_render_getcaps (GstPad * pad, GstCaps * filter)
{
GstAssRender *render = GST_ASS_RENDER (gst_pad_get_parent (pad));
GstPad *otherpad;
@@ -445,7 +441,7 @@ gst_ass_render_getcaps (GstPad * pad)
otherpad = render->srcpad;
/* we can do what the peer can */
- caps = gst_pad_peer_get_caps (otherpad);
+ caps = gst_pad_peer_query_caps (otherpad, filter);
if (caps) {
GstCaps *temp;
const GstCaps *templ;
@@ -468,19 +464,24 @@ gst_ass_render_getcaps (GstPad * pad)
#define CREATE_RGB_BLIT_FUNCTION(name,bpp,R,G,B) \
static void \
-blit_##name (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer) \
+blit_##name (GstAssRender * render, ASS_Image * ass_image, GstVideoFrame * frame) \
{ \
guint counter = 0; \
gint alpha, r, g, b, k; \
const guint8 *src; \
- guint8 *dst; \
+ guint8 *dst, *data; \
gint x, y, w, h; \
- gint width = render->width; \
- gint height = render->height; \
- gint dst_stride = GST_ROUND_UP_4 (width * bpp); \
+ gint width; \
+ gint height; \
+ gint dst_stride; \
gint dst_skip; \
gint src_skip; \
\
+ width = GST_VIDEO_FRAME_WIDTH (frame); \
+ height = GST_VIDEO_FRAME_HEIGHT (frame); \
+ dst_stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0); \
+ data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); \
+ \
while (ass_image) { \
if (ass_image->dst_y > height || ass_image->dst_x > width) \
goto next; \
@@ -491,7 +492,7 @@ blit_##name (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer) \
g = ((ass_image->color) >> 16) & 0xff; \
b = ((ass_image->color) >> 8) & 0xff; \
src = ass_image->bitmap; \
- dst = buffer->data + ass_image->dst_y * dst_stride + ass_image->dst_x * bpp; \
+ dst = data + ass_image->dst_y * dst_stride + ass_image->dst_x * bpp; \
\
w = MIN (ass_image->w, width - ass_image->dst_x); \
h = MIN (ass_image->h, height - ass_image->dst_y); \
@@ -561,7 +562,7 @@ rgb_to_v (gint r, gint g, gint b)
}
static void
-blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer)
+blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstVideoFrame * frame)
{
guint counter = 0;
gint alpha, r, g, b, k, k2;
@@ -574,25 +575,20 @@ blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer)
gint w2;
gint src_stride;
#endif
- gint width = render->width;
- gint height = render->height;
- gint y_offset, y_stride;
- gint u_offset, u_stride;
- gint v_offset, v_stride;
-
- y_offset =
- gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, 0, width,
- height);
- u_offset =
- gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, 1, width,
- height);
- v_offset =
- gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, 2, width,
- height);
-
- y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width);
- u_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width);
- v_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 2, width);
+ gint width, height;
+ guint8 *y_data, *u_data, *v_data;
+ gint y_stride, u_stride, v_stride;
+
+ width = GST_VIDEO_FRAME_WIDTH (frame);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
+
+ y_data = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ u_data = GST_VIDEO_FRAME_COMP_DATA (frame, 1);
+ v_data = GST_VIDEO_FRAME_COMP_DATA (frame, 2);
+
+ y_stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ u_stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 1);
+ v_stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 2);
while (ass_image) {
if (ass_image->dst_y > height || ass_image->dst_x > width)
@@ -618,19 +614,14 @@ blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer)
#endif
src = ass_image->bitmap;
- dst_y =
- buffer->data + y_offset + ass_image->dst_y * y_stride +
- ass_image->dst_x;
- dst_u =
- buffer->data + u_offset + (ass_image->dst_y / 2) * u_stride +
- ass_image->dst_x / 2;
- dst_v =
- buffer->data + v_offset + (ass_image->dst_y / 2) * v_stride +
- ass_image->dst_x / 2;
+#if 0
+ dst_y = y_data + ass_image->dst_y * y_stride + ass_image->dst_x;
+ dst_u = u_data + (ass_image->dst_y / 2) * u_stride + ass_image->dst_x / 2;
+ dst_v = v_data + (ass_image->dst_y / 2) * v_stride + ass_image->dst_x / 2;
+#endif
for (y = 0; y < h; y++) {
- dst_y = buffer->data + y_offset + (ass_image->dst_y + y) * y_stride +
- ass_image->dst_x;
+ dst_y = y_data + (ass_image->dst_y + y) * y_stride + ass_image->dst_x;
for (x = 0; x < w; x++) {
k = src[y * ass_image->w + x] * alpha / 255;
dst_y[x] = (k * Y + (255 - k) * dst_y[x]) / 255;
@@ -639,12 +630,8 @@ blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer)
y = 0;
if (ass_image->dst_y & 1) {
- dst_u =
- buffer->data + u_offset + (ass_image->dst_y / 2) * u_stride +
- ass_image->dst_x / 2;
- dst_v =
- buffer->data + v_offset + (ass_image->dst_y / 2) * v_stride +
- ass_image->dst_x / 2;
+ dst_u = u_data + (ass_image->dst_y / 2) * u_stride + ass_image->dst_x / 2;
+ dst_v = v_data + (ass_image->dst_y / 2) * v_stride + ass_image->dst_x / 2;
x = 0;
if (ass_image->dst_x & 1) {
k2 = src[y * ass_image->w + x] * alpha / 255;
@@ -673,11 +660,9 @@ blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer)
}
for (; y < h - 1; y += 2) {
- dst_u =
- buffer->data + u_offset + ((ass_image->dst_y + y) / 2) * u_stride +
+ dst_u = u_data + ((ass_image->dst_y + y) / 2) * u_stride +
ass_image->dst_x / 2;
- dst_v =
- buffer->data + v_offset + ((ass_image->dst_y + y) / 2) * v_stride +
+ dst_v = v_data + ((ass_image->dst_y + y) / 2) * v_stride +
ass_image->dst_x / 2;
x = 0;
if (ass_image->dst_x & 1) {
@@ -711,12 +696,8 @@ blit_i420 (GstAssRender * render, ASS_Image * ass_image, GstBuffer * buffer)
}
if (y < h) {
- dst_u =
- buffer->data + u_offset + (ass_image->dst_y / 2) * u_stride +
- ass_image->dst_x / 2;
- dst_v =
- buffer->data + v_offset + (ass_image->dst_y / 2) * v_stride +
- ass_image->dst_x / 2;
+ dst_u = u_data + (ass_image->dst_y / 2) * u_stride + ass_image->dst_x / 2;
+ dst_v = v_data + (ass_image->dst_y / 2) * v_stride + ass_image->dst_x / 2;
x = 0;
if (ass_image->dst_x & 1) {
k2 = src[y * ass_image->w + x] * alpha / 255;
@@ -761,25 +742,18 @@ gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps)
gboolean ret = FALSE;
gint par_n = 1, par_d = 1;
gdouble dar;
+ GstVideoInfo info;
- render->width = 0;
- render->height = 0;
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
- if (!gst_video_format_parse_caps (caps, &render->format, &render->width,
- &render->height) ||
- !gst_video_parse_caps_framerate (caps, &render->fps_n, &render->fps_d)) {
- GST_ERROR_OBJECT (render, "Can't parse caps: %" GST_PTR_FORMAT, caps);
- ret = FALSE;
- goto out;
- }
-
- gst_video_parse_caps_pixel_aspect_ratio (caps, &par_n, &par_d);
+ render->info = info;
ret = gst_pad_set_caps (render->srcpad, caps);
if (!ret)
goto out;
- switch (render->format) {
+ switch (GST_VIDEO_INFO_FORMAT (&info)) {
case GST_VIDEO_FORMAT_RGB:
render->blit = blit_rgb;
break;
@@ -807,15 +781,15 @@ gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps)
}
g_mutex_lock (render->ass_mutex);
- ass_set_frame_size (render->ass_renderer, render->width, render->height);
+ ass_set_frame_size (render->ass_renderer, info.width, info.height);
- dar = (((gdouble) par_n) * ((gdouble) render->width))
- / (((gdouble) par_d) * ((gdouble) render->height));
+ dar = (((gdouble) par_n) * ((gdouble) info.width))
+ / (((gdouble) par_d) * ((gdouble) info.height));
#if !defined(LIBASS_VERSION) || LIBASS_VERSION < 0x00907000
ass_set_aspect_ratio (render->ass_renderer, dar);
#else
ass_set_aspect_ratio (render->ass_renderer,
- dar, ((gdouble) render->width) / ((gdouble) render->height));
+ dar, ((gdouble) info.width) / ((gdouble) info.height));
#endif
ass_set_font_scale (render->ass_renderer, 1.0);
ass_set_hinting (render->ass_renderer, ASS_HINTING_LIGHT);
@@ -839,6 +813,14 @@ out:
gst_object_unref (render);
return ret;
+
+ /* ERRORS */
+invalid_caps:
+ {
+ GST_ERROR_OBJECT (render, "Can't parse caps: %" GST_PTR_FORMAT, caps);
+ ret = FALSE;
+ goto out;
+ }
}
static gboolean
@@ -849,7 +831,7 @@ gst_ass_render_setcaps_text (GstPad * pad, GstCaps * caps)
const GValue *value;
GstBuffer *priv;
gchar *codec_private;
- guint codec_private_size;
+ gsize codec_private_size;
gboolean ret = FALSE;
structure = gst_caps_get_structure (caps, 0);
@@ -864,8 +846,8 @@ gst_ass_render_setcaps_text (GstPad * pad, GstCaps * caps)
priv = gst_value_get_buffer (value);
g_return_val_if_fail (priv != NULL, FALSE);
- codec_private = (gchar *) GST_BUFFER_DATA (priv);
- codec_private_size = GST_BUFFER_SIZE (priv);
+ codec_private =
+ gst_buffer_map (priv, &codec_private_size, NULL, GST_MAP_READ);
if (!render->ass_track)
render->ass_track = ass_new_track (render->ass_library);
@@ -873,6 +855,8 @@ gst_ass_render_setcaps_text (GstPad * pad, GstCaps * caps)
ass_process_codec_private (render->ass_track,
codec_private, codec_private_size);
+ gst_buffer_unmap (priv, codec_private, codec_private_size);
+
GST_DEBUG_OBJECT (render, "ass track created");
render->track_init_ok = TRUE;
@@ -897,8 +881,8 @@ static void
gst_ass_render_process_text (GstAssRender * render, GstBuffer * buffer,
GstClockTime running_time, GstClockTime duration)
{
- gchar *data = (gchar *) GST_BUFFER_DATA (buffer);
- guint size = GST_BUFFER_SIZE (buffer);
+ gchar *data;
+ gsize size;
gdouble pts_start, pts_end;
pts_start = running_time;
@@ -910,41 +894,25 @@ gst_ass_render_process_text (GstAssRender * render, GstBuffer * buffer,
"Processing subtitles with running time %" GST_TIME_FORMAT
" and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (running_time),
GST_TIME_ARGS (duration));
+
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
g_mutex_lock (render->ass_mutex);
ass_process_chunk (render->ass_track, data, size, pts_start, pts_end);
g_mutex_unlock (render->ass_mutex);
- gst_buffer_unref (buffer);
-}
-
-static GstFlowReturn
-gst_ass_render_bufferalloc_video (GstPad * pad, guint64 offset, guint size,
- GstCaps * caps, GstBuffer ** buffer)
-{
- GstAssRender *render = GST_ASS_RENDER (gst_pad_get_parent (pad));
- GstFlowReturn ret = GST_FLOW_WRONG_STATE;
- GstPad *allocpad;
-
- GST_OBJECT_LOCK (render);
- allocpad = render->srcpad ? gst_object_ref (render->srcpad) : NULL;
- GST_OBJECT_UNLOCK (render);
- if (allocpad) {
- ret = gst_pad_alloc_buffer (allocpad, offset, size, caps, buffer);
- gst_object_unref (allocpad);
- }
-
- gst_object_unref (render);
-
- return ret;
+ gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unref (buffer);
}
static GstFlowReturn
-gst_ass_render_chain_video (GstPad * pad, GstBuffer * buffer)
+gst_ass_render_chain_video (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer)
{
- GstAssRender *render = GST_ASS_RENDER (GST_PAD_PARENT (pad));
+ GstAssRender *render = GST_ASS_RENDER (parent);
GstFlowReturn ret = GST_FLOW_OK;
gboolean in_seg = FALSE;
- gint64 start, stop, clip_start = 0, clip_stop = 0;
+ guint64 start, stop, clip_start = 0, clip_stop = 0;
ASS_Image *ass_image;
if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) {
@@ -977,14 +945,13 @@ gst_ass_render_chain_video (GstPad * pad, GstBuffer * buffer)
/* if the buffer is only partially in the segment, fix up stamps */
if (clip_start != start || (stop != -1 && clip_stop != stop)) {
GST_DEBUG_OBJECT (render, "clipping buffer timestamp/duration to segment");
- buffer = gst_buffer_make_metadata_writable (buffer);
+ buffer = gst_buffer_make_writable (buffer);
GST_BUFFER_TIMESTAMP (buffer) = clip_start;
if (stop != -1)
GST_BUFFER_DURATION (buffer) = clip_stop - clip_start;
}
- gst_segment_set_last_stop (&render->video_segment, GST_FORMAT_TIME,
- clip_start);
+ render->video_segment.position = clip_start;
g_mutex_lock (render->subtitle_mutex);
if (render->subtitle_pending) {
@@ -1054,8 +1021,13 @@ gst_ass_render_chain_video (GstPad * pad, GstBuffer * buffer)
g_mutex_unlock (render->ass_mutex);
if (ass_image != NULL) {
+ GstVideoFrame frame;
+
buffer = gst_buffer_make_writable (buffer);
- render->blit (render, ass_image, buffer);
+
+ gst_video_frame_map (&frame, &render->info, buffer, GST_MAP_WRITE);
+ render->blit (render, ass_image, &frame);
+ gst_video_frame_unmap (&frame);
} else {
GST_LOG_OBJECT (render, "nothing to render right now");
}
@@ -1076,14 +1048,14 @@ out_of_segment:
}
static GstFlowReturn
-gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer)
+gst_ass_render_chain_text (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
GstFlowReturn ret = GST_FLOW_OK;
- GstAssRender *render = GST_ASS_RENDER (GST_PAD_PARENT (pad));
+ GstAssRender *render = GST_ASS_RENDER (parent);
GstClockTime timestamp, duration;
GstClockTime sub_running_time, vid_running_time;
GstClockTime sub_running_time_end;
- gint64 cstart, cstop;
+ guint64 cstart, cstop;
gboolean in_seg;
if (render->subtitle_flushing) {
@@ -1117,8 +1089,7 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer)
GST_BUFFER_TIMESTAMP (buffer) = timestamp = cstart;
GST_BUFFER_DURATION (buffer) = duration = cstop - cstart;
- gst_segment_set_last_stop (&render->subtitle_segment, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buffer));
+ render->subtitle_segment.position = GST_BUFFER_TIMESTAMP (buffer);
sub_running_time =
gst_segment_to_running_time (&render->subtitle_segment, GST_FORMAT_TIME,
@@ -1128,11 +1099,12 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer)
timestamp + duration);
vid_running_time =
gst_segment_to_running_time (&render->video_segment, GST_FORMAT_TIME,
- render->video_segment.last_stop);
+ render->video_segment.position);
- if (render->fps_n && render->fps_d)
+ if (render->info.fps_n && render->info.fps_d)
vid_running_time +=
- gst_util_uint64_scale (GST_SECOND, render->fps_d, render->fps_n);
+ gst_util_uint64_scale (GST_SECOND, render->info.fps_d,
+ render->info.fps_n);
if (sub_running_time > vid_running_time + GST_SECOND / 2) {
g_assert (render->subtitle_pending == NULL);
@@ -1174,6 +1146,7 @@ gst_ass_render_chain_text (GstPad * pad, GstBuffer * buffer)
static void
gst_ass_render_handle_tags (GstAssRender * render, GstTagList * taglist)
{
+#if 0
static const gchar *mimetypes[] = {
"application/x-font-ttf",
"application/x-font-otf",
@@ -1183,14 +1156,15 @@ gst_ass_render_handle_tags (GstAssRender * render, GstTagList * taglist)
".otf",
".ttf"
};
+#endif
guint tag_size;
- guint index;
if (!taglist)
return;
tag_size = gst_tag_list_get_tag_size (taglist, GST_TAG_ATTACHMENT);
if (tag_size > 0 && render->embeddedfonts) {
+#if 0
const GValue *value;
GstBuffer *buf;
GstCaps *caps;
@@ -1198,10 +1172,13 @@ gst_ass_render_handle_tags (GstAssRender * render, GstTagList * taglist)
gboolean valid_mimetype, valid_extension;
guint j;
const gchar *filename;
+#endif
+ guint index;
GST_DEBUG_OBJECT (render, "TAG event has attachments");
for (index = 0; index < tag_size; index++) {
+#if 0
value = gst_tag_list_get_value_index (taglist, GST_TAG_ATTACHMENT, index);
buf = gst_value_get_buffer (value);
if (!buf || !GST_BUFFER_CAPS (buf))
@@ -1241,38 +1218,43 @@ gst_ass_render_handle_tags (GstAssRender * render, GstTagList * taglist)
GST_DEBUG_OBJECT (render, "registered new font %s", filename);
g_mutex_unlock (render->ass_mutex);
}
+#endif
}
}
}
static gboolean
-gst_ass_render_event_video (GstPad * pad, GstEvent * event)
+gst_ass_render_event_video (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean ret = FALSE;
- GstAssRender *render = GST_ASS_RENDER (gst_pad_get_parent (pad));
+ GstAssRender *render = GST_ASS_RENDER (parent);
GST_DEBUG_OBJECT (pad, "received video event %s",
GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_ass_render_setcaps_video (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_SEGMENT:
{
- GstFormat format;
- gdouble rate;
- gint64 start, stop, time;
- gboolean update;
+ GstSegment segment;
GST_DEBUG_OBJECT (render, "received new segment");
- gst_event_parse_new_segment (event, &update, &rate, &format, &start,
- &stop, &time);
+ gst_event_copy_segment (event, &segment);
- if (format == GST_FORMAT_TIME) {
+ if (segment.format == GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (render, "VIDEO SEGMENT now: %" GST_SEGMENT_FORMAT,
&render->video_segment);
- gst_segment_set_newsegment (&render->video_segment, update, rate,
- format, start, stop, time);
+ render->video_segment = segment;
GST_DEBUG_OBJECT (render, "VIDEO SEGMENT after: %" GST_SEGMENT_FORMAT,
&render->video_segment);
@@ -1304,39 +1286,66 @@ gst_ass_render_event_video (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (render);
-
return ret;
}
static gboolean
-gst_ass_render_event_text (GstPad * pad, GstEvent * event)
+gst_ass_render_query_video (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_ass_render_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_ass_render_event_text (GstPad * pad, GstObject * parent, GstEvent * event)
{
gint i;
gboolean ret = FALSE;
- GstAssRender *render = GST_ASS_RENDER (gst_pad_get_parent (pad));
+ GstAssRender *render = GST_ASS_RENDER (parent);
GST_DEBUG_OBJECT (pad, "received text event %s", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
{
- GstFormat format;
- gdouble rate;
- gint64 start, stop, time;
- gboolean update;
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_ass_render_setcaps_text (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_SEGMENT:
+ {
+ GstSegment segment;
GST_DEBUG_OBJECT (render, "received new segment");
- gst_event_parse_new_segment (event, &update, &rate, &format, &start,
- &stop, &time);
+ gst_event_copy_segment (event, &segment);
- if (format == GST_FORMAT_TIME) {
+ if (segment.format == GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (render, "SUBTITLE SEGMENT now: %" GST_SEGMENT_FORMAT,
&render->subtitle_segment);
- gst_segment_set_newsegment (&render->subtitle_segment, update, rate,
- format, start, stop, time);
+ render->subtitle_segment = segment;
GST_DEBUG_OBJECT (render,
"SUBTITLE SEGMENT after: %" GST_SEGMENT_FORMAT,
@@ -1404,8 +1413,6 @@ gst_ass_render_event_text (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (render);
-
return ret;
}
diff --git a/ext/assrender/gstassrender.h b/ext/assrender/gstassrender.h
index 4b58e2588..23dd4df24 100644
--- a/ext/assrender/gstassrender.h
+++ b/ext/assrender/gstassrender.h
@@ -43,7 +43,7 @@ G_BEGIN_DECLS
typedef struct _GstAssRender GstAssRender;
typedef struct _GstAssRenderClass GstAssRenderClass;
-typedef void (*GstAssRenderBlitFunction) (GstAssRender *render, ASS_Image *ass_image, GstBuffer *buffer);
+typedef void (*GstAssRenderBlitFunction) (GstAssRender *render, ASS_Image *ass_image, GstVideoFrame *frame);
struct _GstAssRender
{
@@ -57,9 +57,7 @@ struct _GstAssRender
/* <private> */
GstSegment video_segment;
- GstVideoFormat format;
- gint width, height;
- gint fps_n, fps_d;
+ GstVideoInfo info;
GstAssRenderBlitFunction blit;
GMutex *subtitle_mutex;
diff --git a/ext/audiofile/gstafparse.c b/ext/audiofile/gstafparse.c
index 634d09abc..27b5a6e8c 100644
--- a/ext/audiofile/gstafparse.c
+++ b/ext/audiofile/gstafparse.c
@@ -114,10 +114,10 @@ gst_afparse_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &afparse_src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &afparse_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&afparse_src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&afparse_sink_factory));
gst_element_class_set_details_simple (element_class, "Audiofile demuxer",
"Codec/Demuxer/Audio",
diff --git a/ext/audiofile/gstafsink.c b/ext/audiofile/gstafsink.c
index b8a25f6ab..79fc7abdb 100644
--- a/ext/audiofile/gstafsink.c
+++ b/ext/audiofile/gstafsink.c
@@ -138,8 +138,8 @@ gst_afsink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &afsink_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&afsink_sink_factory));
gst_element_class_set_details_simple (element_class, "Audiofile sink",
"Sink/Audio",
"Write audio streams to disk using libaudiofile",
diff --git a/ext/audiofile/gstafsrc.c b/ext/audiofile/gstafsrc.c
index bc7648ad5..2a750a378 100644
--- a/ext/audiofile/gstafsrc.c
+++ b/ext/audiofile/gstafsrc.c
@@ -135,8 +135,8 @@ gst_afsrc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &afsrc_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&afsrc_src_factory));
gst_element_class_set_details_simple (element_class, "Audiofile source",
"Source/Audio",
"Read audio files from disk using libaudiofile",
diff --git a/ext/audioresample/gstaudioresample.c b/ext/audioresample/gstaudioresample.c
index 7b81b93cc..5e7fafc31 100644
--- a/ext/audioresample/gstaudioresample.c
+++ b/ext/audioresample/gstaudioresample.c
@@ -115,10 +115,10 @@ static void gst_audioresample_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_audioresample_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_audioresample_sink_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_audioresample_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_audioresample_sink_template));
gst_element_class_set_details_simple (gstelement_class, "Audio scaler",
"Filter/Converter/Audio",
diff --git a/ext/bz2/gstbz2dec.c b/ext/bz2/gstbz2dec.c
index 48bca484e..ac53f6095 100644
--- a/ext/bz2/gstbz2dec.c
+++ b/ext/bz2/gstbz2dec.c
@@ -212,8 +212,10 @@ gst_bz2dec_base_init (gpointer g_class)
{
GstElementClass *ec = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (ec, &sink_template);
- gst_element_class_add_static_pad_template (ec, &src_template);
+ gst_element_class_add_pad_template (ec,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (ec,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (ec, "BZ2 decoder",
"Codec/Decoder", "Decodes compressed streams",
"Lutz Mueller <lutz@users.sourceforge.net>");
diff --git a/ext/bz2/gstbz2enc.c b/ext/bz2/gstbz2enc.c
index 1b9febad0..83a6b2e09 100644
--- a/ext/bz2/gstbz2enc.c
+++ b/ext/bz2/gstbz2enc.c
@@ -262,8 +262,10 @@ gst_bz2enc_base_init (gpointer g_class)
{
GstElementClass *ec = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (ec, &sink_template);
- gst_element_class_add_static_pad_template (ec, &src_template);
+ gst_element_class_add_pad_template (ec,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (ec,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (ec, "BZ2 encoder",
"Codec/Encoder", "Compresses streams",
"Lutz Mueller <lutz@users.sourceforge.net>");
diff --git a/ext/celt/gstceltdec.c b/ext/celt/gstceltdec.c
index 84b2d203f..7227ab5d6 100644
--- a/ext/celt/gstceltdec.c
+++ b/ext/celt/gstceltdec.c
@@ -44,6 +44,7 @@
#include "gstceltdec.h"
#include <string.h>
#include <gst/tag/tag.h>
+#include <gst/audio/audio.h>
GST_DEBUG_CATEGORY_STATIC (celtdec_debug);
#define GST_CAT_DEFAULT celtdec_debug
@@ -54,11 +55,9 @@ static GstStaticPadTemplate celt_dec_src_factory =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "rate = (int) [ 32000, 64000 ], "
- "channels = (int) [ 1, 2 ], "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) true, " "width = (int) 16, " "depth = (int) 16")
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) [ 32000, 64000 ], " "channels = (int) [ 1, 2 ]")
);
static GstStaticPadTemplate celt_dec_sink_factory =
@@ -68,8 +67,8 @@ GST_STATIC_PAD_TEMPLATE ("sink",
GST_STATIC_CAPS ("audio/x-celt")
);
-GST_BOILERPLATE (GstCeltDec, gst_celt_dec, GstAudioDecoder,
- GST_TYPE_AUDIO_DECODER);
+#define gst_celt_dec_parent_class parent_class
+G_DEFINE_TYPE (GstCeltDec, gst_celt_dec, GST_TYPE_AUDIO_DECODER);
static gboolean gst_celt_dec_start (GstAudioDecoder * dec);
static gboolean gst_celt_dec_stop (GstAudioDecoder * dec);
@@ -79,21 +78,6 @@ static GstFlowReturn gst_celt_dec_handle_frame (GstAudioDecoder * dec,
GstBuffer * buffer);
static void
-gst_celt_dec_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &celt_dec_src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &celt_dec_sink_factory);
- gst_element_class_set_details_simple (element_class, "Celt audio decoder",
- "Codec/Decoder/Audio",
- "decode celt streams to audio",
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
gst_celt_dec_class_init (GstCeltDecClass * klass)
{
GstAudioDecoderClass *gstbase_class;
@@ -105,6 +89,16 @@ gst_celt_dec_class_init (GstCeltDecClass * klass)
gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_celt_dec_set_format);
gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_celt_dec_handle_frame);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&celt_dec_src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&celt_dec_sink_factory));
+
+ gst_element_class_set_details_simple (gstelement_class, "Celt audio decoder",
+ "Codec/Decoder/Audio",
+ "decode celt streams to audio",
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
GST_DEBUG_CATEGORY_INIT (celtdec_debug, "celtdec", 0,
"celt decoding element");
}
@@ -134,7 +128,7 @@ gst_celt_dec_reset (GstCeltDec * dec)
}
static void
-gst_celt_dec_init (GstCeltDec * dec, GstCeltDecClass * g_class)
+gst_celt_dec_init (GstCeltDec * dec)
{
gst_celt_dec_reset (dec);
}
diff --git a/ext/celt/gstceltenc.c b/ext/celt/gstceltenc.c
index befb9ac83..19c8b9ff3 100644
--- a/ext/celt/gstceltenc.c
+++ b/ext/celt/gstceltenc.c
@@ -150,8 +150,10 @@ gst_celt_enc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "Celt audio encoder",
"Codec/Encoder/Audio",
"Encodes audio in Celt format",
diff --git a/ext/cog/gstcogcolorspace.c b/ext/cog/gstcogcolorspace.c
index 3c84c32a5..4a96e5c1f 100644
--- a/ext/cog/gstcogcolorspace.c
+++ b/ext/cog/gstcogcolorspace.c
@@ -126,10 +126,10 @@ gst_cogcolorspace_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_cogcolorspace_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_cogcolorspace_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_cogcolorspace_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_cogcolorspace_sink_template));
gst_element_class_set_details_simple (element_class,
"YCbCr/RGB format conversion", "Filter/Converter/Video",
diff --git a/ext/cog/gstcogdownsample.c b/ext/cog/gstcogdownsample.c
index 5122f4a6b..c929c12ec 100644
--- a/ext/cog/gstcogdownsample.c
+++ b/ext/cog/gstcogdownsample.c
@@ -132,10 +132,10 @@ gst_cogdownsample_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_cogdownsample_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_cogdownsample_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_cogdownsample_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_cogdownsample_sink_template));
gst_element_class_set_details_simple (element_class,
"Scale down video by factor of 2", "Filter/Effect/Video",
diff --git a/ext/cog/gstcogmse.c b/ext/cog/gstcogmse.c
index 09f1ffc42..8eb63bec3 100644
--- a/ext/cog/gstcogmse.c
+++ b/ext/cog/gstcogmse.c
@@ -135,12 +135,12 @@ gst_mse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &gst_framestore_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_framestore_sink_ref_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_framestore_sink_test_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_framestore_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_framestore_sink_ref_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_framestore_sink_test_template));
gst_element_class_set_details_simple (element_class, "Calculate MSE",
"Filter/Effect",
diff --git a/ext/cog/gstcogscale.c b/ext/cog/gstcogscale.c
index 10587f5b8..52585ac90 100644
--- a/ext/cog/gstcogscale.c
+++ b/ext/cog/gstcogscale.c
@@ -207,10 +207,10 @@ gst_cog_scale_base_init (gpointer g_class)
"Filter/Effect/Video",
"Resizes video", "Wim Taymans <wim.taymans@chello.be>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_cog_scale_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_cog_scale_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_cog_scale_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_cog_scale_sink_template));
}
static void
diff --git a/ext/cog/gstcolorconvert.c b/ext/cog/gstcolorconvert.c
index 4a043cda7..1ed6d91a5 100644
--- a/ext/cog/gstcolorconvert.c
+++ b/ext/cog/gstcolorconvert.c
@@ -132,10 +132,10 @@ gst_colorconvert_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_colorconvert_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_colorconvert_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_colorconvert_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_colorconvert_sink_template));
gst_element_class_set_details_simple (element_class, "Convert colorspace",
"Filter/Effect/Video",
diff --git a/ext/cog/gstlogoinsert.c b/ext/cog/gstlogoinsert.c
index 99e54470b..5746528e4 100644
--- a/ext/cog/gstlogoinsert.c
+++ b/ext/cog/gstlogoinsert.c
@@ -130,10 +130,10 @@ gst_logoinsert_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_logoinsert_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_logoinsert_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_logoinsert_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_logoinsert_sink_template));
gst_element_class_set_details_simple (element_class,
"Overlay image onto video", "Filter/Effect/Video",
diff --git a/ext/curl/gstcurlsink.c b/ext/curl/gstcurlsink.c
index 75b459c55..2a448f436 100644
--- a/ext/curl/gstcurlsink.c
+++ b/ext/curl/gstcurlsink.c
@@ -155,7 +155,8 @@ gst_curl_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class,
"Curl sink",
"Sink/Network",
diff --git a/ext/dc1394/gstdc1394.c b/ext/dc1394/gstdc1394.c
index dfb4cadee..09c4fd1f9 100644
--- a/ext/dc1394/gstdc1394.c
+++ b/ext/dc1394/gstdc1394.c
@@ -104,18 +104,16 @@ static void
gst_dc1394_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- GstPadTemplate *pad_template;
gst_element_class_set_details_simple (element_class, "1394 IIDC Video Source",
"Source/Video",
"libdc1394 based source, supports 1394 IIDC cameras",
"Antoine Tremblay <hexa00@gmail.com>");
- pad_template =
+ gst_element_class_add_pad_template (element_class,
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_dc1394_get_all_dc1394_caps ());
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
+ gst_dc1394_get_all_dc1394_caps ()));
+
}
static void
diff --git a/ext/dirac/gstdiracdec.cc b/ext/dirac/gstdiracdec.cc
index 86643ef81..486eab0ab 100644
--- a/ext/dirac/gstdiracdec.cc
+++ b/ext/dirac/gstdiracdec.cc
@@ -103,10 +103,10 @@ gst_diracdec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_diracdec_src_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_diracdec_sink_pad_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_diracdec_src_pad_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_diracdec_sink_pad_template));
gst_element_class_set_details_simple (element_class, "Dirac stream decoder",
"Codec/Decoder/Video", "Decode DIRAC streams",
"David Schleef <ds@schleef.org>, "
diff --git a/ext/dirac/gstdiracenc.cc b/ext/dirac/gstdiracenc.cc
index f9595e1de..eb19d7807 100644
--- a/ext/dirac/gstdiracenc.cc
+++ b/ext/dirac/gstdiracenc.cc
@@ -197,10 +197,10 @@ gst_dirac_enc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_dirac_enc_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_dirac_enc_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_dirac_enc_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_dirac_enc_sink_template));
gst_element_class_set_details_simple (element_class, "Dirac Encoder",
"Codec/Encoder/Video",
diff --git a/ext/directfb/dfbvideosink.c b/ext/directfb/dfbvideosink.c
index c3417a5e1..038e3ee33 100644
--- a/ext/directfb/dfbvideosink.c
+++ b/ext/directfb/dfbvideosink.c
@@ -132,10 +132,9 @@ static DFBSurfacePixelFormat gst_dfbvideosink_get_format_from_caps (GstCaps *
static void gst_dfbvideosink_update_colorbalance (GstDfbVideoSink *
dfbvideosink);
static void gst_dfbvideosink_surface_destroy (GstDfbVideoSink * dfbvideosink,
- GstDfbSurface * surface);
+ GstBuffer * surface);
static GstVideoSinkClass *parent_class = NULL;
-static GstBufferClass *surface_parent_class = NULL;
#ifndef GST_DISABLE_GST_DEBUG
static const char *
@@ -188,12 +187,52 @@ gst_dfbvideosink_get_format_name (DFBSurfacePixelFormat format)
}
#endif /* GST_DISABLE_GST_DEBUG */
+static void
+gst_dfbsurface_dispose (GstBuffer * surface)
+{
+ GstDfbVideoSink *dfbvideosink = NULL;
+ GstMetaDfbSurface *meta;
+
+ g_return_if_fail (surface != NULL);
+
+ meta = GST_META_DFBSURFACE_GET (surface);
+
+ dfbvideosink = meta->dfbvideosink;
+ if (!dfbvideosink) {
+ GST_WARNING_OBJECT (surface, "no sink found");
+ goto beach;
+ }
+
+ /* If our geometry changed we can't reuse that image. */
+ if ((meta->width != dfbvideosink->video_width) ||
+ (meta->height != dfbvideosink->video_height) ||
+ (meta->pixel_format != dfbvideosink->pixel_format)) {
+ GST_DEBUG_OBJECT (dfbvideosink, "destroy surface %p as its size changed "
+ "%dx%d vs current %dx%d", surface, meta->width, meta->height,
+ dfbvideosink->video_width, dfbvideosink->video_height);
+ gst_dfbvideosink_surface_destroy (dfbvideosink, surface);
+ } else {
+ /* In that case we can reuse the image and add it to our image pool. */
+ GST_DEBUG_OBJECT (dfbvideosink, "recycling surface %p in pool", surface);
+ /* need to increment the refcount again to recycle */
+ gst_buffer_ref (surface);
+ g_mutex_lock (dfbvideosink->pool_lock);
+ dfbvideosink->buffer_pool = g_slist_prepend (dfbvideosink->buffer_pool,
+ surface);
+ g_mutex_unlock (dfbvideosink->pool_lock);
+ }
+
+beach:
+ return;
+}
+
/* Creates miniobject and our internal surface */
-static GstDfbSurface *
+static GstBuffer *
gst_dfbvideosink_surface_create (GstDfbVideoSink * dfbvideosink, GstCaps * caps,
size_t size)
{
- GstDfbSurface *surface = NULL;
+ GstBuffer *surface = NULL;
+ GstMetaDfbSurface *meta = NULL;
GstStructure *structure = NULL;
DFBResult ret;
DFBSurfaceDescription s_dsc;
@@ -203,25 +242,28 @@ gst_dfbvideosink_surface_create (GstDfbVideoSink * dfbvideosink, GstCaps * caps,
g_return_val_if_fail (GST_IS_DFBVIDEOSINK (dfbvideosink), NULL);
- surface = (GstDfbSurface *) gst_mini_object_new (GST_TYPE_DFBSURFACE);
+ surface = gst_buffer_new ();
+ GST_MINI_OBJECT_CAST (surface)->dispose =
+ (GstMiniObjectDisposeFunction) gst_dfbsurface_dispose;
+ meta = GST_META_DFBSURFACE_ADD (surface);
/* Keep a ref to our sink */
- surface->dfbvideosink = gst_object_ref (dfbvideosink);
+ meta->dfbvideosink = gst_object_ref (dfbvideosink);
/* Surface is not locked yet */
- surface->locked = FALSE;
+ meta->locked = FALSE;
structure = gst_caps_get_structure (caps, 0);
- if (!gst_structure_get_int (structure, "width", &surface->width) ||
- !gst_structure_get_int (structure, "height", &surface->height)) {
+ if (!gst_structure_get_int (structure, "width", &meta->width) ||
+ !gst_structure_get_int (structure, "height", &meta->height)) {
GST_WARNING_OBJECT (dfbvideosink, "failed getting geometry from caps %"
GST_PTR_FORMAT, caps);
goto fallback;
}
/* Pixel format from caps */
- surface->pixel_format = gst_dfbvideosink_get_format_from_caps (caps);
- if (surface->pixel_format == DSPF_UNKNOWN) {
+ meta->pixel_format = gst_dfbvideosink_get_format_from_caps (caps);
+ if (meta->pixel_format == DSPF_UNKNOWN) {
goto fallback;
}
@@ -236,41 +278,41 @@ gst_dfbvideosink_surface_create (GstDfbVideoSink * dfbvideosink, GstCaps * caps,
s_dsc.flags =
DSDESC_PIXELFORMAT | DSDESC_WIDTH | DSDESC_HEIGHT /*| DSDESC_CAPS */ ;
- s_dsc.pixelformat = surface->pixel_format;
- s_dsc.width = surface->width;
- s_dsc.height = surface->height;
+ s_dsc.pixelformat = meta->pixel_format;
+ s_dsc.width = meta->width;
+ s_dsc.height = meta->height;
/*s_dsc.caps = DSCAPS_VIDEOONLY; */
ret = dfbvideosink->dfb->CreateSurface (dfbvideosink->dfb, &s_dsc,
- &surface->surface);
+ &meta->surface);
if (ret != DFB_OK) {
GST_WARNING_OBJECT (dfbvideosink, "failed creating a DirectFB surface");
- surface->surface = NULL;
+ meta->surface = NULL;
goto fallback;
}
/* Clearing surface */
- surface->surface->Clear (surface->surface, 0x00, 0x00, 0x00, 0xFF);
+ meta->surface->Clear (meta->surface, 0x00, 0x00, 0x00, 0xFF);
/* Locking the surface to acquire the memory pointer */
- surface->surface->Lock (surface->surface, DSLF_WRITE, &data, &pitch);
- surface->locked = TRUE;
+ meta->surface->Lock (meta->surface, DSLF_WRITE, &data, &pitch);
+ meta->locked = TRUE;
GST_BUFFER_DATA (surface) = data;
- GST_BUFFER_SIZE (surface) = pitch * surface->height;
+ GST_BUFFER_SIZE (surface) = pitch * meta->height;
/* Be carefull here. If size is different from the surface size
(pitch * height), we can't use that surface through buffer alloc system
or we are going to run into serious stride issues */
if (GST_BUFFER_SIZE (surface) != size) {
GST_WARNING_OBJECT (dfbvideosink, "DirectFB surface size (%dx%d=%d) "
- "differs from GStreamer requested size %u", pitch, surface->height,
+ "differs from GStreamer requested size %u", pitch, meta->height,
GST_BUFFER_SIZE (surface), (guint) size);
goto fallback;
}
GST_DEBUG_OBJECT (dfbvideosink, "creating a %dx%d surface (%p) with %s "
- "pixel format, line pitch %d", surface->width, surface->height, surface,
- gst_dfbvideosink_get_format_name (surface->pixel_format), pitch);
+ "pixel format, line pitch %d", meta->width, meta->height, surface,
+ gst_dfbvideosink_get_format_name (meta->pixel_format), pitch);
succeeded = TRUE;
@@ -280,16 +322,17 @@ fallback:
/* We allocate a standard buffer ourselves to store it in our buffer pool,
this is an optimisation for memory allocation */
- GST_BUFFER (surface)->malloc_data = g_malloc (size);
- GST_BUFFER_DATA (surface) = GST_BUFFER (surface)->malloc_data;
+ GST_BUFFER_MALLOCDATA (surface) = g_malloc (size);
+ GST_BUFFER_DATA (surface) = GST_BUFFER_MALLOCDATA (surface);
GST_BUFFER_SIZE (surface) = size;
- if (surface->surface) {
- if (surface->locked) {
- surface->surface->Unlock (surface->surface);
- surface->locked = FALSE;
+
+ if (meta->surface) {
+ if (meta->locked) {
+ meta->surface->Unlock (meta->surface);
+ meta->locked = FALSE;
}
- surface->surface->Release (surface->surface);
- surface->surface = NULL;
+ meta->surface->Release (meta->surface);
+ meta->surface = NULL;
}
GST_DEBUG_OBJECT (dfbvideosink, "allocating a buffer (%p) of %u bytes",
surface, (guint) size);
@@ -308,28 +351,29 @@ beach:
* destroyed so we just have to clean our internal stuff */
static void
gst_dfbvideosink_surface_destroy (GstDfbVideoSink * dfbvideosink,
- GstDfbSurface * surface)
+ GstBuffer * surface)
{
+ GstMetaDfbSurface *meta;
+
g_return_if_fail (GST_IS_DFBVIDEOSINK (dfbvideosink));
+ meta = GST_META_DFBSURFACE_GET (surface);
+
/* Release our internal surface */
- if (surface->surface) {
- if (surface->locked) {
- surface->surface->Unlock (surface->surface);
- surface->locked = FALSE;
+ if (meta->surface) {
+ if (meta->locked) {
+ meta->surface->Unlock (meta->surface);
+ meta->locked = FALSE;
}
- surface->surface->Release (surface->surface);
- surface->surface = NULL;
+ meta->surface->Release (meta->surface);
+ meta->surface = NULL;
}
- if (surface->dfbvideosink) {
+ if (meta->dfbvideosink) {
/* Release the ref to our sink */
- surface->dfbvideosink = NULL;
+ meta->dfbvideosink = NULL;
gst_object_unref (dfbvideosink);
}
-
- GST_MINI_OBJECT_CLASS (surface_parent_class)->finalize (GST_MINI_OBJECT
- (surface));
}
static gpointer
@@ -339,8 +383,8 @@ gst_dfbvideosink_event_thread (GstDfbVideoSink * dfbvideosink)
while (dfbvideosink->running) {
/* Wait for an event with a 50 ms timeout */
- dfbvideosink->event_buffer->
- WaitForEventWithTimeout (dfbvideosink->event_buffer, 0, 50);
+ dfbvideosink->event_buffer->WaitForEventWithTimeout (dfbvideosink->
+ event_buffer, 0, 50);
/* Do we have an event ? */
ret = dfbvideosink->event_buffer->HasEvent (dfbvideosink->event_buffer);
@@ -1515,6 +1559,7 @@ gst_dfbvideosink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
GstVideoRectangle dst, src, result;
GstFlowReturn ret = GST_FLOW_OK;
gboolean mem_cpy = TRUE;
+ GstMetaDfbSurface *meta;
dfbvideosink = GST_DFBVIDEOSINK (bsink);
@@ -1523,12 +1568,12 @@ gst_dfbvideosink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
goto beach;
}
- /* Is that a buffer we allocated ourselves ? */
- if (GST_IS_DFBSURFACE (buf)) {
- GstDfbSurface *tmp_surface = GST_DFBSURFACE (buf);
+ meta = GST_META_DFBSURFACE_GET (buf);
+ /* Is that a buffer we allocated ourselves ? */
+ if (meta != NULL) {
/* Does it have a surface ? */
- if (tmp_surface->surface) {
+ if (meta->surface) {
mem_cpy = FALSE;
GST_DEBUG_OBJECT (dfbvideosink, "we have a buffer (%p) we allocated "
"ourselves and it has a surface, no memcpy then", buf);
@@ -1624,8 +1669,6 @@ gst_dfbvideosink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
}
} else {
/* Else we will [Stretch]Blit to our primary */
- GstDfbSurface *surface = GST_DFBSURFACE (buf);
-
GST_DEBUG_OBJECT (dfbvideosink, "blitting to a primary surface (vsync %d)",
dfbvideosink->vsync);
@@ -1635,9 +1678,9 @@ gst_dfbvideosink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
dfbvideosink->primary->GetSize (dfbvideosink->primary, &dst.w, &dst.h);
/* Unlocking surface before blit */
- if (surface->locked) {
- surface->surface->Unlock (surface->surface);
- surface->locked = FALSE;
+ if (meta->locked) {
+ meta->surface->Unlock (meta->surface);
+ meta->locked = FALSE;
}
gst_video_sink_center_rect (src, dst, &result, dfbvideosink->hw_scaling);
@@ -1649,14 +1692,14 @@ gst_dfbvideosink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
if (dfbvideosink->hw_scaling) {
dfbvideosink->primary->StretchBlit (dfbvideosink->primary,
- surface->surface, NULL, (DFBRectangle *) (void *) &result);
+ meta->surface, NULL, (DFBRectangle *) (void *) &result);
} else {
DFBRectangle clip;
clip.x = clip.y = 0;
clip.w = result.w;
clip.h = result.h;
- dfbvideosink->primary->Blit (dfbvideosink->primary, surface->surface,
+ dfbvideosink->primary->Blit (dfbvideosink->primary, meta->surface,
&clip, result.x, result.y);
}
@@ -1679,7 +1722,7 @@ gst_dfbvideosink_bufferpool_clear (GstDfbVideoSink * dfbvideosink)
{
g_mutex_lock (dfbvideosink->pool_lock);
while (dfbvideosink->buffer_pool) {
- GstDfbSurface *surface = dfbvideosink->buffer_pool->data;
+ GstBuffer *surface = dfbvideosink->buffer_pool->data;
dfbvideosink->buffer_pool = g_slist_delete_link (dfbvideosink->buffer_pool,
dfbvideosink->buffer_pool);
@@ -1696,7 +1739,7 @@ gst_dfbvideosink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size,
GstCaps * caps, GstBuffer ** buf)
{
GstDfbVideoSink *dfbvideosink;
- GstDfbSurface *surface = NULL;
+ GstBuffer *surface = NULL;
GstFlowReturn ret = GST_FLOW_OK;
gboolean rev_nego = FALSE;
@@ -1798,7 +1841,9 @@ alloc:
/* Inspect our buffer pool */
g_mutex_lock (dfbvideosink->pool_lock);
while (dfbvideosink->buffer_pool) {
- surface = (GstDfbSurface *) dfbvideosink->buffer_pool->data;
+ GstMetaDfbSurface *meta;
+
+ surface = (GstBuffer *) dfbvideosink->buffer_pool->data;
if (surface) {
/* Removing from the pool */
@@ -1806,10 +1851,12 @@ alloc:
g_slist_delete_link (dfbvideosink->buffer_pool,
dfbvideosink->buffer_pool);
+ meta = GST_META_DFBSURFACE_GET (surface);
+
/* If the surface is invalid for our need, destroy */
- if ((surface->width != width) ||
- (surface->height != height) ||
- (surface->pixel_format != dfbvideosink->pixel_format)) {
+ if ((meta->width != width) ||
+ (meta->height != height) ||
+ (meta->pixel_format != dfbvideosink->pixel_format)) {
gst_dfbvideosink_surface_destroy (dfbvideosink, surface);
surface = NULL;
} else {
@@ -1832,100 +1879,34 @@ alloc:
/* Now we should have a surface, set appropriate caps on it */
if (surface) {
if (rev_nego) {
- gst_buffer_set_caps (GST_BUFFER (surface), desired_caps);
+ gst_buffer_set_caps (surface, desired_caps);
} else {
- gst_buffer_set_caps (GST_BUFFER (surface), caps);
+ gst_buffer_set_caps (surface, caps);
}
}
- *buf = GST_BUFFER (surface);
+ *buf = surface;
gst_caps_unref (desired_caps);
return ret;
}
-/* Our subclass of GstBuffer */
-
-static void
-gst_dfbsurface_finalize (GstDfbSurface * surface)
-{
- GstDfbVideoSink *dfbvideosink = NULL;
-
- g_return_if_fail (surface != NULL);
-
- dfbvideosink = surface->dfbvideosink;
- if (!dfbvideosink) {
- GST_WARNING_OBJECT (surface, "no sink found");
- goto beach;
- }
-
- /* If our geometry changed we can't reuse that image. */
- if ((surface->width != dfbvideosink->video_width) ||
- (surface->height != dfbvideosink->video_height) ||
- (surface->pixel_format != dfbvideosink->pixel_format)) {
- GST_DEBUG_OBJECT (dfbvideosink, "destroy surface %p as its size changed "
- "%dx%d vs current %dx%d", surface, surface->width, surface->height,
- dfbvideosink->video_width, dfbvideosink->video_height);
- gst_dfbvideosink_surface_destroy (dfbvideosink, surface);
- } else {
- /* In that case we can reuse the image and add it to our image pool. */
- GST_DEBUG_OBJECT (dfbvideosink, "recycling surface %p in pool", surface);
- /* need to increment the refcount again to recycle */
- gst_buffer_ref (GST_BUFFER (surface));
- g_mutex_lock (dfbvideosink->pool_lock);
- dfbvideosink->buffer_pool = g_slist_prepend (dfbvideosink->buffer_pool,
- surface);
- g_mutex_unlock (dfbvideosink->pool_lock);
- }
-
-beach:
- return;
-}
-
-static void
-gst_dfbsurface_init (GstDfbSurface * surface, gpointer g_class)
+/* our metadata */
+const GstMetaInfo *
+gst_meta_dfbsurface_get_info (void)
{
- surface->surface = NULL;
- surface->width = 0;
- surface->height = 0;
- surface->pixel_format = DSPF_UNKNOWN;
- surface->dfbvideosink = NULL;
-}
+ static const GstMetaInfo *meta_info = NULL;
-static void
-gst_dfbsurface_class_init (gpointer g_class, gpointer class_data)
-{
- GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (g_class);
-
- surface_parent_class = g_type_class_peek_parent (g_class);
-
- mini_object_class->finalize = (GstMiniObjectFinalizeFunction)
- gst_dfbsurface_finalize;
-}
-
-GType
-gst_dfbsurface_get_type (void)
-{
- static GType _gst_dfbsurface_type;
-
- if (G_UNLIKELY (_gst_dfbsurface_type == 0)) {
- static const GTypeInfo dfbsurface_info = {
- sizeof (GstBufferClass),
- NULL,
- NULL,
- gst_dfbsurface_class_init,
- NULL,
- NULL,
- sizeof (GstDfbSurface),
- 0,
- (GInstanceInitFunc) gst_dfbsurface_init,
- NULL
- };
- _gst_dfbsurface_type = g_type_register_static (GST_TYPE_BUFFER,
- "GstDfbSurface", &dfbsurface_info, 0);
+ if (meta_info == NULL) {
+ meta_info = gst_meta_register ("GstMetaDfbSurface", "GstMetaDfbSurface",
+ sizeof (GstMetaDfbSurface),
+ (GstMetaInitFunction) NULL,
+ (GstMetaFreeFunction) NULL,
+ (GstMetaTransformFunction) NULL,
+ (GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL);
}
- return _gst_dfbsurface_type;
+ return meta_info;
}
/* Interfaces stuff */
@@ -2110,7 +2091,7 @@ gst_dfbvideosink_colorbalance_get_value (GstColorBalance * balance,
}
static void
-gst_dfbvideosink_colorbalance_init (GstColorBalanceClass * iface)
+gst_dfbvideosink_colorbalance_init (GstColorBalanceInterface * iface)
{
GST_COLOR_BALANCE_TYPE (iface) = GST_COLOR_BALANCE_HARDWARE;
iface->list_channels = gst_dfbvideosink_colorbalance_list_channels;
@@ -2283,8 +2264,8 @@ gst_dfbvideosink_base_init (gpointer g_class)
"Sink/Video",
"A DirectFB based videosink", "Julien Moutte <julien@moutte.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_dfbvideosink_sink_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_dfbvideosink_sink_template_factory));
}
static void
diff --git a/ext/directfb/dfbvideosink.h b/ext/directfb/dfbvideosink.h
index bbab762d0..4d911416c 100644
--- a/ext/directfb/dfbvideosink.h
+++ b/ext/directfb/dfbvideosink.h
@@ -35,25 +35,25 @@ G_BEGIN_DECLS
typedef struct _GstDfbVideoSink GstDfbVideoSink;
typedef struct _GstDfbVideoSinkClass GstDfbVideoSinkClass;
-#define GST_TYPE_DFBSURFACE (gst_dfbsurface_get_type())
+typedef struct _GstMetaDfbSurface GstMetaDfbSurface;
-#define GST_IS_DFBSURFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DFBSURFACE))
-#define GST_DFBSURFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DFBSURFACE, GstDfbSurface))
+const GstMetaInfo * gst_meta_dfbsurface_get_info (void);
+
+#define GST_META_DFBSURFACE_GET(buf) ((GstMetaDfbSurface *)gst_buffer_get_meta(buf,gst_meta_dfbsurface_get_info()))
+#define GST_META_DFBSURFACE_ADD(buf) ((GstMetaDfbSurface *)gst_buffer_add_meta(buf,gst_meta_dfbsurface_get_info(),NULL))
+
+struct _GstMetaDfbSurface {
+ GstMeta meta;
-typedef struct _GstDfbSurface GstDfbSurface;
-
-struct _GstDfbSurface {
- GstBuffer buffer; /* We extend GstBuffer */
-
IDirectFBSurface *surface;
-
+
gint width;
gint height;
-
+
gboolean locked;
-
+
DFBSurfacePixelFormat pixel_format;
-
+
GstDfbVideoSink *dfbvideosink;
};
@@ -123,7 +123,6 @@ struct _GstDfbVideoSinkClass {
};
GType gst_dfbvideosink_get_type (void);
-GType gst_dfbsurface_get_type (void);
G_END_DECLS
diff --git a/ext/divx/gstdivxdec.c b/ext/divx/gstdivxdec.c
index 9f2feecfd..2b6625616 100644
--- a/ext/divx/gstdivxdec.c
+++ b/ext/divx/gstdivxdec.c
@@ -130,9 +130,10 @@ gst_divxdec_base_init (GstDivxDecClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"Divx4linux video decoder", "Codec/Decoder/Video",
diff --git a/ext/divx/gstdivxenc.c b/ext/divx/gstdivxenc.c
index 144d23b12..924f6749d 100644
--- a/ext/divx/gstdivxenc.c
+++ b/ext/divx/gstdivxenc.c
@@ -141,9 +141,10 @@ gst_divxenc_base_init (GstDivxEncClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"Divx4linux video encoder", "Codec/Encoder/Video",
diff --git a/ext/dts/gstdtsdec.c b/ext/dts/gstdtsdec.c
index 4a304f8e8..f71219478 100644
--- a/ext/dts/gstdtsdec.c
+++ b/ext/dts/gstdtsdec.c
@@ -153,8 +153,10 @@ gst_dtsdec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
gst_element_class_set_details_simple (element_class, "DTS audio decoder",
"Codec/Decoder/Audio",
"Decodes DTS audio streams",
diff --git a/ext/faac/gstfaac.c b/ext/faac/gstfaac.c
index 68c1e0132..c4b34f544 100644
--- a/ext/faac/gstfaac.c
+++ b/ext/faac/gstfaac.c
@@ -56,11 +56,8 @@
"88200, " \
"96000"
#define SINK_CAPS \
- "audio/x-raw-int, " \
- "endianness = (int) BYTE_ORDER, " \
- "signed = (boolean) true, " \
- "width = (int) 16, " \
- "depth = (int) 16, " \
+ "audio/x-raw, " \
+ "format = (string) "GST_AUDIO_NE (S16) ", " \
"rate = (int) {" SAMPLE_RATES "}, " \
"channels = (int) [ 1, 6 ] "
@@ -125,7 +122,7 @@ static void gst_faac_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
static gboolean gst_faac_configure_source_pad (GstFaac * faac);
-static GstCaps *gst_faac_getcaps (GstAudioEncoder * enc);
+static GstCaps *gst_faac_getcaps (GstAudioEncoder * enc, GstCaps * filter);
static gboolean gst_faac_start (GstAudioEncoder * enc);
static gboolean gst_faac_stop (GstAudioEncoder * enc);
@@ -144,24 +141,8 @@ GST_DEBUG_CATEGORY_STATIC (faac_debug);
#define FAAC_DEFAULT_MIDSIDE TRUE
#define FAAC_DEFAULT_SHORTCTL SHORTCTL_NORMAL
-GST_BOILERPLATE (GstFaac, gst_faac, GstAudioEncoder, GST_TYPE_AUDIO_ENCODER);
-
-static void
-gst_faac_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
-
- gst_element_class_set_details_simple (element_class, "AAC audio encoder",
- "Codec/Encoder/Audio",
- "Free MPEG-2/4 AAC encoder",
- "Ronald Bultje <rbultje@ronald.bitfreak.net>");
-
- GST_DEBUG_CATEGORY_INIT (faac_debug, "faac", 0, "AAC encoding");
-}
+#define gst_faac_parent_class parent_class
+G_DEFINE_TYPE (GstFaac, gst_faac, GST_TYPE_AUDIO_ENCODER);
#define GST_TYPE_FAAC_RATE_CONTROL (gst_faac_brtype_get_type ())
static GType
@@ -208,13 +189,22 @@ static void
gst_faac_class_init (GstFaacClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
- parent_class = g_type_class_peek_parent (klass);
-
gobject_class->set_property = gst_faac_set_property;
gobject_class->get_property = gst_faac_get_property;
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_template));
+
+ gst_element_class_set_details_simple (gstelement_class, "AAC audio encoder",
+ "Codec/Encoder/Audio",
+ "Free MPEG-2/4 AAC encoder",
+ "Ronald Bultje <rbultje@ronald.bitfreak.net>");
+
base_class->start = GST_DEBUG_FUNCPTR (gst_faac_start);
base_class->stop = GST_DEBUG_FUNCPTR (gst_faac_stop);
base_class->set_format = GST_DEBUG_FUNCPTR (gst_faac_set_format);
@@ -250,10 +240,12 @@ gst_faac_class_init (GstFaacClass * klass)
"Block type encorcing",
GST_TYPE_FAAC_SHORTCTL, FAAC_DEFAULT_SHORTCTL,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ GST_DEBUG_CATEGORY_INIT (faac_debug, "faac", 0, "AAC encoding");
}
static void
-gst_faac_init (GstFaac * faac, GstFaacClass * klass)
+gst_faac_init (GstFaac * faac)
{
}
@@ -314,7 +306,7 @@ static const GstAudioChannelPosition aac_channel_positions[][8] = {
};
static GstCaps *
-gst_faac_getcaps (GstAudioEncoder * enc)
+gst_faac_getcaps (GstAudioEncoder * enc, GstCaps * filter)
{
static volatile gsize sinkcaps = 0;
@@ -337,10 +329,8 @@ gst_faac_getcaps (GstAudioEncoder * enc)
}
g_value_unset (&tmp_v);
- s = gst_structure_new ("audio/x-raw-int",
- "endianness", G_TYPE_INT, G_BYTE_ORDER,
- "signed", G_TYPE_BOOLEAN, TRUE,
- "width", G_TYPE_INT, 16, "depth", G_TYPE_INT, 16, NULL);
+ s = gst_structure_new ("audio/x-raw",
+ "format", G_TYPE_STRING, GST_AUDIO_NE (S16), NULL);
gst_structure_set_value (s, "rate", &rates_arr);
for (i = 1; i <= 6; i++) {
@@ -608,7 +598,7 @@ gst_faac_configure_source_pad (GstFaac * faac)
/* copy it into a buffer */
codec_data = gst_buffer_new_and_alloc (config_len);
- memcpy (GST_BUFFER_DATA (codec_data), config, config_len);
+ gst_buffer_fill (codec_data, 0, config, config_len);
/* add to caps */
gst_caps_set_simple (srccaps,
@@ -667,29 +657,34 @@ gst_faac_handle_frame (GstAudioEncoder * enc, GstBuffer * in_buf)
GstFaac *faac = GST_FAAC (enc);
GstFlowReturn ret = GST_FLOW_OK;
GstBuffer *out_buf;
- gint size, ret_size;
- const guint8 *data;
+ gsize size, ret_size;
+ guint8 *data;
+ guint8 *out_data;
+ gsize out_size;
out_buf = gst_buffer_new_and_alloc (faac->bytes);
+ out_data = gst_buffer_map (out_buf, &out_size, NULL, GST_MAP_WRITE);
if (G_LIKELY (in_buf)) {
- data = GST_BUFFER_DATA (in_buf);
- size = GST_BUFFER_SIZE (in_buf);
+ data = gst_buffer_map (in_buf, &size, NULL, GST_MAP_READ);
} else {
data = NULL;
size = 0;
}
if (G_UNLIKELY ((ret_size = faacEncEncode (faac->handle, (gint32 *) data,
- size / faac->bps, GST_BUFFER_DATA (out_buf),
- GST_BUFFER_SIZE (out_buf))) < 0))
+ size / faac->bps, out_data, out_size)) < 0))
goto encode_failed;
- GST_LOG_OBJECT (faac, "encoder return: %d", ret_size);
- if (G_LIKELY (ret_size > 0)) {
- GST_BUFFER_SIZE (out_buf) = ret_size;
+ gst_buffer_unmap (in_buf, data, size);
+
+ GST_LOG_OBJECT (faac, "encoder return: %" G_GSIZE_FORMAT, ret_size);
+
+ if (ret_size > 0) {
+ gst_buffer_unmap (out_buf, out_data, ret_size);
ret = gst_audio_encoder_finish_frame (enc, out_buf, faac->samples);
} else {
+ gst_buffer_unmap (out_buf, out_data, 0);
gst_buffer_unref (out_buf);
/* re-create encoder after final flush */
if (!in_buf) {
@@ -707,6 +702,9 @@ encode_failed:
{
gst_buffer_unref (out_buf);
GST_ELEMENT_ERROR (faac, LIBRARY, ENCODE, (NULL), (NULL));
+ gst_buffer_unmap (in_buf, data, size);
+ gst_buffer_unmap (out_buf, out_data, 0);
+ gst_buffer_unref (out_buf);
return GST_FLOW_ERROR;
}
}
diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c
index 838df31bc..b6b7f5c98 100644
--- a/ext/faad/gstfaad.c
+++ b/ext/faad/gstfaad.c
@@ -95,24 +95,12 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) { 2, 4 }")
);
-#define STATIC_INT_CAPS(bpp) \
- "audio/x-raw-int, " \
- "endianness = (int) BYTE_ORDER, " \
- "signed = (bool) TRUE, " \
- "width = (int) " G_STRINGIFY (bpp) ", " \
- "depth = (int) " G_STRINGIFY (bpp) ", " \
+#define STATIC_RAW_CAPS(format) \
+ "audio/x-raw, " \
+ "format = (string) "GST_AUDIO_NE(format)", " \
"rate = (int) [ 8000, 96000 ], " \
"channels = (int) [ 1, 8 ]"
-#if 0
-#define STATIC_FLOAT_CAPS(bpp) \
- "audio/x-raw-float, " \
- "endianness = (int) BYTE_ORDER, " \
- "depth = (int) " G_STRINGIFY (bpp) ", " \
- "rate = (int) [ 8000, 96000 ], " \
- "channels = (int) [ 1, 8 ]"
-#endif
-
/*
* All except 16-bit integer are disabled until someone fixes FAAD.
* FAAD allocates approximately 8*1024*2 bytes bytes, which is enough
@@ -122,16 +110,16 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
*/
#define STATIC_CAPS \
- STATIC_INT_CAPS (16)
+ STATIC_RAW_CAPS (S16)
#if 0
#define NOTUSED "; " \
-STATIC_INT_CAPS (24) \
+STATIC_RAW_CAPS (S24) \
"; " \
-STATIC_INT_CAPS (32) \
+STATIC_RAW_CAPS (S32) \
"; " \
-STATIC_FLOAT_CAPS (32) \
+STATIC_RAW_CAPS (F32) \
"; " \
-STATIC_FLOAT_CAPS (64)
+STATIC_RAW_CAPS (F64)
#endif
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
@@ -154,42 +142,37 @@ static void gst_faad_flush (GstAudioDecoder * dec, gboolean hard);
static gboolean gst_faad_open_decoder (GstFaad * faad);
static void gst_faad_close_decoder (GstFaad * faad);
-GST_BOILERPLATE (GstFaad, gst_faad, GstAudioDecoder, GST_TYPE_AUDIO_DECODER);
+#define gst_faad_parent_class parent_class
+G_DEFINE_TYPE (GstFaad, gst_faad, GST_TYPE_AUDIO_DECODER);
static void
-gst_faad_base_init (gpointer klass)
+gst_faad_class_init (GstFaadClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "AAC audio decoder",
"Codec/Decoder/Audio",
"Free MPEG-2/4 AAC decoder",
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
- GST_DEBUG_CATEGORY_INIT (faad_debug, "faad", 0, "AAC decoding");
-}
-
-static void
-gst_faad_class_init (GstFaadClass * klass)
-{
- GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
base_class->start = GST_DEBUG_FUNCPTR (gst_faad_start);
base_class->stop = GST_DEBUG_FUNCPTR (gst_faad_stop);
base_class->set_format = GST_DEBUG_FUNCPTR (gst_faad_set_format);
base_class->parse = GST_DEBUG_FUNCPTR (gst_faad_parse);
base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_faad_handle_frame);
base_class->flush = GST_DEBUG_FUNCPTR (gst_faad_flush);
+
+ GST_DEBUG_CATEGORY_INIT (faad_debug, "faad", 0, "AAC decoding");
}
static void
-gst_faad_init (GstFaad * faad, GstFaadClass * klass)
+gst_faad_init (GstFaad * faad)
{
gst_faad_reset (faad);
}
@@ -279,6 +262,8 @@ gst_faad_set_format (GstAudioDecoder * dec, GstCaps * caps)
GstStructure *str = gst_caps_get_structure (caps, 0);
GstBuffer *buf;
const GValue *value;
+ guint8 *cdata;
+ gsize csize;
/* clean up current decoder, rather than trying to reconfigure */
gst_faad_close_decoder (faad);
@@ -293,8 +278,6 @@ gst_faad_set_format (GstAudioDecoder * dec, GstCaps * caps)
guint32 samplerate;
#endif
guint8 channels;
- guint8 *cdata;
- guint csize;
/* We have codec data, means packetised stream */
faad->packetised = TRUE;
@@ -302,8 +285,7 @@ gst_faad_set_format (GstAudioDecoder * dec, GstCaps * caps)
buf = gst_value_get_buffer (value);
g_return_val_if_fail (buf != NULL, FALSE);
- cdata = GST_BUFFER_DATA (buf);
- csize = GST_BUFFER_SIZE (buf);
+ cdata = gst_buffer_map (buf, &csize, NULL, GST_MAP_READ);
if (csize < 2)
goto wrong_length;
@@ -374,18 +356,21 @@ wrong_length:
{
GST_DEBUG_OBJECT (faad, "codec_data less than 2 bytes long");
gst_object_unref (faad);
+ gst_buffer_unmap (buf, cdata, csize);
return FALSE;
}
open_failed:
{
GST_DEBUG_OBJECT (faad, "failed to create decoder");
gst_object_unref (faad);
+ gst_buffer_unmap (buf, cdata, csize);
return FALSE;
}
init_failed:
{
GST_DEBUG_OBJECT (faad, "faacDecInit2() failed");
gst_object_unref (faad);
+ gst_buffer_unmap (buf, cdata, csize);
return FALSE;
}
}
@@ -508,11 +493,8 @@ gst_faad_update_caps (GstFaad * faad, faacDecFrameInfo * info)
g_free (faad->channel_positions);
faad->channel_positions = g_memdup (info->channel_position, faad->channels);
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "endianness", G_TYPE_INT, G_BYTE_ORDER,
- "signed", G_TYPE_BOOLEAN, TRUE,
- "width", G_TYPE_INT, 16,
- "depth", G_TYPE_INT, 16,
+ caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, GST_AUDIO_NE (S16),
"rate", G_TYPE_INT, faad->samplerate,
"channels", G_TYPE_INT, faad->channels, NULL);
@@ -534,7 +516,7 @@ gst_faad_update_caps (GstFaad * faad, faacDecFrameInfo * info)
GST_DEBUG_OBJECT (faad, "New output caps: %" GST_PTR_FORMAT, caps);
- ret = gst_pad_set_caps (GST_AUDIO_DECODER_SRC_PAD (faad), caps);
+ ret = gst_audio_decoder_set_outcaps (GST_AUDIO_DECODER (faad), caps);
gst_caps_unref (caps);
return ret;
@@ -661,9 +643,13 @@ gst_faad_parse (GstAudioDecoder * dec, GstAdapter * adapter,
*length = size;
return GST_FLOW_OK;
} else {
- data = gst_adapter_peek (adapter, size);
- return gst_faad_sync (faad, data, size, !eos, offset, length) ?
- GST_FLOW_OK : GST_FLOW_UNEXPECTED;
+ gboolean ret;
+
+ data = gst_adapter_map (adapter, size);
+ ret = gst_faad_sync (faad, data, size, !eos, offset, length);
+ gst_adapter_unmap (adapter);
+
+ return (ret ? GST_FLOW_OK : GST_FLOW_UNEXPECTED);
}
}
@@ -672,7 +658,7 @@ gst_faad_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
{
GstFaad *faad;
GstFlowReturn ret = GST_FLOW_OK;
- guint input_size;
+ gsize input_size;
guchar *input_data;
GstBuffer *outbuf;
faacDecFrameInfo info;
@@ -684,8 +670,7 @@ gst_faad_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
if (G_UNLIKELY (!buffer))
return GST_FLOW_OK;
- input_data = GST_BUFFER_DATA (buffer);
- input_size = GST_BUFFER_SIZE (buffer);
+ input_data = gst_buffer_map (buffer, &input_size, NULL, GST_MAP_READ);
init:
/* init if not already done during capsnego */
@@ -763,20 +748,17 @@ init:
goto sample_overflow;
/* note: info.samples is total samples, not per channel */
- ret =
- gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_DECODER_SRC_PAD
- (faad), 0, info.samples * faad->bps,
- GST_PAD_CAPS (GST_AUDIO_DECODER_SRC_PAD (faad)), &outbuf);
- if (ret != GST_FLOW_OK)
- goto out;
-
- memcpy (GST_BUFFER_DATA (outbuf), out, GST_BUFFER_SIZE (outbuf));
+ /* FIXME, add bufferpool and allocator support to the base class */
+ outbuf = gst_buffer_new_allocate (NULL, info.samples * faad->bps, 0);
+ gst_buffer_fill (outbuf, 0, out, info.samples * faad->bps);
ret = gst_audio_decoder_finish_frame (dec, outbuf, 1);
}
} while (FALSE);
out:
+ gst_buffer_unmap (buffer, input_data, input_size);
+
return ret;
/* ERRORS */
diff --git a/ext/flite/gstflitetestsrc.c b/ext/flite/gstflitetestsrc.c
index a8e595c03..716d73601 100644
--- a/ext/flite/gstflitetestsrc.c
+++ b/ext/flite/gstflitetestsrc.c
@@ -86,16 +86,13 @@ static GstStaticPadTemplate gst_flite_test_src_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) true, "
- "width = (int) 16, "
- "depth = (int) 16, " "rate = (int) 48000, " "channels = (int) [1,8]")
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (s16) ", "
+ "rate = (int) 48000, " "channels = (int) [1,8]")
);
-
-GST_BOILERPLATE (GstFliteTestSrc, gst_flite_test_src, GstBaseSrc,
- GST_TYPE_BASE_SRC);
+#define gst_flite_test_src_parent_class parent_class
+G_DEFINE_TYPE (GstFliteTestSrc, gst_flite_test_src, GST_TYPE_BASE_SRC);
static void gst_flite_test_src_set_property (GObject * object,
guint prop_id, const GValue * value, GParamSpec * pspec);
@@ -109,55 +106,46 @@ static GstFlowReturn gst_flite_test_src_create (GstBaseSrc * basesrc,
static gboolean
gst_flite_test_src_set_caps (GstBaseSrc * basesrc, GstCaps * caps);
-
-static void
-gst_flite_test_src_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- GST_DEBUG_CATEGORY_INIT (flite_test_src_debug, "flitetestsrc", 0,
- "Flite Audio Test Source");
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_flite_test_src_src_template);
- gst_element_class_set_details_simple (element_class,
- "Flite speech test source", "Source/Audio",
- "Creates audio test signals identifying channels",
- "David Schleef <ds@schleef.org>");
-}
-
static void
gst_flite_test_src_class_init (GstFliteTestSrcClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
GstBaseSrcClass *gstbasesrc_class;
gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
gstbasesrc_class = (GstBaseSrcClass *) klass;
gobject_class->set_property = gst_flite_test_src_set_property;
gobject_class->get_property = gst_flite_test_src_get_property;
- gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_flite_test_src_start);
- gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_flite_test_src_stop);
- gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_flite_test_src_create);
- gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_flite_test_src_set_caps);
-
g_object_class_install_property (gobject_class, PROP_SAMPLES_PER_BUFFER,
g_param_spec_int ("samplesperbuffer", "Samples per buffer",
"Number of samples in each outgoing buffer",
1, G_MAXINT, DEFAULT_SAMPLES_PER_BUFFER,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_flite_test_src_src_template));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "Flite speech test source", "Source/Audio",
+ "Creates audio test signals identifying channels",
+ "David Schleef <ds@schleef.org>");
+
+ gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_flite_test_src_start);
+ gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_flite_test_src_stop);
+ gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_flite_test_src_create);
+ gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_flite_test_src_set_caps);
+
+ GST_DEBUG_CATEGORY_INIT (flite_test_src_debug, "flitetestsrc", 0,
+ "Flite Audio Test Source");
}
static void
-gst_flite_test_src_init (GstFliteTestSrc * src, GstFliteTestSrcClass * g_class)
+gst_flite_test_src_init (GstFliteTestSrc * src)
{
-#if 0
- GstPad *pad = GST_BASE_SRC_PAD (src);
-#endif
-
src->samplerate = 48000;
src->samples_per_buffer = DEFAULT_SAMPLES_PER_BUFFER;
@@ -367,6 +355,7 @@ gst_flite_test_src_create (GstBaseSrc * basesrc, guint64 offset,
int i;
gint16 *data;
cst_wave *wave;
+ gsize size;
text = get_channel_name (src, src->channel);
@@ -377,14 +366,15 @@ gst_flite_test_src_create (GstBaseSrc * basesrc, guint64 offset,
GST_DEBUG ("type %s, sample_rate %d, num_samples %d, num_channels %d",
wave->type, wave->sample_rate, wave->num_samples, wave->num_channels);
- buf = gst_buffer_new_and_alloc (src->n_channels * sizeof (gint16) *
- wave->num_samples);
+ size = src->n_channels * sizeof (gint16) * wave->num_samples;
+ buf = gst_buffer_new_and_alloc (size);
- data = (void *) GST_BUFFER_DATA (buf);
- memset (data, 0, src->n_channels * sizeof (gint16) * wave->num_samples);
+ data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+ memset (data, 0, size);
for (i = 0; i < wave->num_samples; i++) {
data[i * src->n_channels + src->channel] = wave->samples[i];
}
+ gst_buffer_unmap (buf, data, size);
src->channel++;
if (src->channel == src->n_channels) {
diff --git a/ext/gme/gstgme.c b/ext/gme/gstgme.c
index 14ee7d305..eda7e3f27 100644
--- a/ext/gme/gstgme.c
+++ b/ext/gme/gstgme.c
@@ -45,12 +45,17 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
"width = (int) 16, "
"depth = (int) 16, " "rate = (int) 32000, " "channels = (int) 2"));
-GST_BOILERPLATE (GstGmeDec, gst_gme_dec, GstElement, GST_TYPE_ELEMENT);
-
-static GstFlowReturn gst_gme_dec_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_gme_dec_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_gme_dec_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_gme_dec_src_query (GstPad * pad, GstQuery * query);
+#define gst_gme_dec_parent_class parent_class
+G_DEFINE_TYPE (GstGmeDec, gst_gme_dec, GST_TYPE_ELEMENT);
+
+static GstFlowReturn gst_gme_dec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_gme_dec_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_gme_dec_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_gme_dec_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstStateChangeReturn gst_gme_dec_change_state (GstElement * element,
GstStateChange transition);
static void gst_gme_play (GstPad * pad);
@@ -104,9 +109,12 @@ gme_negotiate (GstGmeDec * gme)
}
static void
-gst_gme_dec_base_init (gpointer g_class)
+gst_gme_dec_class_init (GstGmeDecClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *element_class = (GstElementClass *) klass;
+
+ gobject_class->dispose = gst_gme_dec_dispose;
gst_element_class_set_details_simple (element_class,
"Gaming console music file decoder", "Codec/Audio/Decoder",
@@ -114,35 +122,17 @@ gst_gme_dec_base_init (gpointer g_class)
"Chris Lee <clee@kde.org>, Brian Koropoff <bkoropoff@gmail.com>, "
"Michael Pyne <mpyne@kde.org>, Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
-}
-
-static void
-gst_gme_dec_class_init (GstGmeDecClass * klass)
-{
- GstElementClass *element_class = (GstElementClass *) klass;
- GObjectClass *gobject_class = (GObjectClass *) klass;
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
element_class->change_state = GST_DEBUG_FUNCPTR (gst_gme_dec_change_state);
- gobject_class->dispose = gst_gme_dec_dispose;
-}
-
-static const GstQueryType *
-gst_gme_dec_src_query_type (GstPad * pad)
-{
- static const GstQueryType query_types[] = {
- GST_QUERY_DURATION,
- GST_QUERY_POSITION,
- (GstQueryType) 0
- };
-
- return query_types;
}
static void
-gst_gme_dec_init (GstGmeDec * gme, GstGmeDecClass * klass)
+gst_gme_dec_init (GstGmeDec * gme)
{
gme->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
/* gst_pad_set_query_function (gme->sinkpad, NULL); */
@@ -153,7 +143,6 @@ gst_gme_dec_init (GstGmeDec * gme, GstGmeDecClass * klass)
gme->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
gst_pad_set_event_function (gme->srcpad, gst_gme_dec_src_event);
gst_pad_set_query_function (gme->srcpad, gst_gme_dec_src_query);
- gst_pad_set_query_type_function (gme->srcpad, gst_gme_dec_src_query_type);
gst_pad_use_fixed_caps (gme->srcpad);
gst_element_add_pad (GST_ELEMENT (gme), gme->srcpad);
@@ -175,22 +164,20 @@ gst_gme_dec_dispose (GObject * object)
}
static GstFlowReturn
-gst_gme_dec_chain (GstPad * pad, GstBuffer * buffer)
+gst_gme_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstGmeDec *gme = GST_GME_DEC (gst_pad_get_parent (pad));
+ GstGmeDec *gme = GST_GME_DEC (parent);
/* Accumulate GME data until end-of-stream, then commence playback. */
gst_adapter_push (gme->adapter, buffer);
- gst_object_unref (gme);
-
return GST_FLOW_OK;
}
static gboolean
-gst_gme_dec_sink_event (GstPad * pad, GstEvent * event)
+gst_gme_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstGmeDec *gme = GST_GME_DEC (gst_pad_get_parent (pad));
+ GstGmeDec *gme = GST_GME_DEC (parent);
gboolean result = TRUE;
gboolean forward = FALSE;
@@ -213,15 +200,13 @@ gst_gme_dec_sink_event (GstPad * pad, GstEvent * event)
else
gst_event_unref (event);
- gst_object_unref (gme);
-
return result;
}
static gboolean
-gst_gme_dec_src_event (GstPad * pad, GstEvent * event)
+gst_gme_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstGmeDec *gme = GST_GME_DEC (gst_pad_get_parent (pad));
+ GstGmeDec *gme = GST_GME_DEC (parent);
gboolean result = FALSE;
switch (GST_EVENT_TYPE (event)) {
@@ -253,6 +238,7 @@ gst_gme_dec_src_event (GstPad * pad, GstEvent * event)
stop = GST_CLOCK_TIME_NONE;
if (start_type == GST_SEEK_TYPE_SET) {
+ GstSegment seg;
guint64 cur = gme_tell (gme->player) * GST_MSECOND;
guint64 dest = (guint64) start;
@@ -280,15 +266,19 @@ gst_gme_dec_src_event (GstPad * pad, GstEvent * event)
}
if (flush) {
- gst_pad_push_event (gme->srcpad, gst_event_new_flush_stop ());
+ gst_pad_push_event (gme->srcpad, gst_event_new_flush_stop (TRUE));
}
if (stop == GST_CLOCK_TIME_NONE
&& gme->total_duration != GST_CLOCK_TIME_NONE)
stop = gme->total_duration;
- gst_pad_push_event (gme->srcpad, gst_event_new_new_segment (FALSE, rate,
- GST_FORMAT_TIME, dest, stop, dest));
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ seg.rate = rate;
+ seg.start = dest;
+ seg.stop = stop;
+ seg.time = dest;
+ gst_pad_push_event (gme->srcpad, gst_event_new_segment (&seg));
gme->seekpoint = dest / GST_MSECOND; /* nsecs to msecs */
gme->seeking = TRUE;
@@ -306,15 +296,13 @@ gst_gme_dec_src_event (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (gme);
-
return result;
}
static gboolean
-gst_gme_dec_src_query (GstPad * pad, GstQuery * query)
+gst_gme_dec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstGmeDec *gme = GST_GME_DEC (gst_pad_get_parent (pad));
+ GstGmeDec *gme = GST_GME_DEC (parent);
gboolean result = TRUE;
switch (GST_QUERY_TYPE (query)) {
@@ -345,12 +333,10 @@ gst_gme_dec_src_query (GstPad * pad, GstQuery * query)
break;
}
default:
- result = gst_pad_query_default (pad, query);
+ result = gst_pad_query_default (pad, parent, query);
break;
}
- gst_object_unref (gme);
-
return result;
}
@@ -365,13 +351,15 @@ gst_gme_play (GstPad * pad)
const int NUM_SAMPLES = 1600; /* 4 bytes (stereo 16-bit) per sample */
if (!seeking) {
+ short *data;
+
out = gst_buffer_new_and_alloc (NUM_SAMPLES * 4);
- gst_buffer_set_caps (out, GST_PAD_CAPS (pad));
GST_BUFFER_TIMESTAMP (out) = gme_tell (gme->player) * GST_MSECOND;
- gme_err =
- gme_play (gme->player, NUM_SAMPLES * 2,
- (short *) GST_BUFFER_DATA (out));
+ data = gst_buffer_map (out, NULL, NULL, GST_MAP_WRITE);
+ gme_err = gme_play (gme->player, NUM_SAMPLES * 2, data);
+ gst_buffer_unmap (out, data, -1);
+
if (gme_err) {
GST_ELEMENT_ERROR (gme, STREAM, DEMUX, (NULL), (gme_err));
gst_pad_pause_task (pad);
@@ -384,7 +372,6 @@ gst_gme_play (GstPad * pad)
gme->seeking = FALSE;
out = gst_buffer_new ();
- gst_buffer_set_caps (out, GST_PAD_CAPS (pad));
}
if ((flow_return = gst_pad_push (gme->srcpad, out)) != GST_FLOW_OK) {
@@ -423,6 +410,9 @@ gme_setup (GstGmeDec * gme)
guint64 total_duration;
guint64 fade_time;
GstBuffer *buffer;
+ GstSegment seg;
+ guint8 *data;
+ gsize size;
if (!gst_adapter_available (gme->adapter) || !gme_negotiate (gme)) {
return FALSE;
@@ -432,9 +422,9 @@ gme_setup (GstGmeDec * gme)
gst_adapter_take_buffer (gme->adapter,
gst_adapter_available (gme->adapter));
- gme_err =
- gme_open_data (GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer),
- &gme->player, 32000);
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+ gme_err = gme_open_data (data, size, &gme->player, 32000);
+ gst_buffer_unmap (buffer, data, size);
gst_buffer_unref (buffer);
if (gme_err || !gme->player) {
@@ -450,7 +440,7 @@ gme_setup (GstGmeDec * gme)
gme_err = gme_track_info (gme->player, &info, 0);
- taglist = gst_tag_list_new ();
+ taglist = gst_tag_list_new_empty ();
if (info->song && *info->song)
gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE,
@@ -486,7 +476,7 @@ gme_setup (GstGmeDec * gme)
gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
GST_TAG_DURATION, total_duration, NULL);
- gst_element_found_tags_for_pad (GST_ELEMENT (gme), gme->srcpad, taglist);
+ gst_pad_push_event (gme->srcpad, gst_event_new_tag (taglist));
g_free (info);
@@ -498,8 +488,8 @@ gme_setup (GstGmeDec * gme)
if (fade_time)
gme_set_fade (gme->player, fade_time);
- gst_pad_push_event (gme->srcpad, gst_event_new_new_segment (FALSE, 1.0,
- GST_FORMAT_TIME, 0, -1, 0));
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ gst_pad_push_event (gme->srcpad, gst_event_new_segment (&seg));
gst_pad_start_task (gme->srcpad, (GstTaskFunction) gst_gme_play, gme->srcpad);
diff --git a/ext/gsettings/gstswitchsink.c b/ext/gsettings/gstswitchsink.c
index da31df2b0..1fccf683f 100644
--- a/ext/gsettings/gstswitchsink.c
+++ b/ext/gsettings/gstswitchsink.c
@@ -64,7 +64,8 @@ gst_switch_sink_class_init (GstSwitchSinkClass * klass)
/* Provide a default pad template if the child didn't */
child_pad_templ = gst_element_class_get_pad_template (eklass, "sink");
if (child_pad_templ == NULL) {
- gst_element_class_add_static_pad_template (eklass, &sink_template);
+ gst_element_class_add_pad_template (eklass,
+ gst_static_pad_template_get (&sink_template));
}
}
diff --git a/ext/gsettings/gstswitchsrc.c b/ext/gsettings/gstswitchsrc.c
index 664e0bd8a..0136e4a86 100644
--- a/ext/gsettings/gstswitchsrc.c
+++ b/ext/gsettings/gstswitchsrc.c
@@ -60,7 +60,8 @@ gst_switch_src_class_init (GstSwitchSrcClass * klass)
/* Provide a default pad template if the child didn't */
child_pad_templ = gst_element_class_get_pad_template (eklass, "src");
if (child_pad_templ == NULL) {
- gst_element_class_add_static_pad_template (eklass, &src_template);
+ gst_element_class_add_pad_template (eklass,
+ gst_static_pad_template_get (&src_template));
}
}
diff --git a/ext/gsm/gstgsmdec.c b/ext/gsm/gstgsmdec.c
index 65d3275e5..3318bdc77 100644
--- a/ext/gsm/gstgsmdec.c
+++ b/ext/gsm/gstgsmdec.c
@@ -106,10 +106,10 @@ gst_gsmdec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gsmdec_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gsmdec_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gsmdec_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gsmdec_src_template));
gst_element_class_set_details_simple (element_class, "GSM audio decoder",
"Codec/Decoder/Audio",
"Decodes GSM encoded audio", "Philippe Khalaf <burger@speedy.org>");
diff --git a/ext/gsm/gstgsmenc.c b/ext/gsm/gstgsmenc.c
index 52d0b55b2..434c4b1fa 100644
--- a/ext/gsm/gstgsmenc.c
+++ b/ext/gsm/gstgsmenc.c
@@ -100,10 +100,10 @@ gst_gsmenc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gsmenc_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gsmenc_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gsmenc_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gsmenc_src_template));
gst_element_class_set_details_simple (element_class, "GSM audio encoder",
"Codec/Encoder/Audio",
"Encodes GSM audio", "Philippe Khalaf <burger@speedy.org>");
diff --git a/ext/hermes/gsthermescolorspace.c b/ext/hermes/gsthermescolorspace.c
index 477a43f36..c46572c77 100644
--- a/ext/hermes/gsthermescolorspace.c
+++ b/ext/hermes/gsthermescolorspace.c
@@ -501,10 +501,10 @@ gst_hermes_colorspace_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_hermes_colorspace_src_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_hermes_colorspace_sink_pad_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_hermes_colorspace_src_pad_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_hermes_colorspace_sink_pad_template));
gst_element_class_set_details_simple (element_class, "Colorspace converter",
"Filter/Converter/Video",
diff --git a/ext/jp2k/gstjasperdec.c b/ext/jp2k/gstjasperdec.c
index 7cde2fd13..e896142bd 100644
--- a/ext/jp2k/gstjasperdec.c
+++ b/ext/jp2k/gstjasperdec.c
@@ -95,10 +95,10 @@ gst_jasper_dec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_jasper_dec_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_jasper_dec_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_jasper_dec_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_jasper_dec_sink_template));
gst_element_class_set_details_simple (element_class,
"Jasper JPEG2000 image decoder", "Codec/Decoder/Image",
"Decodes JPEG2000 encoded images using jasper",
diff --git a/ext/jp2k/gstjasperenc.c b/ext/jp2k/gstjasperenc.c
index a43bb36ec..ae7b92567 100644
--- a/ext/jp2k/gstjasperenc.c
+++ b/ext/jp2k/gstjasperenc.c
@@ -99,10 +99,10 @@ gst_jasper_enc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_jasper_enc_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_jasper_enc_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_jasper_enc_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_jasper_enc_sink_template));
gst_element_class_set_details_simple (element_class,
"Jasper JPEG2000 image encoder", "Codec/Encoder/Image",
"Encodes video to JPEG2000 using jasper",
diff --git a/ext/kate/gstkatedec.c b/ext/kate/gstkatedec.c
index 76c918ebc..6b1ee73d4 100644
--- a/ext/kate/gstkatedec.c
+++ b/ext/kate/gstkatedec.c
@@ -117,7 +117,8 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS ("text/plain; text/x-pango-markup; " GST_KATE_SPU_MIME_TYPE)
);
-GST_BOILERPLATE (GstKateDec, gst_kate_dec, GstElement, GST_TYPE_ELEMENT);
+#define gst_kate_dec_parent_class parent_class
+G_DEFINE_TYPE (GstKateDec, gst_kate_dec, GST_TYPE_ELEMENT);
static void gst_kate_dec_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -130,21 +131,7 @@ static GstStateChangeReturn gst_kate_dec_change_state (GstElement * element,
static gboolean gst_kate_dec_sink_query (GstPad * pad, GstQuery * query);
static gboolean gst_kate_dec_sink_event (GstPad * pad, GstEvent * event);
static gboolean gst_kate_dec_sink_handle_event (GstPad * pad, GstEvent * event);
-static GstCaps *gst_kate_dec_src_get_caps (GstPad * pad);
-
-static void
-gst_kate_dec_base_init (gpointer gclass)
-{
-
- GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_set_details_simple (element_class,
- "Kate stream text decoder", "Codec/Decoder/Subtitle",
- "Decodes Kate text streams",
- "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
-}
+static GstCaps *gst_kate_dec_src_get_caps (GstPad * pad, GstCaps * filter);
/* initialize the plugin's class */
static void
@@ -168,6 +155,16 @@ gst_kate_dec_class_init (GstKateDecClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_kate_dec_change_state);
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_factory));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "Kate stream text decoder", "Codec/Decoder/Subtitle",
+ "Decodes Kate text streams",
+ "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
}
/* initialize the new element
@@ -176,7 +173,7 @@ gst_kate_dec_class_init (GstKateDecClass * klass)
* initialize structure
*/
static void
-gst_kate_dec_init (GstKateDec * dec, GstKateDecClass * gclass)
+gst_kate_dec_init (GstKateDec * dec)
{
GST_DEBUG_OBJECT (dec, "gst_kate_dec_init");
@@ -292,12 +289,11 @@ gst_kate_dec_chain (GstPad * pad, GstBuffer * buf)
buffer = gst_buffer_new_and_alloc (len + 1);
if (G_LIKELY (buffer)) {
const char *mime = plain ? "text/plain" : "text/x-pango-markup";
- GstCaps *caps = gst_caps_new_simple (mime, NULL);
- gst_buffer_set_caps (buffer, caps);
+ GstCaps *caps = gst_caps_new_empty_simple (mime);
gst_caps_unref (caps);
/* allocate and copy the NULs, but don't include them in passed size */
- memcpy (GST_BUFFER_DATA (buffer), escaped, len + 1);
- GST_BUFFER_SIZE (buffer) = len;
+ gst_buffer_fill (buffer, 0, escaped, len + 1);
+ gst_buffer_resize (buffer, 0, len);
GST_BUFFER_TIMESTAMP (buffer) = ev->start_time * GST_SECOND;
GST_BUFFER_DURATION (buffer) =
(ev->end_time - ev->start_time) * GST_SECOND;
@@ -328,9 +324,6 @@ gst_kate_dec_chain (GstPad * pad, GstBuffer * buf)
if (ev->bitmap && ev->palette) {
GstBuffer *buffer = gst_kate_spu_encode_spu (kd, ev);
if (buffer) {
- GstCaps *caps = gst_caps_new_simple (GST_KATE_SPU_MIME_TYPE, NULL);
- gst_buffer_set_caps (buffer, caps);
- gst_caps_unref (caps);
GST_BUFFER_TIMESTAMP (buffer) = ev->start_time * GST_SECOND;
GST_BUFFER_DURATION (buffer) =
(ev->end_time - ev->start_time) * GST_SECOND;
@@ -414,8 +407,8 @@ gst_kate_dec_sink_handle_event (GstPad * pad, GstEvent * event)
GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
- gst_kate_util_decoder_base_new_segment_event (&kd->decoder, event);
+ case GST_EVENT_SEGMENT:
+ gst_kate_util_decoder_base_segment_event (&kd->decoder, event);
res = gst_pad_event_default (pad, event);
break;
@@ -440,7 +433,7 @@ gst_kate_dec_sink_handle_event (GstPad * pad, GstEvent * event)
}
static GstCaps *
-gst_kate_dec_src_get_caps (GstPad * pad)
+gst_kate_dec_src_get_caps (GstPad * pad, GstCaps * filter)
{
GstKateDec *kd = (GstKateDec *) (gst_object_get_parent (GST_OBJECT (pad)));
GstCaps *caps;
diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c
index e378a5cf3..8ee8b69df 100644
--- a/ext/kate/gstkateenc.c
+++ b/ext/kate/gstkateenc.c
@@ -142,24 +142,10 @@ static GstStateChangeReturn gst_kate_enc_change_state (GstElement * element,
static gboolean gst_kate_enc_sink_event (GstPad * pad, GstEvent * event);
static const GstQueryType *gst_kate_enc_source_query_type (GstPad * pad);
static gboolean gst_kate_enc_source_query (GstPad * pad, GstQuery * query);
-static void gst_kate_enc_add_interfaces (GType kateenc_type);
-GST_BOILERPLATE_FULL (GstKateEnc, gst_kate_enc, GstElement,
- GST_TYPE_ELEMENT, gst_kate_enc_add_interfaces);
-
-static void
-gst_kate_enc_base_init (gpointer gclass)
-{
-
- GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_set_details_simple (element_class, "Kate stream encoder",
- "Codec/Encoder/Subtitle",
- "Encodes Kate streams from text or subpictures",
- "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
-}
+#define gst_kate_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstKateEnc, gst_kate_enc, GST_TYPE_ELEMENT,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL));
/* initialize the plugin's class */
static void
@@ -171,8 +157,6 @@ gst_kate_enc_class_init (GstKateEncClass * klass)
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
- parent_class = g_type_class_peek_parent (klass);
-
gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_kate_enc_set_property);
gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_kate_enc_get_property);
gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_kate_enc_dispose);
@@ -226,15 +210,16 @@ gst_kate_enc_class_init (GstKateEncClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_kate_enc_change_state);
-}
-static void
-gst_kate_enc_add_interfaces (GType kateenc_type)
-{
- static const GInterfaceInfo tag_setter_info = { NULL, NULL, NULL };
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_factory));
- g_type_add_interface_static (kateenc_type, GST_TYPE_TAG_SETTER,
- &tag_setter_info);
+ gst_element_class_set_details_simple (gstelement_class, "Kate stream encoder",
+ "Codec/Encoder/Subtitle",
+ "Encodes Kate streams from text or subpictures",
+ "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
}
/* initialize the new element
@@ -243,7 +228,7 @@ gst_kate_enc_add_interfaces (GType kateenc_type)
* initialize structure
*/
static void
-gst_kate_enc_init (GstKateEnc * ke, GstKateEncClass * gclass)
+gst_kate_enc_init (GstKateEnc * ke)
{
GST_DEBUG_OBJECT (ke, "gst_kate_enc_init");
@@ -252,8 +237,6 @@ gst_kate_enc_init (GstKateEnc * ke, GstKateEncClass * gclass)
GST_DEBUG_FUNCPTR (gst_kate_enc_chain));
gst_pad_set_event_function (ke->sinkpad,
GST_DEBUG_FUNCPTR (gst_kate_enc_sink_event));
- gst_pad_set_setcaps_function (ke->sinkpad,
- GST_DEBUG_FUNCPTR (gst_kate_enc_setcaps));
gst_element_add_pad (GST_ELEMENT (ke), ke->sinkpad);
ke->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
@@ -408,14 +391,14 @@ gst_kate_enc_create_buffer (GstKateEnc * ke, kate_packet * kp,
g_return_val_if_fail (kp != NULL, NULL);
g_return_val_if_fail (kp->data != NULL, NULL);
- buffer = gst_buffer_try_new_and_alloc (kp->nbytes);
+ buffer = gst_buffer_new_allocate (NULL, kp->nbytes, 0);
if (G_UNLIKELY (!buffer)) {
GST_WARNING_OBJECT (ke, "Failed to allocate buffer for %u bytes",
(guint) kp->nbytes);
return NULL;
}
- memcpy (GST_BUFFER_DATA (buffer), kp->data, kp->nbytes);
+ gst_buffer_fill (buffer, 0, kp->data, kp->nbytes);
/* same system as other Ogg codecs, as per ext/ogg/README:
OFFSET_END is the granulepos
@@ -642,16 +625,6 @@ gst_kate_enc_send_headers (GstKateEnc * ke)
if (caps) {
GST_DEBUG_OBJECT (ke, "here are the caps: %" GST_PTR_FORMAT, caps);
gst_pad_set_caps (ke->srcpad, caps);
-
- GST_LOG_OBJECT (ke, "setting caps on headers");
- item = headers;
- while (item) {
- GstBuffer *buffer = item->data;
- GST_LOG_OBJECT (ke, "settings caps on header %p", buffer);
- gst_buffer_set_caps (buffer, caps);
- item = item->next;
- }
-
gst_caps_unref (caps);
GST_LOG_OBJECT (ke, "pushing headers");
@@ -867,7 +840,7 @@ gst_kate_enc_chain_spu (GstKateEnc * ke, GstBuffer * buf)
#endif
GST_DEBUG_OBJECT (ke, "Encoding %ux%u SPU: (%u bytes) from %f to %f",
(guint) kbitmap->width, (guint) kbitmap->height,
- GST_BUFFER_SIZE (buf), t0, t1);
+ gst_buffer_get_size (buf), t0, t1);
ret = kate_encode_set_region (&ke->k, kregion);
if (G_UNLIKELY (ret < 0)) {
@@ -951,15 +924,18 @@ gst_kate_enc_chain_text (GstKateEnc * ke, GstBuffer * buf,
("kate_encode_set_markup_type: %d", ret));
rflow = GST_FLOW_ERROR;
} else {
- const char *text = (const char *) GST_BUFFER_DATA (buf);
+ char *text;
+ gsize text_len;
+
+ text = gst_buffer_map (buf, &text_len, NULL, GST_MAP_READ);
if (text) {
- size_t text_len = GST_BUFFER_SIZE (buf);
kate_float t0 = start / (double) GST_SECOND;
kate_float t1 = stop / (double) GST_SECOND;
GST_LOG_OBJECT (ke, "Encoding text: %*.*s (%u bytes) from %f to %f",
- (int) text_len, (int) text_len, GST_BUFFER_DATA (buf),
- GST_BUFFER_SIZE (buf), t0, t1);
+ (int) text_len, (int) text_len, text, text_len, t0, t1);
+
ret = kate_encode_text (&ke->k, t0, t1, text, text_len, &kp);
+
if (G_UNLIKELY (ret < 0)) {
GST_ELEMENT_ERROR (ke, STREAM, ENCODE, (NULL),
("Failed to encode text: %d", ret));
@@ -974,6 +950,7 @@ gst_kate_enc_chain_text (GstKateEnc * ke, GstBuffer * buf,
("no text in text packet"));
rflow = GST_FLOW_ERROR;
}
+ gst_buffer_unmap (buf, text, text_len);
}
return rflow;
@@ -990,10 +967,10 @@ gst_kate_enc_chain (GstPad * pad, GstBuffer * buf)
GstCaps *caps;
const gchar *mime_type = NULL;
- GST_DEBUG_OBJECT (ke, "got packet, %u bytes", GST_BUFFER_SIZE (buf));
+ GST_DEBUG_OBJECT (ke, "got packet, %u bytes", gst_buffer_get_size (buf));
/* get the type of the data we're being sent */
- caps = GST_PAD_CAPS (pad);
+ caps = gst_pad_get_current_caps (pad);
if (G_UNLIKELY (caps == NULL)) {
GST_WARNING_OBJECT (ke, "No input caps set");
rflow = GST_FLOW_NOT_NEGOTIATED;
@@ -1025,6 +1002,7 @@ gst_kate_enc_chain (GstPad * pad, GstBuffer * buf)
} else {
GST_WARNING_OBJECT (ke, "Packet has no MIME type, ignored");
}
+ gst_caps_unref (caps);
}
gst_buffer_unref (buf);
@@ -1047,7 +1025,7 @@ gst_kate_enc_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
- ke->tags = gst_tag_list_new ();
+ ke->tags = gst_tag_list_new_empty ();
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
GST_DEBUG_OBJECT (ke, "READY -> PAUSED, initializing kate state");
@@ -1259,38 +1237,46 @@ static gboolean
gst_kate_enc_sink_event (GstPad * pad, GstEvent * event)
{
GstKateEnc *ke = GST_KATE_ENC (gst_pad_get_parent (pad));
- GstStructure *structure;
+ const GstStructure *structure;
gboolean ret;
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_kate_enc_setcaps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_SEGMENT:
GST_LOG_OBJECT (ke, "Got newsegment event");
if (ke->initialized) {
GST_LOG_OBJECT (ke, "ensuring all headers are in");
if (gst_kate_enc_flush_headers (ke) != GST_FLOW_OK) {
GST_WARNING_OBJECT (ke, "Failed to flush headers");
} else {
- GstFormat format;
- gint64 timestamp;
+ GstSegment seg;
- gst_event_parse_new_segment (event, NULL, NULL, &format, &timestamp,
- NULL, NULL);
- if (format != GST_FORMAT_TIME || !GST_CLOCK_TIME_IS_VALID (timestamp)) {
+ gst_event_copy_segment (event, &seg);
+ if (seg.format != GST_FORMAT_TIME
+ || !GST_CLOCK_TIME_IS_VALID (seg.start)) {
GST_WARNING_OBJECT (ke,
"No time in newsegment event %p, format %d, timestamp %"
- G_GINT64_FORMAT, event, (int) format, timestamp);
+ G_GINT64_FORMAT, event, (int) seg.format, seg.start);
/* to be safe, we'd need to generate a keepalive anyway, but we'd have to guess at the timestamp to use; a
good guess would be the last known timestamp plus the keepalive time, but if we then get a packet with a
timestamp less than this, it would fail to encode, which would be Bad. If we don't encode a keepalive, we
run the risk of stalling the pipeline and hanging, which is Very Bad. Oh dear. We can't exit(-1), can we ? */
} else {
- float t = timestamp / (double) GST_SECOND;
+ float t = seg.start / (double) GST_SECOND;
if (ke->delayed_spu
&& t - ke->delayed_start / (double) GST_SECOND >=
ke->default_spu_duration) {
if (G_UNLIKELY (gst_kate_enc_flush_waiting (ke,
- timestamp) != GST_FLOW_OK)) {
+ seg.start) != GST_FLOW_OK)) {
GST_WARNING_OBJECT (ke, "Failed to encode delayed packet");
/* continue with new segment handling anyway */
}
@@ -1305,7 +1291,7 @@ gst_kate_enc_sink_event (GstPad * pad, GstEvent * event)
/* we only generate a keepalive if there is no SPU waiting, as it would
mean out of sequence start times - and granulepos */
if (!ke->delayed_spu) {
- gst_kate_enc_generate_keepalive (ke, timestamp);
+ gst_kate_enc_generate_keepalive (ke, seg.start);
}
}
}
@@ -1317,7 +1303,7 @@ gst_kate_enc_sink_event (GstPad * pad, GstEvent * event)
case GST_EVENT_CUSTOM_DOWNSTREAM:
GST_LOG_OBJECT (ke, "Got custom downstream event");
/* adapted from the dvdsubdec element */
- structure = event->structure;
+ structure = gst_event_get_structure (event);
if (structure != NULL
&& gst_structure_has_name (structure, "application/x-gst-dvd")) {
if (ke->initialized) {
diff --git a/ext/kate/gstkateparse.c b/ext/kate/gstkateparse.c
index fff1208b3..80c7ca41b 100644
--- a/ext/kate/gstkateparse.c
+++ b/ext/kate/gstkateparse.c
@@ -83,7 +83,8 @@ static GstStaticPadTemplate gst_kate_parse_src_factory =
GST_STATIC_CAPS ("subtitle/x-kate; application/x-kate")
);
-GST_BOILERPLATE (GstKateParse, gst_kate_parse, GstElement, GST_TYPE_ELEMENT);
+#define gst_kate_parse_parent_class parent_class
+G_DEFINE_TYPE (GstKateParse, gst_kate_parse, GST_TYPE_ELEMENT);
static GstFlowReturn gst_kate_parse_chain (GstPad * pad, GstBuffer * buffer);
static GstStateChangeReturn gst_kate_parse_change_state (GstElement * element,
@@ -99,32 +100,27 @@ static GstFlowReturn gst_kate_parse_parse_packet (GstKateParse * parse,
GstBuffer * buf);
static void
-gst_kate_parse_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_kate_parse_src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &gst_kate_parse_sink_factory);
- gst_element_class_set_details_simple (element_class, "Kate stream parser",
- "Codec/Parser/Subtitle",
- "parse raw kate streams",
- "Vincent Penquerc'h <ogg.k.ogg.k at googlemail dot com>");
-}
-
-static void
gst_kate_parse_class_init (GstKateParseClass * klass)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
gstelement_class->change_state = gst_kate_parse_change_state;
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_kate_parse_src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_kate_parse_sink_factory));
+
+ gst_element_class_set_details_simple (gstelement_class, "Kate stream parser",
+ "Codec/Parser/Subtitle",
+ "parse raw kate streams",
+ "Vincent Penquerc'h <ogg.k.ogg.k at googlemail dot com>");
+
klass->parse_packet = GST_DEBUG_FUNCPTR (gst_kate_parse_parse_packet);
}
static void
-gst_kate_parse_init (GstKateParse * parse, GstKateParseClass * g_class)
+gst_kate_parse_init (GstKateParse * parse)
{
parse->sinkpad =
gst_pad_new_from_static_template (&gst_kate_parse_sink_factory, "sink");
@@ -166,7 +162,7 @@ gst_kate_parse_push_headers (GstKateParse * parse)
/* get the headers into the caps, passing them to kate as we go */
caps =
gst_kate_util_set_header_on_caps (&parse->element,
- gst_pad_get_negotiated_caps (parse->sinkpad), parse->streamheader);
+ gst_pad_get_current_caps (parse->sinkpad), parse->streamheader);
if (G_UNLIKELY (!caps)) {
GST_ELEMENT_ERROR (parse, STREAM, DECODE, (NULL),
@@ -184,13 +180,18 @@ gst_kate_parse_push_headers (GstKateParse * parse)
headers = parse->streamheader;
while (headers) {
+ guint8 *data;
+ gsize size;
+
outbuf = GST_BUFFER_CAST (headers->data);
- kate_packet_wrap (&packet, GST_BUFFER_SIZE (outbuf),
- GST_BUFFER_DATA (outbuf));
+
+ data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READ);
+ kate_packet_wrap (&packet, size, data);
ret = kate_decode_headerin (&parse->ki, &parse->kc, &packet);
if (G_UNLIKELY (ret < 0)) {
GST_WARNING_OBJECT (parse, "kate_decode_headerin returned %d", ret);
}
+ gst_buffer_unmap (outbuf, data, size);
/* takes ownership of outbuf, which was previously in parse->streamheader */
outbuf_list = g_list_append (outbuf_list, outbuf);
headers = headers->next;
@@ -203,7 +204,6 @@ gst_kate_parse_push_headers (GstKateParse * parse)
headers = outbuf_list;
while (headers) {
outbuf = GST_BUFFER_CAST (headers->data);
- gst_buffer_set_caps (outbuf, GST_PAD_CAPS (parse->srcpad));
gst_pad_push (parse->srcpad, outbuf);
headers = headers->next;
}
@@ -255,8 +255,6 @@ gst_kate_parse_push_buffer (GstKateParse * parse, GstBuffer * buf,
GST_BUFFER_OFFSET_END (buf) = granulepos;
GST_BUFFER_TIMESTAMP (buf) = GST_BUFFER_OFFSET (buf);
- gst_buffer_set_caps (buf, GST_PAD_CAPS (parse->srcpad));
-
return gst_pad_push (parse->srcpad, buf);
}
@@ -318,7 +316,7 @@ gst_kate_parse_queue_buffer (GstKateParse * parse, GstBuffer * buf)
GstFlowReturn ret = GST_FLOW_OK;
gint64 granpos;
- buf = gst_buffer_make_metadata_writable (buf);
+ buf = gst_buffer_make_writable (buf);
/* oggdemux stores the granule pos in the offset end */
granpos = GST_BUFFER_OFFSET_END (buf);
@@ -347,17 +345,20 @@ static GstFlowReturn
gst_kate_parse_parse_packet (GstKateParse * parse, GstBuffer * buf)
{
GstFlowReturn ret = GST_FLOW_OK;
+ guint8 header[1];
+ gsize size;
g_assert (parse);
parse->packetno++;
+ size = gst_buffer_extract (buf, 0, header, 1);
+
GST_LOG_OBJECT (parse, "Got packet %02x, %u bytes",
- GST_BUFFER_SIZE (buf) ? GST_BUFFER_DATA (buf)[0] : -1,
- GST_BUFFER_SIZE (buf));
+ size ? header[0] : -1, gst_buffer_get_size (buf));
- if (GST_BUFFER_SIZE (buf) > 0 && GST_BUFFER_DATA (buf)[0] & 0x80) {
- GST_DEBUG_OBJECT (parse, "Found header %02x", GST_BUFFER_DATA (buf)[0]);
+ if (size > 0 && header[0] & 0x80) {
+ GST_DEBUG_OBJECT (parse, "Found header %02x", header[0]);
/* if 0x80 is set, it's streamheader,
* so put it on the streamheader list and return */
parse->streamheader = g_list_append (parse->streamheader, buf);
@@ -387,7 +388,7 @@ gst_kate_parse_chain (GstPad * pad, GstBuffer * buffer)
g_assert (klass->parse_packet != NULL);
- if (G_UNLIKELY (GST_PAD_CAPS (pad) == NULL))
+ if (G_UNLIKELY (!gst_pad_has_current_caps (pad)))
return GST_FLOW_NOT_NEGOTIATED;
return klass->parse_packet (parse, buffer);
@@ -602,7 +603,7 @@ gst_kate_parse_change_state (GstElement * element, GstStateChange transition)
break;
}
- ret = parent_class->change_state (element, transition);
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
diff --git a/ext/kate/gstkatespu.c b/ext/kate/gstkatespu.c
index 439291634..85606495e 100644
--- a/ext/kate/gstkatespu.c
+++ b/ext/kate/gstkatespu.c
@@ -276,17 +276,17 @@ gst_kate_spu_decode_command_sequence (GstKateEnc * ke, GstBuffer * buf,
guint16 date;
guint16 next_command_sequence;
const guint8 *ptr;
+ guint8 *data;
guint16 sz;
+ gsize size;
- if (command_sequence_offset >= GST_BUFFER_SIZE (buf)) {
- GST_ELEMENT_ERROR (ke, STREAM, DECODE, (NULL),
- ("Command sequence offset %u is out of range %u",
- command_sequence_offset, GST_BUFFER_SIZE (buf)));
- return GST_FLOW_ERROR;
- }
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
- ptr = GST_BUFFER_DATA (buf) + command_sequence_offset;
- sz = GST_BUFFER_SIZE (buf) - command_sequence_offset;
+ if (command_sequence_offset >= size)
+ goto out_of_range;
+
+ ptr = data + command_sequence_offset;
+ sz = size - command_sequence_offset;
GST_DEBUG_OBJECT (ke, "Decoding command sequence at %u (%u bytes)",
command_sequence_offset, sz);
@@ -353,21 +353,35 @@ gst_kate_spu_decode_command_sequence (GstKateEnc * ke, GstBuffer * buf,
if (next_command_sequence != command_sequence_offset) {
GST_DEBUG_OBJECT (ke, "Jumping to next sequence at offset %u",
next_command_sequence);
+ gst_buffer_unmap (buf, data, size);
return gst_kate_spu_decode_command_sequence (ke, buf,
next_command_sequence);
} else {
+ gst_buffer_unmap (buf, data, size);
GST_DEBUG_OBJECT (ke, "No more sequences to decode");
return GST_FLOW_OK;
}
break;
default:
+ gst_buffer_unmap (buf, data, size);
GST_ELEMENT_ERROR (ke, STREAM, ENCODE, (NULL),
("Invalid SPU command: %u", cmd));
return GST_FLOW_ERROR;
}
}
+ gst_buffer_unmap (buf, data, size);
GST_ELEMENT_ERROR (ke, STREAM, ENCODE, (NULL), ("Error parsing SPU"));
return GST_FLOW_ERROR;
+
+ /* ERRORS */
+out_of_range:
+ {
+ gst_buffer_unmap (buf, data, size);
+ GST_ELEMENT_ERROR (ke, STREAM, DECODE, (NULL),
+ ("Command sequence offset %u is out of range %u",
+ command_sequence_offset, size));
+ return GST_FLOW_ERROR;
+ }
}
static inline int
@@ -451,8 +465,10 @@ GstFlowReturn
gst_kate_spu_decode_spu (GstKateEnc * ke, GstBuffer * buf, kate_region * kr,
kate_bitmap * kb, kate_palette * kp)
{
- const guint8 *ptr = GST_BUFFER_DATA (buf);
- size_t sz = GST_BUFFER_SIZE (buf);
+ guint8 *data;
+ gsize size;
+ const guint8 *ptr;
+ size_t sz;
guint16 packet_size;
guint16 x, y;
size_t n;
@@ -463,6 +479,11 @@ gst_kate_spu_decode_spu (GstKateEnc * ke, GstBuffer * buf, kate_region * kr,
guint16 next_command_sequence;
guint16 code;
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
+ ptr = data;
+ sz = size;
+
/* before decoding anything, initialize to sensible defaults */
memset (ke->spu_colormap, 0, sizeof (ke->spu_colormap));
memset (ke->spu_alpha, 0, sizeof (ke->spu_alpha));
@@ -476,19 +497,21 @@ gst_kate_spu_decode_spu (GstKateEnc * ke, GstBuffer * buf, kate_region * kr,
packet_size = GST_KATE_UINT16_BE (ptr);
ADVANCE (2);
GST_DEBUG_OBJECT (ke, "packet size %u (GstBuffer size %u)", packet_size,
- GST_BUFFER_SIZE (buf));
+ size);
CHECK (2);
next_command_sequence = GST_KATE_UINT16_BE (ptr);
ADVANCE (2);
- ptr = GST_BUFFER_DATA (buf) + next_command_sequence;
- sz = GST_BUFFER_SIZE (buf) - next_command_sequence;
+ ptr = data + next_command_sequence;
+ sz = size - next_command_sequence;
GST_DEBUG_OBJECT (ke, "next command sequence at %u for %u",
next_command_sequence, (guint) sz);
rflow = gst_kate_spu_decode_command_sequence (ke, buf, next_command_sequence);
- if (G_UNLIKELY (rflow != GST_FLOW_OK))
+ if (G_UNLIKELY (rflow != GST_FLOW_OK)) {
+ gst_buffer_unmap (buf, data, size);
return rflow;
+ }
/* if no addresses or sizes were given, or if they define an empty SPU, nothing more to do */
if (G_UNLIKELY (ke->spu_right - ke->spu_left < 0
@@ -501,13 +524,16 @@ gst_kate_spu_decode_spu (GstKateEnc * ke, GstBuffer * buf, kate_region * kr,
GST_WARNING_OBJECT (ke, "SPU area is empty, nothing to encode");
kate_bitmap_init (kb);
kb->width = kb->height = 0;
+ gst_buffer_unmap (buf, data, size);
return GST_FLOW_OK;
}
/* create the palette */
rflow = gst_kate_spu_create_spu_palette (ke, kp);
- if (G_UNLIKELY (rflow != GST_FLOW_OK))
+ if (G_UNLIKELY (rflow != GST_FLOW_OK)) {
+ gst_buffer_unmap (buf, data, size);
return rflow;
+ }
/* create the bitmap */
kate_bitmap_init (kb);
@@ -517,14 +543,15 @@ gst_kate_spu_decode_spu (GstKateEnc * ke, GstBuffer * buf, kate_region * kr,
kb->type = kate_bitmap_type_paletted;
kb->pixels = (unsigned char *) g_malloc (kb->width * kb->height);
if (G_UNLIKELY (!kb->pixels)) {
+ gst_buffer_unmap (buf, data, size);
GST_ELEMENT_ERROR (ke, STREAM, ENCODE, (NULL),
("Failed to allocate memory for pixel data"));
return GST_FLOW_ERROR;
}
n = 0;
- pixptr[0] = GST_BUFFER_DATA (buf) + ke->spu_pix_data[0];
- pixptr[1] = GST_BUFFER_DATA (buf) + ke->spu_pix_data[1];
+ pixptr[0] = data + ke->spu_pix_data[0];
+ pixptr[1] = data + ke->spu_pix_data[1];
nybble_offset[0] = 0;
nybble_offset[1] = 0;
max_nybbles[0] = 2 * (packet_size - ke->spu_pix_data[0]);
@@ -591,6 +618,7 @@ gst_kate_spu_decode_spu (GstKateEnc * ke, GstBuffer * buf, kate_region * kr,
probably going to end before the next one while being readable */
//ke->hide_time = ke->show_time + (1000 * 90 / 1024);
}
+ gst_buffer_unmap (buf, data, size);
return GST_FLOW_OK;
}
@@ -856,15 +884,12 @@ gst_kate_spu_encode_spu (GstKateDec * kd, const kate_event * ev)
bytes[3] = first_commands_offset & 0xff;
/* Create a buffer with those values */
- buffer = gst_buffer_new ();
+ buffer = gst_buffer_new_wrapped (bytes, nbytes);
if (G_UNLIKELY (!buffer)) {
GST_WARNING_OBJECT (kd,
"Failed to allocate %" G_GSIZE_FORMAT " byte buffer", nbytes);
goto error;
}
- GST_BUFFER_DATA (buffer) = bytes;
- GST_BUFFER_MALLOCDATA (buffer) = bytes;
- GST_BUFFER_SIZE (buffer) = nbytes;
GST_BUFFER_OFFSET_END (buffer) = GST_SECOND * (ev->end_time);
GST_BUFFER_OFFSET (buffer) = GST_SECOND * (ev->start_time);
GST_BUFFER_TIMESTAMP (buffer) = GST_SECOND * (ev->start_time);
diff --git a/ext/kate/gstkatetag.c b/ext/kate/gstkatetag.c
index 34d8cf26d..38e2a3c35 100644
--- a/ext/kate/gstkatetag.c
+++ b/ext/kate/gstkatetag.c
@@ -97,38 +97,19 @@ static void gst_kate_tag_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void gst_kate_tag_dispose (GObject * object);
-
-#define _do_init(type) \
- G_STMT_START{ \
- static const GInterfaceInfo tag_setter_info = { \
- NULL, \
- NULL, \
- NULL \
- }; \
- g_type_add_interface_static (type, GST_TYPE_TAG_SETTER, \
- &tag_setter_info); \
- }G_STMT_END
-
-GST_BOILERPLATE_FULL (GstKateTag, gst_kate_tag, GstKateParse,
- GST_TYPE_KATE_PARSE, _do_init);
-
-static void
-gst_kate_tag_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class, "Kate stream tagger",
- "Formatter/Metadata",
- "Retags kate streams", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
-}
+#define gst_kate_tag_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstKateTag, gst_kate_tag, GST_TYPE_KATE_PARSE,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL));
static void
gst_kate_tag_class_init (GstKateTagClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
GstKateParseClass *gstkateparse_class;
gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
gstkateparse_class = GST_KATE_PARSE_CLASS (klass);
gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_kate_tag_set_property);
@@ -155,12 +136,16 @@ gst_kate_tag_class_init (GstKateTagClass * klass)
"Set the height of the canvas this stream was authored for (0 is unspecified)",
0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_set_details_simple (gstelement_class, "Kate stream tagger",
+ "Formatter/Metadata",
+ "Retags kate streams", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
+
gstkateparse_class->parse_packet =
GST_DEBUG_FUNCPTR (gst_kate_tag_parse_packet);
}
static void
-gst_kate_tag_init (GstKateTag * kt, GstKateTagClass * g_class)
+gst_kate_tag_init (GstKateTag * kt)
{
kt->language = NULL;
kt->category = NULL;
@@ -281,44 +266,52 @@ gst_kate_tag_parse_packet (GstKateParse * parse, GstBuffer * buffer)
GstKateTag *kt;
gchar *encoder = NULL;
GstBuffer *new_buf;
+ guint8 *data;
+ gsize size;
kt = GST_KATE_TAG (parse);
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
/* rewrite the language and category */
- if (GST_BUFFER_SIZE (buffer) >= 64 && GST_BUFFER_DATA (buffer)[0] == 0x80) {
- GstBuffer *new_buffer = gst_buffer_copy (buffer);
+ if (size >= 64 && data[0] == 0x80) {
+ GstBuffer *new_buffer;
+ gst_buffer_unmap (buffer, data, size);
+ new_buffer = gst_buffer_copy (buffer);
gst_buffer_unref (buffer);
buffer = new_buffer;
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READWRITE);
/* language is at offset 32, 16 bytes, zero terminated */
if (kt->language) {
- strncpy ((char *) GST_BUFFER_DATA (buffer) + 32, kt->language, 15);
- GST_BUFFER_DATA (buffer)[47] = 0;
+ strncpy ((char *) data + 32, kt->language, 15);
+ data[47] = 0;
}
/* category is at offset 48, 16 bytes, zero terminated */
if (kt->category) {
- strncpy ((char *) GST_BUFFER_DATA (buffer) + 48, kt->category, 15);
- GST_BUFFER_DATA (buffer)[63] = 0;
+ strncpy ((char *) data + 48, kt->category, 15);
+ data[63] = 0;
}
if (kt->original_canvas_width >= 0) {
guint16 v = encode_canvas_size (kt->original_canvas_width);
- GST_BUFFER_DATA (buffer)[16] = v & 0xff;
- GST_BUFFER_DATA (buffer)[17] = (v >> 8) & 0xff;
+ data[16] = v & 0xff;
+ data[17] = (v >> 8) & 0xff;
}
if (kt->original_canvas_height >= 0) {
guint16 v = encode_canvas_size (kt->original_canvas_height);
- GST_BUFFER_DATA (buffer)[18] = v & 0xff;
- GST_BUFFER_DATA (buffer)[19] = (v >> 8) & 0xff;
+ data[18] = v & 0xff;
+ data[19] = (v >> 8) & 0xff;
}
}
/* rewrite the comments packet */
- if (GST_BUFFER_SIZE (buffer) >= 9 && GST_BUFFER_DATA (buffer)[0] == 0x81) {
+ if (size >= 9 && data[0] == 0x81) {
old_tags =
- gst_tag_list_from_vorbiscomment_buffer (buffer,
+ gst_tag_list_from_vorbiscomment (data, size,
(const guint8 *) "\201kate\0\0\0\0", 9, &encoder);
user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (kt));
+ gst_buffer_unmap (buffer, data, size);
/* build new tag list */
new_tags = gst_tag_list_merge (user_tags, old_tags,
@@ -328,16 +321,18 @@ gst_kate_tag_parse_packet (GstKateParse * parse, GstBuffer * buffer)
new_buf =
gst_tag_list_to_vorbiscomment_buffer (new_tags,
(const guint8 *) "\201kate\0\0\0\0", 9, encoder);
- gst_buffer_copy_metadata (new_buf, buffer, GST_BUFFER_COPY_TIMESTAMPS);
+ gst_buffer_copy_into (new_buf, buffer, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
gst_tag_list_free (new_tags);
g_free (encoder);
gst_buffer_unref (buffer);
/* the buffer will have the framing bit used by Vorbis, but we don't use it */
- --GST_BUFFER_SIZE (new_buf);
+ gst_buffer_resize (new_buf, 0, gst_buffer_get_size (new_buf) - 1);
buffer = new_buf;
+ } else {
+ gst_buffer_unmap (buffer, data, size);
}
return GST_KATE_PARSE_CLASS (parent_class)->parse_packet (parse, buffer);
diff --git a/ext/kate/gstkatetiger.c b/ext/kate/gstkatetiger.c
index c82be32a0..1504e112b 100644
--- a/ext/kate/gstkatetiger.c
+++ b/ext/kate/gstkatetiger.c
@@ -218,10 +218,12 @@ gst_kate_tiger_base_init (gpointer gclass)
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &kate_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&kate_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_factory));
gst_element_class_set_details_simple (element_class, "Kate stream renderer",
"Mixer/Video/Overlay/Subtitle",
"Decodes and renders Kate streams on top of a video",
diff --git a/ext/kate/gstkateutil.c b/ext/kate/gstkateutil.c
index 3062d5cd8..787bc3e10 100644
--- a/ext/kate/gstkateutil.c
+++ b/ext/kate/gstkateutil.c
@@ -247,12 +247,16 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
int ret;
GstFlowReturn rflow = GST_FLOW_OK;
gboolean is_header;
+ guint8 *data;
+ gsize size;
+ guint8 header[1];
+
+ size = gst_buffer_extract (buf, 0, header, 1);
GST_DEBUG_OBJECT (element, "got kate packet, %u bytes, type %02x",
- GST_BUFFER_SIZE (buf),
- GST_BUFFER_SIZE (buf) == 0 ? -1 : GST_BUFFER_DATA (buf)[0]);
+ gst_buffer_get_size (buf), size == 0 ? -1 : header[0]);
- is_header = GST_BUFFER_SIZE (buf) > 0 && (GST_BUFFER_DATA (buf)[0] & 0x80);
+ is_header = size > 0 && (header[0] & 0x80);
if (!is_header && decoder->tags) {
/* after we've processed headers, send any tags before processing the data packet */
@@ -262,8 +266,11 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
decoder->tags = NULL;
}
- kate_packet_wrap (&kp, GST_BUFFER_SIZE (buf), GST_BUFFER_DATA (buf));
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+ kate_packet_wrap (&kp, size, data);
ret = kate_high_decode_packetin (&decoder->k, &kp, ev);
+ gst_buffer_unmap (buf, data, size);
+
if (G_UNLIKELY (ret < 0)) {
GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
("Failed to decode Kate packet: %d", ret));
@@ -277,7 +284,7 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
/* headers may be interesting to retrieve information from */
if (G_UNLIKELY (is_header)) {
- switch (GST_BUFFER_DATA (buf)[0]) {
+ switch (header[0]) {
case 0x80: /* ID header */
GST_INFO_OBJECT (element, "Parsed ID header: language %s, category %s",
decoder->k.ki->language, decoder->k.ki->category);
@@ -288,11 +295,11 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
}
if (strcmp (decoder->k.ki->category, "K-SPU") == 0 ||
strcmp (decoder->k.ki->category, "spu-subtitles") == 0) {
- *src_caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
+ *src_caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture");
} else if (decoder->k.ki->text_markup_type == kate_markup_none) {
- *src_caps = gst_caps_new_simple ("text/plain", NULL);
+ *src_caps = gst_caps_new_empty_simple ("text/plain");
} else {
- *src_caps = gst_caps_new_simple ("text/x-pango-markup", NULL);
+ *src_caps = gst_caps_new_empty_simple ("text/x-pango-markup");
}
GST_INFO_OBJECT (srcpad, "Setting caps: %" GST_PTR_FORMAT, *src_caps);
if (!gst_pad_set_caps (srcpad, *src_caps)) {
@@ -301,7 +308,7 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
}
}
if (decoder->k.ki->language && *decoder->k.ki->language) {
- GstTagList *old = decoder->tags, *tags = gst_tag_list_new ();
+ GstTagList *old = decoder->tags, *tags = gst_tag_list_new_empty ();
if (tags) {
gchar *lang_code;
@@ -350,7 +357,7 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
if (!decoder->tags) {
GST_ERROR_OBJECT (element, "failed to decode comment header");
- decoder->tags = gst_tag_list_new ();
+ decoder->tags = gst_tag_list_new_empty ();
}
if (encoder) {
gst_tag_list_add (decoder->tags, GST_TAG_MERGE_REPLACE,
@@ -387,7 +394,7 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
else if (*ev && (*ev)->meta) {
int count = kate_meta_query_count ((*ev)->meta);
if (count > 0) {
- GstTagList *evtags = gst_tag_list_new ();
+ GstTagList *evtags = gst_tag_list_new_empty ();
int idx;
GST_DEBUG_OBJECT (decoder, "Kate event has %d attached metadata", count);
for (idx = 0; idx < count; ++idx) {
@@ -484,37 +491,23 @@ gst_kate_util_decoder_base_set_flushing (GstKateDecoderBase * decoder,
}
void
-gst_kate_util_decoder_base_new_segment_event (GstKateDecoderBase * decoder,
+gst_kate_util_decoder_base_segment_event (GstKateDecoderBase * decoder,
GstEvent * event)
{
- gboolean update;
- gdouble rate;
- GstFormat format;
- gint64 start, stop, time;
- gdouble arate;
-
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
- GST_DEBUG_OBJECT (decoder, "kate pad segment:"
- " Update %d, rate %g arate %g format %d start %" GST_TIME_FORMAT
- " %" GST_TIME_FORMAT " position %" GST_TIME_FORMAT,
- update, rate, arate, format, GST_TIME_ARGS (start),
- GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
- if (!update) {
- /* Tiger uses this segment is used to remap the video running time to the
- Kate running time. The sending of segment updates to keep streams in sync
- does kinda rain on our parade though, and since we don't need these,
- we just ignore those here */
- gst_segment_set_newsegment_full (&decoder->kate_segment, update, rate,
- arate, format, start, stop, time);
- }
+ GstSegment seg;
+
+ gst_event_copy_segment (event, &seg);
+
+ GST_DEBUG_OBJECT (decoder, "kate pad segment: %" GST_SEGMENT_FORMAT, &seg);
+
+ decoder->kate_segment = seg;
}
gboolean
gst_kate_util_decoder_base_update_segment (GstKateDecoderBase * decoder,
GstElement * element, GstBuffer * buf)
{
- gint64 clip_start = 0, clip_stop = 0;
+ guint64 clip_start = 0, clip_stop = 0;
gboolean in_seg;
if (decoder->kate_flushing) {
@@ -538,8 +531,7 @@ gst_kate_util_decoder_base_update_segment (GstKateDecoderBase * decoder,
if (in_seg) {
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
- gst_segment_set_last_stop (&decoder->kate_segment, GST_FORMAT_TIME,
- clip_start);
+ decoder->kate_segment.position = clip_start;
}
} else {
GST_INFO_OBJECT (element, "Kate buffer not in segment, ignored");
diff --git a/ext/kate/gstkateutil.h b/ext/kate/gstkateutil.h
index 27b6f70f3..a837369db 100644
--- a/ext/kate/gstkateutil.h
+++ b/ext/kate/gstkateutil.h
@@ -82,7 +82,7 @@ extern void
gst_kate_util_decoder_base_set_flushing (GstKateDecoderBase * decoder,
gboolean flushing);
extern void
-gst_kate_util_decoder_base_new_segment_event (GstKateDecoderBase * decoder,
+gst_kate_util_decoder_base_segment_event (GstKateDecoderBase * decoder,
GstEvent * event);
extern gboolean
gst_kate_util_decoder_base_update_segment (GstKateDecoderBase * decoder,
diff --git a/ext/ladspa/Makefile.am b/ext/ladspa/Makefile.am
index 353ec5ebb..3d9695338 100644
--- a/ext/ladspa/Makefile.am
+++ b/ext/ladspa/Makefile.am
@@ -4,11 +4,11 @@ libgstladspa_la_SOURCES = gstladspa.c
libgstladspa_la_CFLAGS = \
-I$(top_srcdir)/gst-libs \
$(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(LRDF_CFLAGS)
+ $(GST_CFLAGS) $(LRDF_CFLAGS)
libgstladspa_la_LIBADD = \
$(top_builddir)/gst-libs/gst/signalprocessor/libgstsignalprocessor-@GST_MAJORMINOR@.la \
$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR) \
- $(GST_CONTROLLER_LIBS) $(LIBM) $(LRDF_LIBS)
+ $(LIBM) $(LRDF_LIBS)
libgstladspa_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstladspa_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/ext/ladspa/gstladspa.c b/ext/ladspa/gstladspa.c
index 52a8d5b2d..da03e6feb 100644
--- a/ext/ladspa/gstladspa.c
+++ b/ext/ladspa/gstladspa.c
@@ -34,7 +34,6 @@
#include <string.h>
#include <math.h>
#include <gst/audio/audio.h>
-#include <gst/controller/gstcontroller.h>
#include "gstladspa.h"
#include <ladspa.h> /* main ladspa sdk include file */
@@ -864,9 +863,6 @@ plugin_init (GstPlugin * plugin)
GST_DEBUG_CATEGORY_INIT (ladspa_debug, "ladspa",
GST_DEBUG_FG_GREEN | GST_DEBUG_BG_BLACK | GST_DEBUG_BOLD, "LADSPA");
- /* initialize gst controller library */
- gst_controller_init (NULL, NULL);
-
gst_plugin_add_dependency_simple (plugin,
"LADSPA_PATH",
GST_LADSPA_DEFAULT_PATH, NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE);
diff --git a/ext/lcs/gstcolorspace.c b/ext/lcs/gstcolorspace.c
index f56d844da..5b4479c14 100644
--- a/ext/lcs/gstcolorspace.c
+++ b/ext/lcs/gstcolorspace.c
@@ -334,10 +334,10 @@ gst_colorspace_base_init (GstColorspaceClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &gst_colorspace_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_colorspace_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_colorspace_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_colorspace_sink_template));
gst_element_class_set_details_simple (element_class, "Colorspace converter",
"Filter/Effect",
"Converts video from one colorspace to another",
diff --git a/ext/libfame/gstlibfame.c b/ext/libfame/gstlibfame.c
index 4765796d2..fefbd685a 100644
--- a/ext/libfame/gstlibfame.c
+++ b/ext/libfame/gstlibfame.c
@@ -172,9 +172,10 @@ gst_fameenc_base_init (GstFameEncClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"MPEG-1 and MPEG-4 video encoder", "Codec/Encoder/Video",
diff --git a/ext/libmms/gstmms.c b/ext/libmms/gstmms.c
index 28a82da3c..2acf19459 100644
--- a/ext/libmms/gstmms.c
+++ b/ext/libmms/gstmms.c
@@ -68,43 +68,18 @@ static gboolean gst_mms_do_seek (GstBaseSrc * src, GstSegment * segment);
static GstFlowReturn gst_mms_create (GstPushSrc * psrc, GstBuffer ** buf);
static gboolean gst_mms_uri_set_uri (GstURIHandler * handler,
- const gchar * uri);
+ const gchar * uri, GError ** error);
-static void
-gst_mms_urihandler_init (GType mms_type)
-{
- static const GInterfaceInfo urihandler_info = {
- gst_mms_uri_handler_init,
- NULL,
- NULL
- };
-
- g_type_add_interface_static (mms_type, GST_TYPE_URI_HANDLER,
- &urihandler_info);
-}
-
-GST_BOILERPLATE_FULL (GstMMS, gst_mms, GstPushSrc, GST_TYPE_PUSH_SRC,
- gst_mms_urihandler_init);
-
-static void
-gst_mms_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_set_details_simple (element_class, "MMS streaming source",
- "Source/Network",
- "Receive data streamed via MSFT Multi Media Server protocol",
- "Maciej Katafiasz <mathrick@users.sourceforge.net>");
-
- GST_DEBUG_CATEGORY_INIT (mmssrc_debug, "mmssrc", 0, "MMS Source Element");
-}
+#define gst_mms_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstMMS, gst_mms, GST_TYPE_PUSH_SRC,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_mms_uri_handler_init));
/* initialize the plugin's class */
static void
gst_mms_class_init (GstMMSClass * klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *gstelement_class = (GstElementClass *) klass;
GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass;
GstPushSrcClass *gstpushsrc_class = (GstPushSrcClass *) klass;
@@ -117,12 +92,23 @@ gst_mms_class_init (GstMMSClass * klass)
"Host URL to connect to. Accepted are mms://, mmsu://, mmst:// URL types",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /* Note: connection-speed is intentionaly limited to G_MAXINT as libmms
+ * uses int for it */
g_object_class_install_property (gobject_class, PROP_CONNECTION_SPEED,
- g_param_spec_uint ("connection-speed", "Connection Speed",
+ g_param_spec_uint64 ("connection-speed", "Connection Speed",
"Network connection speed in kbps (0 = unknown)",
0, G_MAXINT / 1000, DEFAULT_CONNECTION_SPEED,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- /* Note: connection-speed is intentionaly limited to G_MAXINT as libmms use int for it */
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "MMS streaming source", "Source/Network",
+ "Receive data streamed via MSFT Multi Media Server protocol",
+ "Maciej Katafiasz <mathrick@users.sourceforge.net>");
+
+ GST_DEBUG_CATEGORY_INIT (mmssrc_debug, "mmssrc", 0, "MMS Source Element");
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_mms_start);
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_mms_stop);
@@ -143,7 +129,7 @@ gst_mms_class_init (GstMMSClass * klass)
* initialize structure
*/
static void
-gst_mms_init (GstMMS * mmssrc, GstMMSClass * g_class)
+gst_mms_init (GstMMS * mmssrc)
{
mmssrc->uri_name = NULL;
mmssrc->current_connection_uri_name = NULL;
@@ -263,7 +249,7 @@ gst_mms_prepare_seek_segment (GstBaseSrc * src, GstEvent * event,
of the segment. */
gst_segment_init (segment, seek_format);
- gst_segment_set_seek (segment, rate, seek_format, flags, cur_type, cur,
+ gst_segment_do_seek (segment, rate, seek_format, flags, cur_type, cur,
stop_type, stop, NULL);
return TRUE;
@@ -300,7 +286,7 @@ gst_mms_do_seek (GstBaseSrc * src, GstSegment * segment)
return FALSE;
}
gst_segment_init (segment, GST_FORMAT_BYTES);
- gst_segment_set_seek (segment, segment->rate, GST_FORMAT_BYTES,
+ gst_segment_do_seek (segment, segment->rate, GST_FORMAT_BYTES,
segment->flags, GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_NONE,
segment->stop, NULL);
return TRUE;
@@ -338,35 +324,30 @@ gst_mms_create (GstPushSrc * psrc, GstBuffer ** buf)
else
blocksize = mmsx_get_asf_packet_len (mmssrc->connection);
- *buf = gst_buffer_try_new_and_alloc (blocksize);
- if (!*buf) {
+ data = g_try_malloc (blocksize);
+ if (!data) {
GST_ERROR_OBJECT (mmssrc, "Failed to allocate %u bytes", blocksize);
return GST_FLOW_ERROR;
}
- data = GST_BUFFER_DATA (*buf);
- GST_BUFFER_SIZE (*buf) = 0;
GST_LOG_OBJECT (mmssrc, "reading %d bytes", blocksize);
result = mmsx_read (NULL, mmssrc->connection, (char *) data, blocksize);
-
/* EOS? */
if (result == 0)
goto eos;
+ *buf = gst_buffer_new_wrapped (data, result);
GST_BUFFER_OFFSET (*buf) = offset;
- GST_BUFFER_SIZE (*buf) = result;
GST_LOG_OBJECT (mmssrc, "Returning buffer with offset %" G_GINT64_FORMAT
- " and size %u", GST_BUFFER_OFFSET (*buf), GST_BUFFER_SIZE (*buf));
-
- gst_buffer_set_caps (*buf, GST_PAD_CAPS (GST_BASE_SRC_PAD (mmssrc)));
+ " and size %u", offset, result);
return GST_FLOW_OK;
eos:
{
GST_DEBUG_OBJECT (mmssrc, "EOS");
- gst_buffer_unref (*buf);
+ g_free (data);
*buf = NULL;
return GST_FLOW_UNEXPECTED;
}
@@ -496,11 +477,11 @@ gst_mms_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_LOCATION:
gst_mms_uri_set_uri (GST_URI_HANDLER (mmssrc),
- g_value_get_string (value));
+ g_value_get_string (value), NULL);
break;
case PROP_CONNECTION_SPEED:
GST_OBJECT_LOCK (mmssrc);
- mmssrc->connection_speed = g_value_get_uint (value) * 1000;
+ mmssrc->connection_speed = g_value_get_uint64 (value) * 1000;
GST_OBJECT_UNLOCK (mmssrc);
break;
default:
@@ -522,7 +503,7 @@ gst_mms_get_property (GObject * object, guint prop_id,
g_value_set_string (value, mmssrc->uri_name);
break;
case PROP_CONNECTION_SPEED:
- g_value_set_uint (value, mmssrc->connection_speed / 1000);
+ g_value_set_uint64 (value, mmssrc->connection_speed / 1000);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -543,25 +524,26 @@ plugin_init (GstPlugin * plugin)
}
static GstURIType
-gst_mms_uri_get_type (void)
+gst_mms_uri_get_type (GType type)
{
return GST_URI_SRC;
}
-static gchar **
-gst_mms_uri_get_protocols (void)
+static const gchar *const *
+gst_mms_uri_get_protocols (GType type)
{
static const gchar *protocols[] = { "mms", "mmsh", "mmst", "mmsu", NULL };
- return (gchar **) protocols;
+ return protocols;
}
-static const gchar *
+static gchar *
gst_mms_uri_get_uri (GstURIHandler * handler)
{
GstMMS *src = GST_MMS (handler);
- return src->uri_name;
+ /* FIXME: make thread-safe */
+ return g_strdup (src->uri_name);
}
static gchar *
@@ -613,14 +595,18 @@ gst_mms_src_make_valid_uri (const gchar * uri)
}
static gboolean
-gst_mms_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+gst_mms_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
GstMMS *src = GST_MMS (handler);
gchar *fixed_uri;
fixed_uri = gst_mms_src_make_valid_uri (uri);
- if (!fixed_uri && uri)
+ if (!fixed_uri && uri) {
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Invalid MMS URI");
return FALSE;
+ }
GST_OBJECT_LOCK (src);
if (src->uri_name)
diff --git a/ext/libmms/gstmms.h b/ext/libmms/gstmms.h
index 5410cc158..bd988f11e 100644
--- a/ext/libmms/gstmms.h
+++ b/ext/libmms/gstmms.h
@@ -32,7 +32,7 @@ struct _GstMMS
gchar *uri_name;
gchar *current_connection_uri_name;
- guint connection_speed;
+ guint64 connection_speed;
mmsx_t *connection;
};
diff --git a/ext/lv2/Makefile.am b/ext/lv2/Makefile.am
index 7b6ac4e52..76333e79e 100644
--- a/ext/lv2/Makefile.am
+++ b/ext/lv2/Makefile.am
@@ -4,11 +4,11 @@ libgstlv2_la_SOURCES = gstlv2.c
libgstlv2_la_CFLAGS = \
-I$(top_srcdir)/gst-libs \
$(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(SLV2_CFLAGS)
+ $(GST_CFLAGS) $(SLV2_CFLAGS)
libgstlv2_la_LIBADD = \
$(top_builddir)/gst-libs/gst/signalprocessor/libgstsignalprocessor-@GST_MAJORMINOR@.la \
$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR) \
- $(GST_CONTROLLER_LIBS) $(LIBM) $(SLV2_LIBS)
+ $(LIBM) $(SLV2_LIBS)
libgstlv2_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstlv2_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/ext/lv2/gstlv2.c b/ext/lv2/gstlv2.c
index f31050fc6..6a4fcb1a2 100644
--- a/ext/lv2/gstlv2.c
+++ b/ext/lv2/gstlv2.c
@@ -39,7 +39,6 @@
#include <math.h>
#include <glib.h>
#include <gst/audio/audio.h>
-#include <gst/controller/gstcontroller.h>
#include <gst/audio/multichannel.h>
#include "gstlv2.h"
@@ -894,9 +893,6 @@ plugin_init (GstPlugin * plugin)
side_left_role = slv2_value_new_uri (world, NS_PG "sideLeftChannel");
side_right_role = slv2_value_new_uri (world, NS_PG "sideRightChannel");
- /* initialize gst controller library */
- gst_controller_init (NULL, NULL);
-
gst_plugin_add_dependency_simple (plugin,
"LV2_PATH", GST_LV2_DEFAULT_PATH, NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE);
diff --git a/ext/mimic/gstmimdec.c b/ext/mimic/gstmimdec.c
index a712c214b..623f7496c 100644
--- a/ext/mimic/gstmimdec.c
+++ b/ext/mimic/gstmimdec.c
@@ -87,8 +87,10 @@ gst_mim_dec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"Mimic Decoder",
diff --git a/ext/mimic/gstmimenc.c b/ext/mimic/gstmimenc.c
index a867787a6..f4957ccb1 100644
--- a/ext/mimic/gstmimenc.c
+++ b/ext/mimic/gstmimenc.c
@@ -125,8 +125,10 @@ gst_mim_enc_base_init (gpointer klass)
" when no data is received",
FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"Mimic Encoder",
"Codec/Encoder/Video",
diff --git a/ext/modplug/gstmodplug.cc b/ext/modplug/gstmodplug.cc
index 09dc5104c..75988fd75 100644
--- a/ext/modplug/gstmodplug.cc
+++ b/ext/modplug/gstmodplug.cc
@@ -149,10 +149,10 @@ gst_modplug_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &modplug_sink_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &modplug_src_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&modplug_sink_template_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&modplug_src_template_factory));
gst_element_class_set_details_simple (element_class, "ModPlug",
"Codec/Decoder/Audio", "Module decoder based on modplug engine",
@@ -379,6 +379,7 @@ gst_modplug_src_event (GstPad * pad, GstEvent * event)
GST_DEBUG_OBJECT (modplug, "no song loaded yet");
break;
}
+
#if 0
timestamp = gst_util_uint64_scale_int (modplug->offset, GST_SECOND,
modplug->frequency);
diff --git a/ext/mpeg2enc/gstmpeg2enc.cc b/ext/mpeg2enc/gstmpeg2enc.cc
index 1987103e2..5c0b426e9 100644
--- a/ext/mpeg2enc/gstmpeg2enc.cc
+++ b/ext/mpeg2enc/gstmpeg2enc.cc
@@ -126,9 +126,10 @@ gst_mpeg2enc_base_init (gpointer klass)
"Andrew Stevens <andrew.stevens@nexgo.de>\n"
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
static void
diff --git a/ext/mplex/gstmplex.cc b/ext/mplex/gstmplex.cc
index ac94e7c29..e4ad09bc8 100644
--- a/ext/mplex/gstmplex.cc
+++ b/ext/mplex/gstmplex.cc
@@ -67,7 +67,7 @@ static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
);
static GstStaticPadTemplate video_sink_templ =
-GST_STATIC_PAD_TEMPLATE ("video_%d",
+GST_STATIC_PAD_TEMPLATE ("video_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpeg, "
@@ -82,7 +82,7 @@ GST_STATIC_PAD_TEMPLATE ("video_%d",
"rate = (int) [ 8000, 96000 ]"
static GstStaticPadTemplate audio_sink_templ =
- GST_STATIC_PAD_TEMPLATE ("audio_%d",
+ GST_STATIC_PAD_TEMPLATE ("audio_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("audio/mpeg, "
@@ -131,11 +131,12 @@ gst_mplex_base_init (gpointer klass)
"Ronald Bultje <rbultje@ronald.bitfreak.net>\n"
"Mark Nauwelaerts <mnauw@users.sourceforge.net>");
- gst_element_class_add_static_pad_template (element_class, &src_templ);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_templ);
- gst_element_class_add_static_pad_template (element_class,
- &audio_sink_templ);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_templ));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_templ));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_sink_templ));
}
static void
@@ -608,12 +609,12 @@ gst_mplex_request_new_pad (GstElement * element,
GstPad *newpad;
GstMplexPad *mpad;
- if (templ == gst_element_class_get_pad_template (klass, "audio_%d")) {
+ if (templ == gst_element_class_get_pad_template (klass, "audio_%u")) {
GST_DEBUG_OBJECT (mplex, "request pad audio %d", mplex->num_apads);
- padname = g_strdup_printf ("audio_%d", mplex->num_apads++);
- } else if (templ == gst_element_class_get_pad_template (klass, "video_%d")) {
+ padname = g_strdup_printf ("audio_%u", mplex->num_apads++);
+ } else if (templ == gst_element_class_get_pad_template (klass, "video_%u")) {
GST_DEBUG_OBJECT (mplex, "request pad video %d", mplex->num_vpads);
- padname = g_strdup_printf ("video_%d", mplex->num_vpads++);
+ padname = g_strdup_printf ("video_%u", mplex->num_vpads++);
} else {
GST_WARNING_OBJECT (mplex, "This is not our template!");
return NULL;
diff --git a/ext/musepack/gstmusepackdec.c b/ext/musepack/gstmusepackdec.c
index 1d6380c75..30a34bff3 100644
--- a/ext/musepack/gstmusepackdec.c
+++ b/ext/musepack/gstmusepackdec.c
@@ -79,9 +79,10 @@ gst_musepackdec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "Musepack decoder",
"Codec/Decoder/Audio",
diff --git a/ext/musicbrainz/gsttrm.c b/ext/musicbrainz/gsttrm.c
index 173c1f1a4..7e53cc078 100644
--- a/ext/musicbrainz/gsttrm.c
+++ b/ext/musicbrainz/gsttrm.c
@@ -112,9 +112,10 @@ gst_trm_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class,
"MusicBrainz TRM generator", "Filter/Analyzer/Audio",
diff --git a/ext/mythtv/gstmythtvsrc.c b/ext/mythtv/gstmythtvsrc.c
index 71c909287..ca9865ebd 100644
--- a/ext/mythtv/gstmythtvsrc.c
+++ b/ext/mythtv/gstmythtvsrc.c
@@ -156,7 +156,8 @@ GST_BOILERPLATE_FULL (GstMythtvSrc, gst_mythtv_src, GstPushSrc,
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
gst_element_class_set_details_simple (element_class, "MythTV client source",
"Source/Network",
diff --git a/ext/nas/nassink.c b/ext/nas/nassink.c
index dac158d2a..4b535951b 100644
--- a/ext/nas/nassink.c
+++ b/ext/nas/nassink.c
@@ -95,7 +95,8 @@ gst_nas_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "NAS audio sink",
"Sink/Audio",
"Plays audio to a Network Audio Server",
diff --git a/ext/neon/gstneonhttpsrc.c b/ext/neon/gstneonhttpsrc.c
index 20adf057c..7d46ce41e 100644
--- a/ext/neon/gstneonhttpsrc.c
+++ b/ext/neon/gstneonhttpsrc.c
@@ -52,10 +52,6 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
#define DEFAULT_LOCATION "http://"HTTP_DEFAULT_HOST":"G_STRINGIFY(HTTP_DEFAULT_PORT)
#define DEFAULT_PROXY ""
#define DEFAULT_USER_AGENT "GStreamer neonhttpsrc"
-#define DEFAULT_IRADIO_MODE FALSE
-#define DEFAULT_IRADIO_NAME NULL
-#define DEFAULT_IRADIO_GENRE NULL
-#define DEFAULT_IRADIO_URL NULL
#define DEFAULT_AUTOMATIC_REDIRECT TRUE
#define DEFAULT_ACCEPT_SELF_SIGNED FALSE
#define DEFAULT_NEON_HTTP_DEBUG FALSE
@@ -69,10 +65,6 @@ enum
PROP_PROXY,
PROP_USER_AGENT,
PROP_COOKIES,
- PROP_IRADIO_MODE,
- PROP_IRADIO_NAME,
- PROP_IRADIO_GENRE,
- PROP_IRADIO_URL,
PROP_AUTOMATIC_REDIRECT,
PROP_ACCEPT_SELF_SIGNED,
PROP_CONNECT_TIMEOUT,
@@ -135,7 +127,8 @@ gst_neonhttp_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
gst_element_class_set_details_simple (element_class, "HTTP client source",
"Source/Network",
@@ -191,31 +184,6 @@ gst_neonhttp_src_class_init (GstNeonhttpSrcClass * klass)
G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property
- (gobject_class, PROP_IRADIO_MODE,
- g_param_spec_boolean ("iradio-mode", "iradio-mode",
- "Enable internet radio mode (extraction of shoutcast/icecast metadata)",
- FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class,
- PROP_IRADIO_NAME,
- g_param_spec_string ("iradio-name",
- "iradio-name", "Name of the stream", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class,
- PROP_IRADIO_GENRE,
- g_param_spec_string ("iradio-genre",
- "iradio-genre", "Genre of the stream", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class,
- PROP_IRADIO_URL,
- g_param_spec_string ("iradio-url",
- "iradio-url",
- "Homepage URL for radio stream", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property
(gobject_class, PROP_AUTOMATIC_REDIRECT,
g_param_spec_boolean ("automatic-redirect", "automatic-redirect",
"Automatically follow HTTP redirects (HTTP Status Code 3xx)",
@@ -282,10 +250,9 @@ gst_neonhttp_src_init (GstNeonhttpSrc * src, GstNeonhttpSrcClass * g_class)
const gchar *str;
src->neon_http_debug = DEFAULT_NEON_HTTP_DEBUG;
- src->iradio_mode = DEFAULT_IRADIO_MODE;
- src->iradio_name = DEFAULT_IRADIO_NAME;
- src->iradio_genre = DEFAULT_IRADIO_GENRE;
- src->iradio_url = DEFAULT_IRADIO_URL;
+ src->iradio_name = NULL;
+ src->iradio_genre = NULL;
+ src->iradio_url = NULL;
src->user_agent = g_strdup (DEFAULT_USER_AGENT);
src->automatic_redirect = DEFAULT_AUTOMATIC_REDIRECT;
src->accept_self_signed = DEFAULT_ACCEPT_SELF_SIGNED;
@@ -405,9 +372,6 @@ gst_neonhttp_src_set_property (GObject * object, guint prop_id,
g_strfreev (src->cookies);
src->cookies = (gchar **) g_value_dup_boxed (value);
break;
- case PROP_IRADIO_MODE:
- src->iradio_mode = g_value_get_boolean (value);
- break;
case PROP_AUTOMATIC_REDIRECT:
src->automatic_redirect = g_value_get_boolean (value);
break;
@@ -476,18 +440,6 @@ gst_neonhttp_src_get_property (GObject * object, guint prop_id,
case PROP_COOKIES:
g_value_set_boxed (value, neonhttpsrc->cookies);
break;
- case PROP_IRADIO_MODE:
- g_value_set_boolean (value, neonhttpsrc->iradio_mode);
- break;
- case PROP_IRADIO_NAME:
- g_value_set_string (value, neonhttpsrc->iradio_name);
- break;
- case PROP_IRADIO_GENRE:
- g_value_set_string (value, neonhttpsrc->iradio_genre);
- break;
- case PROP_IRADIO_URL:
- g_value_set_string (value, neonhttpsrc->iradio_url);
- break;
case PROP_AUTOMATIC_REDIRECT:
g_value_set_boolean (value, neonhttpsrc->automatic_redirect);
break;
@@ -607,7 +559,7 @@ gst_neonhttp_src_start (GstBaseSrc * bsrc)
else
src->content_size = -1;
- if (src->iradio_mode) {
+ if (TRUE) {
/* Icecast stuff */
const gchar *str_value;
gint gint_value;
@@ -625,6 +577,7 @@ gst_neonhttp_src_start (GstBaseSrc * bsrc)
}
}
+ /* FIXME: send tags with name, genre, url */
str_value = ne_get_response_header (src->request, "icy-name");
if (str_value) {
if (src->iradio_name) {
@@ -961,9 +914,7 @@ gst_neonhttp_src_send_request_and_redirect (GstNeonhttpSrc * src,
ne_add_request_header (request, "Cookies", *c);
}
- if (src->iradio_mode) {
- ne_add_request_header (request, "icy-metadata", "1");
- }
+ ne_add_request_header (request, "icy-metadata", "1");
if (offset > 0) {
ne_print_request_header (request, "Range",
@@ -1135,11 +1086,12 @@ gst_neonhttp_src_uri_get_type (void)
return GST_URI_SRC;
}
-static gchar **
+static const gchar *const *
gst_neonhttp_src_uri_get_protocols (void)
{
static const gchar *protocols[] = { "http", "https", NULL };
- return (gchar **) protocols;
+
+ return protocols;
}
static const gchar *
diff --git a/ext/neon/gstneonhttpsrc.h b/ext/neon/gstneonhttpsrc.h
index e3207691a..4d2b1c075 100644
--- a/ext/neon/gstneonhttpsrc.h
+++ b/ext/neon/gstneonhttpsrc.h
@@ -59,7 +59,6 @@ struct _GstNeonhttpSrc {
gboolean eos;
/* icecast/audiocast metadata extraction handling */
- gboolean iradio_mode;
gchar *iradio_name;
gchar *iradio_genre;
gchar *iradio_url;
diff --git a/ext/openal/gstopenalsink.c b/ext/openal/gstopenalsink.c
index a169d9e57..ece590531 100644
--- a/ext/openal/gstopenalsink.c
+++ b/ext/openal/gstopenalsink.c
@@ -162,14 +162,15 @@ static void
gst_openal_sink_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
+ GstPadTemplate *pad_template;
gst_element_class_set_details_simple (element_class, "Audio sink (OpenAL)",
"Sink/Audio",
"Output to a sound device via OpenAL",
"Chris Robinson <chris.kcat@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &openalsink_sink_factory);
+ pad_template = gst_static_pad_template_get (&openalsink_sink_factory);
+ gst_element_class_add_pad_template (element_class, pad_template);
}
/* initialize the plugin's class */
diff --git a/ext/openal/gstopenalsrc.c b/ext/openal/gstopenalsrc.c
index 18379137b..350071956 100644
--- a/ext/openal/gstopenalsrc.c
+++ b/ext/openal/gstopenalsrc.c
@@ -142,7 +142,9 @@ gst_openal_src_base_init (gpointer gclass)
"OpenAL source capture audio from device",
"Victor Lin <bornstub@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory)
+ );
}
static void
diff --git a/ext/opencv/gstcvequalizehist.c b/ext/opencv/gstcvequalizehist.c
index 4d0521f57..3a086bed2 100644
--- a/ext/opencv/gstcvequalizehist.c
+++ b/ext/opencv/gstcvequalizehist.c
@@ -77,8 +77,10 @@ gst_cv_equalize_hist_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"cvequalizehist",
diff --git a/ext/opencv/gstcvlaplace.c b/ext/opencv/gstcvlaplace.c
index 39453e63b..de8649cd1 100644
--- a/ext/opencv/gstcvlaplace.c
+++ b/ext/opencv/gstcvlaplace.c
@@ -122,8 +122,10 @@ gst_cv_laplace_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"cvlaplace",
diff --git a/ext/opencv/gstcvsobel.c b/ext/opencv/gstcvsobel.c
index 1e7b63ec2..8aaeedd45 100644
--- a/ext/opencv/gstcvsobel.c
+++ b/ext/opencv/gstcvsobel.c
@@ -110,8 +110,10 @@ gst_cv_sobel_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"cvsobel",
diff --git a/ext/opencv/gstedgedetect.c b/ext/opencv/gstedgedetect.c
index 199435db6..427289981 100644
--- a/ext/opencv/gstedgedetect.c
+++ b/ext/opencv/gstedgedetect.c
@@ -138,8 +138,10 @@ gst_edge_detect_base_init (gpointer gclass)
"Performs canny edge detection on videos and images.",
"Michael Sheldon <mike@mikeasoft.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the edgedetect's class */
diff --git a/ext/opencv/gstfaceblur.c b/ext/opencv/gstfaceblur.c
index 2f9dcf544..b4b6711b8 100644
--- a/ext/opencv/gstfaceblur.c
+++ b/ext/opencv/gstfaceblur.c
@@ -138,8 +138,10 @@ gst_face_blur_base_init (gpointer gclass)
"Blurs faces in images and videos",
"Michael Sheldon <mike@mikeasoft.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the faceblur's class */
diff --git a/ext/opencv/gstfacedetect.c b/ext/opencv/gstfacedetect.c
index 01126710e..7f2121626 100644
--- a/ext/opencv/gstfacedetect.c
+++ b/ext/opencv/gstfacedetect.c
@@ -220,8 +220,10 @@ gst_face_detect_base_init (gpointer gclass)
"Performs face detection on videos and images, providing detected positions via bus messages",
"Michael Sheldon <mike@mikeasoft.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the facedetect's class */
diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.c
index 67aa3392d..d300f9d31 100644
--- a/ext/opencv/gstmotioncells.c
+++ b/ext/opencv/gstmotioncells.c
@@ -209,8 +209,10 @@ gst_motion_cells_base_init (gpointer gclass)
"Performs motion detection on videos and images, providing detected motion cells index via bus messages",
"Robert Jobbagy <jobbagy dot robert at gmail dot com>, Nicola Murino <nicola dot murino at gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the motioncells's class */
diff --git a/ext/opencv/gstopencvutils.c b/ext/opencv/gstopencvutils.c
index dc42f90d5..554b38be9 100644
--- a/ext/opencv/gstopencvutils.c
+++ b/ext/opencv/gstopencvutils.c
@@ -96,31 +96,31 @@ gst_opencv_parse_iplimage_params_from_caps (GstCaps * caps, gint * width,
GstCaps *
gst_opencv_caps_from_cv_image_type (int cv_type)
{
- GstCaps *caps = gst_caps_new_empty ();
+ GstCaps *c = gst_caps_new_empty ();
switch (cv_type) {
case CV_8UC1:
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_GRAY8));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("GRAY8")));
break;
case CV_8UC3:
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGB));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGR));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGB")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("BGR")));
break;
case CV_8UC4:
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGBx));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_xRGB));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGRx));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_xBGR));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGBA));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_ARGB));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGRA));
- gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_ABGR));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGBx")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("xRGB")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("BGRx")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("xBGR")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGBA")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("ARGB")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("BGRA")));
+ gst_caps_append (c, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("ABGR")));
break;
case CV_16UC1:
- gst_caps_append (caps,
- gst_caps_from_string (GST_VIDEO_CAPS_GRAY16 ("1234")));
- gst_caps_append (caps,
- gst_caps_from_string (GST_VIDEO_CAPS_GRAY16 ("4321")));
+ gst_caps_append (c,
+ gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("GRAY16_LE")));
+ gst_caps_append (c,
+ gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("GRAY16_BE")));
break;
}
- return caps;
+ return c;
}
diff --git a/ext/opencv/gstopencvvideofilter.c b/ext/opencv/gstopencvvideofilter.c
index 7c42b1956..2d6cb6d84 100644
--- a/ext/opencv/gstopencvvideofilter.c
+++ b/ext/opencv/gstopencvvideofilter.c
@@ -167,6 +167,7 @@ gst_opencv_video_filter_transform (GstBaseTransform * trans,
{
GstOpencvVideoFilter *transform;
GstOpencvVideoFilterClass *fclass;
+ GstFlowReturn ret;
transform = GST_OPENCV_VIDEO_FILTER (trans);
fclass = GST_OPENCV_VIDEO_FILTER_GET_CLASS (transform);
@@ -175,10 +176,18 @@ gst_opencv_video_filter_transform (GstBaseTransform * trans,
g_return_val_if_fail (transform->cvImage != NULL, GST_FLOW_ERROR);
g_return_val_if_fail (transform->out_cvImage != NULL, GST_FLOW_ERROR);
- transform->cvImage->imageData = (char *) GST_BUFFER_DATA (inbuf);
- transform->out_cvImage->imageData = (char *) GST_BUFFER_DATA (outbuf);
- return fclass->cv_trans_func (transform, inbuf, transform->cvImage, outbuf,
+ transform->cvImage->imageData = (char *) gst_buffer_map (inbuf,
+ NULL, NULL, GST_MAP_READ);
+ transform->out_cvImage->imageData = (char *) gst_buffer_map (outbuf,
+ NULL, NULL, GST_MAP_WRITE);
+
+ ret = fclass->cv_trans_func (transform, inbuf, transform->cvImage, outbuf,
transform->out_cvImage);
+
+ gst_buffer_unmap (inbuf, transform->cvImage->imageData, -1);
+ gst_buffer_unmap (outbuf, transform->out_cvImage->imageData, -1);
+
+ return ret;
}
static GstFlowReturn
@@ -187,6 +196,7 @@ gst_opencv_video_filter_transform_ip (GstBaseTransform * trans,
{
GstOpencvVideoFilter *transform;
GstOpencvVideoFilterClass *fclass;
+ GstFlowReturn ret;
transform = GST_OPENCV_VIDEO_FILTER (trans);
fclass = GST_OPENCV_VIDEO_FILTER_GET_CLASS (transform);
@@ -198,10 +208,15 @@ gst_opencv_video_filter_transform_ip (GstBaseTransform * trans,
* level */
buffer = gst_buffer_make_writable (buffer);
- transform->cvImage->imageData = (char *) GST_BUFFER_DATA (buffer);
+ transform->cvImage->imageData = (char *) gst_buffer_map (buffer,
+ NULL, NULL, GST_MAP_READWRITE);
/* FIXME how to release buffer? */
- return fclass->cv_trans_ip_func (transform, buffer, transform->cvImage);
+ ret = fclass->cv_trans_ip_func (transform, buffer, transform->cvImage);
+
+ gst_buffer_unmap (buffer, transform->cvImage->imageData, -1);
+
+ return ret;
}
static gboolean
diff --git a/ext/opencv/gstpyramidsegment.c b/ext/opencv/gstpyramidsegment.c
index 21ea253c1..33b1eb0ba 100644
--- a/ext/opencv/gstpyramidsegment.c
+++ b/ext/opencv/gstpyramidsegment.c
@@ -139,8 +139,10 @@ gst_pyramid_segment_base_init (gpointer gclass)
"Applies pyramid segmentation to a video or image.",
"Michael Sheldon <mike@mikeasoft.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the pyramidsegment's class */
diff --git a/ext/opencv/gsttemplatematch.c b/ext/opencv/gsttemplatematch.c
index 569978270..4f26121db 100644
--- a/ext/opencv/gsttemplatematch.c
+++ b/ext/opencv/gsttemplatematch.c
@@ -129,8 +129,10 @@ gst_template_match_base_init (gpointer gclass)
"Performs template matching on videos and images, providing detected positions via bus messages.",
"Noam Lewis <jones.noamle@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the templatematch's class */
diff --git a/ext/opencv/gsttextoverlay.c b/ext/opencv/gsttextoverlay.c
index db28352d3..92169440f 100644
--- a/ext/opencv/gsttextoverlay.c
+++ b/ext/opencv/gsttextoverlay.c
@@ -156,8 +156,10 @@ gst_opencv_text_overlay_base_init (gpointer gclass)
"Filter/Effect/Video",
"Write text on the top of video", "sreerenj<bsreerenj@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the opencvtextoverlay's class */
diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
index 7776f5812..67662456e 100644
--- a/ext/opus/gstopusdec.c
+++ b/ext/opus/gstopusdec.c
@@ -54,11 +54,10 @@ static GstStaticPadTemplate opus_dec_src_factory =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) { " GST_AUDIO_NE (S16) " }, "
"rate = (int) { 48000, 24000, 16000, 12000, 8000 }, "
- "channels = (int) [ 1, 8 ], "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) true, " "width = (int) 16, " "depth = (int) 16")
+ "channels = (int) [ 1, 8 ] ")
);
static GstStaticPadTemplate opus_dec_sink_factory =
@@ -68,6 +67,8 @@ GST_STATIC_PAD_TEMPLATE ("sink",
GST_STATIC_CAPS ("audio/x-opus")
);
+G_DEFINE_TYPE (GstOpusDec, gst_opus_dec, GST_TYPE_AUDIO_DECODER);
+
#define DB_TO_LINEAR(x) pow (10., (x) / 20.)
#define DEFAULT_USE_INBAND_FEC FALSE
@@ -80,8 +81,6 @@ enum
PROP_APPLY_GAIN
};
-GST_BOILERPLATE (GstOpusDec, gst_opus_dec, GstAudioDecoder,
- GST_TYPE_AUDIO_DECODER);
static GstFlowReturn gst_opus_dec_parse_header (GstOpusDec * dec,
GstBuffer * buf);
@@ -98,28 +97,15 @@ static void gst_opus_dec_set_property (GObject * object, guint prop_id,
static void
-gst_opus_dec_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &opus_dec_src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &opus_dec_sink_factory);
- gst_element_class_set_details_simple (element_class, "Opus audio decoder",
- "Codec/Decoder/Audio",
- "decode opus streams to audio",
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
gst_opus_dec_class_init (GstOpusDecClass * klass)
{
GObjectClass *gobject_class;
GstAudioDecoderClass *adclass;
+ GstElementClass *element_class;
gobject_class = (GObjectClass *) klass;
adclass = (GstAudioDecoderClass *) klass;
+ element_class = (GstElementClass *) klass;
gobject_class->set_property = gst_opus_dec_set_property;
gobject_class->get_property = gst_opus_dec_get_property;
@@ -129,6 +115,14 @@ gst_opus_dec_class_init (GstOpusDecClass * klass)
adclass->handle_frame = GST_DEBUG_FUNCPTR (gst_opus_dec_handle_frame);
adclass->set_format = GST_DEBUG_FUNCPTR (gst_opus_dec_set_format);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&opus_dec_src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&opus_dec_sink_factory));
+ gst_element_class_set_details_simple (element_class, "Opus audio decoder",
+ "Codec/Decoder/Audio",
+ "decode opus streams to audio",
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
g_object_class_install_property (gobject_class, PROP_USE_INBAND_FEC,
g_param_spec_boolean ("use-inband-fec", "Use in-band FEC",
"Use forward error correction if available", DEFAULT_USE_INBAND_FEC,
@@ -162,7 +156,7 @@ gst_opus_dec_reset (GstOpusDec * dec)
}
static void
-gst_opus_dec_init (GstOpusDec * dec, GstOpusDecClass * g_class)
+gst_opus_dec_init (GstOpusDec * dec)
{
dec->sample_rate = 0;
dec->n_channels = 0;
@@ -236,11 +230,14 @@ gst_opus_dec_negotiate (GstOpusDec * dec)
static GstFlowReturn
gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
{
- const guint8 *data = GST_BUFFER_DATA (buf);
+ const guint8 *data;
GstCaps *caps;
const GstAudioChannelPosition *pos = NULL;
g_return_val_if_fail (gst_opus_header_is_id_header (buf), GST_FLOW_ERROR);
+
+ data = gst_buffer_map (buf, NULL, NULL, GST_MAP_READ);
+
g_return_val_if_fail (dec->n_channels == 0
|| dec->n_channels == data[9], GST_FLOW_ERROR);
@@ -314,9 +311,12 @@ gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
gst_pad_set_caps (GST_AUDIO_DECODER_SRC_PAD (dec), caps);
gst_caps_unref (caps);
+ gst_buffer_unmap (buf, (guint8 *) data, -1);
+
return GST_FLOW_OK;
}
+
static GstFlowReturn
gst_opus_dec_parse_comments (GstOpusDec * dec, GstBuffer * buf)
{
@@ -327,7 +327,7 @@ static GstFlowReturn
opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
{
GstFlowReturn res = GST_FLOW_OK;
- gint size;
+ gsize size, out_size;
guint8 *data;
GstBuffer *outbuf;
gint16 *out_data;
@@ -373,7 +373,7 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
if (buffer) {
GST_DEBUG_OBJECT (dec, "Received buffer of size %u",
- GST_BUFFER_SIZE (buffer));
+ gst_buffer_get_size (buffer));
} else {
GST_DEBUG_OBJECT (dec, "Received missing buffer");
}
@@ -389,8 +389,8 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
buf = dec->use_inband_fec && dec->last_buffer ? dec->last_buffer : buffer;
if (buf) {
- data = GST_BUFFER_DATA (buf);
- size = GST_BUFFER_SIZE (buf);
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
GST_DEBUG_OBJECT (dec, "Using buffer of size %u", size);
} else {
/* concealment data, pass NULL as the bits parameters */
@@ -404,16 +404,12 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
samples = 120 * dec->sample_rate / 1000;
packet_size = samples * dec->n_channels * 2;
- res = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_DECODER_SRC_PAD (dec),
- GST_BUFFER_OFFSET_NONE, packet_size,
- GST_PAD_CAPS (GST_AUDIO_DECODER_SRC_PAD (dec)), &outbuf);
-
- if (res != GST_FLOW_OK) {
- GST_DEBUG_OBJECT (dec, "buf alloc flow: %s", gst_flow_get_name (res));
- return res;
+ outbuf = gst_buffer_new_and_alloc (packet_size);
+ if (!outbuf) {
+ goto buffer_failed;
}
- out_data = (gint16 *) GST_BUFFER_DATA (outbuf);
+ out_data = (gint16 *) gst_buffer_map (outbuf, &out_size, NULL, GST_MAP_WRITE);
if (dec->use_inband_fec) {
if (dec->last_buffer) {
@@ -429,28 +425,30 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
/* normal decode */
n = opus_multistream_decode (dec->state, data, size, out_data, samples, 0);
}
+ gst_buffer_unmap (buf, data, size);
+ gst_buffer_unmap (outbuf, out_data, out_size);
if (n < 0) {
GST_ELEMENT_ERROR (dec, STREAM, DECODE, ("Decoding error: %d", n), (NULL));
return GST_FLOW_ERROR;
}
GST_DEBUG_OBJECT (dec, "decoded %d samples", n);
- GST_BUFFER_SIZE (outbuf) = n * 2 * dec->n_channels;
+ gst_buffer_set_size (outbuf, n * 2 * dec->n_channels);
/* Skip any samples that need skipping */
if (dec->pre_skip > 0) {
guint scaled_pre_skip = dec->pre_skip * dec->sample_rate / 48000;
guint skip = scaled_pre_skip > n ? n : scaled_pre_skip;
guint scaled_skip = skip * 48000 / dec->sample_rate;
- GST_BUFFER_SIZE (outbuf) -= skip * 2 * dec->n_channels;
- GST_BUFFER_DATA (outbuf) += skip * 2 * dec->n_channels;
+
+ gst_buffer_resize (outbuf, skip * 2 * dec->n_channels, -1);
dec->pre_skip -= scaled_skip;
GST_INFO_OBJECT (dec,
"Skipping %u samples (%u at 48000 Hz, %u left to skip)", skip,
scaled_skip, dec->pre_skip);
}
- if (GST_BUFFER_SIZE (outbuf) == 0) {
+ if (gst_buffer_get_size (outbuf) == 0) {
gst_buffer_unref (outbuf);
outbuf = NULL;
}
@@ -462,14 +460,19 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
So make it optional if the user program wants to use a volume,
but do it by default so the correct volume goes out by default */
if (dec->apply_gain && outbuf && dec->r128_gain) {
- unsigned int i, nsamples = GST_BUFFER_SIZE (outbuf) / 2;
+ gsize rsize;
+ unsigned int i, nsamples;
double volume = dec->r128_gain_volume;
- gint16 *samples = (gint16 *) GST_BUFFER_DATA (outbuf);
+ gint16 *samples =
+ (gint16 *) gst_buffer_map (outbuf, &rsize, NULL, GST_MAP_READWRITE);
+
GST_DEBUG_OBJECT (dec, "Applying gain: volume %f", volume);
+ nsamples = rsize / 2;
for (i = 0; i < nsamples; ++i) {
int sample = (int) (samples[i] * volume + 0.5);
samples[i] = sample < -32768 ? -32768 : sample > 32767 ? 32767 : sample;
}
+ gst_buffer_unmap (outbuf, samples, rsize);
}
res = gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (dec), outbuf, 1);
@@ -488,6 +491,10 @@ done:
creation_failed:
GST_ERROR_OBJECT (dec, "Failed to create Opus decoder: %d", err);
return GST_FLOW_ERROR;
+
+buffer_failed:
+ GST_ERROR_OBJECT (dec, "Failed to create %u byte buffer", packet_size);
+ return GST_FLOW_ERROR;
}
static gboolean
@@ -535,14 +542,20 @@ static gboolean
memcmp_buffers (GstBuffer * buf1, GstBuffer * buf2)
{
gsize size1, size2;
+ gpointer data1;
+ gboolean res;
- size1 = GST_BUFFER_SIZE (buf1);
- size2 = GST_BUFFER_SIZE (buf2);
+ size1 = gst_buffer_get_size (buf1);
+ size2 = gst_buffer_get_size (buf2);
if (size1 != size2)
return FALSE;
- return !memcmp (GST_BUFFER_DATA (buf1), GST_BUFFER_DATA (buf2), size1);
+ data1 = gst_buffer_map (buf1, NULL, NULL, GST_MAP_READ);
+ res = gst_buffer_memcmp (buf2, 0, data1, size1) == 0;
+ gst_buffer_unmap (buf1, data1, size1);
+
+ return res;
}
static GstFlowReturn
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
index 0ccbbebc5..999c0f39f 100644
--- a/ext/opus/gstopusenc.c
+++ b/ext/opus/gstopusenc.c
@@ -113,14 +113,14 @@ gst_opus_enc_frame_size_get_type (void)
return id;
}
+#define FORMAT_STR GST_AUDIO_NE(S16)
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "rate = (int) { 48000, 24000, 16000, 12000, 8000 }, "
- "channels = (int) [ 1, 8 ], "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) TRUE, " "width = (int) 16, " "depth = (int) 16")
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " FORMAT_STR ", "
+ "rate = (int) { 8000, 12000, 16000, 24000, 48000 }, "
+ "channels = (int) [ 1, 2 ] ")
);
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
@@ -161,7 +161,8 @@ static void gst_opus_enc_finalize (GObject * object);
static gboolean gst_opus_enc_sink_event (GstAudioEncoder * benc,
GstEvent * event);
-static GstCaps *gst_opus_enc_sink_getcaps (GstAudioEncoder * benc);
+static GstCaps *gst_opus_enc_sink_getcaps (GstAudioEncoder * benc,
+ GstCaps * filter);
static gboolean gst_opus_enc_setup (GstOpusEnc * enc);
static void gst_opus_enc_get_property (GObject * object, guint prop_id,
@@ -179,52 +180,34 @@ static gint64 gst_opus_enc_get_latency (GstOpusEnc * enc);
static GstFlowReturn gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buffer);
-static void
-gst_opus_enc_setup_interfaces (GType opusenc_type)
-{
- static const GInterfaceInfo tag_setter_info = { NULL, NULL, NULL };
- const GInterfaceInfo preset_interface_info = {
- NULL, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- g_type_add_interface_static (opusenc_type, GST_TYPE_TAG_SETTER,
- &tag_setter_info);
- g_type_add_interface_static (opusenc_type, GST_TYPE_PRESET,
- &preset_interface_info);
-
- GST_DEBUG_CATEGORY_INIT (opusenc_debug, "opusenc", 0, "Opus encoder");
-}
-
-GST_BOILERPLATE_FULL (GstOpusEnc, gst_opus_enc, GstAudioEncoder,
- GST_TYPE_AUDIO_ENCODER, gst_opus_enc_setup_interfaces);
-
-static void
-gst_opus_enc_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_set_details_simple (element_class, "Opus audio encoder",
- "Codec/Encoder/Audio",
- "Encodes audio in Opus format",
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
+#define gst_opus_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstOpusEnc, gst_opus_enc, GST_TYPE_AUDIO_ENCODER,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL);
+ G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL));
static void
gst_opus_enc_class_init (GstOpusEncClass * klass)
{
GObjectClass *gobject_class;
GstAudioEncoderClass *base_class;
+ GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass;
base_class = (GstAudioEncoderClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
gobject_class->set_property = gst_opus_enc_set_property;
gobject_class->get_property = gst_opus_enc_get_property;
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_set_details_simple (gstelement_class, "Opus audio encoder",
+ "Codec/Encoder/Audio",
+ "Encodes audio in Opus format",
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
base_class->start = GST_DEBUG_FUNCPTR (gst_opus_enc_start);
base_class->stop = GST_DEBUG_FUNCPTR (gst_opus_enc_stop);
base_class->set_format = GST_DEBUG_FUNCPTR (gst_opus_enc_set_format);
@@ -291,6 +274,8 @@ gst_opus_enc_class_init (GstOpusEncClass * klass)
GST_PARAM_MUTABLE_PLAYING));
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_opus_enc_finalize);
+
+ GST_DEBUG_CATEGORY_INIT (opusenc_debug, "opusenc", 0, "Opus encoder");
}
static void
@@ -306,7 +291,7 @@ gst_opus_enc_finalize (GObject * object)
}
static void
-gst_opus_enc_init (GstOpusEnc * enc, GstOpusEncClass * klass)
+gst_opus_enc_init (GstOpusEnc * enc)
{
GstAudioEncoder *benc = GST_AUDIO_ENCODER (enc);
@@ -340,7 +325,7 @@ gst_opus_enc_start (GstAudioEncoder * benc)
GstOpusEnc *enc = GST_OPUS_ENC (benc);
GST_DEBUG_OBJECT (enc, "start");
- enc->tags = gst_tag_list_new ();
+ enc->tags = gst_tag_list_new_empty ();
enc->header_sent = FALSE;
return TRUE;
@@ -716,6 +701,7 @@ gst_opus_enc_sink_event (GstAudioEncoder * benc, GstEvent * event)
gst_tag_setter_merge_tags (setter, list, mode);
break;
}
+
default:
break;
}
@@ -724,7 +710,7 @@ gst_opus_enc_sink_event (GstAudioEncoder * benc, GstEvent * event)
}
static GstCaps *
-gst_opus_enc_sink_getcaps (GstAudioEncoder * benc)
+gst_opus_enc_sink_getcaps (GstAudioEncoder * benc, GstCaps * filter)
{
GstOpusEnc *enc;
GstCaps *caps;
@@ -737,7 +723,7 @@ gst_opus_enc_sink_getcaps (GstAudioEncoder * benc)
GST_DEBUG_OBJECT (enc, "sink getcaps");
- peercaps = gst_pad_peer_get_caps (GST_AUDIO_ENCODER_SRC_PAD (benc));
+ peercaps = gst_pad_peer_query_caps (GST_AUDIO_ENCODER_SRC_PAD (benc), filter);
if (!peercaps) {
GST_DEBUG_OBJECT (benc, "No peercaps, returning template sink caps");
return
@@ -781,6 +767,13 @@ gst_opus_enc_sink_getcaps (GstAudioEncoder * benc)
g_value_unset (&range);
}
+ if (filter) {
+ GstCaps *tmp = gst_caps_intersect_full (caps, filter,
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
GST_DEBUG_OBJECT (enc, "Returning caps: %" GST_PTR_FORMAT, caps);
return caps;
}
@@ -788,23 +781,23 @@ gst_opus_enc_sink_getcaps (GstAudioEncoder * benc)
static GstFlowReturn
gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
{
- guint8 *bdata, *data, *mdata = NULL;
+ guint8 *bdata = NULL, *data, *mdata = NULL;
gsize bsize, size;
- gsize bytes;
+ gsize bytes = enc->frame_samples * enc->n_channels * 2;
gint ret = GST_FLOW_OK;
g_mutex_lock (enc->property_lock);
- bytes = enc->frame_samples * enc->n_channels * 2;
if (G_LIKELY (buf)) {
- bdata = GST_BUFFER_DATA (buf);
- bsize = GST_BUFFER_SIZE (buf);
+ bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+
if (G_UNLIKELY (bsize % bytes)) {
GST_DEBUG_OBJECT (enc, "draining; adding silence samples");
size = ((bsize / bytes) + 1) * bytes;
mdata = g_malloc0 (size);
memcpy (mdata, bdata, bsize);
+ gst_buffer_unmap (buf, bdata, bsize);
bdata = NULL;
data = mdata;
} else {
@@ -816,40 +809,39 @@ gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
goto done;
}
-
while (size) {
- gint outsize;
+ gint encoded_size;
+ unsigned char *out_data;
+ gsize out_size;
GstBuffer *outbuf;
- ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc),
- GST_BUFFER_OFFSET_NONE, enc->max_payload_size * enc->n_channels,
- GST_PAD_CAPS (GST_AUDIO_ENCODER_SRC_PAD (enc)), &outbuf);
-
- if (GST_FLOW_OK != ret)
+ outbuf = gst_buffer_new_and_alloc (enc->max_payload_size * enc->n_channels);
+ if (!outbuf)
goto done;
GST_DEBUG_OBJECT (enc, "encoding %d samples (%d bytes)",
enc->frame_samples, (int) bytes);
- outsize =
+ out_data = gst_buffer_map (outbuf, &out_size, NULL, GST_MAP_WRITE);
+ encoded_size =
opus_multistream_encode (enc->state, (const gint16 *) data,
- enc->frame_samples, GST_BUFFER_DATA (outbuf),
- enc->max_payload_size * enc->n_channels);
+ enc->frame_samples, out_data, enc->max_payload_size * enc->n_channels);
+ gst_buffer_unmap (outbuf, out_data, out_size);
- if (outsize < 0) {
- GST_ERROR_OBJECT (enc, "Encoding failed: %d", outsize);
+ if (encoded_size < 0) {
+ GST_ERROR_OBJECT (enc, "Encoding failed: %d", encoded_size);
ret = GST_FLOW_ERROR;
goto done;
- } else if (outsize > enc->max_payload_size) {
+ } else if (encoded_size > enc->max_payload_size) {
GST_WARNING_OBJECT (enc,
"Encoded size %d is higher than max payload size (%d bytes)",
- outsize, enc->max_payload_size);
+ out_size, enc->max_payload_size);
ret = GST_FLOW_ERROR;
goto done;
}
- GST_DEBUG_OBJECT (enc, "Output packet is %u bytes", outsize);
- GST_BUFFER_SIZE (outbuf) = outsize;
+ GST_DEBUG_OBJECT (enc, "Output packet is %u bytes", encoded_size);
+ gst_buffer_set_size (outbuf, encoded_size);
ret =
gst_audio_encoder_finish_frame (GST_AUDIO_ENCODER (enc), outbuf,
@@ -864,6 +856,8 @@ gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
done:
+ if (bdata)
+ gst_buffer_unmap (buf, bdata, bsize);
g_mutex_unlock (enc->property_lock);
if (mdata)
@@ -902,7 +896,7 @@ gst_opus_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
}
GST_DEBUG_OBJECT (enc, "received buffer %p of %u bytes", buf,
- buf ? GST_BUFFER_SIZE (buf) : 0);
+ buf ? gst_buffer_get_size (buf) : 0);
ret = gst_opus_enc_encode (enc, buf);
diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
index d3d631fe7..68826a56b 100644
--- a/ext/opus/gstopusheader.c
+++ b/ext/opus/gstopusheader.c
@@ -73,7 +73,7 @@ gst_opus_enc_create_metadata_buffer (const GstTagList * tags)
if (tags == NULL) {
/* FIXME: better fix chain of callers to not write metadata at all,
* if there is none */
- empty_tags = gst_tag_list_new ();
+ empty_tags = gst_tag_list_new_empty ();
tags = empty_tags;
}
comments =
@@ -152,21 +152,32 @@ gst_opus_header_create_caps_from_headers (GstCaps ** caps, GSList ** headers,
{
int n_streams, family;
gboolean multistream;
+ guint8 *data;
+ gsize size;
g_return_if_fail (caps);
g_return_if_fail (headers && !*headers);
- g_return_if_fail (GST_BUFFER_SIZE (buf1) >= 19);
+ g_return_if_fail (gst_buffer_get_size (buf1) >= 19);
+
+ data = gst_buffer_map (buf1, &size, NULL, GST_MAP_READ);
/* work out the number of streams */
- family = GST_BUFFER_DATA (buf1)[18];
+ family = data[18];
if (family == 0) {
n_streams = 1;
} else {
/* only included in the header for family > 0 */
- g_return_if_fail (GST_BUFFER_SIZE (buf1) >= 20);
- n_streams = GST_BUFFER_DATA (buf1)[19];
+ if (size >= 20)
+ n_streams = data[19];
+ else {
+ g_warning ("family > 0 but header buffer size < 20");
+ gst_buffer_unmap (buf1, data, size);
+ return;
+ }
}
+ gst_buffer_unmap (buf1, data, size);
+
/* mark and put on caps */
multistream = n_streams > 1;
*caps = gst_caps_new_simple ("audio/x-opus",
@@ -206,42 +217,54 @@ gst_opus_header_create_caps (GstCaps ** caps, GSList ** headers, gint nchannels,
gboolean
gst_opus_header_is_header (GstBuffer * buf, const char *magic, guint magic_size)
{
- return (GST_BUFFER_SIZE (buf) >= magic_size
- && !memcmp (magic, GST_BUFFER_DATA (buf), magic_size));
+ return (gst_buffer_get_size (buf) >= magic_size
+ && !gst_buffer_memcmp (buf, 0, magic, magic_size));
}
gboolean
gst_opus_header_is_id_header (GstBuffer * buf)
{
- gsize size = GST_BUFFER_SIZE (buf);
- const guint8 *data = GST_BUFFER_DATA (buf);
+ gsize size = gst_buffer_get_size (buf);
+ guint8 *data = NULL;
guint8 channels, channel_mapping_family, n_streams, n_stereo_streams;
+ gboolean ret = FALSE;
if (size < 19)
- return FALSE;
+ goto beach;
if (!gst_opus_header_is_header (buf, "OpusHead", 8))
- return FALSE;
+ goto beach;
+
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
channels = data[9];
+
if (channels == 0)
- return FALSE;
+ goto beach;
+
channel_mapping_family = data[18];
+
if (channel_mapping_family == 0) {
if (channels > 2)
- return FALSE;
+ goto beach;
} else {
channels = data[9];
if (size < 21 + channels)
- return FALSE;
+ goto beach;
n_streams = data[19];
n_stereo_streams = data[20];
if (n_streams == 0)
- return FALSE;
+ goto beach;
if (n_stereo_streams > n_streams)
- return FALSE;
+ goto beach;
if (n_streams + n_stereo_streams > 255)
- return FALSE;
+ goto beach;
}
- return TRUE;
+ ret = TRUE;
+
+beach:
+ if (data)
+ gst_buffer_unmap (buf, data, size);
+ return ret;
}
gboolean
diff --git a/ext/opus/gstopusparse.c b/ext/opus/gstopusparse.c
index f3706cb72..05963ca79 100644
--- a/ext/opus/gstopusparse.c
+++ b/ext/opus/gstopusparse.c
@@ -108,6 +108,11 @@ static gboolean
gst_opus_parse_start (GstBaseParse * base)
{
GstOpusParse *parse = GST_OPUS_PARSE (base);
+ GstCaps *caps;
+
+ caps = gst_caps_new_empty_simple ("audio/x-opus");
+ gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (GST_BASE_PARSE (parse)), caps);
+ gst_caps_unref (caps);
parse->header_sent = FALSE;
parse->next_ts = 0;
@@ -147,8 +152,7 @@ gst_opus_parse_check_valid_frame (GstBaseParse * base,
parse = GST_OPUS_PARSE (base);
- data = GST_BUFFER_DATA (frame->buffer);
- size = GST_BUFFER_SIZE (frame->buffer);
+ data = gst_buffer_map (frame->buffer, &size, NULL, GST_MAP_READ);
GST_DEBUG_OBJECT (parse, "Checking for frame, %u bytes in buffer", size);
/* check for headers */
@@ -206,6 +210,7 @@ gst_opus_parse_check_valid_frame (GstBaseParse * base,
ret = TRUE;
beach:
+ gst_buffer_unmap (frame->buffer, data, size);
return ret;
}
@@ -271,6 +276,8 @@ gst_opus_parse_parse_frame (GstBaseParse * base, GstBaseParseFrame * frame)
guint64 duration;
GstOpusParse *parse;
gboolean is_idheader, is_commentheader;
+ guint8 *data;
+ gsize size;
parse = GST_OPUS_PARSE (base);
@@ -320,9 +327,9 @@ gst_opus_parse_parse_frame (GstBaseParse * base, GstBaseParseFrame * frame)
GST_BUFFER_TIMESTAMP (frame->buffer) = parse->next_ts;
- duration =
- packet_duration_opus (GST_BUFFER_DATA (frame->buffer),
- GST_BUFFER_SIZE (frame->buffer));
+ data = gst_buffer_map (frame->buffer, &size, NULL, GST_MAP_READ);
+ duration = packet_duration_opus (data, size);
+ gst_buffer_unmap (frame->buffer, data, size);
parse->next_ts += duration;
GST_BUFFER_DURATION (frame->buffer) = duration;
diff --git a/ext/opus/gstrtpopusdepay.c b/ext/opus/gstrtpopusdepay.c
index 0f1869ed5..f8effbb6c 100644
--- a/ext/opus/gstrtpopusdepay.c
+++ b/ext/opus/gstrtpopusdepay.c
@@ -31,8 +31,6 @@
GST_DEBUG_CATEGORY_STATIC (rtpopusdepay_debug);
#define GST_CAT_DEFAULT (rtpopusdepay_debug)
-
-
static GstStaticPadTemplate gst_rtp_opus_depay_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
@@ -51,18 +49,22 @@ GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS ("audio/x-opus")
);
-static GstBuffer *gst_rtp_opus_depay_process (GstBaseRTPDepayload * depayload,
+static GstBuffer *gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload,
GstBuffer * buf);
-static gboolean gst_rtp_opus_depay_setcaps (GstBaseRTPDepayload * depayload,
+static gboolean gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload,
GstCaps * caps);
-GST_BOILERPLATE (GstRTPOpusDepay, gst_rtp_opus_depay, GstBaseRTPDepayload,
- GST_TYPE_BASE_RTP_DEPAYLOAD);
+G_DEFINE_TYPE (GstRTPOpusDepay, gst_rtp_opus_depay,
+ GST_TYPE_RTP_BASE_DEPAYLOAD);
static void
-gst_rtp_opus_depay_base_init (gpointer klass)
+gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstRTPBaseDepayloadClass *gstbasertpdepayload_class;
+ GstElementClass *element_class;
+
+ element_class = GST_ELEMENT_CLASS (klass);
+ gstbasertpdepayload_class = (GstRTPBaseDepayloadClass *) klass;
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rtp_opus_depay_src_template));
@@ -72,14 +74,6 @@ gst_rtp_opus_depay_base_init (gpointer klass)
"RTP Opus packet depayloader", "Codec/Depayloader/Network/RTP",
"Extracts Opus audio from RTP packets",
"Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>");
-}
-
-static void
-gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass)
-{
- GstBaseRTPDepayloadClass *gstbasertpdepayload_class;
-
- gstbasertpdepayload_class = (GstBaseRTPDepayloadClass *) klass;
gstbasertpdepayload_class->process = gst_rtp_opus_depay_process;
gstbasertpdepayload_class->set_caps = gst_rtp_opus_depay_setcaps;
@@ -89,20 +83,19 @@ gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass)
}
static void
-gst_rtp_opus_depay_init (GstRTPOpusDepay * rtpopusdepay,
- GstRTPOpusDepayClass * klass)
+gst_rtp_opus_depay_init (GstRTPOpusDepay * rtpopusdepay)
{
}
static gboolean
-gst_rtp_opus_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
+gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
{
GstCaps *srccaps;
gboolean ret;
- srccaps = gst_caps_new_simple ("audio/x-opus", NULL);
- ret = gst_pad_set_caps (GST_BASE_RTP_DEPAYLOAD_SRCPAD (depayload), srccaps);
+ srccaps = gst_caps_new_empty_simple ("audio/x-opus");
+ ret = gst_pad_set_caps (GST_RTP_BASE_DEPAYLOAD_SRCPAD (depayload), srccaps);
GST_DEBUG_OBJECT (depayload,
"set caps on source: %" GST_PTR_FORMAT " (ret=%d)", srccaps, ret);
@@ -114,10 +107,14 @@ gst_rtp_opus_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
}
static GstBuffer *
-gst_rtp_opus_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
+gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
{
GstBuffer *outbuf;
- outbuf = gst_rtp_buffer_get_payload_buffer (buf);
+ GstRTPBuffer rtpbuf = { NULL, };
+
+ gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf);
+ outbuf = gst_rtp_buffer_get_payload_buffer (&rtpbuf);
+ gst_rtp_buffer_unmap (&rtpbuf);
return outbuf;
}
diff --git a/ext/opus/gstrtpopusdepay.h b/ext/opus/gstrtpopusdepay.h
index ba217e0e8..968ae52ae 100644
--- a/ext/opus/gstrtpopusdepay.h
+++ b/ext/opus/gstrtpopusdepay.h
@@ -23,7 +23,7 @@
#define __GST_RTP_OPUS_DEPAY_H__
#include <gst/gst.h>
-#include <gst/rtp/gstbasertpdepayload.h>
+#include <gst/rtp/gstrtpbasedepayload.h>
G_BEGIN_DECLS typedef struct _GstRTPOpusDepay GstRTPOpusDepay;
typedef struct _GstRTPOpusDepayClass GstRTPOpusDepayClass;
@@ -42,13 +42,13 @@ typedef struct _GstRTPOpusDepayClass GstRTPOpusDepayClass;
struct _GstRTPOpusDepay
{
- GstBaseRTPDepayload depayload;
+ GstRTPBaseDepayload depayload;
};
struct _GstRTPOpusDepayClass
{
- GstBaseRTPDepayloadClass parent_class;
+ GstRTPBaseDepayloadClass parent_class;
};
GType gst_rtp_opus_depay_get_type (void);
diff --git a/ext/opus/gstrtpopuspay.c b/ext/opus/gstrtpopuspay.c
index cdd7ee00c..5003c739f 100644
--- a/ext/opus/gstrtpopuspay.c
+++ b/ext/opus/gstrtpopuspay.c
@@ -51,18 +51,24 @@ GST_STATIC_PAD_TEMPLATE ("src",
"encoding-name = (string) \"X-GST-OPUS-DRAFT-SPITTKA-00\"")
);
-static gboolean gst_rtp_opus_pay_setcaps (GstBaseRTPPayload * payload,
+static gboolean gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload,
GstCaps * caps);
-static GstFlowReturn gst_rtp_opus_pay_handle_buffer (GstBaseRTPPayload *
+static GstFlowReturn gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload *
payload, GstBuffer * buffer);
-GST_BOILERPLATE (GstRtpOPUSPay, gst_rtp_opus_pay, GstBaseRTPPayload,
- GST_TYPE_BASE_RTP_PAYLOAD);
+G_DEFINE_TYPE (GstRtpOPUSPay, gst_rtp_opus_pay, GST_TYPE_RTP_BASE_PAYLOAD);
static void
-gst_rtp_opus_pay_base_init (gpointer klass)
+gst_rtp_opus_pay_class_init (GstRtpOPUSPayClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstRTPBasePayloadClass *gstbasertppayload_class;
+ GstElementClass *element_class;
+
+ gstbasertppayload_class = (GstRTPBasePayloadClass *) klass;
+ element_class = GST_ELEMENT_CLASS (klass);
+
+ gstbasertppayload_class->set_caps = gst_rtp_opus_pay_setcaps;
+ gstbasertppayload_class->handle_buffer = gst_rtp_opus_pay_handle_buffer;
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rtp_opus_pay_src_template));
@@ -74,39 +80,28 @@ gst_rtp_opus_pay_base_init (gpointer klass)
"Codec/Payloader/Network/RTP",
"Puts Opus audio in RTP packets",
"Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>");
-}
-
-static void
-gst_rtp_opus_pay_class_init (GstRtpOPUSPayClass * klass)
-{
- GstBaseRTPPayloadClass *gstbasertppayload_class;
-
- gstbasertppayload_class = (GstBaseRTPPayloadClass *) klass;
-
- gstbasertppayload_class->set_caps = gst_rtp_opus_pay_setcaps;
- gstbasertppayload_class->handle_buffer = gst_rtp_opus_pay_handle_buffer;
GST_DEBUG_CATEGORY_INIT (rtpopuspay_debug, "rtpopuspay", 0,
"Opus RTP Payloader");
}
static void
-gst_rtp_opus_pay_init (GstRtpOPUSPay * rtpopuspay, GstRtpOPUSPayClass * klass)
+gst_rtp_opus_pay_init (GstRtpOPUSPay * rtpopuspay)
{
}
static gboolean
-gst_rtp_opus_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
+gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
{
gboolean res;
gchar *capsstr;
capsstr = gst_caps_to_string (caps);
- gst_basertppayload_set_options (payload, "audio", FALSE,
+ gst_rtp_base_payload_set_options (payload, "audio", FALSE,
"X-GST-OPUS-DRAFT-SPITTKA-00", 48000);
res =
- gst_basertppayload_set_outcaps (payload, "caps", G_TYPE_STRING, capsstr,
+ gst_rtp_base_payload_set_outcaps (payload, "caps", G_TYPE_STRING, capsstr,
NULL);
g_free (capsstr);
@@ -114,27 +109,29 @@ gst_rtp_opus_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
}
static GstFlowReturn
-gst_rtp_opus_pay_handle_buffer (GstBaseRTPPayload * basepayload,
+gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload * basepayload,
GstBuffer * buffer)
{
+ GstRTPBuffer rtpbuf = { NULL, };
GstBuffer *outbuf;
- GstClockTime timestamp;
-
- guint size;
- guint8 *data;
- guint8 *payload;
-
- size = GST_BUFFER_SIZE (buffer);
- data = GST_BUFFER_DATA (buffer);
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
-
- outbuf = gst_rtp_buffer_new_allocate (size, 0, 0);
- payload = gst_rtp_buffer_get_payload (outbuf);
-
- memcpy (payload, data, size);
-
- gst_rtp_buffer_set_marker (outbuf, FALSE);
- GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
-
- return gst_basertppayload_push (basepayload, outbuf);
+ gsize size;
+ gpointer *data;
+
+ /* Copy data and timestamp to a new output buffer
+ * FIXME : Don't we have a convenience function for this ? */
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+ outbuf = gst_rtp_buffer_new_copy_data (data, size);
+ GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buffer);
+
+ /* Unmap and free input buffer */
+ gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unref (buffer);
+
+ /* Remove marker from RTP buffer */
+ gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtpbuf);
+ gst_rtp_buffer_set_marker (&rtpbuf, FALSE);
+ gst_rtp_buffer_unmap (&rtpbuf);
+
+ /* Push out */
+ return gst_rtp_base_payload_push (basepayload, outbuf);
}
diff --git a/ext/opus/gstrtpopuspay.h b/ext/opus/gstrtpopuspay.h
index 23abd0dab..81160fe2a 100644
--- a/ext/opus/gstrtpopuspay.h
+++ b/ext/opus/gstrtpopuspay.h
@@ -23,7 +23,7 @@
#define __GST_RTP_OPUS_PAY_H__
#include <gst/gst.h>
-#include <gst/rtp/gstbasertppayload.h>
+#include <gst/rtp/gstrtpbasepayload.h>
G_BEGIN_DECLS
@@ -43,12 +43,12 @@ typedef struct _GstRtpOPUSPayClass GstRtpOPUSPayClass;
struct _GstRtpOPUSPay
{
- GstBaseRTPPayload payload;
+ GstRTPBasePayload payload;
};
struct _GstRtpOPUSPayClass
{
- GstBaseRTPPayloadClass parent_class;
+ GstRTPBasePayloadClass parent_class;
};
GType gst_rtp_opus_pay_get_type (void);
diff --git a/ext/resindvd/resindvdbin.c b/ext/resindvd/resindvdbin.c
index cbede40eb..5885b238a 100644
--- a/ext/resindvd/resindvdbin.c
+++ b/ext/resindvd/resindvdbin.c
@@ -101,12 +101,12 @@ rsn_dvdbin_base_init (gpointer gclass)
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class,
- &video_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &audio_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &subpicture_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&subpicture_src_template));
gst_element_class_set_details_simple (element_class, "rsndvdbin",
"Generic/Bin/Player",
"DVD playback element", "Jan Schmidt <thaytan@noraisin.net>");
@@ -170,10 +170,10 @@ rsn_dvdbin_uri_get_type (void)
return GST_URI_SRC;
}
-static gchar **
+static const gchar *const *
rsn_dvdbin_uri_get_protocols (void)
{
- static gchar *protocols[] = { (char *) "dvd", NULL };
+ static const gchar *protocols[] = { "dvd", NULL };
return protocols;
}
@@ -625,7 +625,7 @@ connect_thru_mq (RsnDvdBin * dvdbin, GstPad * pad)
/* Request a pad from multiqueue, then connect this one, then
* discover the corresponding output pad and return it */
mq_sink = gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_MQUEUE],
- "sink%d");
+ "sink_%u");
if (mq_sink == NULL)
return FALSE;
dvdbin->mq_req_pads = g_list_prepend (dvdbin->mq_req_pads, mq_sink);
@@ -635,7 +635,7 @@ connect_thru_mq (RsnDvdBin * dvdbin, GstPad * pad)
sinkname = gst_pad_get_name (mq_sink);
tmp = sinkname + 4;
- srcname = g_strdup_printf ("src%s", tmp);
+ srcname = g_strdup_printf ("src_%s", tmp);
mq_src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_MQUEUE],
srcname);
@@ -699,13 +699,13 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin)
} else if (g_str_equal (gst_structure_get_name (s), "video/x-dvd-subpicture")) {
dest_pad =
gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_SPU_SELECT],
- "sink%d");
+ "sink_%u");
skip_mq = TRUE;
} else if (can_sink_caps (dvdbin->pieces[DVD_ELEM_AUDDEC], caps)) {
GST_LOG_OBJECT (dvdbin, "Found audio pad w/ caps %" GST_PTR_FORMAT, caps);
dest_pad =
gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_AUD_SELECT],
- "sink%d");
+ "sink_%u");
} else {
GstStructure *s;
diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c
index 499b44fdd..a0059fdaa 100644
--- a/ext/resindvd/resindvdsrc.c
+++ b/ext/resindvd/resindvdsrc.c
@@ -193,7 +193,8 @@ rsn_dvdsrc_base_init (gpointer gclass)
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
gst_element_class_set_details_simple (element_class, "Resin DVD Src",
"Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>");
}
@@ -2399,7 +2400,7 @@ rsn_dvdsrc_src_event (GstBaseSrc * basesrc, GstEvent * event)
GST_LOG_OBJECT (src, "handling seek event");
gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
- src->flushing_seek = !!(flags & GST_SEEK_FLAG_FLUSH);
+ src->flushing_seek = ! !(flags & GST_SEEK_FLAG_FLUSH);
GST_DEBUG_OBJECT (src, "%s seek event",
src->flushing_seek ? "flushing" : "non-flushing");
diff --git a/ext/resindvd/rsnaudiomunge.c b/ext/resindvd/rsnaudiomunge.c
index 94cf7b150..5e6f9cc6f 100644
--- a/ext/resindvd/rsnaudiomunge.c
+++ b/ext/resindvd/rsnaudiomunge.c
@@ -84,9 +84,10 @@ rsn_audiomunge_class_init (RsnAudioMungeClass * klass)
GST_DEBUG_CATEGORY_INIT (rsn_audiomunge_debug, "rsnaudiomunge",
0, "ResinDVD audio stream regulator");
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "RsnAudioMunge",
"Audio/Filter",
diff --git a/ext/resindvd/rsndec.c b/ext/resindvd/rsndec.c
index 8d7e3806c..3abc0065c 100644
--- a/ext/resindvd/rsndec.c
+++ b/ext/resindvd/rsndec.c
@@ -380,10 +380,10 @@ rsn_audiodec_class_init (RsnAudioDecClass * klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
RsnDecClass *dec_class = RSN_DEC_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &audio_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &audio_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_sink_template));
gst_element_class_set_details_simple (element_class, "RsnAudioDec",
"Audio/Decoder",
@@ -430,10 +430,10 @@ rsn_videodec_class_init (RsnAudioDecClass * klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
RsnDecClass *dec_class = RSN_DEC_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &video_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_template));
gst_element_class_set_details_simple (element_class, "RsnVideoDec",
"Video/Decoder",
diff --git a/ext/resindvd/rsnparsetter.c b/ext/resindvd/rsnparsetter.c
index baaea2b44..a69366f9d 100644
--- a/ext/resindvd/rsnparsetter.c
+++ b/ext/resindvd/rsnparsetter.c
@@ -59,8 +59,10 @@ rsn_parsetter_base_init (gpointer gclass)
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class,
"Resin Aspect Ratio Setter", "Filter/Video",
"Overrides caps on video buffers to force a particular display ratio",
@@ -119,13 +121,16 @@ static GstFlowReturn
rsn_parsetter_chain (GstPad * pad, GstBuffer * buf)
{
RsnParSetter *parset = RSN_PARSETTER (GST_OBJECT_PARENT (pad));
+ RsnMetaWrapped *meta;
+
+ meta = RSN_META_WRAPPED_GET (buf);
/* If this is a buffer we wrapped up earlier, unwrap it now */
- if (RSN_IS_WRAPPEDBUFFER (buf)) {
- RsnWrappedBuffer *wrap_buf = RSN_WRAPPEDBUFFER (buf);
+ if (meta != NULL) {
+ GstBuffer *wrap_buf = buf;
- if (wrap_buf->owner == GST_ELEMENT (parset)) {
- buf = rsn_wrappedbuffer_unwrap_and_unref (wrap_buf);
+ if (meta->owner == GST_ELEMENT (parset)) {
+ buf = rsn_meta_wrapped_unwrap_and_unref (wrap_buf, meta);
GST_DEBUG_OBJECT (parset, "Unwrapping %p yields buffer %p with caps %"
GST_PTR_FORMAT, wrap_buf, buf, GST_BUFFER_CAPS (buf));
}
@@ -374,15 +379,12 @@ rsn_parsetter_sink_bufferalloc (GstPad * pad, guint64 offset, guint size,
if (ret != GST_FLOW_OK)
return ret;
- outbuf = (GstBuffer *) rsn_wrapped_buffer_new (orig_buf);
+ outbuf = rsn_wrapped_buffer_new (orig_buf, GST_ELEMENT_CAST (parset));
if (!outbuf) {
/* FIXME: Throw error */
return GST_FLOW_ERROR;
}
- rsn_wrapped_buffer_set_owner (RSN_WRAPPEDBUFFER (outbuf),
- GST_ELEMENT (parset));
-
gst_buffer_set_caps (outbuf, caps);
GST_LOG_OBJECT (parset,
diff --git a/ext/resindvd/rsnstreamselector.c b/ext/resindvd/rsnstreamselector.c
index 33fa00310..9b30ea0f6 100644
--- a/ext/resindvd/rsnstreamselector.c
+++ b/ext/resindvd/rsnstreamselector.c
@@ -33,7 +33,7 @@ GST_DEBUG_CATEGORY_STATIC (stream_selector_debug);
#define GST_CAT_DEFAULT stream_selector_debug
static GstStaticPadTemplate rsn_stream_selector_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink%d",
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS_ANY);
@@ -481,10 +481,10 @@ rsn_stream_selector_base_init (RsnStreamSelectorClass * klass)
"Ronald S. Bultje <rbultje@ronald.bitfreak.net>, "
"Jan Schmidt <thaytan@mad.scientist.com>, "
"Wim Taymans <wim.taymans@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &rsn_stream_selector_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &rsn_stream_selector_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&rsn_stream_selector_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&rsn_stream_selector_src_factory));
}
static void
@@ -724,7 +724,7 @@ rsn_stream_selector_request_new_pad (GstElement * element,
g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount);
GST_OBJECT_LOCK (sel);
- name = g_strdup_printf ("sink%d", sel->padcount++);
+ name = g_strdup_printf ("sink_%u", sel->padcount++);
sinkpad = g_object_new (RSN_TYPE_SELECTOR_PAD,
"name", name, "direction", templ->direction, "template", templ, NULL);
g_free (name);
diff --git a/ext/resindvd/rsnwrappedbuffer.c b/ext/resindvd/rsnwrappedbuffer.c
index 516cf352c..a5f4c0fd3 100644
--- a/ext/resindvd/rsnwrappedbuffer.c
+++ b/ext/resindvd/rsnwrappedbuffer.c
@@ -26,53 +26,19 @@
#include "rsnwrappedbuffer.h"
-G_DEFINE_TYPE (RsnWrappedBuffer, rsn_wrappedbuffer, GST_TYPE_BUFFER);
-
-static gboolean
-rsn_wrapped_buffer_default_release (GstElement * owner, RsnWrappedBuffer * buf);
-
-static void rsn_wrapped_buffer_finalize (RsnWrappedBuffer * wrap_buf);
-
-static void
-rsn_wrappedbuffer_class_init (RsnWrappedBufferClass * klass)
-{
- GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (klass);
-
- mini_object_class->finalize = (GstMiniObjectFinalizeFunction)
- rsn_wrapped_buffer_finalize;
-}
-
-static void
-rsn_wrappedbuffer_init (RsnWrappedBuffer * self)
-{
- self->release = rsn_wrapped_buffer_default_release;
-}
-
-static void
-rsn_wrapped_buffer_finalize (RsnWrappedBuffer * wrap_buf)
+GstBuffer *
+rsn_wrapped_buffer_new (GstBuffer * buf_to_wrap, GstElement * owner)
{
- if (wrap_buf->release) {
- /* Release might increment the refcount to recycle and return TRUE,
- * in which case, exit without chaining up */
- if (wrap_buf->release (wrap_buf->owner, wrap_buf))
- return;
- }
-
- GST_MINI_OBJECT_CLASS (rsn_wrappedbuffer_parent_class)->finalize
- (GST_MINI_OBJECT (wrap_buf));
-}
+ GstBuffer *buf;
+ RsnMetaWrapped *meta;
-RsnWrappedBuffer *
-rsn_wrapped_buffer_new (GstBuffer * buf_to_wrap)
-{
- RsnWrappedBuffer *buf;
g_return_val_if_fail (buf_to_wrap, NULL);
- buf = (RsnWrappedBuffer *) gst_mini_object_new (RSN_TYPE_WRAPPEDBUFFER);
- if (buf == NULL)
- return NULL;
+ buf = gst_buffer_new ();
+ meta = RSN_META_WRAPPED_ADD (buf);
- buf->wrapped_buffer = buf_to_wrap;
+ meta->wrapped_buffer = buf_to_wrap;
+ meta->owner = gst_object_ref (owner);
GST_BUFFER_DATA (buf) = GST_BUFFER_DATA (buf_to_wrap);
GST_BUFFER_SIZE (buf) = GST_BUFFER_SIZE (buf_to_wrap);
@@ -86,52 +52,29 @@ rsn_wrapped_buffer_new (GstBuffer * buf_to_wrap)
}
void
-rsn_wrapped_buffer_set_owner (RsnWrappedBuffer * wrapped_buf,
- GstElement * owner)
+rsn_meta_wrapped_set_owner (RsnMetaWrapped * meta, GstElement * owner)
{
- g_return_if_fail (wrapped_buf != NULL);
+ g_return_if_fail (meta != NULL);
- if (wrapped_buf->owner)
- gst_object_unref (wrapped_buf->owner);
+ if (meta->owner)
+ gst_object_unref (meta->owner);
if (owner)
- wrapped_buf->owner = gst_object_ref (owner);
- else
- wrapped_buf->owner = NULL;
-}
+ gst_object_ref (owner);
-void
-rsn_wrapped_buffer_set_releasefunc (RsnWrappedBuffer * wrapped_buf,
- RsnWrappedBufferReleaseFunc release_func)
-{
- g_return_if_fail (wrapped_buf != NULL);
-
- wrapped_buf->release = release_func;
-}
-
-static gboolean
-rsn_wrapped_buffer_default_release (GstElement * owner, RsnWrappedBuffer * buf)
-{
- g_return_val_if_fail (buf != NULL, FALSE);
- g_return_val_if_fail (buf->wrapped_buffer != NULL, FALSE);
-
- gst_buffer_unref (buf->wrapped_buffer);
- if (buf->owner)
- gst_object_unref (buf->owner);
-
- return FALSE;
+ meta->owner = owner;
}
GstBuffer *
-rsn_wrappedbuffer_unwrap_and_unref (RsnWrappedBuffer * wrap_buf)
+rsn_meta_wrapped_unwrap_and_unref (GstBuffer * wrap_buf, RsnMetaWrapped * meta)
{
GstBuffer *buf;
gboolean is_readonly;
g_return_val_if_fail (wrap_buf != NULL, NULL);
- g_return_val_if_fail (wrap_buf->wrapped_buffer != NULL, NULL);
+ g_return_val_if_fail (meta->wrapped_buffer != NULL, NULL);
- buf = gst_buffer_ref (wrap_buf->wrapped_buffer);
+ buf = gst_buffer_ref (meta->wrapped_buffer);
buf = gst_buffer_make_metadata_writable (buf);
/* Copy changed metadata back to the wrapped buffer from the wrapper,
@@ -142,7 +85,37 @@ rsn_wrappedbuffer_unwrap_and_unref (RsnWrappedBuffer * wrap_buf)
if (!is_readonly)
GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_READONLY);
- gst_buffer_unref (GST_BUFFER (wrap_buf));
+ gst_buffer_unref (wrap_buf);
return buf;
}
+
+static void
+rsn_meta_wrapped_init (RsnMetaWrapped * meta, GstBuffer * buffer)
+{
+ meta->owner = NULL;
+}
+
+static void
+rsn_meta_wrapped_free (RsnMetaWrapped * meta, GstBuffer * buffer)
+{
+ gst_buffer_unref (meta->wrapped_buffer);
+ if (meta->owner)
+ gst_object_unref (meta->owner);
+}
+
+const GstMetaInfo *
+rsn_meta_wrapped_get_info (void)
+{
+ static const GstMetaInfo *meta_info = NULL;
+
+ if (meta_info == NULL) {
+ meta_info = gst_meta_register ("RsnMetaWrapped", "RsnMetaWrapped",
+ sizeof (RsnMetaWrapped),
+ (GstMetaInitFunction) rsn_meta_wrapped_init,
+ (GstMetaFreeFunction) rsn_meta_wrapped_free,
+ (GstMetaTransformFunction) NULL,
+ (GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL);
+ }
+ return meta_info;
+}
diff --git a/ext/resindvd/rsnwrappedbuffer.h b/ext/resindvd/rsnwrappedbuffer.h
index 7c6a0e735..3c0afe21f 100644
--- a/ext/resindvd/rsnwrappedbuffer.h
+++ b/ext/resindvd/rsnwrappedbuffer.h
@@ -24,45 +24,25 @@
G_BEGIN_DECLS
-#define RSN_TYPE_WRAPPEDBUFFER (rsn_wrappedbuffer_get_type())
-#define RSN_WRAPPEDBUFFER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), RSN_TYPE_WRAPPEDBUFFER, \
- RsnWrappedBuffer))
-#define RSN_WRAPPEDBUFFER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), RSN_TYPE_WRAPPEDBUFFER, \
- RsnWrappedBufferClass))
-#define RSN_IS_WRAPPEDBUFFER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), RSN_TYPE_WRAPPEDBUFFER))
-#define RSN_IS_WRAPPEDBUFFER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), RSN_TYPE_WRAPPEDBUFFER))
+typedef struct _RsnMetaWrapped RsnMetaWrapped;
-typedef struct _RsnWrappedBuffer RsnWrappedBuffer;
-typedef struct _RsnWrappedBufferClass RsnWrappedBufferClass;
-
-typedef gboolean (*RsnWrappedBufferReleaseFunc)(GstElement *owner,
- RsnWrappedBuffer *buf);
-
-struct _RsnWrappedBuffer {
- GstBuffer buffer;
+struct _RsnMetaWrapped {
+ GstMeta meta;
GstBuffer *wrapped_buffer;
GstElement *owner;
- RsnWrappedBufferReleaseFunc release;
};
-struct _RsnWrappedBufferClass
-{
- GstBufferClass parent_class;
-};
+GstBuffer *rsn_wrapped_buffer_new (GstBuffer *buf_to_wrap, GstElement *owner);
+
+GstBuffer *rsn_meta_wrapped_unwrap_and_unref (GstBuffer *wrap_buf, RsnMetaWrapped *meta);
+
+void rsn_meta_wrapped_set_owner (RsnMetaWrapped *meta, GstElement *owner);
-RsnWrappedBuffer *rsn_wrapped_buffer_new (GstBuffer *buf_to_wrap);
-GstBuffer *rsn_wrappedbuffer_unwrap_and_unref (RsnWrappedBuffer *wrap_buf);
-void rsn_wrapped_buffer_set_owner (RsnWrappedBuffer *wrapped_buf,
- GstElement *owner);
-void rsn_wrapped_buffer_set_releasefunc (RsnWrappedBuffer *wrapped_buf,
- RsnWrappedBufferReleaseFunc release_func);
+const GstMetaInfo * rsn_meta_wrapped_get_info (void);
-GType rsn_wrappedbuffer_get_type (void);
+#define RSN_META_WRAPPED_GET(buf) ((RsnMetaWrapped *)gst_buffer_get_meta(buf,rsn_meta_wrapped_get_info()))
+#define RSN_META_WRAPPED_ADD(buf) ((RsnMetaWrapped *)gst_buffer_add_meta(buf,rsn_meta_wrapped_get_info(),NULL))
G_END_DECLS
diff --git a/ext/rsvg/gstrsvgdec.c b/ext/rsvg/gstrsvgdec.c
index 9ebb84134..f7cb701aa 100644
--- a/ext/rsvg/gstrsvgdec.c
+++ b/ext/rsvg/gstrsvgdec.c
@@ -82,8 +82,10 @@ gst_rsvg_dec_base_init (gpointer g_class)
"Uses librsvg to decode SVG images",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
}
static void
diff --git a/ext/rsvg/gstrsvgoverlay.c b/ext/rsvg/gstrsvgoverlay.c
index 121d4d252..1cbd0990c 100644
--- a/ext/rsvg/gstrsvgoverlay.c
+++ b/ext/rsvg/gstrsvgoverlay.c
@@ -446,11 +446,12 @@ gst_rsvg_overlay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &data_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&data_sink_template));
gst_element_class_set_details_simple (element_class, "RSVG overlay",
"Filter/Editor/Video",
diff --git a/ext/rtmp/gstrtmpsink.c b/ext/rtmp/gstrtmpsink.c
index bfc8f3c0f..23d580cfd 100644
--- a/ext/rtmp/gstrtmpsink.c
+++ b/ext/rtmp/gstrtmpsink.c
@@ -80,64 +80,51 @@ static gboolean gst_rtmp_sink_stop (GstBaseSink * sink);
static gboolean gst_rtmp_sink_start (GstBaseSink * sink);
static GstFlowReturn gst_rtmp_sink_render (GstBaseSink * sink, GstBuffer * buf);
-static void
-_do_init (GType gtype)
-{
- static const GInterfaceInfo urihandler_info = {
- gst_rtmp_sink_uri_handler_init,
- NULL,
- NULL
- };
-
- g_type_add_interface_static (gtype, GST_TYPE_URI_HANDLER, &urihandler_info);
-
- GST_DEBUG_CATEGORY_INIT (gst_rtmp_sink_debug, "rtmpsink", 0,
- "RTMP server element");
-}
-
-GST_BOILERPLATE_FULL (GstRTMPSink, gst_rtmp_sink, GstBaseSink,
- GST_TYPE_BASE_SINK, _do_init);
-
-
-static void
-gst_rtmp_sink_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_set_details_simple (element_class,
- "RTMP output sink",
- "Sink/Network", "Sends FLV content to a server via RTMP",
- "Jan Schmidt <thaytan@noraisin.net>");
-
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
-}
+#define gst_rtmp_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstRTMPSink, gst_rtmp_sink, GST_TYPE_BASE_SINK,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ gst_rtmp_sink_uri_handler_init));
/* initialize the plugin's class */
static void
gst_rtmp_sink_class_init (GstRTMPSinkClass * klass)
{
GObjectClass *gobject_class;
- GstBaseSinkClass *gstbasesink_class = (GstBaseSinkClass *) klass;
+ GstElementClass *gstelement_class;
+ GstBaseSinkClass *gstbasesink_class;
gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+ gstbasesink_class = (GstBaseSinkClass *) klass;
+
gobject_class->finalize = gst_rtmp_sink_finalize;
gobject_class->set_property = gst_rtmp_sink_set_property;
gobject_class->get_property = gst_rtmp_sink_get_property;
+ gst_element_class_install_std_props (gstelement_class,
+ "location", PROP_LOCATION, G_PARAM_READWRITE, NULL);
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "RTMP output sink",
+ "Sink/Network", "Sends FLV content to a server via RTMP",
+ "Jan Schmidt <thaytan@noraisin.net>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_template));
+
gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_rtmp_sink_start);
gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_rtmp_sink_stop);
gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_rtmp_sink_render);
- gst_element_class_install_std_props (GST_ELEMENT_CLASS (klass),
- "location", PROP_LOCATION, G_PARAM_READWRITE, NULL);
+ GST_DEBUG_CATEGORY_INIT (gst_rtmp_sink_debug, "rtmpsink", 0,
+ "RTMP server element");
}
/* initialize the new element
* initialize instance structure
*/
static void
-gst_rtmp_sink_init (GstRTMPSink * sink, GstRTMPSinkClass * klass)
+gst_rtmp_sink_init (GstRTMPSink * sink)
{
#ifdef G_OS_WIN32
WSADATA wsa_data;
@@ -218,6 +205,8 @@ gst_rtmp_sink_render (GstBaseSink * bsink, GstBuffer * buf)
{
GstRTMPSink *sink = GST_RTMP_SINK (bsink);
GstBuffer *reffed_buf = NULL;
+ guint8 *data;
+ gsize size;
if (sink->first) {
/* open the connection */
@@ -237,72 +226,84 @@ gst_rtmp_sink_render (GstBaseSink * bsink, GstBuffer * buf)
/* FIXME: Parse the first buffer and see if it contains a header plus a packet instead
* of just assuming it's only the header */
- GST_LOG_OBJECT (sink, "Caching first buffer of size %d for concatenation",
- GST_BUFFER_SIZE (buf));
+ GST_LOG_OBJECT (sink, "Caching first buffer of size %" G_GSIZE_FORMAT
+ " for concatenation", gst_buffer_get_size (buf));
gst_buffer_replace (&sink->cache, buf);
sink->first = FALSE;
return GST_FLOW_OK;
}
if (sink->cache) {
- GST_LOG_OBJECT (sink, "Joining 2nd buffer of size %d to cached buf",
- GST_BUFFER_SIZE (buf));
+ GST_LOG_OBJECT (sink, "Joining 2nd buffer of size %" G_GSIZE_FORMAT
+ " to cached buf", gst_buffer_get_size (buf));
gst_buffer_ref (buf);
reffed_buf = buf = gst_buffer_join (sink->cache, buf);
sink->cache = NULL;
}
- GST_LOG_OBJECT (sink, "Sending %d bytes to RTMP server",
- GST_BUFFER_SIZE (buf));
+ GST_LOG_OBJECT (sink, "Sending %" G_GSIZE_FORMAT " bytes to RTMP server",
+ gst_buffer_get_size (buf));
- if (!RTMP_Write (sink->rtmp,
- (char *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf))) {
- GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL), ("Failed to write data"));
- if (reffed_buf)
- gst_buffer_unref (reffed_buf);
- return GST_FLOW_ERROR;
- }
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
+ if (!RTMP_Write (sink->rtmp, (char *) data, size))
+ goto write_failed;
+ gst_buffer_unmap (buf, data, size);
if (reffed_buf)
gst_buffer_unref (reffed_buf);
return GST_FLOW_OK;
+
+ /* ERRORS */
+write_failed:
+ {
+ GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL), ("Failed to write data"));
+ gst_buffer_unmap (buf, data, size);
+ if (reffed_buf)
+ gst_buffer_unref (reffed_buf);
+ return GST_FLOW_ERROR;
+ }
}
/*
* URI interface support.
*/
static GstURIType
-gst_rtmp_sink_uri_get_type (void)
+gst_rtmp_sink_uri_get_type (GType type)
{
return GST_URI_SINK;
}
-static gchar **
-gst_rtmp_sink_uri_get_protocols (void)
+static const gchar *const *
+gst_rtmp_sink_uri_get_protocols (GType type)
{
- static gchar *protocols[] =
- { (char *) "rtmp", (char *) "rtmpt", (char *) "rtmps", (char *) "rtmpe",
- (char *) "rtmfp", (char *) "rtmpte", (char *) "rtmpts", NULL
- };
+ static const gchar *protocols[] =
+ { "rtmp", "rtmpt", "rtmps", "rtmpe", "rtmfp", "rtmpte", "rtmpts", NULL };
+
return protocols;
}
-static const gchar *
+static gchar *
gst_rtmp_sink_uri_get_uri (GstURIHandler * handler)
{
GstRTMPSink *sink = GST_RTMP_SINK (handler);
- return sink->uri;
+ /* FIXME: make thread-safe */
+ return g_strdup (sink->uri);
}
static gboolean
-gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
GstRTMPSink *sink = GST_RTMP_SINK (handler);
- if (GST_STATE (sink) >= GST_STATE_PAUSED)
+ if (GST_STATE (sink) >= GST_STATE_PAUSED) {
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
+ "Changing the URI on rtmpsrc when it is running is not supported");
return FALSE;
+ }
g_free (sink->uri);
sink->uri = NULL;
@@ -317,6 +318,8 @@ gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri)
!host.av_len || !playpath.av_len) {
GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
("Failed to parse URI %s", uri), (NULL));
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Could not parse RTMP URI");
return FALSE;
}
sink->uri = g_strdup (uri);
@@ -347,7 +350,7 @@ gst_rtmp_sink_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_LOCATION:
gst_rtmp_sink_uri_set_uri (GST_URI_HANDLER (sink),
- g_value_get_string (value));
+ g_value_get_string (value), NULL);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c
index e9ab2ebb8..28f5ea568 100644
--- a/ext/rtmp/gstrtmpsrc.c
+++ b/ext/rtmp/gstrtmpsrc.c
@@ -92,46 +92,21 @@ static GstFlowReturn gst_rtmp_src_create (GstPushSrc * pushsrc,
GstBuffer ** buffer);
static gboolean gst_rtmp_src_query (GstBaseSrc * src, GstQuery * query);
-static void
-_do_init (GType gtype)
-{
- static const GInterfaceInfo urihandler_info = {
- gst_rtmp_src_uri_handler_init,
- NULL,
- NULL
- };
-
- g_type_add_interface_static (gtype, GST_TYPE_URI_HANDLER, &urihandler_info);
-
- GST_DEBUG_CATEGORY_INIT (rtmpsrc_debug, "rtmpsrc", 0, "RTMP Source");
-}
-
-GST_BOILERPLATE_FULL (GstRTMPSrc, gst_rtmp_src, GstPushSrc, GST_TYPE_PUSH_SRC,
- _do_init);
-
-static void
-gst_rtmp_src_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
-
- gst_element_class_set_details_simple (element_class,
- "RTMP Source",
- "Source/File",
- "Read RTMP streams",
- "Bastien Nocera <hadess@hadess.net>, "
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
+#define gst_rtmp_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstRTMPSrc, gst_rtmp_src, GST_TYPE_PUSH_SRC,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ gst_rtmp_src_uri_handler_init));
static void
gst_rtmp_src_class_init (GstRTMPSrcClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
GstBaseSrcClass *gstbasesrc_class;
GstPushSrcClass *gstpushsrc_class;
gobject_class = G_OBJECT_CLASS (klass);
+ gstelement_class = GST_ELEMENT_CLASS (klass);
gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
@@ -140,9 +115,19 @@ gst_rtmp_src_class_init (GstRTMPSrcClass * klass)
gobject_class->get_property = gst_rtmp_src_get_property;
/* properties */
- gst_element_class_install_std_props (GST_ELEMENT_CLASS (klass),
+ gst_element_class_install_std_props (gstelement_class,
"location", PROP_LOCATION, G_PARAM_READWRITE, NULL);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&srctemplate));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "RTMP Source",
+ "Source/File",
+ "Read RTMP streams",
+ "Bastien Nocera <hadess@hadess.net>, "
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_rtmp_src_start);
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_rtmp_src_stop);
gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_rtmp_src_is_seekable);
@@ -151,10 +136,12 @@ gst_rtmp_src_class_init (GstRTMPSrcClass * klass)
gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_rtmp_src_do_seek);
gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_rtmp_src_create);
gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_rtmp_src_query);
+
+ GST_DEBUG_CATEGORY_INIT (rtmpsrc_debug, "rtmpsrc", 0, "RTMP Source");
}
static void
-gst_rtmp_src_init (GstRTMPSrc * rtmpsrc, GstRTMPSrcClass * klass)
+gst_rtmp_src_init (GstRTMPSrc * rtmpsrc)
{
#ifdef G_OS_WIN32
WSADATA wsa_data;
@@ -190,36 +177,40 @@ gst_rtmp_src_finalize (GObject * object)
*/
static GstURIType
-gst_rtmp_src_uri_get_type (void)
+gst_rtmp_src_uri_get_type (GType type)
{
return GST_URI_SRC;
}
-static gchar **
-gst_rtmp_src_uri_get_protocols (void)
+static const gchar *const *
+gst_rtmp_src_uri_get_protocols (GType type)
{
- static gchar *protocols[] =
- { (char *) "rtmp", (char *) "rtmpt", (char *) "rtmps", (char *) "rtmpe",
- (char *) "rtmfp", (char *) "rtmpte", (char *) "rtmpts", NULL
- };
+ static const gchar *protocols[] =
+ { "rtmp", "rtmpt", "rtmps", "rtmpe", "rtmfp", "rtmpte", "rtmpts", NULL };
+
return protocols;
}
-static const gchar *
+static gchar *
gst_rtmp_src_uri_get_uri (GstURIHandler * handler)
{
GstRTMPSrc *src = GST_RTMP_SRC (handler);
- return src->uri;
+ /* FIXME: make thread-safe */
+ return g_strdup (src->uri);
}
static gboolean
-gst_rtmp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+gst_rtmp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
GstRTMPSrc *src = GST_RTMP_SRC (handler);
- if (GST_STATE (src) >= GST_STATE_PAUSED)
+ if (GST_STATE (src) >= GST_STATE_PAUSED) {
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
+ "Changing the URI on rtmpsrc when it is running is not supported");
return FALSE;
+ }
g_free (src->uri);
src->uri = NULL;
@@ -233,6 +224,8 @@ gst_rtmp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
if (!RTMP_ParseURL (uri, &protocol, &host, &port, &playpath, &app) ||
!host.av_len || !playpath.av_len) {
GST_ERROR_OBJECT (src, "Failed to parse URI %s", uri);
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Could not parse RTMP URI");
return FALSE;
}
src->uri = g_strdup (uri);
@@ -265,7 +258,7 @@ gst_rtmp_src_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_LOCATION:{
gst_rtmp_src_uri_set_uri (GST_URI_HANDLER (src),
- g_value_get_string (value));
+ g_value_get_string (value), NULL);
break;
}
default:
@@ -301,8 +294,9 @@ gst_rtmp_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
{
GstRTMPSrc *src;
GstBuffer *buf;
- guint8 *data;
+ guint8 *data, *bdata;
guint todo;
+ gsize bsize;
int read;
int size;
@@ -315,15 +309,15 @@ gst_rtmp_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
GST_DEBUG ("reading from %" G_GUINT64_FORMAT
", size %u", src->cur_offset, size);
- buf = gst_buffer_try_new_and_alloc (size);
+ buf = gst_buffer_new_allocate (NULL, size, 0);
if (G_UNLIKELY (buf == NULL)) {
GST_ERROR_OBJECT (src, "Failed to allocate %u bytes", size);
return GST_FLOW_ERROR;
}
- todo = size;
- data = GST_BUFFER_DATA (buf);
- read = 0;
+ bsize = todo = size;
+ bdata = data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+ read = bsize = 0;
while (todo > 0) {
read = RTMP_Read (src->rtmp, (char *) data, todo);
@@ -331,7 +325,6 @@ gst_rtmp_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
if (G_UNLIKELY (read == 0 && todo == size)) {
goto eos;
} else if (G_UNLIKELY (read == 0)) {
- GST_BUFFER_SIZE (buf) -= todo;
todo = 0;
break;
}
@@ -340,13 +333,16 @@ gst_rtmp_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
goto read_failed;
if (read < todo) {
- data = &data[read];
+ data += read;
todo -= read;
+ bsize += read;
} else {
todo = 0;
+ bsize += todo;
}
GST_LOG (" got size %d", read);
}
+ gst_buffer_unmap (buf, bdata, bsize);
if (src->discont) {
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
@@ -480,7 +476,7 @@ gst_rtmp_src_prepare_seek_segment (GstBaseSrc * basesrc, GstEvent * event,
}
gst_segment_init (segment, GST_FORMAT_TIME);
- gst_segment_set_seek (segment, rate, format, flags, cur_type, cur, stop_type,
+ gst_segment_do_seek (segment, rate, format, flags, cur_type, cur, stop_type,
stop, NULL);
return TRUE;
diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c
index 70c30a52d..126ef1fed 100644
--- a/ext/schroedinger/gstschrodec.c
+++ b/ext/schroedinger/gstschrodec.c
@@ -114,10 +114,10 @@ gst_schro_dec_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_schro_dec_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_schro_dec_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_schro_dec_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_schro_dec_sink_template));
gst_element_class_set_details_simple (element_class, "Dirac Decoder",
"Codec/Decoder/Video",
diff --git a/ext/schroedinger/gstschroenc.c b/ext/schroedinger/gstschroenc.c
index 14932da3d..beda4eac9 100644
--- a/ext/schroedinger/gstschroenc.c
+++ b/ext/schroedinger/gstschroenc.c
@@ -125,10 +125,10 @@ gst_schro_enc_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_schro_enc_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_schro_enc_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_schro_enc_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_schro_enc_sink_template));
gst_element_class_set_details_simple (element_class, "Dirac Encoder",
"Codec/Encoder/Video",
diff --git a/ext/sdl/sdlaudiosink.c b/ext/sdl/sdlaudiosink.c
index 98f5bb709..707459fc7 100644
--- a/ext/sdl/sdlaudiosink.c
+++ b/ext/sdl/sdlaudiosink.c
@@ -149,8 +149,8 @@ gst_sdlaudio_sink_base_init (gpointer g_class)
"Output to a sound card via SDLAUDIO",
"Edgard Lima <edgard.lima@indt.org.br>");
- gst_element_class_add_static_pad_template (element_class,
- &sdlaudiosink_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sdlaudiosink_sink_factory));
}
static void
diff --git a/ext/sdl/sdlvideosink.c b/ext/sdl/sdlvideosink.c
index fe155a45e..fa05ace1a 100644
--- a/ext/sdl/sdlvideosink.c
+++ b/ext/sdl/sdlvideosink.c
@@ -151,7 +151,6 @@ gst_sdlvideosink_base_init (gpointer g_class)
GST_PAD_SINK, GST_PAD_ALWAYS, capslist);
gst_element_class_add_pad_template (element_class, sink_template);
- gst_object_unref (sink_template);
gst_element_class_set_details_simple (element_class, "SDL video sink",
"Sink/Video", "An SDL-based videosink",
"Ronald Bultje <rbultje@ronald.bitfreak.net>, "
diff --git a/ext/shout/gstshout.c b/ext/shout/gstshout.c
index 59cfc1409..c5a71136a 100644
--- a/ext/shout/gstshout.c
+++ b/ext/shout/gstshout.c
@@ -110,8 +110,8 @@ gst_icecastsend_base_init (GstIcecastSendClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template_factory));
gst_element_class_set_details_simple (element_class, "Icecast network sink",
"Sink/Network",
"Sends data to an icecast server using libshout",
diff --git a/ext/snapshot/gstsnapshot.c b/ext/snapshot/gstsnapshot.c
index 6b7858161..97ffbed5f 100644
--- a/ext/snapshot/gstsnapshot.c
+++ b/ext/snapshot/gstsnapshot.c
@@ -116,10 +116,10 @@ gst_snapshot_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &snapshot_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &snapshot_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&snapshot_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&snapshot_src_factory));
gst_element_class_set_details_simple (element_class, "Snapshot",
"Filter/Editor/Video",
diff --git a/ext/sndfile/gstsfsink.c b/ext/sndfile/gstsfsink.c
index 273c840b8..56dc4b006 100644
--- a/ext/sndfile/gstsfsink.c
+++ b/ext/sndfile/gstsfsink.c
@@ -84,8 +84,8 @@ gst_sf_sink_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GST_DEBUG_CATEGORY_INIT (gst_sf_debug, "sfsink", 0, "sfsink element");
- gst_element_class_add_static_pad_template (element_class,
- &sf_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sf_sink_factory));
gst_element_class_set_details_simple (element_class, "Sndfile sink",
"Sink/Audio",
"Write audio streams to disk using libsndfile",
@@ -415,9 +415,9 @@ gst_sf_sink_loop (GstPad * pad)
basesink->offset += GST_BUFFER_SIZE (buf);
- GST_PAD_PREROLL_LOCK (pad);
+ GST_BASE_SINK_PREROLL_LOCK (basesink);
result = gst_sf_sink_render (basesink, buf);
- GST_PAD_PREROLL_UNLOCK (pad);
+ GST_BASE_SINK_PREROLL_UNLOCK (basesink);
if (G_UNLIKELY (result != GST_FLOW_OK))
goto paused;
diff --git a/ext/sndfile/gstsfsrc.c b/ext/sndfile/gstsfsrc.c
index 8dc79591e..226f54085 100644
--- a/ext/sndfile/gstsfsrc.c
+++ b/ext/sndfile/gstsfsrc.c
@@ -83,8 +83,8 @@ gst_sf_src_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (gstelement_class,
- &sf_src_factory);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sf_src_factory));
gst_element_class_set_details_simple (gstelement_class, "Sndfile source",
"Source/Audio",
diff --git a/ext/soundtouch/Makefile.am b/ext/soundtouch/Makefile.am
index 74a5516d4..07832a7bc 100644
--- a/ext/soundtouch/Makefile.am
+++ b/ext/soundtouch/Makefile.am
@@ -7,7 +7,7 @@ libgstsoundtouch_la_SOURCES = \
libgstsoundtouch_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUNDTOUCH_CFLAGS)
libgstsoundtouch_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(SOUNDTOUCH_CFLAGS)
-libgstsoundtouch_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR) $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(SOUNDTOUCH_LIBS) $(LIBM)
+libgstsoundtouch_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR) $(GST_BASE_LIBS) $(GST_LIBS) $(SOUNDTOUCH_LIBS) $(LIBM)
libgstsoundtouch_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstsoundtouch_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc
index 332e0edd3..6b5b95f15 100644
--- a/ext/soundtouch/gstpitch.cc
+++ b/ext/soundtouch/gstpitch.cc
@@ -106,10 +106,10 @@ gst_pitch_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_pitch_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_pitch_sink_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_pitch_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_pitch_sink_template));
gst_element_class_set_details_simple (gstelement_class, "Pitch controller",
"Filter/Converter/Audio", "Control the pitch of an audio stream",
diff --git a/ext/soundtouch/plugin.c b/ext/soundtouch/plugin.c
index 5e8cb1563..77cc30492 100644
--- a/ext/soundtouch/plugin.c
+++ b/ext/soundtouch/plugin.c
@@ -22,15 +22,12 @@
#endif
#include <gst/gst.h>
-#include <gst/controller/gstcontroller.h>
#include "gstpitch.hh"
#include "gstbpmdetect.hh"
static gboolean
plugin_init (GstPlugin * plugin)
{
- gst_controller_init (NULL, NULL);
-
return gst_element_register (plugin, "pitch", GST_RANK_NONE, GST_TYPE_PITCH)
&& gst_element_register (plugin, "bpmdetect", GST_RANK_NONE,
GST_TYPE_BPM_DETECT);
diff --git a/ext/spandsp/gstspanplc.c b/ext/spandsp/gstspanplc.c
index 3e174703c..58edce9f4 100644
--- a/ext/spandsp/gstspanplc.c
+++ b/ext/spandsp/gstspanplc.c
@@ -71,8 +71,10 @@ gst_span_plc_base_init (gpointer gclass)
{
GstElementClass *element_class = (GstElementClass *) gclass;
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "SpanDSP PLC",
"Filter/Effect/Audio",
diff --git a/ext/spc/gstspc.c b/ext/spc/gstspc.c
index 70d2340ad..2c74a9c56 100644
--- a/ext/spc/gstspc.c
+++ b/ext/spc/gstspc.c
@@ -108,8 +108,10 @@ gst_spc_dec_base_init (gpointer g_class)
"Uses OpenSPC to emulate an SPC processor",
"Chris Lee <clee@kde.org>, Brian Koropoff <bkoropoff@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
}
static void
diff --git a/ext/swfdec/gstswfdec.c b/ext/swfdec/gstswfdec.c
index 43e06de72..9394ddec3 100644
--- a/ext/swfdec/gstswfdec.c
+++ b/ext/swfdec/gstswfdec.c
@@ -213,12 +213,12 @@ gst_swfdec_base_init (gpointer g_class)
"Uses libswfdec to decode Flash video streams",
"David Schleef <ds@schleef.org>");
- gst_element_class_add_static_pad_template (element_class,
- &video_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &audio_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_template_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_template_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template_factory));
}
static void
diff --git a/ext/teletextdec/gstteletextdec.c b/ext/teletextdec/gstteletextdec.c
index bd182670c..846c243e4 100644
--- a/ext/teletextdec/gstteletextdec.c
+++ b/ext/teletextdec/gstteletextdec.c
@@ -196,9 +196,10 @@ gst_teletextdec_base_init (gpointer klass)
"Sebastian Pölsterl <sebp@k-d-w.org>, "
"Andoni Morales Alastruey <ylatuya@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
/* initialize the gstteletext's class */
diff --git a/ext/timidity/gsttimidity.c b/ext/timidity/gsttimidity.c
index 91e47ced4..cbbcc0da1 100644
--- a/ext/timidity/gsttimidity.c
+++ b/ext/timidity/gsttimidity.c
@@ -95,8 +95,10 @@ gst_timidity_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "Timidity",
"Codec/Decoder/Audio",
"Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>");
diff --git a/ext/timidity/gstwildmidi.c b/ext/timidity/gstwildmidi.c
index e78ecc11c..6def9f946 100644
--- a/ext/timidity/gstwildmidi.c
+++ b/ext/timidity/gstwildmidi.c
@@ -120,8 +120,10 @@ gst_wildmidi_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "WildMidi",
"Codec/Decoder/Audio",
"Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>");
diff --git a/ext/voamrwbenc/gstvoamrwbenc.c b/ext/voamrwbenc/gstvoamrwbenc.c
index 2b3780239..4647b84ab 100644
--- a/ext/voamrwbenc/gstvoamrwbenc.c
+++ b/ext/voamrwbenc/gstvoamrwbenc.c
@@ -160,9 +160,10 @@ gst_voamrwbenc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "AMR-WB audio encoder",
"Codec/Encoder/Audio",
diff --git a/ext/vp8/gstvp8dec.c b/ext/vp8/gstvp8dec.c
index e3a2fd9bd..1172ac96e 100644
--- a/ext/vp8/gstvp8dec.c
+++ b/ext/vp8/gstvp8dec.c
@@ -104,7 +104,7 @@ static gboolean gst_vp8_dec_reset (GstBaseVideoDecoder * decoder);
static GstFlowReturn gst_vp8_dec_parse_data (GstBaseVideoDecoder * decoder,
gboolean at_eos);
static GstFlowReturn gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder,
- GstVideoFrame * frame);
+ GstVideoFrameState * frame);
static GstStaticPadTemplate gst_vp8_dec_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
@@ -117,36 +117,22 @@ static GstStaticPadTemplate gst_vp8_dec_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420"))
);
-GST_BOILERPLATE (GstVP8Dec, gst_vp8_dec, GstBaseVideoDecoder,
- GST_TYPE_BASE_VIDEO_DECODER);
-
-static void
-gst_vp8_dec_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_vp8_dec_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_vp8_dec_sink_template);
-
- gst_element_class_set_details_simple (element_class,
- "On2 VP8 Decoder",
- "Codec/Decoder/Video",
- "Decode VP8 video streams", "David Schleef <ds@entropywave.com>");
-}
+#define gst_vp8_dec_parent_class parent_class
+G_DEFINE_TYPE (GstVP8Dec, gst_vp8_dec, GST_TYPE_BASE_VIDEO_DECODER);
static void
gst_vp8_dec_class_init (GstVP8DecClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *element_class;
GstBaseVideoDecoderClass *base_video_decoder_class;
gobject_class = G_OBJECT_CLASS (klass);
base_video_decoder_class = GST_BASE_VIDEO_DECODER_CLASS (klass);
+ element_class = GST_ELEMENT_CLASS (klass);
gobject_class->set_property = gst_vp8_dec_set_property;
gobject_class->get_property = gst_vp8_dec_get_property;
@@ -174,6 +160,16 @@ gst_vp8_dec_class_init (GstVP8DecClass * klass)
0, 16, DEFAULT_NOISE_LEVEL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_vp8_dec_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_vp8_dec_sink_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "On2 VP8 Decoder",
+ "Codec/Decoder/Video",
+ "Decode VP8 video streams", "David Schleef <ds@entropywave.com>");
+
base_video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_vp8_dec_start);
base_video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_vp8_dec_stop);
base_video_decoder_class->reset = GST_DEBUG_FUNCPTR (gst_vp8_dec_reset);
@@ -188,7 +184,7 @@ gst_vp8_dec_class_init (GstVP8DecClass * klass)
}
static void
-gst_vp8_dec_init (GstVP8Dec * gst_vp8_dec, GstVP8DecClass * klass)
+gst_vp8_dec_init (GstVP8Dec * gst_vp8_dec)
{
GstBaseVideoDecoder *decoder = (GstBaseVideoDecoder *) gst_vp8_dec;
@@ -318,58 +314,50 @@ gst_vp8_dec_send_tags (GstVP8Dec * dec)
{
GstTagList *list;
- list = gst_tag_list_new ();
+ list = gst_tag_list_new_empty ();
gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
GST_TAG_VIDEO_CODEC, "VP8 video", NULL);
- gst_element_found_tags_for_pad (GST_ELEMENT (dec),
- GST_BASE_VIDEO_CODEC_SRC_PAD (dec), list);
+ gst_pad_push_event (GST_BASE_VIDEO_CODEC_SRC_PAD (dec),
+ gst_event_new_tag (list));
}
static void
gst_vp8_dec_image_to_buffer (GstVP8Dec * dec, const vpx_image_t * img,
GstBuffer * buffer)
{
- int stride, w, h, i;
- guint8 *d;
- GstVideoState *state = &GST_BASE_VIDEO_CODEC (dec)->state;
-
- d = GST_BUFFER_DATA (buffer) +
- gst_video_format_get_component_offset (state->format, 0,
- state->width, state->height);
- stride = gst_video_format_get_row_stride (state->format, 0, state->width);
- h = gst_video_format_get_component_height (state->format, 0, state->height);
- h = MIN (h, img->h);
- w = gst_video_format_get_component_width (state->format, 0, state->width);
- w = MIN (w, img->w);
-
- for (i = 0; i < h; i++)
- memcpy (d + i * stride,
- img->planes[VPX_PLANE_Y] + i * img->stride[VPX_PLANE_Y], w);
-
- d = GST_BUFFER_DATA (buffer) +
- gst_video_format_get_component_offset (state->format, 1,
- state->width, state->height);
- stride = gst_video_format_get_row_stride (state->format, 1, state->width);
- h = gst_video_format_get_component_height (state->format, 1, state->height);
- h = MIN (h, img->h >> img->y_chroma_shift);
- w = gst_video_format_get_component_width (state->format, 1, state->width);
- w = MIN (w, img->w >> img->x_chroma_shift);
- for (i = 0; i < h; i++)
- memcpy (d + i * stride,
- img->planes[VPX_PLANE_U] + i * img->stride[VPX_PLANE_U], w);
-
- d = GST_BUFFER_DATA (buffer) +
- gst_video_format_get_component_offset (state->format, 2,
- state->width, state->height);
- /* Same stride, height, width as above */
- for (i = 0; i < h; i++)
- memcpy (d + i * stride,
- img->planes[VPX_PLANE_V] + i * img->stride[VPX_PLANE_V], w);
+ int deststride, srcstride, height, width, line, comp;
+ guint8 *dest, *src;
+ GstVideoFrame frame;
+ GstVideoInfo *info = &GST_BASE_VIDEO_CODEC (dec)->info;
+
+ if (!gst_video_frame_map (&frame, info, buffer, GST_MAP_WRITE)) {
+ GST_ERROR_OBJECT (dec, "Could not map video buffer");
+ }
+
+ for (comp = 0; comp < 3; comp++) {
+ dest = GST_VIDEO_FRAME_COMP_DATA (&frame, comp);
+ src = img->planes[comp];
+ width = GST_VIDEO_FRAME_COMP_WIDTH (&frame, comp);
+ height = GST_VIDEO_FRAME_COMP_HEIGHT (&frame, comp);
+ deststride = GST_VIDEO_FRAME_COMP_STRIDE (&frame, comp);
+ srcstride = img->stride[comp];
+
+ /* FIXME (Edward) : Do a plane memcpy is srcstride == deststride instead
+ * of copying line by line */
+ for (line = 0; line < height; line++) {
+ memcpy (dest, src, width);
+ dest += deststride;
+ src += srcstride;
+ }
+ }
+
+ gst_video_frame_unmap (&frame);
}
static GstFlowReturn
-gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder, GstVideoFrame * frame)
+gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder,
+ GstVideoFrameState * frame)
{
GstVP8Dec *dec;
GstFlowReturn ret = GST_FLOW_OK;
@@ -378,11 +366,14 @@ gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder, GstVideoFrame * frame)
vpx_image_t *img;
long decoder_deadline = 0;
GstClockTimeDiff deadline;
+ gsize size;
+ gpointer data;
GST_DEBUG_OBJECT (decoder, "handle_frame");
dec = GST_VP8_DEC (decoder);
+ /* FIXME : Move this to a separate function for clarity */
if (!dec->decoder_inited) {
int flags = 0;
vpx_codec_stream_info_t stream_info;
@@ -392,9 +383,13 @@ gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder, GstVideoFrame * frame)
memset (&stream_info, 0, sizeof (stream_info));
stream_info.sz = sizeof (stream_info);
- status = vpx_codec_peek_stream_info (&vpx_codec_vp8_dx_algo,
- GST_BUFFER_DATA (frame->sink_buffer),
- GST_BUFFER_SIZE (frame->sink_buffer), &stream_info);
+ data = gst_buffer_map (frame->sink_buffer, &size, NULL, GST_MAP_READ);
+
+ status =
+ vpx_codec_peek_stream_info (&vpx_codec_vp8_dx_algo, data, size,
+ &stream_info);
+
+ gst_buffer_unmap (frame->sink_buffer, data, size);
if (status != VPX_CODEC_OK || !stream_info.is_kf) {
GST_WARNING_OBJECT (decoder, "No keyframe, skipping");
@@ -461,9 +456,12 @@ gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder, GstVideoFrame * frame)
decoder_deadline = MAX (1, deadline / GST_MSECOND);
}
- status = vpx_codec_decode (&dec->decoder,
- GST_BUFFER_DATA (frame->sink_buffer),
- GST_BUFFER_SIZE (frame->sink_buffer), NULL, decoder_deadline);
+ data = gst_buffer_map (frame->sink_buffer, &size, NULL, GST_MAP_READ);
+
+ status = vpx_codec_decode (&dec->decoder, data, size, NULL, decoder_deadline);
+
+ gst_buffer_unmap (frame->sink_buffer, data, size);
+
if (status) {
GST_ELEMENT_ERROR (decoder, LIBRARY, ENCODE,
("Failed to decode frame"), ("%s", gst_vpx_error_name (status)));
diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c
index 5ed11e3a0..7a1832843 100644
--- a/ext/vp8/gstvp8enc.c
+++ b/ext/vp8/gstvp8enc.c
@@ -222,12 +222,12 @@ static void gst_vp8_enc_get_property (GObject * object, guint prop_id,
static gboolean gst_vp8_enc_start (GstBaseVideoEncoder * encoder);
static gboolean gst_vp8_enc_stop (GstBaseVideoEncoder * encoder);
static gboolean gst_vp8_enc_set_format (GstBaseVideoEncoder *
- base_video_encoder, GstVideoState * state);
+ base_video_encoder, GstVideoInfo * info);
static gboolean gst_vp8_enc_finish (GstBaseVideoEncoder * base_video_encoder);
static GstFlowReturn gst_vp8_enc_handle_frame (GstBaseVideoEncoder *
- base_video_encoder, GstVideoFrame * frame);
+ base_video_encoder, GstVideoFrameState * frame);
static GstFlowReturn gst_vp8_enc_shape_output (GstBaseVideoEncoder * encoder,
- GstVideoFrame * frame);
+ GstVideoFrameState * frame);
static gboolean gst_vp8_enc_sink_event (GstBaseVideoEncoder *
base_video_encoder, GstEvent * event);
@@ -235,7 +235,7 @@ static GstStaticPadTemplate gst_vp8_enc_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420"))
);
static GstStaticPadTemplate gst_vp8_enc_src_template =
@@ -245,54 +245,38 @@ GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS ("video/x-vp8")
);
-static void
-do_init (GType vp8enc_type)
-{
- static const GInterfaceInfo tag_setter_info = { NULL, NULL, NULL };
- const GInterfaceInfo preset_interface_info = {
- NULL, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
+#define gst_vp8_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVP8Enc, gst_vp8_enc, GST_TYPE_BASE_VIDEO_ENCODER,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL);
+ G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL););
- g_type_add_interface_static (vp8enc_type, GST_TYPE_TAG_SETTER,
- &tag_setter_info);
- g_type_add_interface_static (vp8enc_type, GST_TYPE_PRESET,
- &preset_interface_info);
-}
-
-GST_BOILERPLATE_FULL (GstVP8Enc, gst_vp8_enc, GstBaseVideoEncoder,
- GST_TYPE_BASE_VIDEO_ENCODER, do_init);
-
-static void
-gst_vp8_enc_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_vp8_enc_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_vp8_enc_sink_template);
-
- gst_element_class_set_details_simple (element_class,
- "On2 VP8 Encoder",
- "Codec/Encoder/Video",
- "Encode VP8 video streams", "David Schleef <ds@entropywave.com>");
-}
static void
gst_vp8_enc_class_init (GstVP8EncClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *element_class;
GstBaseVideoEncoderClass *base_video_encoder_class;
+
gobject_class = G_OBJECT_CLASS (klass);
+ element_class = GST_ELEMENT_CLASS (klass);
base_video_encoder_class = GST_BASE_VIDEO_ENCODER_CLASS (klass);
gobject_class->set_property = gst_vp8_enc_set_property;
gobject_class->get_property = gst_vp8_enc_get_property;
gobject_class->finalize = gst_vp8_enc_finalize;
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_vp8_enc_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_vp8_enc_sink_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "On2 VP8 Encoder",
+ "Codec/Encoder/Video",
+ "Encode VP8 video streams", "David Schleef <ds@entropywave.com>");
+
base_video_encoder_class->start = gst_vp8_enc_start;
base_video_encoder_class->stop = gst_vp8_enc_stop;
base_video_encoder_class->handle_frame = gst_vp8_enc_handle_frame;
@@ -446,7 +430,7 @@ gst_vp8_enc_class_init (GstVP8EncClass * klass)
}
static void
-gst_vp8_enc_init (GstVP8Enc * gst_vp8_enc, GstVP8EncClass * klass)
+gst_vp8_enc_init (GstVP8Enc * gst_vp8_enc)
{
GST_DEBUG_OBJECT (gst_vp8_enc, "init");
@@ -706,7 +690,7 @@ gst_vp8_enc_stop (GstBaseVideoEncoder * base_video_encoder)
static gboolean
gst_vp8_enc_set_format (GstBaseVideoEncoder * base_video_encoder,
- GstVideoState * state)
+ GstVideoInfo * info)
{
GstVP8Enc *encoder;
vpx_codec_enc_cfg_t cfg;
@@ -732,10 +716,10 @@ gst_vp8_enc_set_format (GstBaseVideoEncoder * base_video_encoder,
return FALSE;
}
- cfg.g_w = state->width;
- cfg.g_h = state->height;
- cfg.g_timebase.num = state->fps_d;
- cfg.g_timebase.den = state->fps_n;
+ cfg.g_w = info->width;
+ cfg.g_h = info->height;
+ cfg.g_timebase.num = info->fps_d;
+ cfg.g_timebase.den = info->fps_n;
cfg.g_error_resilient = encoder->error_resilient;
cfg.g_lag_in_frames = encoder->max_latency;
@@ -838,7 +822,7 @@ gst_vp8_enc_set_format (GstBaseVideoEncoder * base_video_encoder,
gst_base_video_encoder_set_latency (base_video_encoder, 0,
gst_util_uint64_scale (encoder->max_latency,
- state->fps_d * GST_SECOND, state->fps_n));
+ info->fps_d * GST_SECOND, info->fps_n));
encoder->inited = TRUE;
/* prepare cached image buffer setup */
@@ -848,39 +832,29 @@ gst_vp8_enc_set_format (GstBaseVideoEncoder * base_video_encoder,
image->fmt = VPX_IMG_FMT_I420;
image->bps = 12;
image->x_chroma_shift = image->y_chroma_shift = 1;
- image->w = image->d_w = state->width;
- image->h = image->d_h = state->height;
-
- image->stride[VPX_PLANE_Y] =
- gst_video_format_get_row_stride (state->format, 0, state->width);
- image->stride[VPX_PLANE_U] =
- gst_video_format_get_row_stride (state->format, 1, state->width);
- image->stride[VPX_PLANE_V] =
- gst_video_format_get_row_stride (state->format, 2, state->width);
- image->planes[VPX_PLANE_Y] =
- data + gst_video_format_get_component_offset (state->format, 0,
- state->width, state->height);
- image->planes[VPX_PLANE_U] =
- data + gst_video_format_get_component_offset (state->format, 1,
- state->width, state->height);
- image->planes[VPX_PLANE_V] =
- data + gst_video_format_get_component_offset (state->format, 2,
- state->width, state->height);
+ image->w = image->d_w = info->width;
+ image->h = image->d_h = info->height;
+ image->stride[VPX_PLANE_Y] = GST_VIDEO_INFO_COMP_STRIDE (info, 0);
+ image->stride[VPX_PLANE_U] = GST_VIDEO_INFO_COMP_STRIDE (info, 1);
+ image->stride[VPX_PLANE_V] = GST_VIDEO_INFO_COMP_STRIDE (info, 2);
+ image->planes[VPX_PLANE_Y] = data + GST_VIDEO_INFO_COMP_OFFSET (info, 0);
+ image->planes[VPX_PLANE_U] = data + GST_VIDEO_INFO_COMP_OFFSET (info, 1);
+ image->planes[VPX_PLANE_V] = data + GST_VIDEO_INFO_COMP_OFFSET (info, 2);
caps = gst_caps_new_simple ("video/x-vp8",
- "width", G_TYPE_INT, state->width,
- "height", G_TYPE_INT, state->height,
- "framerate", GST_TYPE_FRACTION, state->fps_n,
- state->fps_d,
- "pixel-aspect-ratio", GST_TYPE_FRACTION, state->par_n,
- state->par_d, NULL);
+ "width", G_TYPE_INT, info->width,
+ "height", G_TYPE_INT, info->height,
+ "framerate", GST_TYPE_FRACTION, info->fps_n,
+ info->fps_d,
+ "pixel-aspect-ratio", GST_TYPE_FRACTION, info->par_n, info->par_d, NULL);
{
GstStructure *s;
GstBuffer *stream_hdr, *vorbiscomment;
const GstTagList *iface_tags;
GValue array = { 0, };
GValue value = { 0, };
+ gsize size;
s = gst_caps_get_structure (caps, 0);
/* put buffers in a fixed list */
@@ -889,19 +863,21 @@ gst_vp8_enc_set_format (GstBaseVideoEncoder * base_video_encoder,
/* Create Ogg stream-info */
stream_hdr = gst_buffer_new_and_alloc (26);
- data = GST_BUFFER_DATA (stream_hdr);
+ data = gst_buffer_map (stream_hdr, &size, NULL, GST_MAP_WRITE);
GST_WRITE_UINT8 (data, 0x4F);
GST_WRITE_UINT32_BE (data + 1, 0x56503830); /* "VP80" */
GST_WRITE_UINT8 (data + 5, 0x01); /* stream info header */
GST_WRITE_UINT8 (data + 6, 1); /* Major version 1 */
GST_WRITE_UINT8 (data + 7, 0); /* Minor version 0 */
- GST_WRITE_UINT16_BE (data + 8, state->width);
- GST_WRITE_UINT16_BE (data + 10, state->height);
- GST_WRITE_UINT24_BE (data + 12, state->par_n);
- GST_WRITE_UINT24_BE (data + 15, state->par_d);
- GST_WRITE_UINT32_BE (data + 18, state->fps_n);
- GST_WRITE_UINT32_BE (data + 22, state->fps_d);
+ GST_WRITE_UINT16_BE (data + 8, info->width);
+ GST_WRITE_UINT16_BE (data + 10, info->height);
+ GST_WRITE_UINT24_BE (data + 12, info->par_n);
+ GST_WRITE_UINT24_BE (data + 15, info->par_d);
+ GST_WRITE_UINT32_BE (data + 18, info->fps_n);
+ GST_WRITE_UINT32_BE (data + 22, info->fps_d);
+
+ gst_buffer_unmap (stream_hdr, data, size);
GST_BUFFER_FLAG_SET (stream_hdr, GST_BUFFER_FLAG_IN_CAPS);
gst_value_set_buffer (&value, stream_hdr);
@@ -943,7 +919,7 @@ gst_vp8_enc_process (GstVP8Enc * encoder)
const vpx_codec_cx_pkt_t *pkt;
GstBaseVideoEncoder *base_video_encoder;
GstVP8EncCoderHook *hook;
- GstVideoFrame *frame;
+ GstVideoFrameState *frame;
GstFlowReturn ret = GST_FLOW_OK;
base_video_encoder = GST_BASE_VIDEO_ENCODER (encoder);
@@ -966,7 +942,7 @@ gst_vp8_enc_process (GstVP8Enc * encoder)
frame = gst_base_video_encoder_get_oldest_frame (base_video_encoder);
if (frame != NULL) {
buffer = gst_buffer_new ();
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_PREROLL);
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_LIVE);
frame->src_buffer = buffer;
gst_base_video_encoder_finish_frame (base_video_encoder, frame);
}
@@ -985,9 +961,10 @@ gst_vp8_enc_process (GstVP8Enc * encoder)
frame->is_sync_point = (pkt->data.frame.flags & VPX_FRAME_IS_KEY) != 0;
hook = frame->coder_hook;
- buffer = gst_buffer_new_and_alloc (pkt->data.frame.sz);
-
- memcpy (GST_BUFFER_DATA (buffer), pkt->data.frame.buf, pkt->data.frame.sz);
+ /* FIXME : It would be nice to avoid the memory copy ... */
+ buffer =
+ gst_buffer_new_wrapped (g_memdup (pkt->data.frame.buf,
+ pkt->data.frame.sz), pkt->data.frame.sz);
if (hook->image)
g_slice_free (vpx_image_t, hook->image);
@@ -1049,21 +1026,28 @@ static vpx_image_t *
gst_vp8_enc_buffer_to_image (GstVP8Enc * enc, GstBuffer * buffer)
{
vpx_image_t *image = g_slice_new (vpx_image_t);
- guint8 *data = GST_BUFFER_DATA (buffer);
+ GstVideoFrame frame;
memcpy (image, &enc->image, sizeof (*image));
- image->img_data = data;
- image->planes[VPX_PLANE_Y] += (data - (guint8 *) NULL);
- image->planes[VPX_PLANE_U] += (data - (guint8 *) NULL);
- image->planes[VPX_PLANE_V] += (data - (guint8 *) NULL);
+ gst_video_frame_map (&frame, &GST_BASE_VIDEO_CODEC (enc)->info,
+ buffer, GST_MAP_READ);
+
+ image->img_data = frame.data[0];
+ image->planes[VPX_PLANE_Y] = frame.data[0];
+ image->planes[VPX_PLANE_U] = frame.data[1];
+ image->planes[VPX_PLANE_V] = frame.data[2];
+
+ /* FIXME : We should only unmap when we're done with it */
+
+ gst_video_frame_unmap (&frame);
return image;
}
static GstFlowReturn
gst_vp8_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder,
- GstVideoFrame * frame)
+ GstVideoFrameState * frame)
{
GstVP8Enc *encoder;
const GstVideoState *state;
@@ -1125,7 +1109,7 @@ _to_granulepos (guint64 frame_end_number, guint inv_count, guint keyframe_dist)
static GstFlowReturn
gst_vp8_enc_shape_output (GstBaseVideoEncoder * base_video_encoder,
- GstVideoFrame * frame)
+ GstVideoFrameState * frame)
{
GstVP8Enc *encoder;
GstBuffer *buf;
@@ -1164,8 +1148,6 @@ gst_vp8_enc_shape_output (GstBaseVideoEncoder * base_video_encoder,
gst_util_uint64_scale (frame->presentation_frame_number + 1,
GST_SECOND * state->fps_d, state->fps_n);
- gst_buffer_set_caps (buf,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder)));
ret = gst_pad_push (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder), buf);
if (ret != GST_FLOW_OK) {
diff --git a/ext/xvid/gstxviddec.c b/ext/xvid/gstxviddec.c
index 8cd4997ee..c290777a9 100644
--- a/ext/xvid/gstxviddec.c
+++ b/ext/xvid/gstxviddec.c
@@ -100,9 +100,10 @@ gst_xviddec_base_init (GstXvidDecClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "XviD video decoder",
"Codec/Decoder/Video",
diff --git a/ext/xvid/gstxvidenc.c b/ext/xvid/gstxvidenc.c
index dcd6a4ee8..57e9a3317 100644
--- a/ext/xvid/gstxvidenc.c
+++ b/ext/xvid/gstxvidenc.c
@@ -244,8 +244,10 @@ gst_xvidenc_base_init (GstXvidEncClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "XviD video encoder",
"Codec/Encoder/Video",
"XviD encoder based on xvidcore",
diff --git a/ext/zbar/gstzbar.c b/ext/zbar/gstzbar.c
index c0310349d..e9e9d2661 100644
--- a/ext/zbar/gstzbar.c
+++ b/ext/zbar/gstzbar.c
@@ -109,14 +109,14 @@ static GstStaticPadTemplate gst_zbar_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV (ZBAR_YUV_CAPS))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (ZBAR_YUV_CAPS))
);
static GstStaticPadTemplate gst_zbar_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV (ZBAR_YUV_CAPS))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (ZBAR_YUV_CAPS))
);
static void gst_zbar_finalize (GObject * object);
@@ -125,40 +125,27 @@ static void gst_zbar_set_property (GObject * object, guint prop_id,
static void gst_zbar_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
-static gboolean gst_zbar_set_caps (GstBaseTransform * base, GstCaps * incaps,
- GstCaps * outcaps);
-static GstFlowReturn gst_zbar_transform_ip (GstBaseTransform * transform,
- GstBuffer * buf);
static gboolean gst_zbar_start (GstBaseTransform * base);
static gboolean gst_zbar_stop (GstBaseTransform * base);
-GST_BOILERPLATE (GstZBar, gst_zbar, GstVideoFilter, GST_TYPE_VIDEO_FILTER);
+static GstFlowReturn gst_zbar_transform_frame_ip (GstVideoFilter * vfilter,
+ GstVideoFrame * frame);
-
-static void
-gst_zbar_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class, "Barcode detector",
- "Filter/Analyzer/Video",
- "Detect bar codes in the video streams",
- "Stefan Kost <ensonic@users.sf.net>");
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_zbar_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_zbar_src_template);
-}
+#define gst_zbar_parent_class parent_class
+G_DEFINE_TYPE (GstZBar, gst_zbar, GST_TYPE_VIDEO_FILTER);
static void
gst_zbar_class_init (GstZBarClass * g_class)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
GstBaseTransformClass *trans_class;
+ GstVideoFilterClass *vfilter_class;
gobject_class = G_OBJECT_CLASS (g_class);
+ gstelement_class = GST_ELEMENT_CLASS (g_class);
trans_class = GST_BASE_TRANSFORM_CLASS (g_class);
+ vfilter_class = GST_VIDEO_FILTER_CLASS (g_class);
gobject_class->set_property = gst_zbar_set_property;
gobject_class->get_property = gst_zbar_get_property;
@@ -176,14 +163,25 @@ gst_zbar_class_init (GstZBarClass * g_class)
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
G_PARAM_STATIC_STRINGS));
- trans_class->set_caps = GST_DEBUG_FUNCPTR (gst_zbar_set_caps);
- trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_zbar_transform_ip);
+ gst_element_class_set_details_simple (gstelement_class, "Barcode detector",
+ "Filter/Analyzer/Video",
+ "Detect bar codes in the video streams",
+ "Stefan Kost <ensonic@users.sf.net>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_zbar_sink_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_zbar_src_template));
+
trans_class->start = GST_DEBUG_FUNCPTR (gst_zbar_start);
trans_class->stop = GST_DEBUG_FUNCPTR (gst_zbar_stop);
+
+ vfilter_class->transform_frame_ip =
+ GST_DEBUG_FUNCPTR (gst_zbar_transform_frame_ip);
}
static void
-gst_zbar_init (GstZBar * zbar, GstZBarClass * g_class)
+gst_zbar_init (GstZBar * zbar)
{
zbar->cache = DEFAULT_CACHE;
zbar->message = DEFAULT_MESSAGE;
@@ -245,56 +243,30 @@ gst_zbar_get_property (GObject * object, guint prop_id, GValue * value,
}
}
-static gboolean
-gst_zbar_set_caps (GstBaseTransform * base, GstCaps * incaps, GstCaps * outcaps)
-{
- GstZBar *zbar = GST_ZBAR (base);
- GstStructure *structure;
- gboolean res;
- guint32 fourcc;
- gint width, height;
-
- GST_DEBUG_OBJECT (zbar,
- "set_caps: in %" GST_PTR_FORMAT " out %" GST_PTR_FORMAT, incaps, outcaps);
-
- structure = gst_caps_get_structure (incaps, 0);
-
- res = gst_structure_get_int (structure, "width", &width);
- res &= gst_structure_get_int (structure, "height", &height);
- res &= gst_structure_get_fourcc (structure, "format", &fourcc);
-
- if (res) {
- zbar->width = width;
- zbar->height = height;
- zbar->format = gst_video_format_from_fourcc (fourcc);
- }
-
- return res;
-}
-
static GstFlowReturn
-gst_zbar_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
+gst_zbar_transform_frame_ip (GstVideoFilter * vfilter, GstVideoFrame * frame)
{
- GstZBar *zbar = GST_ZBAR (base);
- guint8 *data;
- guint rowstride;
+ GstZBar *zbar = GST_ZBAR (vfilter);
+ gpointer data;
+ gint stride, height;
zbar_image_t *image;
const zbar_symbol_t *symbol;
int n;
- if (base->passthrough)
+ if (GST_BASE_TRANSFORM (vfilter)->passthrough)
goto done;
- data = GST_BUFFER_DATA (outbuf);
-
image = zbar_image_create ();
/* all formats we support start with an 8-bit Y plane. zbar doesn't need
* to know about the chroma plane(s) */
+ data = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
+
zbar_image_set_format (image, GST_MAKE_FOURCC ('Y', '8', '0', '0'));
- rowstride = gst_video_format_get_row_stride (zbar->format, 0, zbar->width);
- zbar_image_set_size (image, rowstride, zbar->height);
- zbar_image_set_data (image, (gpointer) data, rowstride * zbar->height, NULL);
+ zbar_image_set_size (image, stride, height);
+ zbar_image_set_data (image, (gpointer) data, stride * height, NULL);
/* scan the image for barcodes */
n = zbar_scan_image (zbar->scanner, image);
@@ -320,7 +292,7 @@ gst_zbar_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
/* post a message */
s = gst_structure_new ("barcode",
- "timestamp", G_TYPE_UINT64, GST_BUFFER_TIMESTAMP (outbuf),
+ "timestamp", G_TYPE_UINT64, GST_BUFFER_TIMESTAMP (frame->buffer),
"type", G_TYPE_STRING, zbar_get_symbol_name (typ),
"symbol", G_TYPE_STRING, data, "quality", G_TYPE_INT, quality, NULL);
m = gst_message_new_element (GST_OBJECT (zbar), s);
@@ -335,8 +307,6 @@ out:
done:
return GST_FLOW_OK;
-
-/* ERRORS */
}
static gboolean
@@ -344,10 +314,6 @@ gst_zbar_start (GstBaseTransform * base)
{
GstZBar *zbar = GST_ZBAR (base);
- zbar->width = 0;
- zbar->height = 0;
- zbar->format = GST_VIDEO_FORMAT_UNKNOWN;
-
/* start the cache if enabled (e.g. for filtering dupes) */
zbar_image_scanner_enable_cache (zbar->scanner, zbar->cache);
diff --git a/ext/zbar/gstzbar.h b/ext/zbar/gstzbar.h
index b73c8b67e..f81583ae1 100644
--- a/ext/zbar/gstzbar.h
+++ b/ext/zbar/gstzbar.h
@@ -21,8 +21,8 @@
#ifndef __GST_VIDEO_ZBAR_H__
#define __GST_VIDEO_ZBAR_H__
-#include <gst/video/gstvideofilter.h>
#include <gst/video/video.h>
+#include <gst/video/gstvideofilter.h>
#include <zbar.h>
G_BEGIN_DECLS
@@ -51,16 +51,10 @@ struct _GstZBar
/*< private >*/
GstVideoFilter videofilter;
- /* format */
- gint width;
- gint height;
-
- GstVideoFormat format;
-
/* properties */
gboolean message;
gboolean cache;
-
+
/* internals */
zbar_image_scanner_t *scanner;
};
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
index 09995b823..98213c9ba 100644
--- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
+++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
@@ -84,7 +84,8 @@ static guint basecamerasrc_signals[LAST_SIGNAL];
GST_DEBUG_CATEGORY (base_camera_src_debug);
#define GST_CAT_DEFAULT base_camera_src_debug
-GST_BOILERPLATE (GstBaseCameraSrc, gst_base_camera_src, GstBin, GST_TYPE_BIN);
+#define parent_class gst_base_camera_src_parent_class
+G_DEFINE_TYPE (GstBaseCameraSrc, gst_base_camera_src, GST_TYPE_BIN);
static GstStaticPadTemplate vfsrc_template =
GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME,
@@ -429,32 +430,14 @@ gst_base_camera_src_change_state (GstElement * element,
}
static void
-gst_base_camera_src_base_init (gpointer g_class)
-{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
-
- GST_DEBUG_CATEGORY_INIT (base_camera_src_debug, "base_camera_src", 0,
- "Base camera src");
-
- gst_element_class_set_details_simple (gstelement_class,
- "Base class for camerabin src bin", "Source/Video",
- "Abstracts capture device for camerabin2", "Rob Clark <rob@ti.com>");
-
- gst_element_class_add_static_pad_template (gstelement_class, &vfsrc_template);
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &imgsrc_template);
-
- gst_element_class_add_static_pad_template (gstelement_class,
- &vidsrc_template);
-}
-
-static void
gst_base_camera_src_class_init (GstBaseCameraSrcClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
+ GST_DEBUG_CATEGORY_INIT (base_camera_src_debug, "base_camera_src", 0,
+ "Base camera src");
+
gobject_class = G_OBJECT_CLASS (klass);
gstelement_class = GST_ELEMENT_CLASS (klass);
@@ -534,11 +517,23 @@ gst_base_camera_src_class_init (GstBaseCameraSrcClass * klass)
NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
gstelement_class->change_state = gst_base_camera_src_change_state;
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "Base class for camerabin src bin", "Source/Video",
+ "Abstracts capture device for camerabin2", "Rob Clark <rob@ti.com>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&vfsrc_template));
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&imgsrc_template));
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&vidsrc_template));
}
static void
-gst_base_camera_src_init (GstBaseCameraSrc * self,
- GstBaseCameraSrcClass * klass)
+gst_base_camera_src_init (GstBaseCameraSrc * self)
{
self->width = DEFAULT_WIDTH;
self->height = DEFAULT_HEIGHT;
diff --git a/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c b/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c
index 4273c7109..41d11e158 100644
--- a/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c
+++ b/gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c
@@ -79,20 +79,20 @@ bus_callback (GstBus * bus, GstMessage * message, gpointer user_data)
}
static GstFlowReturn
-gst_camerabin_preview_pipeline_new_buffer (GstAppSink * appsink,
+gst_camerabin_preview_pipeline_new_sample (GstAppSink * appsink,
gpointer user_data)
{
- GstBuffer *buffer;
+ GstSample *sample;
GstStructure *s;
GstMessage *msg;
GstCameraBinPreviewPipelineData *data;
data = user_data;
- buffer = gst_app_sink_pull_buffer (appsink);
+ sample = gst_app_sink_pull_sample (appsink);
s = gst_structure_new (GST_BASE_CAMERA_SRC_PREVIEW_MESSAGE_NAME,
- "buffer", GST_TYPE_BUFFER, buffer, NULL);
- gst_buffer_unref (buffer);
+ "sample", GST_TYPE_SAMPLE, sample, NULL);
+ gst_sample_unref (sample);
msg = gst_message_new_element (GST_OBJECT (data->element), s);
GST_DEBUG_OBJECT (data->element, "sending message with preview image");
@@ -181,7 +181,7 @@ gst_camerabin_create_preview_pipeline (GstElement * element,
goto error;
}
- callbacks.new_buffer = gst_camerabin_preview_pipeline_new_buffer;
+ callbacks.new_sample = gst_camerabin_preview_pipeline_new_sample;
gst_app_sink_set_callbacks ((GstAppSink *) data->appsink, &callbacks, data,
NULL);
diff --git a/gst-libs/gst/interfaces/photography.c b/gst-libs/gst/interfaces/photography.c
index 878b185eb..11f0e71d8 100644
--- a/gst-libs/gst/interfaces/photography.c
+++ b/gst-libs/gst/interfaces/photography.c
@@ -62,8 +62,6 @@ gst_photography_get_type (void)
gst_photography_type = g_type_register_static (G_TYPE_INTERFACE,
"GstPhotography", &gst_photography_info, 0);
- g_type_interface_add_prerequisite (gst_photography_type,
- GST_TYPE_IMPLEMENTS_INTERFACE);
}
return gst_photography_type;
@@ -112,7 +110,7 @@ gst_photography_set_ ## function_name (GstPhotography * photo, param_type param)
{ \
GstPhotographyInterface *iface; \
g_return_val_if_fail (photo != NULL, FALSE); \
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo); \
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo); \
if (iface->set_ ## function_name) { \
return iface->set_ ## function_name (photo, param); \
} \
@@ -123,7 +121,7 @@ gst_photography_get_ ## function_name (GstPhotography * photo, param_type * para
{ \
GstPhotographyInterface *iface; \
g_return_val_if_fail (photo != NULL, FALSE); \
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo); \
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo); \
if (iface->get_ ## function_name) { \
return iface->get_ ## function_name (photo, param); \
} \
@@ -391,7 +389,7 @@ gst_photography_get_capabilities (GstPhotography * photo)
GstPhotographyInterface *iface;
g_return_val_if_fail (photo != NULL, GST_PHOTOGRAPHY_CAPS_NONE);
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo);
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
if (iface->get_capabilities) {
return iface->get_capabilities (photo);
} else {
@@ -420,7 +418,7 @@ gst_photography_prepare_for_capture (GstPhotography * photo,
g_return_val_if_fail (photo != NULL, FALSE);
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo);
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
if (iface->prepare_for_capture) {
ret = iface->prepare_for_capture (photo, func, capture_caps, user_data);
}
@@ -442,7 +440,7 @@ gst_photography_set_autofocus (GstPhotography * photo, gboolean on)
GstPhotographyInterface *iface;
g_return_if_fail (photo != NULL);
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo);
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
if (iface->set_autofocus) {
iface->set_autofocus (photo, on);
}
@@ -465,7 +463,7 @@ gst_photography_set_config (GstPhotography * photo, GstPhotoSettings * config)
g_return_val_if_fail (photo != NULL, FALSE);
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo);
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
if (iface->set_config) {
ret = iface->set_config (photo, config);
}
@@ -490,7 +488,7 @@ gst_photography_get_config (GstPhotography * photo, GstPhotoSettings * config)
g_return_val_if_fail (photo != NULL, FALSE);
- iface = GST_PHOTOGRAPHY_GET_IFACE (photo);
+ iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
if (iface->get_config) {
ret = iface->get_config (photo, config);
}
diff --git a/gst-libs/gst/interfaces/photography.h b/gst-libs/gst/interfaces/photography.h
index 4852ea3e1..21a4a5086 100644
--- a/gst-libs/gst/interfaces/photography.h
+++ b/gst-libs/gst/interfaces/photography.h
@@ -37,10 +37,10 @@ G_BEGIN_DECLS
#define GST_TYPE_PHOTOGRAPHY \
(gst_photography_get_type ())
#define GST_PHOTOGRAPHY(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PHOTOGRAPHY, GstPhotography))
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PHOTOGRAPHY, GstPhotography))
#define GST_IS_PHOTOGRAPHY(obj) \
- (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PHOTOGRAPHY))
-#define GST_PHOTOGRAPHY_GET_IFACE(inst) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PHOTOGRAPHY))
+#define GST_PHOTOGRAPHY_GET_INTERFACE(inst) \
(G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_PHOTOGRAPHY, GstPhotographyInterface))
diff --git a/gst-libs/gst/signalprocessor/Makefile.am b/gst-libs/gst/signalprocessor/Makefile.am
index f7e5f6520..9172685fb 100644
--- a/gst-libs/gst/signalprocessor/Makefile.am
+++ b/gst-libs/gst/signalprocessor/Makefile.am
@@ -7,10 +7,10 @@ libgstsignalprocessor_@GST_MAJORMINOR@_la_SOURCES = gstsignalprocessor.c
libgstsignalprocessor_@GST_MAJORMINOR@_la_CFLAGS = \
$(GST_PLUGINS_BAD_CFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS)
+ $(GST_CFLAGS)
libgstsignalprocessor_@GST_MAJORMINOR@_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_MAJORMINOR@ \
- $(GST_CONTROLLER_LIBS) $(GST_LIBS)
+ $(GST_LIBS)
libgstsignalprocessor_@GST_MAJORMINOR@_la_LDFLAGS = \
$(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
diff --git a/gst-libs/gst/signalprocessor/gstsignalprocessor.c b/gst-libs/gst/signalprocessor/gstsignalprocessor.c
index 7b7826a43..472075fd7 100644
--- a/gst-libs/gst/signalprocessor/gstsignalprocessor.c
+++ b/gst-libs/gst/signalprocessor/gstsignalprocessor.c
@@ -44,7 +44,6 @@
#include <stdlib.h>
#include <string.h>
-#include <gst/controller/gstcontroller.h>
#include <gst/audio/audio.h>
#include "gstsignalprocessor.h"
@@ -121,7 +120,6 @@ gst_signal_processor_class_add_pad_template (GstSignalProcessorClass * klass,
GST_SIGNAL_PROCESSOR_PAD_TEMPLATE (new)->channels = channels;
gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), new);
- g_object_unref (new);
}
@@ -166,40 +164,56 @@ gst_signal_processor_pad_get_type (void)
return type;
}
-static void
-_do_init (GType object_type)
-{
- GST_DEBUG_CATEGORY_INIT (gst_signal_processor_debug, "signalprocessor", 0,
- "signalprocessor baseclass");
-}
+static GstElementClass *parent_class = NULL;
+
+static void gst_signal_processor_class_init (GstSignalProcessorClass * klass);
+static void gst_signal_processor_init (GstSignalProcessor * self,
+ GstSignalProcessorClass * klass);
-GST_BOILERPLATE_FULL (GstSignalProcessor, gst_signal_processor, GstElement,
- GST_TYPE_ELEMENT, _do_init);
+GType
+gst_signal_processor_get_type (void)
+{
+ static volatile gsize signal_processor_type = 0;
+
+ if (g_once_init_enter (&signal_processor_type)) {
+ GType _type;
+ static const GTypeInfo signal_processor_info = {
+ sizeof (GstSignalProcessorClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) gst_signal_processor_class_init,
+ NULL,
+ NULL,
+ sizeof (GstSignalProcessor),
+ 0,
+ (GInstanceInitFunc) gst_signal_processor_init,
+ };
+ _type = g_type_register_static (GST_TYPE_ELEMENT,
+ "GstSignalProcessor", &signal_processor_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&signal_processor_type, _type);
+ }
+ return signal_processor_type;
+}
static void gst_signal_processor_finalize (GObject * object);
-static gboolean gst_signal_processor_src_activate_pull (GstPad * pad,
- gboolean active);
-static gboolean gst_signal_processor_sink_activate_push (GstPad * pad,
- gboolean active);
+static gboolean gst_signal_processor_src_activate_mode (GstPad * pad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+static gboolean gst_signal_processor_sink_activate_mode (GstPad * pad,
+ GstObject * parent, GstPadMode mode, gboolean active);
static GstStateChangeReturn gst_signal_processor_change_state (GstElement *
element, GstStateChange transition);
-static gboolean gst_signal_processor_event (GstPad * pad, GstEvent * event);
+static gboolean gst_signal_processor_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static GstFlowReturn gst_signal_processor_getrange (GstPad * pad,
- guint64 offset, guint length, GstBuffer ** buffer);
+ GstObject * parent, guint64 offset, guint length, GstBuffer ** buffer);
static GstFlowReturn gst_signal_processor_chain (GstPad * pad,
- GstBuffer * buffer);
+ GstObject * parent, GstBuffer * buffer);
static gboolean gst_signal_processor_setcaps (GstPad * pad, GstCaps * caps);
static void
-gst_signal_processor_base_init (gpointer g_class)
-{
- /* NOP */
-}
-
-static void
gst_signal_processor_class_init (GstSignalProcessorClass * klass)
{
GObjectClass *gobject_class;
@@ -208,6 +222,8 @@ gst_signal_processor_class_init (GstSignalProcessorClass * klass)
gobject_class = G_OBJECT_CLASS (klass);
gstelement_class = GST_ELEMENT_CLASS (klass);
+ parent_class = g_type_class_peek_parent (klass);
+
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_signal_processor_finalize);
gstelement_class->change_state =
@@ -216,9 +232,12 @@ gst_signal_processor_class_init (GstSignalProcessorClass * klass)
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_setcaps);
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_event);
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_chain);
- GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_sink_activate_push);
+ GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_sink_activate_mode);
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_getrange);
- GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_src_activate_pull);
+ GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_src_activate_mode);
+
+ GST_DEBUG_CATEGORY_INIT (gst_signal_processor_debug, "signalprocessor", 0,
+ "signalprocessor baseclass");
}
static void
@@ -235,21 +254,19 @@ gst_signal_processor_add_pad_from_template (GstSignalProcessor * self,
GST_SIGNAL_PROCESSOR_PAD (pad)->channels =
GST_SIGNAL_PROCESSOR_PAD_TEMPLATE (templ)->channels;
- gst_pad_set_setcaps_function (pad, gst_signal_processor_setcaps);
-
if (templ->direction == GST_PAD_SINK) {
GST_DEBUG_OBJECT (pad, "added new sink pad");
gst_pad_set_event_function (pad, gst_signal_processor_event);
gst_pad_set_chain_function (pad, gst_signal_processor_chain);
- gst_pad_set_activatepush_function (pad,
- gst_signal_processor_sink_activate_push);
+ gst_pad_set_activatemode_function (pad,
+ gst_signal_processor_sink_activate_mode);
} else {
GST_DEBUG_OBJECT (pad, "added new src pad");
gst_pad_set_getrange_function (pad, gst_signal_processor_getrange);
- gst_pad_set_activatepull_function (pad,
- gst_signal_processor_src_activate_pull);
+ gst_pad_set_activatemode_function (pad,
+ gst_signal_processor_src_activate_mode);
}
gst_element_add_pad (GST_ELEMENT (self), pad);
@@ -471,7 +488,7 @@ gst_signal_processor_setcaps (GstPad * pad, GstCaps * caps)
self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
- if (self->mode == GST_ACTIVATE_PULL && !gst_caps_is_equal (caps, self->caps)
+ if (self->mode == GST_PAD_MODE_PULL && !gst_caps_is_equal (caps, self->caps)
&& !gst_signal_processor_setcaps_pull (self, pad, caps))
goto setcaps_pull_failed;
@@ -566,13 +583,13 @@ gst_signal_processor_interleave_group (GstSignalProcessorGroup * group,
}
static gboolean
-gst_signal_processor_event (GstPad * pad, GstEvent * event)
+gst_signal_processor_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
GstSignalProcessor *self;
GstSignalProcessorClass *bclass;
gboolean ret;
- self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
+ self = GST_SIGNAL_PROCESSOR (parent);
bclass = GST_SIGNAL_PROCESSOR_GET_CLASS (self);
GST_DEBUG_OBJECT (pad, "got event %s", GST_EVENT_TYPE_NAME (event));
@@ -584,18 +601,27 @@ gst_signal_processor_event (GstPad * pad, GstEvent * event)
bclass->event (self, event);
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_signal_processor_setcaps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_FLUSH_START:
+ ret = gst_pad_event_default (pad, parent, event);
break;
case GST_EVENT_FLUSH_STOP:
/* clear errors now */
self->flow_state = GST_FLOW_OK;
+ ret = gst_pad_event_default (pad, parent, event);
break;
default:
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
- ret = gst_pad_event_default (pad, event);
-
- gst_object_unref (self);
return ret;
}
@@ -694,7 +720,7 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
srcpad = (GstSignalProcessorPad *) srcs->data;
if (sinkpad->channels == 1 && sinkpad->channels == srcpad->channels
- && GST_BUFFER_SIZE (sinkpad->pen) ==
+ && gst_buffer_get_size (sinkpad->pen) ==
samples_avail * sizeof (gfloat)) {
/* reusable, yay */
g_assert (sinkpad->samples_avail == samples_avail);
@@ -715,24 +741,18 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
/* now allocate for any remaining outputs */
while (srcs) {
GstSignalProcessorPad *srcpad;
- GstFlowReturn ret;
srcpad = (GstSignalProcessorPad *) srcs->data;
- ret = gst_pad_alloc_buffer_and_set_caps (GST_PAD (srcpad),
- GST_CLOCK_TIME_NONE,
- samples_avail * srcpad->channels * sizeof (gfloat), self->caps,
- &srcpad->pen);
+ srcpad->pen =
+ gst_buffer_new_allocate (NULL,
+ samples_avail * srcpad->channels * sizeof (gfloat), 0);
- if (ret != GST_FLOW_OK) {
- GST_INFO_OBJECT (self,
- "allocating buffer for %u samples, %u channels failed", samples_avail,
- srcpad->channels);
- self->flow_state = ret;
- return 0;
- } else if (srcpad->channels > 1) {
+ if (srcpad->channels > 1) {
GstSignalProcessorGroup *group = &self->group_out[out_group_index++];
- group->interleaved_buffer = (gfloat *) GST_BUFFER_DATA (srcpad->pen);
+ group->interleaved_buffer =
+ (gfloat *) gst_buffer_map (srcpad->pen, NULL, NULL,
+ GST_MAP_READWRITE);
if (!group->buffer || group->channels < srcpad->channels
|| group->nframes < samples_avail)
group->buffer =
@@ -742,7 +762,9 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
group->nframes = samples_avail;
self->pending_out++;
} else {
- self->audio_out[srcpad->index] = (gfloat *) GST_BUFFER_DATA (srcpad->pen);
+ self->audio_out[srcpad->index] =
+ (gfloat *) gst_buffer_map (srcpad->pen, NULL, NULL,
+ GST_MAP_READWRITE);
self->pending_out++;
}
@@ -755,7 +777,7 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
/* update controlled parameters */
if (samples_avail && GST_CLOCK_TIME_IS_VALID (ts)) {
- gst_object_sync_values ((GObject *) self, ts);
+ gst_object_sync_values ((GstObject *) self, ts);
}
return samples_avail;
@@ -842,15 +864,16 @@ gst_signal_processor_pen_buffer (GstSignalProcessor * self, GstPad * pad,
GstBuffer * buffer)
{
GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pad;
+ gsize size;
if (spad->pen)
goto had_buffer;
/* keep the reference */
spad->pen = buffer;
- spad->data = (gfloat *) GST_BUFFER_DATA (buffer);
- spad->samples_avail =
- GST_BUFFER_SIZE (buffer) / sizeof (float) / spad->channels;
+ spad->data =
+ (gfloat *) gst_buffer_map (buffer, &size, NULL, GST_MAP_READWRITE);
+ spad->samples_avail = size / sizeof (float) / spad->channels;
g_assert (self->pending_in != 0);
@@ -883,6 +906,7 @@ gst_signal_processor_flush (GstSignalProcessor * self)
GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pads->data;
if (spad->pen) {
+ gst_buffer_unmap (spad->pen, spad->data, -1);
gst_buffer_unref (spad->pen);
spad->pen = NULL;
spad->data = NULL;
@@ -941,14 +965,14 @@ gst_signal_processor_do_pulls (GstSignalProcessor * self, guint nframes)
}
static GstFlowReturn
-gst_signal_processor_getrange (GstPad * pad, guint64 offset,
+gst_signal_processor_getrange (GstPad * pad, GstObject * parent, guint64 offset,
guint length, GstBuffer ** buffer)
{
GstSignalProcessor *self;
GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pad;
GstFlowReturn ret = GST_FLOW_ERROR;
- self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
+ self = GST_SIGNAL_PROCESSOR (parent);
if (spad->pen) {
*buffer = spad->pen;
@@ -972,8 +996,6 @@ gst_signal_processor_getrange (GstPad * pad, guint64 offset,
GST_DEBUG_OBJECT (self, "returns %s", gst_flow_get_name (ret));
- gst_object_unref (self);
-
return ret;
}
@@ -1020,11 +1042,12 @@ gst_signal_processor_do_pushes (GstSignalProcessor * self)
}
static GstFlowReturn
-gst_signal_processor_chain (GstPad * pad, GstBuffer * buffer)
+gst_signal_processor_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer)
{
GstSignalProcessor *self;
- self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
+ self = GST_SIGNAL_PROCESSOR (parent);
GST_LOG_OBJECT (self, "chain(%s:%s, %p) : p_in=%u, p_out=%u",
GST_DEBUG_PAD_NAME (pad), buffer, self->pending_in, self->pending_out);
@@ -1036,91 +1059,103 @@ gst_signal_processor_chain (GstPad * pad, GstBuffer * buffer)
gst_signal_processor_do_pushes (self);
}
- gst_object_unref (self);
-
return self->flow_state;
}
static gboolean
-gst_signal_processor_sink_activate_push (GstPad * pad, gboolean active)
+gst_signal_processor_sink_activate_mode (GstPad * pad, GstObject * parent,
+ GstPadMode mode, gboolean active)
{
- gboolean result = TRUE;
+ gboolean result;
GstSignalProcessor *self;
- self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
-
- if (active) {
- if (self->mode == GST_ACTIVATE_NONE) {
- self->mode = GST_ACTIVATE_PUSH;
- result = TRUE;
- } else if (self->mode == GST_ACTIVATE_PUSH) {
- result = TRUE;
- } else {
- g_warning ("foo");
- result = FALSE;
- }
- } else {
- if (self->mode == GST_ACTIVATE_NONE) {
- result = TRUE;
- } else if (self->mode == GST_ACTIVATE_PUSH) {
- self->mode = GST_ACTIVATE_NONE;
- result = TRUE;
- } else {
- g_warning ("foo");
+ self = GST_SIGNAL_PROCESSOR (parent);
+
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ if (active) {
+ if (self->mode == GST_PAD_MODE_NONE) {
+ self->mode = GST_PAD_MODE_PUSH;
+ result = TRUE;
+ } else if (self->mode == GST_PAD_MODE_PUSH) {
+ result = TRUE;
+ } else {
+ g_warning ("foo");
+ result = FALSE;
+ }
+ } else {
+ if (self->mode == GST_PAD_MODE_NONE) {
+ result = TRUE;
+ } else if (self->mode == GST_PAD_MODE_PUSH) {
+ self->mode = GST_PAD_MODE_NONE;
+ result = TRUE;
+ } else {
+ g_warning ("foo");
+ result = FALSE;
+ }
+ }
+ break;
+ default:
result = FALSE;
- }
+ break;
}
GST_DEBUG_OBJECT (self, "result : %d", result);
- gst_object_unref (self);
-
return result;
}
static gboolean
-gst_signal_processor_src_activate_pull (GstPad * pad, gboolean active)
+gst_signal_processor_src_activate_mode (GstPad * pad, GstObject * parent,
+ GstPadMode mode, gboolean active)
{
- gboolean result = TRUE;
+ gboolean result;
GstSignalProcessor *self;
- self = GST_SIGNAL_PROCESSOR (gst_pad_get_parent (pad));
-
- if (active) {
- if (self->mode == GST_ACTIVATE_NONE) {
- GList *l;
-
- for (l = GST_ELEMENT (self)->sinkpads; l; l = l->next)
- result &= gst_pad_activate_pull (pad, active);
- if (result)
- self->mode = GST_ACTIVATE_PULL;
- } else if (self->mode == GST_ACTIVATE_PULL) {
- result = TRUE;
- } else {
- g_warning ("foo");
- result = FALSE;
- }
- } else {
- if (self->mode == GST_ACTIVATE_NONE) {
- result = TRUE;
- } else if (self->mode == GST_ACTIVATE_PULL) {
- GList *l;
-
- for (l = GST_ELEMENT (self)->sinkpads; l; l = l->next)
- result &= gst_pad_activate_pull (pad, active);
- if (result)
- self->mode = GST_ACTIVATE_NONE;
- result = TRUE;
- } else {
- g_warning ("foo");
+ self = GST_SIGNAL_PROCESSOR (parent);
+
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ if (active) {
+ if (self->mode == GST_PAD_MODE_NONE) {
+ GList *l;
+
+ result = TRUE;
+ for (l = GST_ELEMENT (self)->sinkpads; l; l = l->next)
+ result &= gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, active);
+ if (result)
+ self->mode = GST_PAD_MODE_PULL;
+ } else if (self->mode == GST_PAD_MODE_PULL) {
+ result = TRUE;
+ } else {
+ g_warning ("foo");
+ result = FALSE;
+ }
+ } else {
+ if (self->mode == GST_PAD_MODE_NONE) {
+ result = TRUE;
+ } else if (self->mode == GST_PAD_MODE_PULL) {
+ GList *l;
+
+ result = TRUE;
+ for (l = GST_ELEMENT (self)->sinkpads; l; l = l->next)
+ result &= gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, active);
+ if (result)
+ self->mode = GST_PAD_MODE_NONE;
+ result = TRUE;
+ } else {
+ g_warning ("foo");
+ result = FALSE;
+ }
+ }
+ break;
+ default:
result = FALSE;
- }
+ break;
}
GST_DEBUG_OBJECT (self, "result : %d", result);
- gst_object_unref (self);
-
return result;
}
diff --git a/gst-libs/gst/signalprocessor/gstsignalprocessor.h b/gst-libs/gst/signalprocessor/gstsignalprocessor.h
index 4d512e146..b32c94435 100644
--- a/gst-libs/gst/signalprocessor/gstsignalprocessor.h
+++ b/gst-libs/gst/signalprocessor/gstsignalprocessor.h
@@ -82,7 +82,7 @@ struct _GstSignalProcessor {
GstCaps *caps;
GstSignalProcessorState state;
GstFlowReturn flow_state;
- GstActivateMode mode;
+ GstPadMode mode;
/* pending inputs before processing can take place */
guint pending_in;
diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am
index 7ce58a3c7..56f2572b3 100644
--- a/gst-libs/gst/video/Makefile.am
+++ b/gst-libs/gst/video/Makefile.am
@@ -8,7 +8,7 @@ libgstbasevideo_@GST_MAJORMINOR@_la_SOURCES = \
gstbasevideoutils.c \
gstbasevideodecoder.c \
gstbasevideoencoder.c \
- gstsurfacebuffer.c \
+ gstsurfacemeta.c \
gstsurfaceconverter.c \
videocontext.c
@@ -18,7 +18,7 @@ libgstbasevideo_@GST_MAJORMINOR@include_HEADERS = \
gstbasevideoutils.h \
gstbasevideodecoder.h \
gstbasevideoencoder.h \
- gstsurfacebuffer.h \
+ gstsurfacemeta.h \
gstsurfaceconverter.h \
videocontext.h
diff --git a/gst-libs/gst/video/gstbasevideocodec.c b/gst-libs/gst/video/gstbasevideocodec.c
index a1dc91db4..816e62e35 100644
--- a/gst-libs/gst/video/gstbasevideocodec.c
+++ b/gst-libs/gst/video/gstbasevideocodec.c
@@ -45,31 +45,44 @@ static void gst_base_video_codec_finalize (GObject * object);
static GstStateChangeReturn gst_base_video_codec_change_state (GstElement *
element, GstStateChange transition);
-GType
-gst_video_frame_get_type (void)
-{
- static volatile gsize type = 0;
+static GstElementClass *parent_class = NULL;
- if (g_once_init_enter (&type)) {
- GType _type;
+G_DEFINE_BOXED_TYPE (GstVideoFrameState, gst_video_frame_state,
+ (GBoxedCopyFunc) gst_video_frame_state_ref,
+ (GBoxedFreeFunc) gst_video_frame_state_unref);
- _type = g_boxed_type_register_static ("GstVideoFrame",
- (GBoxedCopyFunc) gst_video_frame_ref,
- (GBoxedFreeFunc) gst_video_frame_unref);
- g_once_init_leave (&type, _type);
- }
- return (GType) type;
-}
-
-GST_BOILERPLATE (GstBaseVideoCodec, gst_base_video_codec, GstElement,
- GST_TYPE_ELEMENT);
+/* NOTE (Edward): Do not use G_DEFINE_* because we need to have
+ * a GClassInitFunc called with the target class (which the macros
+ * don't handle).
+ */
+static void gst_base_video_codec_class_init (GstBaseVideoCodecClass * klass);
+static void gst_base_video_codec_init (GstBaseVideoCodec * dec,
+ GstBaseVideoCodecClass * klass);
-static void
-gst_base_video_codec_base_init (gpointer g_class)
+GType
+gst_base_video_codec_get_type (void)
{
- GST_DEBUG_CATEGORY_INIT (basevideocodec_debug, "basevideocodec", 0,
- "Base Video Codec");
+ static volatile gsize base_video_codec_type = 0;
+ if (g_once_init_enter (&base_video_codec_type)) {
+ GType _type;
+ static const GTypeInfo base_video_codec_info = {
+ sizeof (GstBaseVideoCodecClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) gst_base_video_codec_class_init,
+ NULL,
+ NULL,
+ sizeof (GstBaseVideoCodec),
+ 0,
+ (GInstanceInitFunc) gst_base_video_codec_init,
+ };
+
+ _type = g_type_register_static (GST_TYPE_ELEMENT,
+ "GstBaseVideoCodec", &base_video_codec_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&base_video_codec_type, _type);
+ }
+ return base_video_codec_type;
}
static void
@@ -81,9 +94,14 @@ gst_base_video_codec_class_init (GstBaseVideoCodecClass * klass)
gobject_class = G_OBJECT_CLASS (klass);
element_class = GST_ELEMENT_CLASS (klass);
+ parent_class = g_type_class_peek_parent (klass);
+
gobject_class->finalize = gst_base_video_codec_finalize;
element_class->change_state = gst_base_video_codec_change_state;
+
+ GST_DEBUG_CATEGORY_INIT (basevideocodec_debug, "basevideocodec", 0,
+ "Base Video Codec");
}
static void
@@ -124,7 +142,7 @@ gst_base_video_codec_reset (GstBaseVideoCodec * base_video_codec)
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_codec);
for (g = base_video_codec->frames; g; g = g_list_next (g)) {
- gst_video_frame_unref ((GstVideoFrame *) g->data);
+ gst_video_frame_state_unref ((GstVideoFrameState *) g->data);
}
g_list_free (base_video_codec->frames);
base_video_codec->frames = NULL;
@@ -183,31 +201,38 @@ gst_base_video_codec_change_state (GstElement * element,
return ret;
}
-GstVideoFrame *
-gst_base_video_codec_new_frame (GstBaseVideoCodec * base_video_codec)
+void
+gst_base_video_codec_append_frame (GstBaseVideoCodec * codec,
+ GstVideoFrameState * frame)
{
- GstVideoFrame *frame;
-
- frame = g_slice_new0 (GstVideoFrame);
+ g_return_if_fail (frame != NULL);
- frame->ref_count = 1;
+ gst_video_frame_state_ref (frame);
+ codec->frames = g_list_append (codec->frames, frame);
+}
- GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_codec);
- frame->system_frame_number = base_video_codec->system_frame_number;
- base_video_codec->system_frame_number++;
- GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_codec);
+void
+gst_base_video_codec_remove_frame (GstBaseVideoCodec * codec,
+ GstVideoFrameState * frame)
+{
+ GList *link;
- GST_LOG_OBJECT (base_video_codec, "Created new frame %p (sfn:%d)",
- frame, frame->system_frame_number);
+ g_return_if_fail (frame != NULL);
- return frame;
+ link = g_list_find (codec->frames, frame);
+ if (link) {
+ gst_video_frame_state_unref ((GstVideoFrameState *) link->data);
+ codec->frames = g_list_delete_link (codec->frames, link);
+ }
}
static void
-_gst_video_frame_free (GstVideoFrame * frame)
+_gst_video_frame_state_free (GstVideoFrameState * frame)
{
g_return_if_fail (frame != NULL);
+ GST_LOG ("Freeing frame %p (sfn:%d)", frame, frame->system_frame_number);
+
if (frame->sink_buffer) {
gst_buffer_unref (frame->sink_buffer);
}
@@ -222,11 +247,31 @@ _gst_video_frame_free (GstVideoFrame * frame)
if (frame->coder_hook_destroy_notify && frame->coder_hook)
frame->coder_hook_destroy_notify (frame->coder_hook);
- g_slice_free (GstVideoFrame, frame);
+ g_slice_free (GstVideoFrameState, frame);
+}
+
+GstVideoFrameState *
+gst_base_video_codec_new_frame (GstBaseVideoCodec * base_video_codec)
+{
+ GstVideoFrameState *frame;
+
+ frame = g_slice_new0 (GstVideoFrameState);
+
+ frame->ref_count = 1;
+
+ GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_codec);
+ frame->system_frame_number = base_video_codec->system_frame_number;
+ base_video_codec->system_frame_number++;
+ GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_codec);
+
+ GST_LOG_OBJECT (base_video_codec, "Created new frame %p (sfn:%d)",
+ frame, frame->system_frame_number);
+
+ return frame;
}
-GstVideoFrame *
-gst_video_frame_ref (GstVideoFrame * frame)
+GstVideoFrameState *
+gst_video_frame_state_ref (GstVideoFrameState * frame)
{
g_return_val_if_fail (frame != NULL, NULL);
@@ -236,12 +281,12 @@ gst_video_frame_ref (GstVideoFrame * frame)
}
void
-gst_video_frame_unref (GstVideoFrame * frame)
+gst_video_frame_state_unref (GstVideoFrameState * frame)
{
g_return_if_fail (frame != NULL);
g_return_if_fail (frame->ref_count > 0);
if (g_atomic_int_dec_and_test (&frame->ref_count)) {
- _gst_video_frame_free (frame);
+ _gst_video_frame_state_free (frame);
}
}
diff --git a/gst-libs/gst/video/gstbasevideocodec.h b/gst-libs/gst/video/gstbasevideocodec.h
index 41c2282a6..fb4ee7fec 100644
--- a/gst-libs/gst/video/gstbasevideocodec.h
+++ b/gst-libs/gst/video/gstbasevideocodec.h
@@ -28,6 +28,8 @@
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
#include <gst/video/video.h>
+#include <gst/video/gstvideopool.h>
+#include <gst/video/gstvideometa.h>
G_BEGIN_DECLS
@@ -83,7 +85,7 @@ G_BEGIN_DECLS
#define GST_BASE_VIDEO_CODEC_STREAM_UNLOCK(codec) g_static_rec_mutex_unlock (&GST_BASE_VIDEO_CODEC (codec)->stream_lock)
typedef struct _GstVideoState GstVideoState;
-typedef struct _GstVideoFrame GstVideoFrame;
+typedef struct _GstVideoFrameState GstVideoFrameState;
typedef struct _GstBaseVideoCodec GstBaseVideoCodec;
typedef struct _GstBaseVideoCodecClass GstBaseVideoCodecClass;
@@ -108,7 +110,7 @@ struct _GstVideoState
};
-struct _GstVideoFrame
+struct _GstVideoFrameState
{
gint ref_count;
@@ -159,7 +161,8 @@ struct _GstBaseVideoCodec
guint64 system_frame_number;
GList *frames; /* Protected with OBJECT_LOCK */
- GstVideoState state;
+ GstVideoState state; /* Compressed video pad */
+ GstVideoInfo info; /* Raw video pad */
GstSegment segment;
gdouble proportion;
@@ -181,13 +184,16 @@ struct _GstBaseVideoCodecClass
void *padding[GST_PADDING_LARGE];
};
-GType gst_video_frame_get_type (void);
+GType gst_video_frame_state_get_type (void);
GType gst_base_video_codec_get_type (void);
-GstVideoFrame * gst_base_video_codec_new_frame (GstBaseVideoCodec *base_video_codec);
+void gst_base_video_codec_append_frame (GstBaseVideoCodec *codec, GstVideoFrameState *frame);
+void gst_base_video_codec_remove_frame (GstBaseVideoCodec *codec, GstVideoFrameState *frame);
-GstVideoFrame * gst_video_frame_ref (GstVideoFrame * frame);
-void gst_video_frame_unref (GstVideoFrame * frame);
+GstVideoFrameState * gst_base_video_codec_new_frame (GstBaseVideoCodec *base_video_codec);
+
+GstVideoFrameState * gst_video_frame_state_ref (GstVideoFrameState * frame);
+void gst_video_frame_state_unref (GstVideoFrameState * frame);
G_END_DECLS
diff --git a/gst-libs/gst/video/gstbasevideodecoder.c b/gst-libs/gst/video/gstbasevideodecoder.c
index 6a5554ea3..5a7519cb6 100644
--- a/gst-libs/gst/video/gstbasevideodecoder.c
+++ b/gst-libs/gst/video/gstbasevideodecoder.c
@@ -137,22 +137,20 @@ GST_DEBUG_CATEGORY (basevideodecoder_debug);
static void gst_base_video_decoder_finalize (GObject * object);
-static gboolean gst_base_video_decoder_sink_setcaps (GstPad * pad,
+static gboolean gst_base_video_decoder_setcaps (GstBaseVideoDecoder * vdec,
GstCaps * caps);
static gboolean gst_base_video_decoder_sink_event (GstPad * pad,
- GstEvent * event);
+ GstObject * parent, GstEvent * event);
static gboolean gst_base_video_decoder_src_event (GstPad * pad,
- GstEvent * event);
+ GstObject * parent, GstEvent * event);
static GstFlowReturn gst_base_video_decoder_chain (GstPad * pad,
- GstBuffer * buf);
+ GstObject * parent, GstBuffer * buf);
static gboolean gst_base_video_decoder_sink_query (GstPad * pad,
- GstQuery * query);
+ GstObject * parent, GstQuery * query);
static GstStateChangeReturn gst_base_video_decoder_change_state (GstElement *
element, GstStateChange transition);
-static const GstQueryType *gst_base_video_decoder_get_query_types (GstPad *
- pad);
static gboolean gst_base_video_decoder_src_query (GstPad * pad,
- GstQuery * query);
+ GstObject * parent, GstQuery * query);
static void gst_base_video_decoder_reset (GstBaseVideoDecoder *
base_video_decoder, gboolean full);
@@ -167,21 +165,14 @@ gst_base_video_decoder_get_field_timestamp (GstBaseVideoDecoder *
base_video_decoder, int field_offset);
static guint64 gst_base_video_decoder_get_field_duration (GstBaseVideoDecoder *
base_video_decoder, int n_fields);
-static GstVideoFrame *gst_base_video_decoder_new_frame (GstBaseVideoDecoder *
- base_video_decoder);
+static GstVideoFrameState *gst_base_video_decoder_new_frame (GstBaseVideoDecoder
+ * base_video_decoder);
static void gst_base_video_decoder_clear_queues (GstBaseVideoDecoder * dec);
-GST_BOILERPLATE (GstBaseVideoDecoder, gst_base_video_decoder,
- GstBaseVideoCodec, GST_TYPE_BASE_VIDEO_CODEC);
-
-static void
-gst_base_video_decoder_base_init (gpointer g_class)
-{
- GST_DEBUG_CATEGORY_INIT (basevideodecoder_debug, "basevideodecoder", 0,
- "Base Video Decoder");
-
-}
+#define gst_base_video_decoder_parent_class parent_class
+G_DEFINE_TYPE (GstBaseVideoDecoder, gst_base_video_decoder,
+ GST_TYPE_BASE_VIDEO_CODEC);
static void
gst_base_video_decoder_class_init (GstBaseVideoDecoderClass * klass)
@@ -196,11 +187,13 @@ gst_base_video_decoder_class_init (GstBaseVideoDecoderClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_base_video_decoder_change_state);
+
+ GST_DEBUG_CATEGORY_INIT (basevideodecoder_debug, "basevideodecoder", 0,
+ "Base Video Decoder");
}
static void
-gst_base_video_decoder_init (GstBaseVideoDecoder * base_video_decoder,
- GstBaseVideoDecoderClass * klass)
+gst_base_video_decoder_init (GstBaseVideoDecoder * base_video_decoder)
{
GstPad *pad;
@@ -212,8 +205,6 @@ gst_base_video_decoder_init (GstBaseVideoDecoder * base_video_decoder,
GST_DEBUG_FUNCPTR (gst_base_video_decoder_chain));
gst_pad_set_event_function (pad,
GST_DEBUG_FUNCPTR (gst_base_video_decoder_sink_event));
- gst_pad_set_setcaps_function (pad,
- GST_DEBUG_FUNCPTR (gst_base_video_decoder_sink_setcaps));
gst_pad_set_query_function (pad,
GST_DEBUG_FUNCPTR (gst_base_video_decoder_sink_query));
@@ -221,8 +212,6 @@ gst_base_video_decoder_init (GstBaseVideoDecoder * base_video_decoder,
gst_pad_set_event_function (pad,
GST_DEBUG_FUNCPTR (gst_base_video_decoder_src_event));
- gst_pad_set_query_type_function (pad,
- GST_DEBUG_FUNCPTR (gst_base_video_decoder_get_query_types));
gst_pad_set_query_function (pad,
GST_DEBUG_FUNCPTR (gst_base_video_decoder_src_query));
gst_pad_use_fixed_caps (pad);
@@ -264,16 +253,15 @@ gst_base_video_decoder_push_src_event (GstBaseVideoDecoder * decoder,
}
static gboolean
-gst_base_video_decoder_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_base_video_decoder_setcaps (GstBaseVideoDecoder * base_video_decoder,
+ GstCaps * caps)
{
- GstBaseVideoDecoder *base_video_decoder;
GstBaseVideoDecoderClass *base_video_decoder_class;
GstStructure *structure;
const GValue *codec_data;
GstVideoState state;
gboolean ret = TRUE;
- base_video_decoder = GST_BASE_VIDEO_DECODER (gst_pad_get_parent (pad));
base_video_decoder_class =
GST_BASE_VIDEO_DECODER_GET_CLASS (base_video_decoder);
@@ -287,35 +275,42 @@ gst_base_video_decoder_sink_setcaps (GstPad * pad, GstCaps * caps)
structure = gst_caps_get_structure (caps, 0);
- gst_video_format_parse_caps (caps, NULL, &state.width, &state.height);
- /* this one fails if no framerate in caps */
- if (!gst_video_parse_caps_framerate (caps, &state.fps_n, &state.fps_d)) {
+ /* FIXME : Add have_{width_height|framerate|par} fields to
+ * GstVideoState so we can make better decisions
+ */
+
+ gst_structure_get_int (structure, "width", &state.width);
+ gst_structure_get_int (structure, "height", &state.height);
+
+ if (!gst_structure_get_fraction (structure, "framerate", &state.fps_n,
+ &state.fps_d)) {
state.fps_n = 0;
state.fps_d = 1;
}
- /* but the p-a-r sets 1/1 instead, which is not quite informative ... */
- if (!gst_structure_has_field (structure, "pixel-aspect-ratio") ||
- !gst_video_parse_caps_pixel_aspect_ratio (caps,
+
+ if (!gst_structure_get_fraction (structure, "pixel-aspect-ratio",
&state.par_n, &state.par_d)) {
state.par_n = 0;
state.par_d = 1;
}
state.have_interlaced =
- gst_video_format_parse_caps_interlaced (caps, &state.interlaced);
+ gst_structure_get_boolean (structure, "interlaced", &state.interlaced);
codec_data = gst_structure_get_value (structure, "codec_data");
if (codec_data && G_VALUE_TYPE (codec_data) == GST_TYPE_BUFFER) {
- state.codec_data = GST_BUFFER (gst_value_dup_mini_object (codec_data));
+ state.codec_data = GST_BUFFER (gst_value_get_buffer (codec_data));
+ gst_buffer_ref (state.codec_data);
}
if (base_video_decoder_class->set_format) {
+ GST_LOG_OBJECT (base_video_decoder, "Calling ::set_format()");
ret = base_video_decoder_class->set_format (base_video_decoder, &state);
}
if (ret) {
- gst_buffer_replace (&GST_BASE_VIDEO_CODEC (base_video_decoder)->
- state.codec_data, NULL);
+ gst_buffer_replace (&GST_BASE_VIDEO_CODEC (base_video_decoder)->state.
+ codec_data, NULL);
gst_caps_replace (&GST_BASE_VIDEO_CODEC (base_video_decoder)->state.caps,
NULL);
GST_BASE_VIDEO_CODEC (base_video_decoder)->state = state;
@@ -325,7 +320,6 @@ gst_base_video_decoder_sink_setcaps (GstPad * pad, GstCaps * caps)
}
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_decoder);
- g_object_unref (base_video_decoder);
return ret;
}
@@ -348,6 +342,11 @@ gst_base_video_decoder_finalize (GObject * object)
base_video_decoder->output_adapter = NULL;
}
+ if (base_video_decoder->pool) {
+ g_object_unref (base_video_decoder->pool);
+ base_video_decoder->pool = NULL;
+ }
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -389,13 +388,14 @@ gst_base_video_decoder_flush (GstBaseVideoDecoder * dec, gboolean hard)
}
static gboolean
-gst_base_video_decoder_sink_event (GstPad * pad, GstEvent * event)
+gst_base_video_decoder_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
GstBaseVideoDecoder *base_video_decoder;
GstBaseVideoDecoderClass *base_video_decoder_class;
gboolean ret = FALSE;
- base_video_decoder = GST_BASE_VIDEO_DECODER (gst_pad_get_parent (pad));
+ base_video_decoder = GST_BASE_VIDEO_DECODER (parent);
base_video_decoder_class =
GST_BASE_VIDEO_DECODER_GET_CLASS (base_video_decoder);
@@ -404,6 +404,15 @@ gst_base_video_decoder_sink_event (GstPad * pad, GstEvent * event)
GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_base_video_decoder_setcaps (base_video_decoder, caps);
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_EOS:
{
GstFlowReturn flow_ret;
@@ -427,66 +436,52 @@ gst_base_video_decoder_sink_event (GstPad * pad, GstEvent * event)
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_decoder);
break;
}
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- double rate, arate;
- GstFormat format;
- gint64 start;
- gint64 stop;
- gint64 pos;
+ GstSegment seg;
GstSegment *segment = &GST_BASE_VIDEO_CODEC (base_video_decoder)->segment;
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
- gst_event_parse_new_segment_full (event, &update, &rate,
- &arate, &format, &start, &stop, &pos);
+ gst_event_copy_segment (event, &seg);
- if (format == GST_FORMAT_TIME) {
+ if (seg.format == GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (base_video_decoder,
- "received TIME NEW_SEGMENT %" GST_TIME_FORMAT
- " -- %" GST_TIME_FORMAT ", pos %" GST_TIME_FORMAT
- ", rate %g, applied_rate %g",
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (pos),
- rate, arate);
+ "received TIME SEGMENT %" GST_SEGMENT_FORMAT, &seg);
} else {
GstFormat dformat = GST_FORMAT_TIME;
+ gint64 start;
GST_DEBUG_OBJECT (base_video_decoder,
- "received NEW_SEGMENT %" G_GINT64_FORMAT
- " -- %" G_GINT64_FORMAT ", time %" G_GINT64_FORMAT
- ", rate %g, applied_rate %g", start, stop, pos, rate, arate);
+ "received SEGMENT %" GST_SEGMENT_FORMAT, &seg);
/* handle newsegment as a result from our legacy simple seeking */
/* note that initial 0 should convert to 0 in any case */
if (base_video_decoder->do_byte_time &&
gst_pad_query_convert (GST_BASE_VIDEO_CODEC_SINK_PAD
- (base_video_decoder), GST_FORMAT_BYTES, start, &dformat,
+ (base_video_decoder), GST_FORMAT_BYTES, seg.start, dformat,
&start)) {
/* best attempt convert */
/* as these are only estimates, stop is kept open-ended to avoid
* premature cutting */
GST_DEBUG_OBJECT (base_video_decoder,
"converted to TIME start %" GST_TIME_FORMAT,
- GST_TIME_ARGS (start));
- pos = start;
- stop = GST_CLOCK_TIME_NONE;
+ GST_TIME_ARGS (seg.start));
+ seg.start = start;
+ seg.stop = GST_CLOCK_TIME_NONE;
+ seg.time = start;
/* replace event */
gst_event_unref (event);
- event = gst_event_new_new_segment_full (update, rate, arate,
- GST_FORMAT_TIME, start, stop, pos);
+ event = gst_event_new_segment (&seg);
} else {
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_decoder);
goto newseg_wrong_format;
}
}
- if (!update) {
- gst_base_video_decoder_flush (base_video_decoder, FALSE);
- }
+ gst_base_video_decoder_flush (base_video_decoder, FALSE);
- base_video_decoder->timestamp_offset = start;
+ base_video_decoder->timestamp_offset = seg.start;
- gst_segment_set_newsegment_full (segment,
- update, rate, arate, format, start, stop, pos);
+ *segment = seg;
ret = gst_base_video_decoder_push_src_event (base_video_decoder, event);
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_decoder);
@@ -506,7 +501,6 @@ gst_base_video_decoder_sink_event (GstPad * pad, GstEvent * event)
}
done:
- gst_object_unref (base_video_decoder);
return ret;
newseg_wrong_format:
@@ -565,13 +559,12 @@ gst_base_video_decoder_do_seek (GstBaseVideoDecoder * dec, GstEvent * event)
}
memcpy (&seek_segment, &codec->segment, sizeof (seek_segment));
- gst_segment_set_seek (&seek_segment, rate, format, flags, start_type,
+ gst_segment_do_seek (&seek_segment, rate, format, flags, start_type,
start_time, end_type, end_time, NULL);
- start_time = seek_segment.last_stop;
+ start_time = seek_segment.position;
- format = GST_FORMAT_BYTES;
if (!gst_pad_query_convert (codec->sinkpad, GST_FORMAT_TIME, start_time,
- &format, &start)) {
+ GST_FORMAT_BYTES, &start)) {
GST_DEBUG_OBJECT (dec, "conversion failed");
return FALSE;
}
@@ -588,12 +581,13 @@ gst_base_video_decoder_do_seek (GstBaseVideoDecoder * dec, GstEvent * event)
}
static gboolean
-gst_base_video_decoder_src_event (GstPad * pad, GstEvent * event)
+gst_base_video_decoder_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
GstBaseVideoDecoder *base_video_decoder;
gboolean res = FALSE;
- base_video_decoder = GST_BASE_VIDEO_DECODER (gst_pad_get_parent (pad));
+ base_video_decoder = GST_BASE_VIDEO_DECODER (parent);
GST_DEBUG_OBJECT (base_video_decoder,
"received event %d, %s", GST_EVENT_TYPE (event),
@@ -630,9 +624,9 @@ gst_base_video_decoder_src_event (GstPad * pad, GstEvent * event)
/* ... though a non-time seek can be aided as well */
/* First bring the requested format to time */
tformat = GST_FORMAT_TIME;
- if (!(res = gst_pad_query_convert (pad, format, cur, &tformat, &tcur)))
+ if (!(res = gst_pad_query_convert (pad, format, cur, tformat, &tcur)))
goto convert_error;
- if (!(res = gst_pad_query_convert (pad, format, stop, &tformat, &tstop)))
+ if (!(res = gst_pad_query_convert (pad, format, stop, tformat, &tstop)))
goto convert_error;
/* then seek with time on the peer */
@@ -647,12 +641,13 @@ gst_base_video_decoder_src_event (GstPad * pad, GstEvent * event)
}
case GST_EVENT_QOS:
{
+ GstQOSType type;
gdouble proportion;
GstClockTimeDiff diff;
GstClockTime timestamp;
GstClockTime duration;
- gst_event_parse_qos (event, &proportion, &diff, &timestamp);
+ gst_event_parse_qos (event, &type, &proportion, &diff, &timestamp);
GST_OBJECT_LOCK (base_video_decoder);
GST_BASE_VIDEO_CODEC (base_video_decoder)->proportion = proportion;
@@ -693,7 +688,6 @@ gst_base_video_decoder_src_event (GstPad * pad, GstEvent * event)
break;
}
done:
- gst_object_unref (base_video_decoder);
return res;
convert_error:
@@ -701,26 +695,14 @@ convert_error:
goto done;
}
-static const GstQueryType *
-gst_base_video_decoder_get_query_types (GstPad * pad)
-{
- static const GstQueryType query_types[] = {
- GST_QUERY_POSITION,
- GST_QUERY_DURATION,
- GST_QUERY_CONVERT,
- 0
- };
-
- return query_types;
-}
-
static gboolean
-gst_base_video_decoder_src_query (GstPad * pad, GstQuery * query)
+gst_base_video_decoder_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
GstBaseVideoDecoder *dec;
gboolean res = TRUE;
- dec = GST_BASE_VIDEO_DECODER (gst_pad_get_parent (pad));
+ dec = GST_BASE_VIDEO_DECODER (parent);
GST_LOG_OBJECT (dec, "handling query: %" GST_PTR_FORMAT, query);
@@ -750,7 +732,7 @@ gst_base_video_decoder_src_query (GstPad * pad, GstQuery * query)
/* and convert to the final format */
gst_query_parse_position (query, &format, NULL);
if (!(res = gst_pad_query_convert (pad, GST_FORMAT_TIME, time,
- &format, &value)))
+ format, &value)))
break;
gst_query_set_position (query, format, value);
@@ -765,7 +747,7 @@ gst_base_video_decoder_src_query (GstPad * pad, GstQuery * query)
GstFormat format;
/* upstream in any case */
- if ((res = gst_pad_query_default (pad, query)))
+ if ((res = gst_pad_query_default (pad, parent, query)))
break;
gst_query_parse_duration (query, &format, NULL);
@@ -774,12 +756,12 @@ gst_base_video_decoder_src_query (GstPad * pad, GstQuery * query)
gint64 value;
format = GST_FORMAT_BYTES;
- if (gst_pad_query_peer_duration (GST_BASE_VIDEO_CODEC_SINK_PAD (dec),
- &format, &value)) {
+ if (gst_pad_peer_query_duration (GST_BASE_VIDEO_CODEC_SINK_PAD (dec),
+ format, &value)) {
GST_LOG_OBJECT (dec, "upstream size %" G_GINT64_FORMAT, value);
format = GST_FORMAT_TIME;
if (gst_pad_query_convert (GST_BASE_VIDEO_CODEC_SINK_PAD (dec),
- GST_FORMAT_BYTES, value, &format, &value)) {
+ GST_FORMAT_BYTES, value, format, &value)) {
gst_query_set_duration (query, GST_FORMAT_TIME, value);
res = TRUE;
}
@@ -803,24 +785,26 @@ gst_base_video_decoder_src_query (GstPad * pad, GstQuery * query)
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
}
- gst_object_unref (dec);
return res;
+ /* ERRORS */
error:
- GST_ERROR_OBJECT (dec, "query failed");
- gst_object_unref (dec);
- return res;
+ {
+ GST_ERROR_OBJECT (dec, "query failed");
+ return res;
+ }
}
static gboolean
-gst_base_video_decoder_sink_query (GstPad * pad, GstQuery * query)
+gst_base_video_decoder_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
GstBaseVideoDecoder *base_video_decoder;
gboolean res = FALSE;
- base_video_decoder = GST_BASE_VIDEO_DECODER (gst_pad_get_parent (pad));
+ base_video_decoder = GST_BASE_VIDEO_DECODER (parent);
GST_LOG_OBJECT (base_video_decoder, "handling query: %" GST_PTR_FORMAT,
query);
@@ -841,16 +825,18 @@ gst_base_video_decoder_sink_query (GstPad * pad, GstQuery * query)
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
done:
- gst_object_unref (base_video_decoder);
-
return res;
+
+ /* ERRORS */
error:
- GST_DEBUG_OBJECT (base_video_decoder, "query failed");
- goto done;
+ {
+ GST_DEBUG_OBJECT (base_video_decoder, "query failed");
+ goto done;
+ }
}
typedef struct _Timestamp Timestamp;
@@ -922,17 +908,17 @@ gst_base_video_decoder_clear_queues (GstBaseVideoDecoder * dec)
g_list_foreach (dec->gather, (GFunc) gst_mini_object_unref, NULL);
g_list_free (dec->gather);
dec->gather = NULL;
- g_list_foreach (dec->decode, (GFunc) gst_video_frame_unref, NULL);
+ g_list_foreach (dec->decode, (GFunc) gst_video_frame_state_unref, NULL);
g_list_free (dec->decode);
dec->decode = NULL;
g_list_foreach (dec->parse, (GFunc) gst_mini_object_unref, NULL);
g_list_free (dec->parse);
dec->parse = NULL;
- g_list_foreach (dec->parse_gather, (GFunc) gst_video_frame_unref, NULL);
+ g_list_foreach (dec->parse_gather, (GFunc) gst_video_frame_state_unref, NULL);
g_list_free (dec->parse_gather);
dec->parse_gather = NULL;
g_list_foreach (GST_BASE_VIDEO_CODEC (dec)->frames,
- (GFunc) gst_video_frame_unref, NULL);
+ (GFunc) gst_video_frame_state_unref, NULL);
g_list_free (GST_BASE_VIDEO_CODEC (dec)->frames);
GST_BASE_VIDEO_CODEC (dec)->frames = NULL;
}
@@ -968,7 +954,7 @@ gst_base_video_decoder_reset (GstBaseVideoDecoder * base_video_decoder,
base_video_decoder->timestamps = NULL;
if (base_video_decoder->current_frame) {
- gst_video_frame_unref (base_video_decoder->current_frame);
+ gst_video_frame_state_unref (base_video_decoder->current_frame);
base_video_decoder->current_frame = NULL;
}
@@ -1006,7 +992,7 @@ gst_base_video_decoder_chain_forward (GstBaseVideoDecoder * base_video_decoder,
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
gst_base_video_decoder_add_timestamp (base_video_decoder, buf);
}
- base_video_decoder->input_offset += GST_BUFFER_SIZE (buf);
+ base_video_decoder->input_offset += gst_buffer_get_size (buf);
if (base_video_decoder->packetized) {
base_video_decoder->current_frame->sink_buffer = buf;
@@ -1060,6 +1046,7 @@ gst_base_video_decoder_chain_forward (GstBaseVideoDecoder * base_video_decoder,
}
do {
+ GST_LOG_OBJECT (base_video_decoder, "Calling ::parse_data()");
ret = klass->parse_data (base_video_decoder, FALSE);
} while (ret == GST_FLOW_OK);
@@ -1089,7 +1076,7 @@ gst_base_video_decoder_flush_decode (GstBaseVideoDecoder * dec)
while (walk) {
GList *next;
- GstVideoFrame *frame = (GstVideoFrame *) (walk->data);
+ GstVideoFrameState *frame = (GstVideoFrameState *) (walk->data);
GstBuffer *buf = frame->sink_buffer;
GST_DEBUG_OBJECT (dec, "decoding frame %p, ts %" GST_TIME_FORMAT,
@@ -1097,9 +1084,9 @@ gst_base_video_decoder_flush_decode (GstBaseVideoDecoder * dec)
next = g_list_next (walk);
if (dec->current_frame)
- gst_video_frame_unref (dec->current_frame);
+ gst_video_frame_state_unref (dec->current_frame);
dec->current_frame = frame;
- gst_video_frame_ref (dec->current_frame);
+ gst_video_frame_state_ref (dec->current_frame);
/* decode buffer, resulting data prepended to queue */
res = gst_base_video_decoder_have_frame_2 (dec);
@@ -1152,9 +1139,9 @@ gst_base_video_decoder_flush_parse (GstBaseVideoDecoder * dec)
/* now we can process frames */
GST_DEBUG_OBJECT (dec, "checking frames");
while (dec->parse_gather) {
- GstVideoFrame *frame;
+ GstVideoFrameState *frame;
- frame = (GstVideoFrame *) (dec->parse_gather->data);
+ frame = (GstVideoFrameState *) (dec->parse_gather->data);
/* remove from the gather list */
dec->parse_gather =
g_list_delete_link (dec->parse_gather, dec->parse_gather);
@@ -1173,12 +1160,12 @@ gst_base_video_decoder_flush_parse (GstBaseVideoDecoder * dec)
GstBuffer *buf = GST_BUFFER_CAST (dec->queued->data);
if (G_LIKELY (res == GST_FLOW_OK)) {
- GST_DEBUG_OBJECT (dec, "pushing buffer %p of size %u, "
+ GST_DEBUG_OBJECT (dec, "pushing buffer %p of size %" G_GSIZE_FORMAT ", "
"time %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT, buf,
- GST_BUFFER_SIZE (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+ gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
/* should be already, but let's be sure */
- buf = gst_buffer_make_metadata_writable (buf);
+ buf = gst_buffer_make_writable (buf);
/* avoid stray DISCONT from forward processing,
* which have no meaning in reverse pushing */
GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
@@ -1216,9 +1203,9 @@ gst_base_video_decoder_chain_reverse (GstBaseVideoDecoder * dec,
}
if (G_LIKELY (buf)) {
- GST_DEBUG_OBJECT (dec, "gathering buffer %p of size %u, "
+ GST_DEBUG_OBJECT (dec, "gathering buffer %p of size %" G_GSIZE_FORMAT ", "
"time %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT, buf,
- GST_BUFFER_SIZE (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+ gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
/* add buffer to gather queue */
@@ -1229,17 +1216,17 @@ gst_base_video_decoder_chain_reverse (GstBaseVideoDecoder * dec,
}
static GstFlowReturn
-gst_base_video_decoder_chain (GstPad * pad, GstBuffer * buf)
+gst_base_video_decoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
GstBaseVideoDecoder *base_video_decoder;
GstFlowReturn ret = GST_FLOW_OK;
- base_video_decoder = GST_BASE_VIDEO_DECODER (GST_PAD_PARENT (pad));
+ base_video_decoder = GST_BASE_VIDEO_DECODER (parent);
GST_LOG_OBJECT (base_video_decoder,
- "chain %" GST_TIME_FORMAT " duration %" GST_TIME_FORMAT " size %d",
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_BUFFER_SIZE (buf));
+ "chain %" GST_TIME_FORMAT " duration %" GST_TIME_FORMAT " size %"
+ G_GSIZE_FORMAT "", GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), gst_buffer_get_size (buf));
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
@@ -1251,17 +1238,15 @@ gst_base_video_decoder_chain (GstPad * pad, GstBuffer * buf)
GST_FORMAT_UNDEFINED) {
GstEvent *event;
GstFlowReturn ret;
+ GstSegment *segment = &GST_BASE_VIDEO_CODEC (base_video_decoder)->segment;
GST_WARNING_OBJECT (base_video_decoder,
"Received buffer without a new-segment. "
"Assuming timestamps start from 0.");
- gst_segment_set_newsegment_full (&GST_BASE_VIDEO_CODEC
- (base_video_decoder)->segment, FALSE, 1.0, 1.0, GST_FORMAT_TIME, 0,
- GST_CLOCK_TIME_NONE, 0);
+ gst_segment_init (segment, GST_FORMAT_TIME);
- event = gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, 0,
- GST_CLOCK_TIME_NONE, 0);
+ event = gst_event_new_segment (segment);
ret = gst_base_video_decoder_push_src_event (base_video_decoder, event);
if (!ret) {
@@ -1347,10 +1332,10 @@ gst_base_video_decoder_change_state (GstElement * element,
return ret;
}
-static GstVideoFrame *
+static GstVideoFrameState *
gst_base_video_decoder_new_frame (GstBaseVideoDecoder * base_video_decoder)
{
- GstVideoFrame *frame;
+ GstVideoFrameState *frame;
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
frame =
@@ -1375,12 +1360,13 @@ gst_base_video_decoder_new_frame (GstBaseVideoDecoder * base_video_decoder)
static void
gst_base_video_decoder_prepare_finish_frame (GstBaseVideoDecoder *
- base_video_decoder, GstVideoFrame * frame)
+ base_video_decoder, GstVideoFrameState * frame)
{
GList *l, *events = NULL;
#ifndef GST_DISABLE_GST_DEBUG
- GST_LOG_OBJECT (base_video_decoder, "n %d in %d out %d",
+ GST_LOG_OBJECT (base_video_decoder,
+ "n %d in %" G_GSIZE_FORMAT " out %" G_GSIZE_FORMAT,
g_list_length (GST_BASE_VIDEO_CODEC (base_video_decoder)->frames),
gst_adapter_available (base_video_decoder->input_adapter),
gst_adapter_available (base_video_decoder->output_adapter));
@@ -1392,7 +1378,7 @@ gst_base_video_decoder_prepare_finish_frame (GstBaseVideoDecoder *
/* Push all pending events that arrived before this frame */
for (l = base_video_decoder->base_video_codec.frames; l; l = l->next) {
- GstVideoFrame *tmp = l->data;
+ GstVideoFrameState *tmp = l->data;
if (tmp->events) {
events = tmp->events;
@@ -1471,12 +1457,14 @@ gst_base_video_decoder_prepare_finish_frame (GstBaseVideoDecoder *
static void
gst_base_video_decoder_do_finish_frame (GstBaseVideoDecoder * dec,
- GstVideoFrame * frame)
+ GstVideoFrameState * frame)
{
- GST_BASE_VIDEO_CODEC (dec)->frames =
- g_list_remove (GST_BASE_VIDEO_CODEC (dec)->frames, frame);
+ gst_base_video_codec_remove_frame (GST_BASE_VIDEO_CODEC (dec), frame);
+
+ if (frame->src_buffer)
+ gst_buffer_unref (frame->src_buffer);
- gst_video_frame_unref (frame);
+ gst_video_frame_state_unref (frame);
}
/**
@@ -1494,7 +1482,7 @@ gst_base_video_decoder_do_finish_frame (GstBaseVideoDecoder * dec,
*/
GstFlowReturn
gst_base_video_decoder_drop_frame (GstBaseVideoDecoder * dec,
- GstVideoFrame * frame)
+ GstVideoFrameState * frame)
{
GstClockTime stream_time, jitter, earliest_time, qostime, timestamp;
GstSegment *segment;
@@ -1539,7 +1527,7 @@ gst_base_video_decoder_drop_frame (GstBaseVideoDecoder * dec,
/**
* gst_base_video_decoder_finish_frame:
* @base_video_decoder: a #GstBaseVideoDecoder
- * @frame: a decoded #GstVideoFrame
+ * @frame: a decoded #GstVideoFrameState
*
* @frame should have a valid decoded data buffer, whose metadata fields
* are then appropriately set according to frame data and pushed downstream.
@@ -1550,7 +1538,7 @@ gst_base_video_decoder_drop_frame (GstBaseVideoDecoder * dec,
*/
GstFlowReturn
gst_base_video_decoder_finish_frame (GstBaseVideoDecoder * base_video_decoder,
- GstVideoFrame * frame)
+ GstVideoFrameState * frame)
{
GstVideoState *state = &GST_BASE_VIDEO_CODEC (base_video_decoder)->state;
GstBuffer *src_buffer;
@@ -1570,7 +1558,7 @@ gst_base_video_decoder_finish_frame (GstBaseVideoDecoder * base_video_decoder,
goto done;
}
- src_buffer = gst_buffer_make_metadata_writable (frame->src_buffer);
+ src_buffer = gst_buffer_make_writable (frame->src_buffer);
frame->src_buffer = NULL;
GST_BUFFER_FLAG_UNSET (src_buffer, GST_BUFFER_FLAG_DELTA_UNIT);
@@ -1581,16 +1569,16 @@ gst_base_video_decoder_finish_frame (GstBaseVideoDecoder * base_video_decoder,
tff ^= 1;
}
if (tff) {
- GST_BUFFER_FLAG_SET (src_buffer, GST_VIDEO_BUFFER_TFF);
+ GST_BUFFER_FLAG_SET (src_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
} else {
- GST_BUFFER_FLAG_UNSET (src_buffer, GST_VIDEO_BUFFER_TFF);
+ GST_BUFFER_FLAG_UNSET (src_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
}
- GST_BUFFER_FLAG_UNSET (src_buffer, GST_VIDEO_BUFFER_RFF);
- GST_BUFFER_FLAG_UNSET (src_buffer, GST_VIDEO_BUFFER_ONEFIELD);
+ GST_BUFFER_FLAG_UNSET (src_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
+ GST_BUFFER_FLAG_UNSET (src_buffer, GST_VIDEO_BUFFER_FLAG_ONEFIELD);
if (frame->n_fields == 3) {
- GST_BUFFER_FLAG_SET (src_buffer, GST_VIDEO_BUFFER_RFF);
+ GST_BUFFER_FLAG_SET (src_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
} else if (frame->n_fields == 1) {
- GST_BUFFER_FLAG_SET (src_buffer, GST_VIDEO_BUFFER_ONEFIELD);
+ GST_BUFFER_FLAG_SET (src_buffer, GST_VIDEO_BUFFER_FLAG_ONEFIELD);
}
}
if (GST_BASE_VIDEO_CODEC (base_video_decoder)->discont) {
@@ -1605,7 +1593,7 @@ gst_base_video_decoder_finish_frame (GstBaseVideoDecoder * base_video_decoder,
/* update rate estimate */
GST_BASE_VIDEO_CODEC (base_video_decoder)->bytes +=
- GST_BUFFER_SIZE (src_buffer);
+ gst_buffer_get_size (src_buffer);
if (GST_CLOCK_TIME_IS_VALID (frame->presentation_duration)) {
GST_BASE_VIDEO_CODEC (base_video_decoder)->time +=
frame->presentation_duration;
@@ -1614,17 +1602,14 @@ gst_base_video_decoder_finish_frame (GstBaseVideoDecoder * base_video_decoder,
GST_BASE_VIDEO_CODEC (base_video_decoder)->time = GST_CLOCK_TIME_NONE;
}
- gst_buffer_set_caps (src_buffer,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_decoder)));
-
GST_LOG_OBJECT (base_video_decoder, "pushing frame ts %" GST_TIME_FORMAT
", duration %" GST_TIME_FORMAT,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (src_buffer)),
GST_TIME_ARGS (GST_BUFFER_DURATION (src_buffer)));
if (base_video_decoder->sink_clipping) {
- gint64 start = GST_BUFFER_TIMESTAMP (src_buffer);
- gint64 stop = GST_BUFFER_TIMESTAMP (src_buffer) +
+ guint64 start = GST_BUFFER_TIMESTAMP (src_buffer);
+ guint64 stop = GST_BUFFER_TIMESTAMP (src_buffer) +
GST_BUFFER_DURATION (src_buffer);
GstSegment *segment = &GST_BASE_VIDEO_CODEC (base_video_decoder)->segment;
@@ -1683,7 +1668,7 @@ done:
/**
* gst_base_video_decoder_finish_frame:
* @base_video_decoder: a #GstBaseVideoDecoder
- * @n_bytes: an encoded #GstVideoFrame
+ * @n_bytes: an encoded #GstVideoFrameState
*
* Removes next @n_bytes of input data and adds it to currently parsed frame.
*/
@@ -1817,7 +1802,7 @@ gst_base_video_decoder_have_frame (GstBaseVideoDecoder * base_video_decoder)
static GstFlowReturn
gst_base_video_decoder_have_frame_2 (GstBaseVideoDecoder * base_video_decoder)
{
- GstVideoFrame *frame = base_video_decoder->current_frame;
+ GstVideoFrameState *frame = base_video_decoder->current_frame;
GstBaseVideoDecoderClass *base_video_decoder_class;
GstFlowReturn ret = GST_FLOW_OK;
@@ -1847,8 +1832,8 @@ gst_base_video_decoder_have_frame_2 (GstBaseVideoDecoder * base_video_decoder)
GST_TIME_ARGS (frame->decode_timestamp));
GST_LOG_OBJECT (base_video_decoder, "dist %d", frame->distance_from_sync);
- GST_BASE_VIDEO_CODEC (base_video_decoder)->frames =
- g_list_append (GST_BASE_VIDEO_CODEC (base_video_decoder)->frames, frame);
+ gst_base_video_codec_append_frame (GST_BASE_VIDEO_CODEC (base_video_decoder),
+ frame);
frame->deadline =
gst_segment_to_running_time (&GST_BASE_VIDEO_CODEC
@@ -1856,6 +1841,7 @@ gst_base_video_decoder_have_frame_2 (GstBaseVideoDecoder * base_video_decoder)
frame->presentation_timestamp);
/* do something with frame */
+ GST_LOG_OBJECT (base_video_decoder, "Calling ::handle_frame()");
ret = base_video_decoder_class->handle_frame (base_video_decoder, frame);
if (ret != GST_FLOW_OK) {
GST_DEBUG_OBJECT (base_video_decoder, "flow error %s",
@@ -1930,9 +1916,9 @@ gst_base_video_decoder_set_sync_point (GstBaseVideoDecoder * base_video_decoder)
* gst_base_video_decoder_get_oldest_frame:
* @base_video_decoder: a #GstBaseVideoDecoder
*
- * Returns: oldest pending unfinished #GstVideoFrame.
+ * Returns: oldest pending unfinished #GstVideoFrameState.
*/
-GstVideoFrame *
+GstVideoFrameState *
gst_base_video_decoder_get_oldest_frame (GstBaseVideoDecoder *
base_video_decoder)
{
@@ -1944,7 +1930,7 @@ gst_base_video_decoder_get_oldest_frame (GstBaseVideoDecoder *
if (g == NULL)
return NULL;
- return (GstVideoFrame *) (g->data);
+ return (GstVideoFrameState *) (g->data);
}
/**
@@ -1952,19 +1938,19 @@ gst_base_video_decoder_get_oldest_frame (GstBaseVideoDecoder *
* @base_video_decoder: a #GstBaseVideoDecoder
* @frame_number: system_frame_number of a frame
*
- * Returns: pending unfinished #GstVideoFrame identified by @frame_number.
+ * Returns: pending unfinished #GstVideoFrameState identified by @frame_number.
*/
-GstVideoFrame *
+GstVideoFrameState *
gst_base_video_decoder_get_frame (GstBaseVideoDecoder * base_video_decoder,
int frame_number)
{
GList *g;
- GstVideoFrame *frame = NULL;
+ GstVideoFrameState *frame = NULL;
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
for (g = g_list_first (GST_BASE_VIDEO_CODEC (base_video_decoder)->frames);
g; g = g_list_next (g)) {
- GstVideoFrame *tmp = g->data;
+ GstVideoFrameState *tmp = g->data;
if (frame->system_frame_number == frame_number) {
frame = tmp;
@@ -1982,12 +1968,22 @@ gst_base_video_decoder_get_frame (GstBaseVideoDecoder * base_video_decoder,
*
* Sets src pad caps according to currently configured #GstVideoState.
*
+ * The #GstVideoInfo and #GstBufferPool will be created and negotiated
+ * according to those values.
+ *
+ * Returns: %TRUE if the format was properly negotiated, else %FALSE.
*/
gboolean
gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder * base_video_decoder)
{
GstCaps *caps;
- GstVideoState *state = &GST_BASE_VIDEO_CODEC (base_video_decoder)->state;
+ GstBaseVideoCodec *codec = GST_BASE_VIDEO_CODEC (base_video_decoder);
+ GstVideoState *state = &codec->state;
+ GstVideoInfo *info = &codec->info;
+ GstQuery *query;
+ GstBufferPool *pool = NULL;
+ GstStructure *config;
+ guint size, min, max, prefix, alignment;
gboolean ret;
/* minimum sense */
@@ -1997,6 +1993,8 @@ gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder * base_video_decoder)
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
+ gst_video_info_set_format (info, state->format, state->width, state->height);
+
/* sanitize */
if (state->fps_n == 0 || state->fps_d == 0) {
state->fps_n = 0;
@@ -2007,11 +2005,22 @@ gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder * base_video_decoder)
state->par_d = 1;
}
- caps = gst_video_format_new_caps (state->format,
- state->width, state->height,
- state->fps_n, state->fps_d, state->par_n, state->par_d);
- gst_caps_set_simple (caps, "interlaced",
- G_TYPE_BOOLEAN, state->interlaced, NULL);
+ info->par_n = state->par_n;
+ info->par_d = state->par_d;
+ info->fps_n = state->fps_n;
+ info->fps_d = state->fps_d;
+
+ if (state->have_interlaced) {
+ if (state->interlaced)
+ GST_VIDEO_INFO_FLAG_SET (info, GST_VIDEO_FLAG_INTERLACED);
+ if (state->top_field_first)
+ GST_VIDEO_INFO_FLAG_SET (info, GST_VIDEO_FLAG_TFF);
+ }
+
+ /* FIXME : Handle chroma site */
+ /* FIXME : Handle colorimetry */
+
+ caps = gst_video_info_to_caps (info);
GST_DEBUG_OBJECT (base_video_decoder, "setting caps %" GST_PTR_FORMAT, caps);
@@ -2020,9 +2029,50 @@ gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder * base_video_decoder)
caps);
gst_caps_unref (caps);
- /* arrange for derived info */
- state->bytes_per_picture =
- gst_video_format_get_size (state->format, state->width, state->height);
+ /* Negotiate pool */
+ query = gst_query_new_allocation (caps, TRUE);
+
+ if (gst_pad_peer_query (codec->srcpad, query)) {
+ GST_DEBUG_OBJECT (codec, "got downstream ALLOCATION hints");
+ /* we got configuration from our peer, parse them */
+ gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+ &alignment, &pool);
+ size = MAX (size, info->size);
+ } else {
+ GST_DEBUG_OBJECT (codec, "didn't get downstream ALLOCATION hints");
+ size = info->size;
+ min = max = 0;
+ prefix = 0;
+ alignment = 0;
+ }
+
+ if (pool == NULL) {
+ /* we did not get a pool, make one ourselves then */
+ pool = gst_buffer_pool_new ();
+ }
+
+ if (base_video_decoder->pool)
+ gst_object_unref (base_video_decoder->pool);
+ base_video_decoder->pool = pool;
+
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_set (config, caps, size, min, max, prefix, alignment);
+ state->bytes_per_picture = size;
+
+ /* just set the option, if the pool can support it we will transparently use
+ * it through the video info API. We could also see if the pool support this
+ * option and only activate it then. */
+ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+ /* check if downstream supports cropping */
+ base_video_decoder->use_cropping =
+ gst_query_has_allocation_meta (query, GST_VIDEO_CROP_META_API);
+
+ gst_buffer_pool_set_config (pool, config);
+ /* and activate */
+ gst_buffer_pool_set_active (pool, TRUE);
+
+ gst_query_unref (query);
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_decoder);
@@ -2033,9 +2083,8 @@ gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder * base_video_decoder)
* gst_base_video_decoder_alloc_src_buffer:
* @base_video_decoder: a #GstBaseVideoDecoder
*
- * Helper function that uses gst_pad_alloc_buffer_and_set_caps
- * to allocate a buffer to hold a video frame for @base_video_decoder's
- * current #GstVideoState.
+ * Helper function that returns a buffer from the decoders' configured
+ * #GstBufferPool.
*
* Returns: allocated buffer
*/
@@ -2043,36 +2092,21 @@ GstBuffer *
gst_base_video_decoder_alloc_src_buffer (GstBaseVideoDecoder *
base_video_decoder)
{
- GstBuffer *buffer;
- GstFlowReturn flow_ret;
- GstVideoState *state = &GST_BASE_VIDEO_CODEC (base_video_decoder)->state;
- int num_bytes = state->bytes_per_picture;
-
- GST_DEBUG ("alloc src buffer caps=%" GST_PTR_FORMAT,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_decoder)));
+ GstBuffer *buffer = NULL;
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
- flow_ret =
- gst_pad_alloc_buffer_and_set_caps (GST_BASE_VIDEO_CODEC_SRC_PAD
- (base_video_decoder), GST_BUFFER_OFFSET_NONE, num_bytes,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_decoder)),
- &buffer);
-
- if (flow_ret != GST_FLOW_OK) {
- buffer = gst_buffer_new_and_alloc (num_bytes);
- gst_buffer_set_caps (buffer,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_decoder)));
- }
+ gst_buffer_pool_acquire_buffer (base_video_decoder->pool, &buffer, NULL);
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_decoder);
+
return buffer;
}
/**
* gst_base_video_decoder_alloc_src_frame:
* @base_video_decoder: a #GstBaseVideoDecoder
- * @frame: a #GstVideoFrame
+ * @frame: a #GstVideoFrameState
*
* Helper function that uses gst_pad_alloc_buffer_and_set_caps
* to allocate a buffer to hold a video frame for @base_video_decoder's
@@ -2083,24 +2117,17 @@ gst_base_video_decoder_alloc_src_buffer (GstBaseVideoDecoder *
*/
GstFlowReturn
gst_base_video_decoder_alloc_src_frame (GstBaseVideoDecoder *
- base_video_decoder, GstVideoFrame * frame)
+ base_video_decoder, GstVideoFrameState * frame)
{
GstFlowReturn flow_ret;
- GstVideoState *state = &GST_BASE_VIDEO_CODEC (base_video_decoder)->state;
- int num_bytes = state->bytes_per_picture;
- g_return_val_if_fail (state->bytes_per_picture != 0, GST_FLOW_ERROR);
- g_return_val_if_fail (GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD
- (base_video_decoder)) != NULL, GST_FLOW_ERROR);
+ GST_LOG_OBJECT (base_video_decoder, "alloc buffer");
- GST_LOG_OBJECT (base_video_decoder, "alloc buffer size %d", num_bytes);
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_decoder);
flow_ret =
- gst_pad_alloc_buffer_and_set_caps (GST_BASE_VIDEO_CODEC_SRC_PAD
- (base_video_decoder), GST_BUFFER_OFFSET_NONE, num_bytes,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_decoder)),
- &frame->src_buffer);
+ gst_buffer_pool_acquire_buffer (base_video_decoder->pool,
+ &frame->src_buffer, NULL);
if (flow_ret != GST_FLOW_OK) {
GST_WARNING_OBJECT (base_video_decoder, "failed to get buffer %s",
@@ -2115,7 +2142,7 @@ gst_base_video_decoder_alloc_src_frame (GstBaseVideoDecoder *
/**
* gst_base_video_decoder_get_max_decode_time:
* @base_video_decoder: a #GstBaseVideoDecoder
- * @frame: a #GstVideoFrame
+ * @frame: a #GstVideoFrameState
*
* Determines maximum possible decoding time for @frame that will
* allow it to decode and arrive in time (as determined by QoS events).
@@ -2126,7 +2153,7 @@ gst_base_video_decoder_alloc_src_frame (GstBaseVideoDecoder *
*/
GstClockTimeDiff
gst_base_video_decoder_get_max_decode_time (GstBaseVideoDecoder *
- base_video_decoder, GstVideoFrame * frame)
+ base_video_decoder, GstVideoFrameState * frame)
{
GstClockTimeDiff deadline;
GstClockTime earliest_time;
diff --git a/gst-libs/gst/video/gstbasevideodecoder.h b/gst-libs/gst/video/gstbasevideodecoder.h
index a3b81fe44..891d02ba3 100644
--- a/gst-libs/gst/video/gstbasevideodecoder.h
+++ b/gst-libs/gst/video/gstbasevideodecoder.h
@@ -95,7 +95,7 @@ GstFlowReturn _gst_base_video_decoder_error (GstBaseVideoDecoder *dec, gint weig
* enclosed in parentheses)
* @ret: variable to receive return value
*
- * Utility function that audio decoder elements can use in case they encountered
+ * Utility function that video decoder elements can use in case they encountered
* a data processing error that may be fatal for the current "data unit" but
* need not prevent subsequent decoding. Such errors are counted and if there
* are too many, as configured in the context's max_errors, the pipeline will
@@ -104,7 +104,7 @@ GstFlowReturn _gst_base_video_decoder_error (GstBaseVideoDecoder *dec, gint weig
* is logged. In either case, @ret is set to the proper value to
* return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK).
*/
-#define GST_BASE_AUDIO_DECODER_ERROR(el, w, domain, code, text, debug, ret) \
+#define GST_BASE_VIDEO_DECODER_ERROR(el, w, domain, code, text, debug, ret) \
G_STMT_START { \
gchar *__txt = _gst_element_error_printf text; \
gchar *__dbg = _gst_element_error_printf debug; \
@@ -142,7 +142,7 @@ struct _GstBaseVideoDecoder
/* ... being tracked here;
* only available during parsing */
/* FIXME remove and add parameter to method */
- GstVideoFrame *current_frame;
+ GstVideoFrameState *current_frame;
/* events that should apply to the current frame */
GList *current_frame_events;
/* relative offset of input data */
@@ -182,6 +182,12 @@ struct _GstBaseVideoDecoder
int reorder_depth;
int distance_from_sync;
+ /* Raw video bufferpool */
+ GstBufferPool *pool;
+ /* Indicates whether downstream can handle
+ * GST_META_API_VIDEO_CROP */
+ gboolean use_cropping;
+
/* qos messages: frames dropped/processed */
guint dropped;
guint processed;
@@ -237,7 +243,7 @@ struct _GstBaseVideoDecoderClass
GstFlowReturn (*finish) (GstBaseVideoDecoder *coder);
- GstFlowReturn (*handle_frame) (GstBaseVideoDecoder *coder, GstVideoFrame *frame);
+ GstFlowReturn (*handle_frame) (GstBaseVideoDecoder *coder, GstVideoFrameState *frame);
/*< private >*/
@@ -251,9 +257,9 @@ struct _GstBaseVideoDecoderClass
void gst_base_video_decoder_class_set_capture_pattern (GstBaseVideoDecoderClass *klass,
guint32 mask, guint32 pattern);
-GstVideoFrame *gst_base_video_decoder_get_frame (GstBaseVideoDecoder *coder,
+GstVideoFrameState *gst_base_video_decoder_get_frame (GstBaseVideoDecoder *coder,
int frame_number);
-GstVideoFrame *gst_base_video_decoder_get_oldest_frame (GstBaseVideoDecoder *coder);
+GstVideoFrameState *gst_base_video_decoder_get_oldest_frame (GstBaseVideoDecoder *coder);
void gst_base_video_decoder_add_to_frame (GstBaseVideoDecoder *base_video_decoder,
int n_bytes);
@@ -264,15 +270,16 @@ void gst_base_video_decoder_set_sync_point (GstBaseVideoDecoder *bas
gboolean gst_base_video_decoder_set_src_caps (GstBaseVideoDecoder *base_video_decoder);
GstBuffer *gst_base_video_decoder_alloc_src_buffer (GstBaseVideoDecoder * base_video_decoder);
GstFlowReturn gst_base_video_decoder_alloc_src_frame (GstBaseVideoDecoder *base_video_decoder,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
GstVideoState *gst_base_video_decoder_get_state (GstBaseVideoDecoder *base_video_decoder);
GstClockTimeDiff gst_base_video_decoder_get_max_decode_time (
GstBaseVideoDecoder *base_video_decoder,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
GstFlowReturn gst_base_video_decoder_finish_frame (GstBaseVideoDecoder *base_video_decoder,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
GstFlowReturn gst_base_video_decoder_drop_frame (GstBaseVideoDecoder *dec,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
+
GType gst_base_video_decoder_get_type (void);
G_END_DECLS
diff --git a/gst-libs/gst/video/gstbasevideoencoder.c b/gst-libs/gst/video/gstbasevideoencoder.c
index e4fe35f59..f4b1ee2d1 100644
--- a/gst-libs/gst/video/gstbasevideoencoder.c
+++ b/gst-libs/gst/video/gstbasevideoencoder.c
@@ -143,45 +143,24 @@ forced_key_unit_event_new (GstClockTime running_time, gboolean all_headers,
static void gst_base_video_encoder_finalize (GObject * object);
-static gboolean gst_base_video_encoder_sink_setcaps (GstPad * pad,
- GstCaps * caps);
-static GstCaps *gst_base_video_encoder_sink_getcaps (GstPad * pad);
+static GstCaps *gst_base_video_encoder_sink_getcaps (GstPad * pad,
+ GstCaps * filter);
static gboolean gst_base_video_encoder_src_event (GstPad * pad,
- GstEvent * event);
+ GstObject * parent, GstEvent * event);
static gboolean gst_base_video_encoder_sink_event (GstPad * pad,
- GstEvent * event);
+ GstObject * parent, GstEvent * event);
+static gboolean gst_base_video_encoder_sink_query (GstPad * pad,
+ GstObject * parent, GstQuery * query);
static GstFlowReturn gst_base_video_encoder_chain (GstPad * pad,
- GstBuffer * buf);
+ GstObject * parent, GstBuffer * buf);
static GstStateChangeReturn gst_base_video_encoder_change_state (GstElement *
element, GstStateChange transition);
-static const GstQueryType *gst_base_video_encoder_get_query_types (GstPad *
- pad);
static gboolean gst_base_video_encoder_src_query (GstPad * pad,
- GstQuery * query);
+ GstObject * parent, GstQuery * query);
-static void
-_do_init (GType object_type)
-{
- const GInterfaceInfo preset_interface_info = {
- NULL, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- g_type_add_interface_static (object_type, GST_TYPE_PRESET,
- &preset_interface_info);
-}
-
-GST_BOILERPLATE_FULL (GstBaseVideoEncoder, gst_base_video_encoder,
- GstBaseVideoCodec, GST_TYPE_BASE_VIDEO_CODEC, _do_init);
-
-static void
-gst_base_video_encoder_base_init (gpointer g_class)
-{
- GST_DEBUG_CATEGORY_INIT (basevideoencoder_debug, "basevideoencoder", 0,
- "Base Video Encoder");
-
-}
+#define gst_base_video_encoder_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstBaseVideoEncoder, gst_base_video_encoder,
+ GST_TYPE_BASE_VIDEO_CODEC, G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL););
static void
gst_base_video_encoder_class_init (GstBaseVideoEncoderClass * klass)
@@ -189,6 +168,9 @@ gst_base_video_encoder_class_init (GstBaseVideoEncoderClass * klass)
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
+ GST_DEBUG_CATEGORY_INIT (basevideoencoder_debug, "basevideoencoder", 0,
+ "Base Video Encoder");
+
gobject_class = G_OBJECT_CLASS (klass);
gstelement_class = GST_ELEMENT_CLASS (klass);
@@ -226,8 +208,7 @@ gst_base_video_encoder_reset (GstBaseVideoEncoder * base_video_encoder)
}
static void
-gst_base_video_encoder_init (GstBaseVideoEncoder * base_video_encoder,
- GstBaseVideoEncoderClass * klass)
+gst_base_video_encoder_init (GstBaseVideoEncoder * base_video_encoder)
{
GstPad *pad;
@@ -239,15 +220,11 @@ gst_base_video_encoder_init (GstBaseVideoEncoder * base_video_encoder,
GST_DEBUG_FUNCPTR (gst_base_video_encoder_chain));
gst_pad_set_event_function (pad,
GST_DEBUG_FUNCPTR (gst_base_video_encoder_sink_event));
- gst_pad_set_setcaps_function (pad,
- GST_DEBUG_FUNCPTR (gst_base_video_encoder_sink_setcaps));
- gst_pad_set_getcaps_function (pad,
- GST_DEBUG_FUNCPTR (gst_base_video_encoder_sink_getcaps));
+ gst_pad_set_query_function (pad,
+ GST_DEBUG_FUNCPTR (gst_base_video_encoder_sink_query));
pad = GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder);
- gst_pad_set_query_type_function (pad,
- GST_DEBUG_FUNCPTR (gst_base_video_encoder_get_query_types));
gst_pad_set_query_function (pad,
GST_DEBUG_FUNCPTR (gst_base_video_encoder_src_query));
gst_pad_set_event_function (pad,
@@ -292,7 +269,7 @@ gst_base_video_encoder_drain (GstBaseVideoEncoder * enc)
/* everything should be away now */
if (codec->frames) {
/* not fatal/impossible though if subclass/codec eats stuff */
- g_list_foreach (codec->frames, (GFunc) gst_video_frame_unref, NULL);
+ g_list_foreach (codec->frames, (GFunc) gst_video_frame_state_unref, NULL);
g_list_free (codec->frames);
codec->frames = NULL;
}
@@ -301,70 +278,71 @@ gst_base_video_encoder_drain (GstBaseVideoEncoder * enc)
}
static gboolean
-gst_base_video_encoder_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_base_video_encoder_sink_setcaps (GstBaseVideoEncoder * base_video_encoder,
+ GstCaps * caps)
{
- GstBaseVideoEncoder *base_video_encoder;
GstBaseVideoEncoderClass *base_video_encoder_class;
- GstStructure *structure;
+ GstBaseVideoCodec *codec = GST_BASE_VIDEO_CODEC (base_video_encoder);
+ GstVideoInfo *info, tmp_info;
GstVideoState *state, tmp_state;
- gboolean ret;
- gboolean changed = FALSE;
+ gboolean ret = FALSE;
+ gboolean changed = TRUE;
+
+ GST_DEBUG_OBJECT (base_video_encoder, "setcaps %" GST_PTR_FORMAT, caps);
- base_video_encoder = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
base_video_encoder_class =
GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
/* subclass should do something here ... */
g_return_val_if_fail (base_video_encoder_class->set_format != NULL, FALSE);
- GST_DEBUG_OBJECT (base_video_encoder, "setcaps %" GST_PTR_FORMAT, caps);
-
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_encoder);
- state = &GST_BASE_VIDEO_CODEC (base_video_encoder)->state;
+ /* Get GstVideoInfo from upstream caps */
+ info = &codec->info;
+ if (!gst_video_info_from_caps (&tmp_info, caps))
+ goto exit;
+
+ state = &codec->state;
memset (&tmp_state, 0, sizeof (tmp_state));
tmp_state.caps = gst_caps_ref (caps);
- structure = gst_caps_get_structure (caps, 0);
-
- ret =
- gst_video_format_parse_caps (caps, &tmp_state.format, &tmp_state.width,
- &tmp_state.height);
- if (!ret)
- goto exit;
-
- changed = (tmp_state.format != state->format
- || tmp_state.width != state->width || tmp_state.height != state->height);
- if (!gst_video_parse_caps_framerate (caps, &tmp_state.fps_n,
- &tmp_state.fps_d)) {
- tmp_state.fps_n = 0;
- tmp_state.fps_d = 1;
+ /* Check if input caps changed */
+ if (info->finfo) {
+ /* Check if anything changed */
+ changed = GST_VIDEO_INFO_FORMAT (&tmp_info) != GST_VIDEO_INFO_FORMAT (info);
+ changed |= GST_VIDEO_INFO_FLAGS (&tmp_info) != GST_VIDEO_INFO_FLAGS (info);
+ changed |= GST_VIDEO_INFO_WIDTH (&tmp_info) != GST_VIDEO_INFO_WIDTH (info);
+ changed |=
+ GST_VIDEO_INFO_HEIGHT (&tmp_info) != GST_VIDEO_INFO_HEIGHT (info);
+ changed |= GST_VIDEO_INFO_SIZE (&tmp_info) != GST_VIDEO_INFO_SIZE (info);
+ changed |= GST_VIDEO_INFO_VIEWS (&tmp_info) != GST_VIDEO_INFO_VIEWS (info);
+ changed |= GST_VIDEO_INFO_FPS_N (&tmp_info) != GST_VIDEO_INFO_FPS_N (info);
+ changed |= GST_VIDEO_INFO_FPS_D (&tmp_info) != GST_VIDEO_INFO_FPS_D (info);
+ changed |= GST_VIDEO_INFO_PAR_N (&tmp_info) != GST_VIDEO_INFO_PAR_N (info);
+ changed |= GST_VIDEO_INFO_PAR_D (&tmp_info) != GST_VIDEO_INFO_PAR_D (info);
}
- changed = changed || (tmp_state.fps_n != state->fps_n
- || tmp_state.fps_d != state->fps_d);
- if (!gst_video_parse_caps_pixel_aspect_ratio (caps, &tmp_state.par_n,
- &tmp_state.par_d)) {
- tmp_state.par_n = 1;
- tmp_state.par_d = 1;
- }
- changed = changed || (tmp_state.par_n != state->par_n
- || tmp_state.par_d != state->par_d);
-
- tmp_state.have_interlaced =
- gst_structure_get_boolean (structure, "interlaced",
- &tmp_state.interlaced);
- changed = changed || (tmp_state.have_interlaced != state->have_interlaced
- || tmp_state.interlaced != state->interlaced);
-
- tmp_state.bytes_per_picture =
- gst_video_format_get_size (tmp_state.format, tmp_state.width,
- tmp_state.height);
- tmp_state.clean_width = tmp_state.width;
- tmp_state.clean_height = tmp_state.height;
+ /* Copy over info from input GstVideoInfo into output GstVideoFrameState */
+ tmp_state.format = GST_VIDEO_INFO_FORMAT (&tmp_info);
+ tmp_state.bytes_per_picture = tmp_info.size;
+ tmp_state.width = tmp_info.width;
+ tmp_state.height = tmp_info.height;
+ tmp_state.fps_n = tmp_info.fps_n;
+ tmp_state.fps_d = tmp_info.fps_d;
+ tmp_state.par_n = tmp_info.par_n;
+ tmp_state.par_d = tmp_info.par_d;
+ tmp_state.clean_width = tmp_info.width;
+ tmp_state.clean_height = tmp_info.height;
tmp_state.clean_offset_left = 0;
tmp_state.clean_offset_top = 0;
+ /* FIXME (Edward): We need flags in GstVideoInfo to know whether
+ * interlaced field was present in input caps */
+ tmp_state.have_interlaced = tmp_state.interlaced =
+ GST_VIDEO_INFO_FLAG_IS_SET (&tmp_info, GST_VIDEO_FLAG_INTERLACED);
+ tmp_state.top_field_first =
+ GST_VIDEO_INFO_FLAG_IS_SET (&tmp_info, GST_VIDEO_FLAG_TFF);
if (changed) {
/* arrange draining pending frames */
@@ -373,10 +351,11 @@ gst_base_video_encoder_sink_setcaps (GstPad * pad, GstCaps * caps)
/* and subclass should be ready to configure format at any time around */
if (base_video_encoder_class->set_format)
ret =
- base_video_encoder_class->set_format (base_video_encoder, &tmp_state);
+ base_video_encoder_class->set_format (base_video_encoder, &tmp_info);
if (ret) {
gst_caps_replace (&state->caps, NULL);
*state = tmp_state;
+ *info = tmp_info;
}
} else {
/* no need to stir things up */
@@ -394,13 +373,11 @@ exit:
caps);
}
- g_object_unref (base_video_encoder);
-
return ret;
}
static GstCaps *
-gst_base_video_encoder_sink_getcaps (GstPad * pad)
+gst_base_video_encoder_sink_getcaps (GstPad * pad, GstCaps * filter)
{
GstBaseVideoEncoder *base_video_encoder;
const GstCaps *templ_caps;
@@ -441,7 +418,7 @@ gst_base_video_encoder_sink_getcaps (GstPad * pad)
const GValue *val;
GstStructure *s;
- s = gst_structure_id_empty_new (q_name);
+ s = gst_structure_new_id_empty (q_name);
if ((val = gst_structure_get_value (allowed_s, "width")))
gst_structure_set_value (s, "width", val);
if ((val = gst_structure_get_value (allowed_s, "height")))
@@ -455,9 +432,20 @@ gst_base_video_encoder_sink_getcaps (GstPad * pad)
}
}
+ GST_LOG_OBJECT (base_video_encoder, "filtered caps (first) %" GST_PTR_FORMAT,
+ filter_caps);
+
fcaps = gst_caps_intersect (filter_caps, templ_caps);
gst_caps_unref (filter_caps);
+ if (filter) {
+ GST_LOG_OBJECT (base_video_encoder, "intersecting with %" GST_PTR_FORMAT,
+ filter);
+ filter_caps = gst_caps_intersect (fcaps, filter);
+ gst_caps_unref (fcaps);
+ fcaps = filter_caps;
+ }
+
done:
gst_caps_replace (&allowed, NULL);
@@ -468,14 +456,37 @@ done:
return fcaps;
}
+static gboolean
+gst_base_video_encoder_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
+{
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_base_video_encoder_sink_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+ return res;
+}
+
static void
gst_base_video_encoder_finalize (GObject * object)
{
- GstBaseVideoEncoder *base_video_encoder;
-
+ GstBaseVideoEncoder *base_video_encoder = (GstBaseVideoEncoder *) object;
GST_DEBUG_OBJECT (object, "finalize");
- base_video_encoder = GST_BASE_VIDEO_ENCODER (object);
gst_buffer_replace (&base_video_encoder->headers, NULL);
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -492,6 +503,15 @@ gst_base_video_encoder_sink_eventfunc (GstBaseVideoEncoder * base_video_encoder,
GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_base_video_encoder_sink_setcaps (base_video_encoder, caps);
+ gst_event_unref (event);
+ }
+ break;
case GST_EVENT_EOS:
{
GstFlowReturn flow_ret;
@@ -509,27 +529,20 @@ gst_base_video_encoder_sink_eventfunc (GstBaseVideoEncoder * base_video_encoder,
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_encoder);
break;
}
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- double rate;
- double applied_rate;
- GstFormat format;
- gint64 start;
- gint64 stop;
- gint64 position;
+ const GstSegment *segment;
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_encoder);
- gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate,
- &format, &start, &stop, &position);
+ gst_event_parse_segment (event, &segment);
GST_DEBUG_OBJECT (base_video_encoder, "newseg rate %g, applied rate %g, "
"format %d, start = %" GST_TIME_FORMAT ", stop = %" GST_TIME_FORMAT
- ", pos = %" GST_TIME_FORMAT, rate, applied_rate, format,
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop),
- GST_TIME_ARGS (position));
+ ", pos = %" GST_TIME_FORMAT, segment->rate, segment->applied_rate,
+ segment->format, GST_TIME_ARGS (segment->start),
+ GST_TIME_ARGS (segment->stop), GST_TIME_ARGS (segment->position));
- if (format != GST_FORMAT_TIME) {
+ if (segment->format != GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (base_video_encoder, "received non TIME newsegment");
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_encoder);
break;
@@ -537,9 +550,8 @@ gst_base_video_encoder_sink_eventfunc (GstBaseVideoEncoder * base_video_encoder,
base_video_encoder->at_eos = FALSE;
- gst_segment_set_newsegment_full (&GST_BASE_VIDEO_CODEC
- (base_video_encoder)->segment, update, rate, applied_rate, format,
- start, stop, position);
+ gst_segment_copy_into (segment, &GST_BASE_VIDEO_CODEC
+ (base_video_encoder)->segment);
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_encoder);
break;
}
@@ -578,14 +590,15 @@ gst_base_video_encoder_sink_eventfunc (GstBaseVideoEncoder * base_video_encoder,
}
static gboolean
-gst_base_video_encoder_sink_event (GstPad * pad, GstEvent * event)
+gst_base_video_encoder_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
GstBaseVideoEncoder *enc;
GstBaseVideoEncoderClass *klass;
gboolean handled = FALSE;
gboolean ret = TRUE;
- enc = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
+ enc = GST_BASE_VIDEO_ENCODER (parent);
klass = GST_BASE_VIDEO_ENCODER_GET_CLASS (enc);
GST_DEBUG_OBJECT (enc, "received event %d, %s", GST_EVENT_TYPE (event),
@@ -623,17 +636,17 @@ gst_base_video_encoder_sink_event (GstPad * pad, GstEvent * event)
GST_DEBUG_OBJECT (enc, "event handled");
- gst_object_unref (enc);
return ret;
}
static gboolean
-gst_base_video_encoder_src_event (GstPad * pad, GstEvent * event)
+gst_base_video_encoder_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
GstBaseVideoEncoder *base_video_encoder;
gboolean ret = FALSE;
- base_video_encoder = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
+ base_video_encoder = GST_BASE_VIDEO_ENCODER (parent);
GST_LOG_OBJECT (base_video_encoder, "handling event: %" GST_PTR_FORMAT,
event);
@@ -677,31 +690,17 @@ gst_base_video_encoder_src_event (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (base_video_encoder);
return ret;
}
-static const GstQueryType *
-gst_base_video_encoder_get_query_types (GstPad * pad)
-{
- static const GstQueryType query_types[] = {
- GST_QUERY_CONVERT,
- GST_QUERY_LATENCY,
- 0
- };
-
- return query_types;
-}
-
static gboolean
-gst_base_video_encoder_src_query (GstPad * pad, GstQuery * query)
+gst_base_video_encoder_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
GstBaseVideoEncoder *enc;
gboolean res;
- GstPad *peerpad;
- enc = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
- peerpad = gst_pad_get_peer (GST_BASE_VIDEO_CODEC_SINK_PAD (enc));
+ enc = GST_BASE_VIDEO_ENCODER (parent);
GST_LOG_OBJECT (enc, "handling query: %" GST_PTR_FORMAT, query);
@@ -725,7 +724,7 @@ gst_base_video_encoder_src_query (GstPad * pad, GstQuery * query)
gboolean live;
GstClockTime min_latency, max_latency;
- res = gst_pad_query (peerpad, query);
+ res = gst_pad_peer_query (GST_BASE_VIDEO_CODEC_SINK_PAD (enc), query);
if (res) {
gst_query_parse_latency (query, &live, &min_latency, &max_latency);
GST_DEBUG_OBJECT (enc, "Peer latency: live %d, min %"
@@ -744,42 +743,36 @@ gst_base_video_encoder_src_query (GstPad * pad, GstQuery * query)
}
break;
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
}
- gst_object_unref (peerpad);
- gst_object_unref (enc);
return res;
+ /* ERRORS */
error:
- GST_DEBUG_OBJECT (enc, "query failed");
- gst_object_unref (peerpad);
- gst_object_unref (enc);
- return res;
+ {
+ GST_DEBUG_OBJECT (enc, "query failed");
+ return res;
+ }
}
static GstFlowReturn
-gst_base_video_encoder_chain (GstPad * pad, GstBuffer * buf)
+gst_base_video_encoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
GstBaseVideoEncoder *base_video_encoder;
GstBaseVideoEncoderClass *klass;
- GstVideoFrame *frame;
+ GstVideoFrameState *frame;
GstFlowReturn ret = GST_FLOW_OK;
- base_video_encoder = GST_BASE_VIDEO_ENCODER (gst_pad_get_parent (pad));
+ base_video_encoder = GST_BASE_VIDEO_ENCODER (parent);
klass = GST_BASE_VIDEO_ENCODER_GET_CLASS (base_video_encoder);
g_return_val_if_fail (klass->handle_frame != NULL, GST_FLOW_ERROR);
GST_BASE_VIDEO_CODEC_STREAM_LOCK (base_video_encoder);
- if (!GST_PAD_CAPS (pad)) {
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto done;
- }
-
GST_LOG_OBJECT (base_video_encoder,
- "received buffer of size %d with ts %" GST_TIME_FORMAT
- ", duration %" GST_TIME_FORMAT, GST_BUFFER_SIZE (buf),
+ "received buffer of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT
+ ", duration %" GST_TIME_FORMAT, gst_buffer_get_size (buf),
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
@@ -789,10 +782,10 @@ gst_base_video_encoder_chain (GstPad * pad, GstBuffer * buf)
}
if (base_video_encoder->sink_clipping) {
- gint64 start = GST_BUFFER_TIMESTAMP (buf);
- gint64 stop = start + GST_BUFFER_DURATION (buf);
- gint64 clip_start;
- gint64 clip_stop;
+ guint64 start = GST_BUFFER_TIMESTAMP (buf);
+ guint64 stop = start + GST_BUFFER_DURATION (buf);
+ guint64 clip_start;
+ guint64 clip_stop;
if (!gst_segment_clip (&GST_BASE_VIDEO_CODEC (base_video_encoder)->segment,
GST_FORMAT_TIME, start, stop, &clip_start, &clip_stop)) {
@@ -874,8 +867,6 @@ gst_base_video_encoder_chain (GstPad * pad, GstBuffer * buf)
done:
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_encoder);
- g_object_unref (base_video_encoder);
-
return ret;
}
@@ -930,7 +921,7 @@ stop_error:
/**
* gst_base_video_encoder_finish_frame:
* @base_video_encoder: a #GstBaseVideoEncoder
- * @frame: an encoded #GstVideoFrame
+ * @frame: an encoded #GstVideoFrameState
*
* @frame must have a valid encoded data buffer, whose metadata fields
* are then appropriately set according to frame data or no buffer at
@@ -942,7 +933,7 @@ stop_error:
*/
GstFlowReturn
gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
- GstVideoFrame * frame)
+ GstVideoFrameState * frame)
{
GstFlowReturn ret = GST_FLOW_OK;
GstBaseVideoEncoderClass *base_video_encoder_class;
@@ -959,7 +950,7 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
/* Push all pending events that arrived before this frame */
for (l = base_video_encoder->base_video_codec.frames; l; l = l->next) {
- GstVideoFrame *tmp = l->data;
+ GstVideoFrameState *tmp = l->data;
if (tmp->events) {
GList *k;
@@ -992,6 +983,8 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
(base_video_encoder)->segment, GST_FORMAT_TIME,
frame->presentation_timestamp);
+ /* re-use upstream event if any so it also conveys any additional
+ * info upstream arranged in there */
GST_OBJECT_LOCK (base_video_encoder);
for (l = base_video_encoder->force_key_unit; l; l = l->next) {
ForcedKeyUnitEvent *tmp = l->data;
@@ -1035,7 +1028,7 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
if (fevt->all_headers) {
if (base_video_encoder->headers) {
headers = gst_buffer_ref (base_video_encoder->headers);
- headers = gst_buffer_make_metadata_writable (headers);
+ headers = gst_buffer_make_writable (headers);
}
}
@@ -1048,6 +1041,7 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
}
if (frame->is_sync_point) {
+ GST_LOG_OBJECT (base_video_encoder, "key frame");
base_video_encoder->distance_from_sync = 0;
GST_BUFFER_FLAG_UNSET (frame->src_buffer, GST_BUFFER_FLAG_DELTA_UNIT);
} else {
@@ -1078,7 +1072,7 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
/* update rate estimate */
GST_BASE_VIDEO_CODEC (base_video_encoder)->bytes +=
- GST_BUFFER_SIZE (frame->src_buffer);
+ gst_buffer_get_size (frame->src_buffer);
if (GST_CLOCK_TIME_IS_VALID (frame->presentation_duration)) {
GST_BASE_VIDEO_CODEC (base_video_encoder)->time +=
frame->presentation_duration;
@@ -1093,15 +1087,6 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder,
GST_BASE_VIDEO_CODEC (base_video_encoder)->discont = FALSE;
}
- gst_buffer_set_caps (GST_BUFFER (frame->src_buffer),
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder)));
-
- if (G_UNLIKELY (headers)) {
- gst_buffer_set_caps (headers,
- GST_PAD_CAPS (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder)));
- gst_pad_push (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder), headers);
- }
-
if (base_video_encoder_class->shape_output) {
ret = base_video_encoder_class->shape_output (base_video_encoder, frame);
} else {
@@ -1116,7 +1101,7 @@ done:
GST_BASE_VIDEO_CODEC (base_video_encoder)->frames =
g_list_remove (GST_BASE_VIDEO_CODEC (base_video_encoder)->frames, frame);
- gst_video_frame_unref (frame);
+ gst_video_frame_state_unref (frame);
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (base_video_encoder);
@@ -1189,9 +1174,9 @@ gst_base_video_encoder_set_latency_fields (GstBaseVideoEncoder *
* gst_base_video_encoder_get_oldest_frame:
* @base_video_encoder: a #GstBaseVideoEncoder
*
- * Returns: oldest unfinished pending #GstVideoFrame
+ * Returns: oldest unfinished pending #GstVideoFrameState
*/
-GstVideoFrame *
+GstVideoFrameState *
gst_base_video_encoder_get_oldest_frame (GstBaseVideoEncoder *
base_video_encoder)
{
@@ -1203,7 +1188,7 @@ gst_base_video_encoder_get_oldest_frame (GstBaseVideoEncoder *
if (g == NULL)
return NULL;
- return (GstVideoFrame *) (g->data);
+ return (GstVideoFrameState *) (g->data);
}
/* FIXME there could probably be more of these;
diff --git a/gst-libs/gst/video/gstbasevideoencoder.h b/gst-libs/gst/video/gstbasevideoencoder.h
index 6e2aa7095..547d0ac2d 100644
--- a/gst-libs/gst/video/gstbasevideoencoder.h
+++ b/gst-libs/gst/video/gstbasevideoencoder.h
@@ -112,7 +112,7 @@ struct _GstBaseVideoEncoder
* Allows closing external resources.
* @set_format: Optional.
* Notifies subclass of incoming data format.
- * GstVideoState fields have already been
+ * GstVideoInfo fields have already been
* set according to provided caps.
* @handle_frame: Provides input frame to subclass.
* @finish: Optional.
@@ -143,16 +143,16 @@ struct _GstBaseVideoEncoderClass
gboolean (*stop) (GstBaseVideoEncoder *coder);
gboolean (*set_format) (GstBaseVideoEncoder *coder,
- GstVideoState *state);
+ GstVideoInfo *info);
GstFlowReturn (*handle_frame) (GstBaseVideoEncoder *coder,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
gboolean (*reset) (GstBaseVideoEncoder *coder);
GstFlowReturn (*finish) (GstBaseVideoEncoder *coder);
GstFlowReturn (*shape_output) (GstBaseVideoEncoder *coder,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
gboolean (*event) (GstBaseVideoEncoder *coder,
GstEvent *event);
@@ -166,9 +166,9 @@ GType gst_base_video_encoder_get_type (void);
const GstVideoState* gst_base_video_encoder_get_state (GstBaseVideoEncoder *coder);
-GstVideoFrame* gst_base_video_encoder_get_oldest_frame (GstBaseVideoEncoder *coder);
+GstVideoFrameState* gst_base_video_encoder_get_oldest_frame (GstBaseVideoEncoder *coder);
GstFlowReturn gst_base_video_encoder_finish_frame (GstBaseVideoEncoder *base_video_encoder,
- GstVideoFrame *frame);
+ GstVideoFrameState *frame);
void gst_base_video_encoder_set_latency (GstBaseVideoEncoder *base_video_encoder,
GstClockTime min_latency, GstClockTime max_latency);
diff --git a/gst-libs/gst/video/gstsurfacebuffer.h b/gst-libs/gst/video/gstsurfacebuffer.h
deleted file mode 100644
index 6ce660572..000000000
--- a/gst-libs/gst/video/gstsurfacebuffer.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 Collabora Ltd.
- * Copyright (C) 2011 Intel
- *
- * Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef _GST_SURFACE_BUFFER_H_
-#define _GST_SURFACE_BUFFER_H_
-
-#ifndef GST_USE_UNSTABLE_API
-#warning "GstSurfaceBuffer is unstable API and may change in future."
-#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
-#endif
-
-#include <gst/gst.h>
-#include <gst/video/gstsurfaceconverter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SURFACE_BUFFER (gst_surface_buffer_get_type())
-#define GST_SURFACE_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SURFACE_BUFFER,GstSurfaceBuffer))
-#define GST_SURFACE_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SURFACE_BUFFER,GstSurfaceBufferClass))
-#define GST_SURFACE_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_SURFACE_BUFFER,GstSurfaceBufferClass))
-#define GST_IS_SURFACE_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SURFACE_BUFFER))
-#define GST_IS_SURFACE_BUFFER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SURFACE_BUFFER))
-
-/**
- * GST_VIDEO_CAPS_SURFACE:
- *
- * Base caps for GstSurfaceBuffer. Implementation specific type must be marked
- * using the type attribute (e.g. type=vaapi). Available convertion shall be
- * specified using boolean attributes (e.g. opengl=true).
- */
-#define GST_VIDEO_CAPS_SURFACE "video/x-surface"
-
-typedef struct _GstSurfaceBufferClass GstSurfaceBufferClass;
-
-/**
- * GstSurfaceBuffer:
- * @parent: parent object
- */
-struct _GstSurfaceBuffer
-{
- GstBuffer parent;
-
- /*< private >*/
- void *padding[GST_PADDING];
-};
-
-/**
- * GstSurfaceBufferClass:
- * @parent_class: parent class type.
- * @create_converter: vmethod to create a converter.
- *
- * #GstVideoContextInterface interface.
- */
-struct _GstSurfaceBufferClass
-{
- GstBufferClass parent_class;
-
- GstSurfaceConverter * (*create_converter) (GstSurfaceBuffer *buffer,
- const gchar *type,
- GValue *dest);
-
- /*< private >*/
- void *padding[GST_PADDING];
-};
-
-GType gst_surface_buffer_get_type (void);
-
-GstSurfaceConverter *gst_surface_buffer_create_converter (GstSurfaceBuffer *buffer,
- const gchar *type,
- GValue *dest);
-
-G_END_DECLS
-
-#endif
diff --git a/gst-libs/gst/video/gstsurfaceconverter.c b/gst-libs/gst/video/gstsurfaceconverter.c
index c482ff12e..23fc5dd44 100644
--- a/gst-libs/gst/video/gstsurfaceconverter.c
+++ b/gst-libs/gst/video/gstsurfaceconverter.c
@@ -25,7 +25,7 @@
#endif
#include "gstsurfaceconverter.h"
-#include "gstsurfacebuffer.h"
+#include "gstsurfacemeta.h"
/**
* SECTION:gstsurfaceconverter
@@ -63,7 +63,7 @@ gst_surface_converter_default_init (GstSurfaceConverterInterface * iface)
/**
* gst_surface_converter_upload:
* @converter: a #GstSurfaceConverter
- * @buffer: the #GstSurfaceBuffer to upload
+ * @buffer: the #GstBuffer to upload
*
* Convert and uploads the #GstSurfaceBuffer to the converter destination.
*
@@ -71,10 +71,10 @@ gst_surface_converter_default_init (GstSurfaceConverterInterface * iface)
*/
gboolean
gst_surface_converter_upload (GstSurfaceConverter * converter,
- GstSurfaceBuffer * buffer)
+ GstBuffer * buffer)
{
g_return_val_if_fail (GST_IS_SURFACE_CONVERTER (converter), FALSE);
- g_return_val_if_fail (GST_IS_SURFACE_BUFFER (buffer), FALSE);
+ g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
return GST_SURFACE_CONVERTER_GET_IFACE (converter)->upload (converter,
buffer);
}
diff --git a/gst-libs/gst/video/gstsurfaceconverter.h b/gst-libs/gst/video/gstsurfaceconverter.h
index c8fdcc804..702494498 100644
--- a/gst-libs/gst/video/gstsurfaceconverter.h
+++ b/gst-libs/gst/video/gstsurfaceconverter.h
@@ -32,12 +32,9 @@
G_BEGIN_DECLS
-/* Forward declaration from gstsurfacebuffer.h */
-typedef struct _GstSurfaceBuffer GstSurfaceBuffer;
-
#define GST_TYPE_SURFACE_CONVERTER (gst_surface_converter_get_type ())
-#define GST_SURFACE_CONVERTER(obj) (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverter))
-#define GST_IS_SURFACE_CONVERTER(obj) (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SURFACE_CONVERTER))
+#define GST_SURFACE_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverter))
+#define GST_IS_SURFACE_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SURFACE_CONVERTER))
#define GST_SURFACE_CONVERTER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_SURFACE_CONVERTER, GstSurfaceConverterInterface))
typedef struct _GstSurfaceConverter GstSurfaceConverter;
@@ -55,13 +52,13 @@ struct _GstSurfaceConverterInterface
GTypeInterface parent;
gboolean (*upload) (GstSurfaceConverter *converter,
- GstSurfaceBuffer *buffer);
+ GstBuffer *buffer);
};
GType gst_surface_converter_get_type (void);
gboolean gst_surface_converter_upload (GstSurfaceConverter *converter,
- GstSurfaceBuffer *buffer);
+ GstBuffer *buffer);
G_END_DECLS
diff --git a/gst-libs/gst/video/gstsurfacebuffer.c b/gst-libs/gst/video/gstsurfacemeta.c
index 61bf4eeba..399e649e7 100644
--- a/gst-libs/gst/video/gstsurfacebuffer.c
+++ b/gst-libs/gst/video/gstsurfacemeta.c
@@ -24,13 +24,13 @@
#include "config.h"
#endif
-#include "gstsurfacebuffer.h"
+#include "gstsurfacemeta.h"
/**
- * SECTION:gstsurfacebuffer
- * @short_description: Accelerated surface base class
+ * SECTION:gstsurfacemeta
+ * @short_description: Accelerated surface metadata
*
- * This base class is used to abstract hardware accelerated buffers and enable
+ * This meta data is used to abstract hardware accelerated buffers and enable
* generic convertion to standard type such as GL textures. The media type for
* those buffers is defined by #GST_VIDEO_CAPS_SURFACE. An implementation
* specific type must be set using the "type" key (e.g. type="vaapi").
@@ -44,30 +44,25 @@
* </note>
*/
-G_DEFINE_TYPE (GstSurfaceBuffer, gst_surface_buffer, GST_TYPE_BUFFER);
-static GstSurfaceConverter *
-gst_surface_buffer_default_create_converter (GstSurfaceBuffer * surface,
- const gchar * type, GValue * dest)
+const GstMetaInfo *
+gst_surface_meta_get_info (void)
{
- return NULL;
-}
+ static const GstMetaInfo *meta_info = NULL;
-static void
-gst_surface_buffer_class_init (GstSurfaceBufferClass * klass)
-{
- klass->create_converter = gst_surface_buffer_default_create_converter;
-}
-
-static void
-gst_surface_buffer_init (GstSurfaceBuffer * surface)
-{
- /* Nothing to do */
+ if (meta_info == NULL) {
+ meta_info = gst_meta_register ("GstSurfaceMeta", "GstSurfaceMeta",
+ sizeof (GstSurfaceMeta),
+ (GstMetaInitFunction) NULL,
+ (GstMetaFreeFunction) NULL,
+ (GstMetaCopyFunction) NULL, (GstMetaTransformFunction) NULL);
+ }
+ return meta_info;
}
/**
- * gst_surface_buffer_create_converter:
- * @buffer: a #GstSurfaceBuffer
+ * gst_surface_meta_create_converter:
+ * @meta: a #GstSurfaceMeta
* @type: the type to convert to
* @dest: a #GValue containing the destination to upload
*
@@ -79,10 +74,10 @@ gst_surface_buffer_init (GstSurfaceBuffer * surface)
* Returns: newly allocated #GstSurfaceConverter
*/
GstSurfaceConverter *
-gst_surface_buffer_create_converter (GstSurfaceBuffer * buffer,
+gst_surface_meta_create_converter (GstSurfaceMeta * meta,
const gchar * type, GValue * dest)
{
- g_return_val_if_fail (GST_IS_SURFACE_BUFFER (buffer), FALSE);
- return GST_SURFACE_BUFFER_GET_CLASS (buffer)->create_converter (buffer,
- type, dest);
+ g_return_val_if_fail (meta != NULL, FALSE);
+
+ return meta->create_converter (meta, type, dest);
}
diff --git a/gst-libs/gst/video/gstsurfacemeta.h b/gst-libs/gst/video/gstsurfacemeta.h
new file mode 100644
index 000000000..8ff26cdfb
--- /dev/null
+++ b/gst-libs/gst/video/gstsurfacemeta.h
@@ -0,0 +1,65 @@
+/* GStreamer
+ * Copyright (C) 2011 Collabora Ltd.
+ * Copyright (C) 2011 Intel
+ *
+ * Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GST_SURFACE_META_H_
+#define _GST_SURFACE_META_H_
+
+#ifndef GST_USE_UNSTABLE_API
+#warning "GstSurfaceBuffer is unstable API and may change in future."
+#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
+#endif
+
+#include <gst/gst.h>
+#include <gst/video/gstsurfaceconverter.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstSurfaceMeta GstSurfaceMeta;
+
+/**
+ * GstSurfaceMeta:
+ * @create_converter: vmethod to create a converter.
+ *
+ */
+struct _GstSurfaceMeta {
+ GstMeta meta;
+
+ GstSurfaceConverter * (*create_converter) (GstSurfaceMeta *meta,
+ const gchar *type,
+ GValue *dest);
+};
+
+const GstMetaInfo *gst_surface_meta_get_info (void);
+#define GST_SURFACE_META_INFO (gst_surface_meta_get_info())
+
+#define gst_buffer_get_surface_meta(b) \
+ ((GstSurfaceMeta*)gst_buffer_get_meta((b),GST_SURFACE_META_INFO))
+#define gst_buffer_add_surface_meta(b) \
+ ((GstSurfaceMeta*)gst_buffer_add_meta((b),GST_SURFACE_META_INFO,NULL))
+
+GstSurfaceConverter *gst_surface_meta_create_converter (GstSurfaceMeta *meta,
+ const gchar *type,
+ GValue *dest);
+
+G_END_DECLS
+
+#endif
diff --git a/gst-libs/gst/video/videocontext.c b/gst-libs/gst/video/videocontext.c
index a5458a2e2..489cf06a7 100644
--- a/gst-libs/gst/video/videocontext.c
+++ b/gst-libs/gst/video/videocontext.c
@@ -184,9 +184,10 @@ gst_video_context_new_structure (const gchar ** types)
}
static gboolean
-gst_video_context_pad_query (gpointer item, GValue * value, gpointer user_data)
+gst_video_context_pad_query (const GValue * item, GValue * value,
+ gpointer user_data)
{
- GstPad *pad = GST_PAD (item);
+ GstPad *pad = g_value_get_object (item);
GstQuery *query = user_data;
gboolean res;
@@ -353,7 +354,7 @@ gst_video_context_message_parse_prepare (GstMessage * message,
if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
return FALSE;
- if (!gst_structure_has_name (message->structure, "prepare-video-context"))
+ if (!gst_message_has_name (message, "prepare-video-context"))
return FALSE;
if (!GST_IS_VIDEO_CONTEXT (src))
@@ -384,7 +385,7 @@ GstQuery *
gst_video_context_query_new (const gchar ** types)
{
GstStructure *structure = gst_video_context_new_structure (types);
- return gst_query_new_application (GST_QUERY_CUSTOM, structure);
+ return gst_query_new_custom (GST_QUERY_CUSTOM, structure);
}
/**
@@ -440,7 +441,7 @@ gst_video_context_run_query (GstElement * element, GstQuery * query)
const gchar **
gst_video_context_query_get_supported_types (GstQuery * query)
{
- GstStructure *structure = gst_query_get_structure (query);
+ const GstStructure *structure = gst_query_get_structure (query);
const GValue *value = gst_structure_get_value (structure, "types");
if (G_VALUE_HOLDS (value, G_TYPE_STRV))
@@ -461,7 +462,7 @@ void
gst_video_context_query_parse_value (GstQuery * query, const gchar ** type,
const GValue ** value)
{
- GstStructure *structure = gst_query_get_structure (query);
+ const GstStructure *structure = gst_query_get_structure (query);
if (type)
*type = gst_structure_get_string (structure, "video-context-type");
@@ -482,7 +483,7 @@ void
gst_video_context_query_set_value (GstQuery * query, const gchar * type,
GValue * value)
{
- GstStructure *structure = gst_query_get_structure (query);
+ GstStructure *structure = gst_query_writable_structure (query);
gst_structure_set (structure, "video-context-type", G_TYPE_STRING, type,
"video-context", G_TYPE_VALUE, value, NULL);
}
@@ -499,7 +500,7 @@ void
gst_video_context_query_set_string (GstQuery * query, const gchar * type,
const gchar * value)
{
- GstStructure *structure = gst_query_get_structure (query);
+ GstStructure *structure = gst_query_writable_structure (query);
gst_structure_set (structure, "video-context-type", G_TYPE_STRING, type,
"video-context", G_TYPE_STRING, value, NULL);
}
@@ -516,7 +517,7 @@ void
gst_video_context_query_set_pointer (GstQuery * query, const gchar * type,
gpointer value)
{
- GstStructure *structure = gst_query_get_structure (query);
+ GstStructure *structure = gst_query_writable_structure (query);
gst_structure_set (structure, "video-context-type", G_TYPE_STRING, type,
"video-context", G_TYPE_POINTER, value, NULL);
}
@@ -533,7 +534,7 @@ void
gst_video_context_query_set_object (GstQuery * query, const gchar * type,
GObject * value)
{
- GstStructure *structure = gst_query_get_structure (query);
+ GstStructure *structure = gst_query_writable_structure (query);
gst_structure_set (structure, "video-context-type", G_TYPE_STRING, type,
"video-context", G_TYPE_OBJECT, value, NULL);
}
diff --git a/gst-libs/gst/video/videocontext.h b/gst-libs/gst/video/videocontext.h
index 5becb5616..98d4b5423 100644
--- a/gst-libs/gst/video/videocontext.h
+++ b/gst-libs/gst/video/videocontext.h
@@ -36,8 +36,8 @@
G_BEGIN_DECLS
#define GST_TYPE_VIDEO_CONTEXT (gst_video_context_iface_get_type ())
-#define GST_VIDEO_CONTEXT(obj) (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_CONTEXT, GstVideoContext))
-#define GST_IS_VIDEO_CONTEXT(obj) (GST_IMPLEMENTS_INTERFACE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_CONTEXT))
+#define GST_VIDEO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_CONTEXT, GstVideoContext))
+#define GST_IS_VIDEO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_CONTEXT))
#define GST_VIDEO_CONTEXT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_CONTEXT, GstVideoContextInterface))
/**
diff --git a/gst/adpcmdec/adpcmdec.c b/gst/adpcmdec/adpcmdec.c
index b97584cb9..0fcfeb03f 100644
--- a/gst/adpcmdec/adpcmdec.c
+++ b/gst/adpcmdec/adpcmdec.c
@@ -562,10 +562,10 @@ adpcmdec_class_init (ADPCMDecClass * klass)
adpcmdec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &adpcmdec_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &adpcmdec_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&adpcmdec_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&adpcmdec_src_template));
gst_element_class_set_details_simple (element_class, "ADPCM decoder",
"Codec/Decoder/Audio",
"Decode MS and IMA ADPCM audio",
diff --git a/gst/adpcmenc/adpcmenc.c b/gst/adpcmenc/adpcmenc.c
index d8ce1db49..5f6a24424 100644
--- a/gst/adpcmenc/adpcmenc.c
+++ b/gst/adpcmenc/adpcmenc.c
@@ -544,10 +544,10 @@ adpcmenc_class_init (ADPCMEncClass * klass)
adpcmenc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &adpcmenc_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &adpcmenc_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&adpcmenc_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&adpcmenc_src_template));
gst_element_class_set_details_simple (element_class, "ADPCM encoder",
"Codec/Encoder/Audio",
"Encode ADPCM audio",
diff --git a/gst/aiff/aiffmux.c b/gst/aiff/aiffmux.c
index 0d2772af5..a2d99f587 100644
--- a/gst/aiff/aiffmux.c
+++ b/gst/aiff/aiffmux.c
@@ -110,8 +110,10 @@ gst_aiff_mux_base_init (gpointer gclass)
"AIFF audio muxer", "Muxer/Audio", "Multiplex raw audio into AIFF",
"Robert Swain <robert.swain@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
static GstStateChangeReturn
diff --git a/gst/aiff/aiffparse.c b/gst/aiff/aiffparse.c
index 6dbee6868..575b309b5 100644
--- a/gst/aiff/aiffparse.c
+++ b/gst/aiff/aiffparse.c
@@ -105,10 +105,10 @@ gst_aiff_parse_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &src_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template_factory));
gst_element_class_set_details_simple (element_class,
"AIFF audio demuxer", "Codec/Demuxer/Audio",
diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c
index 44f7f1625..e7184f601 100644
--- a/gst/asfmux/gstasfmux.c
+++ b/gst/asfmux/gstasfmux.c
@@ -136,13 +136,13 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
);
static GstStaticPadTemplate video_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("video_%d",
+GST_STATIC_PAD_TEMPLATE ("video_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/x-wmv, wmvversion = (int) [1,3]"));
static GstStaticPadTemplate audio_sink_factory =
- GST_STATIC_PAD_TEMPLATE ("audio_%d",
+ GST_STATIC_PAD_TEMPLATE ("audio_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("audio/x-wma, wmaversion = (int) [1,3]; "
@@ -165,7 +165,7 @@ static GstStateChangeReturn gst_asf_mux_change_state (GstElement * element,
static gboolean gst_asf_mux_sink_event (GstPad * pad, GstEvent * event);
static void gst_asf_mux_pad_reset (GstAsfPad * data);
-static GstFlowReturn gst_asf_mux_collected (GstCollectPads2 * collect,
+static GstFlowReturn gst_asf_mux_collected (GstCollectPads * collect,
gpointer data);
static GstElementClass *parent_class = NULL;
@@ -238,11 +238,12 @@ gst_asf_mux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &audio_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_factory));
gst_element_class_set_details_simple (element_class, "ASF muxer",
"Codec/Muxer",
diff --git a/gst/asfmux/gstasfparse.c b/gst/asfmux/gstasfparse.c
index 4f7bc59ba..ab1f69152 100644
--- a/gst/asfmux/gstasfparse.c
+++ b/gst/asfmux/gstasfparse.c
@@ -469,8 +469,10 @@ gst_asf_parse_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "ASF parser",
"Parser", "Parses ASF", "Thiago Santos <thiagoss@embedded.ufcg.edu.br>");
diff --git a/gst/asfmux/gstrtpasfpay.c b/gst/asfmux/gstrtpasfpay.c
index 22ad431e3..157533f92 100644
--- a/gst/asfmux/gstrtpasfpay.c
+++ b/gst/asfmux/gstrtpasfpay.c
@@ -85,10 +85,10 @@ gst_rtp_asf_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_asf_pay_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_asf_pay_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_asf_pay_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_asf_pay_src_template));
gst_element_class_set_details_simple (element_class, "RTP ASF payloader",
"Codec/Payloader/Network",
"Payload-encodes ASF into RTP packets (MS_RTSP)",
diff --git a/gst/audiobuffer/gstaudioringbuffer.c b/gst/audiobuffer/gstaudioringbuffer.c
index 6d87df2a4..e3bc47a56 100644
--- a/gst/audiobuffer/gstaudioringbuffer.c
+++ b/gst/audiobuffer/gstaudioringbuffer.c
@@ -320,10 +320,10 @@ gst_audio_ringbuffer_class_init (GstAudioRingbufferClass * klass)
G_MAXINT64, DEFAULT_SEGMENT_TIME,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_add_static_pad_template (gstelement_class,
- &srctemplate);
- gst_element_class_add_static_pad_template (gstelement_class,
- &sinktemplate);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (gstelement_class, "AudioRingbuffer",
"Generic",
diff --git a/gst/audiovisualizers/Makefile.am b/gst/audiovisualizers/Makefile.am
index f6ee5299d..c83f84a35 100644
--- a/gst/audiovisualizers/Makefile.am
+++ b/gst/audiovisualizers/Makefile.am
@@ -9,11 +9,11 @@ libgstaudiovisualizers_la_SOURCES = plugin.c \
libgstaudiovisualizers_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
- $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS)
+ $(GST_CFLAGS)
libgstaudiovisualizers_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR) \
-lgstvideo-$(GST_MAJORMINOR) -lgstfft-$(GST_MAJORMINOR) \
- $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(LIBM)
+ $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
libgstaudiovisualizers_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstaudiovisualizers_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/audiovisualizers/gstbaseaudiovisualizer.c b/gst/audiovisualizers/gstbaseaudiovisualizer.c
index 6d42b7dc5..0c8ba7df0 100644
--- a/gst/audiovisualizers/gstbaseaudiovisualizer.c
+++ b/gst/audiovisualizers/gstbaseaudiovisualizer.c
@@ -33,7 +33,6 @@
#include "config.h"
#endif
#include <string.h>
-#include <gst/controller/gstcontroller.h>
#include "gstbaseaudiovisualizer.h"
@@ -64,13 +63,24 @@ static void gst_base_audio_visualizer_dispose (GObject * object);
static gboolean gst_base_audio_visualizer_src_negotiate (GstBaseAudioVisualizer
* scope);
-static gboolean gst_base_audio_visualizer_src_setcaps (GstPad * pad,
- GstCaps * caps);
-static gboolean gst_base_audio_visualizer_sink_setcaps (GstPad * pad,
- GstCaps * caps);
+static gboolean gst_base_audio_visualizer_src_setcaps (GstBaseAudioVisualizer *
+ scope, GstCaps * caps);
+static gboolean gst_base_audio_visualizer_sink_setcaps (GstBaseAudioVisualizer *
+ scope, GstCaps * caps);
static GstFlowReturn gst_base_audio_visualizer_chain (GstPad * pad,
- GstBuffer * buffer);
+ GstObject * parent, GstBuffer * buffer);
+
+static gboolean gst_base_audio_visualizer_src_event (GstPad * pad,
+ GstObject * parent, GstEvent * event);
+static gboolean gst_base_audio_visualizer_sink_event (GstPad * pad,
+ GstObject * parent, GstEvent * event);
+
+static gboolean gst_base_audio_visualizer_src_query (GstPad * pad,
+ GstObject * parent, GstQuery * query);
+static gboolean gst_base_audio_visualizer_sink_query (GstPad * pad,
+ GstObject * parent, GstQuery * query);
+
static GstStateChangeReturn gst_base_audio_visualizer_change_state (GstElement *
element, GstStateChange transition);
@@ -456,16 +466,20 @@ gst_base_audio_visualizer_init (GstBaseAudioVisualizer * scope,
scope->sinkpad = gst_pad_new_from_template (pad_template, "sink");
gst_pad_set_chain_function (scope->sinkpad,
GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_chain));
- gst_pad_set_setcaps_function (scope->sinkpad,
- GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_sink_setcaps));
+ gst_pad_set_event_function (scope->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_sink_event));
+ gst_pad_set_query_function (scope->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_sink_query));
gst_element_add_pad (GST_ELEMENT (scope), scope->sinkpad);
pad_template =
gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src");
g_return_if_fail (pad_template != NULL);
scope->srcpad = gst_pad_new_from_template (pad_template, "src");
- gst_pad_set_setcaps_function (scope->srcpad,
- GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_src_setcaps));
+ gst_pad_set_event_function (scope->srcpad,
+ GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_src_event));
+ gst_pad_set_query_function (scope->srcpad,
+ GST_DEBUG_FUNCPTR (gst_base_audio_visualizer_src_query));
gst_element_add_pad (GST_ELEMENT (scope), scope->srcpad);
scope->adapter = gst_adapter_new ();
@@ -487,8 +501,6 @@ gst_base_audio_visualizer_init (GstBaseAudioVisualizer * scope,
scope->rate = GST_AUDIO_DEF_RATE;
scope->channels = 2;
- scope->next_ts = GST_CLOCK_TIME_NONE;
-
scope->config_lock = g_mutex_new ();
}
@@ -555,16 +567,27 @@ gst_base_audio_visualizer_dispose (GObject * object)
G_OBJECT_CLASS (parent_class)->dispose (object);
}
+static void
+gst_base_audio_visualizer_reset (GstBaseAudioVisualizer * scope)
+{
+ gst_adapter_clear (scope->adapter);
+ gst_segment_init (&scope->segment, GST_FORMAT_UNDEFINED);
+
+ GST_OBJECT_LOCK (scope);
+ scope->proportion = 1.0;
+ scope->earliest_time = -1;
+ GST_OBJECT_UNLOCK (scope);
+}
+
static gboolean
-gst_base_audio_visualizer_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_base_audio_visualizer_sink_setcaps (GstBaseAudioVisualizer * scope,
+ GstCaps * caps)
{
- GstBaseAudioVisualizer *scope;
GstStructure *structure;
gint channels;
gint rate;
gboolean res = TRUE;
- scope = GST_BASE_AUDIO_VISUALIZER (gst_pad_get_parent (pad));
structure = gst_caps_get_structure (caps, 0);
if (!gst_structure_get_int (structure, "channels", &channels) ||
@@ -584,7 +607,6 @@ gst_base_audio_visualizer_sink_setcaps (GstPad * pad, GstCaps * caps)
scope->channels, scope->rate);
done:
- gst_object_unref (scope);
return res;
/* Errors */
@@ -610,27 +632,81 @@ wrong_rate:
}
static gboolean
+gst_base_audio_visualizer_src_setcaps (GstBaseAudioVisualizer * scope,
+ GstCaps * caps)
+{
+ GstBaseAudioVisualizerClass *klass;
+ GstStructure *structure;
+ gboolean res;
+
+ structure = gst_caps_get_structure (caps, 0);
+ if (!gst_structure_get_int (structure, "width", &scope->width) ||
+ !gst_structure_get_int (structure, "height", &scope->height) ||
+ !gst_structure_get_fraction (structure, "framerate", &scope->fps_n,
+ &scope->fps_d))
+ goto error;
+
+ klass = GST_BASE_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
+
+ //scope->video_format = format; ??
+
+ scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
+ scope->fps_d, scope->fps_n);
+ scope->spf = gst_util_uint64_scale_int (scope->rate,
+ scope->fps_d, scope->fps_n);
+ scope->req_spf = scope->spf;
+
+ scope->bpf = scope->width * scope->height * 4;
+
+ if (scope->pixelbuf)
+ g_free (scope->pixelbuf);
+ scope->pixelbuf = g_malloc0 (scope->bpf);
+
+ if (klass->setup)
+ res = klass->setup (scope);
+
+ GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d",
+ scope->width, scope->height, scope->fps_n, scope->fps_d);
+ GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u",
+ scope->spf, scope->req_spf);
+
+ res = gst_pad_push_event (scope->srcpad, gst_event_new_caps (caps));
+
+ return res;
+
+ /* ERRORS */
+error:
+ {
+ GST_DEBUG_OBJECT (scope, "error parsing caps");
+ return FALSE;
+ }
+}
+
+static gboolean
gst_base_audio_visualizer_src_negotiate (GstBaseAudioVisualizer * scope)
{
- GstCaps *othercaps, *target, *intersect;
+ GstCaps *othercaps, *target;
GstStructure *structure;
- const GstCaps *templ;
+ GstCaps *templ;
+ GstQuery *query;
+ GstBufferPool *pool = NULL;
+ guint size, min, max, prefix, alignment;
templ = gst_pad_get_pad_template_caps (scope->srcpad);
GST_DEBUG_OBJECT (scope, "performing negotiation");
/* see what the peer can do */
- othercaps = gst_pad_peer_get_caps (scope->srcpad);
+ othercaps = gst_pad_peer_query_caps (scope->srcpad, NULL);
if (othercaps) {
- intersect = gst_caps_intersect (othercaps, templ);
+ target = gst_caps_intersect (othercaps, templ);
gst_caps_unref (othercaps);
+ gst_caps_unref (templ);
- if (gst_caps_is_empty (intersect))
+ if (gst_caps_is_empty (target))
goto no_format;
- target = gst_caps_copy_nth (intersect, 0);
- gst_caps_unref (intersect);
+ gst_caps_truncate (target);
} else {
target = gst_caps_ref ((GstCaps *) templ);
}
@@ -643,95 +719,84 @@ gst_base_audio_visualizer_src_negotiate (GstBaseAudioVisualizer * scope)
GST_DEBUG_OBJECT (scope, "final caps are %" GST_PTR_FORMAT, target);
- gst_pad_set_caps (scope->srcpad, target);
- gst_caps_unref (target);
+ gst_base_audio_visualizer_src_setcaps (scope, target);
- return TRUE;
+ /* try to get a bufferpool now */
+ /* find a pool for the negotiated caps now */
+ query = gst_query_new_allocation (target, TRUE);
-no_format:
- {
- gst_caps_unref (intersect);
- return FALSE;
+ if (gst_pad_peer_query (scope->srcpad, query)) {
+ /* we got configuration from our peer, parse them */
+ gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+ &alignment, &pool);
+ } else {
+ size = scope->bpf;
+ min = max = 0;
+ prefix = 0;
+ alignment = 0;
}
-}
-static gboolean
-gst_base_audio_visualizer_src_setcaps (GstPad * pad, GstCaps * caps)
-{
- GstBaseAudioVisualizer *scope;
- GstBaseAudioVisualizerClass *klass;
- gint w, h;
- gint num, denom;
- GstVideoFormat format;
- gboolean res = TRUE;
+ if (pool == NULL) {
+ GstStructure *config;
- scope = GST_BASE_AUDIO_VISUALIZER (gst_pad_get_parent (pad));
- klass = GST_BASE_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
+ /* we did not get a pool, make one ourselves then */
+ pool = gst_buffer_pool_new ();
- if (!gst_video_format_parse_caps (caps, &format, &w, &h)) {
- goto missing_caps_details;
- }
- if (!gst_video_parse_caps_framerate (caps, &num, &denom)) {
- goto missing_caps_details;
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_set (config, target, size, min, max, prefix,
+ alignment);
+ gst_buffer_pool_set_config (pool, config);
}
- g_mutex_lock (scope->config_lock);
-
- scope->width = w;
- scope->height = h;
- scope->fps_n = num;
- scope->fps_d = denom;
- scope->video_format = format;
-
- scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
- scope->fps_d, scope->fps_n);
- scope->spf = gst_util_uint64_scale_int (scope->rate,
- scope->fps_d, scope->fps_n);
- scope->req_spf = scope->spf;
+ if (scope->pool)
+ gst_object_unref (scope->pool);
+ scope->pool = pool;
- scope->bpf = w * h * 4;
+ /* and activate */
+ gst_buffer_pool_set_active (pool, TRUE);
- if (scope->pixelbuf)
- g_free (scope->pixelbuf);
- scope->pixelbuf = g_malloc0 (scope->bpf);
+ gst_caps_unref (target);
- if (klass->setup)
- res = klass->setup (scope);
+ return TRUE;
- GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d",
- scope->width, scope->height, scope->fps_n, scope->fps_d);
- GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u",
- scope->spf, scope->req_spf);
+no_format:
+ {
+ gst_caps_unref (target);
+ return FALSE;
+ }
+}
- g_mutex_unlock (scope->config_lock);
+/* make sure we are negotiated */
+static GstFlowReturn
+gst_base_audio_visualizer_ensure_negotiated (GstBaseAudioVisualizer * scope)
+{
+ gboolean reconfigure;
-done:
- gst_object_unref (scope);
- return res;
+ reconfigure = gst_pad_check_reconfigure (scope->srcpad);
- /* Errors */
-missing_caps_details:
- {
- GST_WARNING_OBJECT (scope,
- "missing width, height or framerate in the caps");
- res = FALSE;
- goto done;
+ /* we don't know an output format yet, pick one */
+ if (reconfigure || !gst_pad_has_current_caps (scope->srcpad)) {
+ if (!gst_base_audio_visualizer_src_negotiate (scope))
+ return GST_FLOW_NOT_NEGOTIATED;
}
+ return GST_FLOW_OK;
}
static GstFlowReturn
-gst_base_audio_visualizer_chain (GstPad * pad, GstBuffer * buffer)
+gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer)
{
GstFlowReturn ret = GST_FLOW_OK;
GstBaseAudioVisualizer *scope;
GstBaseAudioVisualizerClass *klass;
GstBuffer *inbuf;
+ guint64 dist, ts;
guint avail, sbpf;
- guint8 *adata;
+ gpointer adata, vdata;
gboolean (*render) (GstBaseAudioVisualizer * scope, GstBuffer * audio,
GstBuffer * video);
- scope = GST_BASE_AUDIO_VISUALIZER (gst_pad_get_parent (pad));
+ scope = GST_BASE_AUDIO_VISUALIZER (parent);
klass = GST_BASE_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
render = klass->render;
@@ -740,18 +805,19 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstBuffer * buffer)
/* resync on DISCONT */
if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
- scope->next_ts = GST_CLOCK_TIME_NONE;
gst_adapter_clear (scope->adapter);
}
- if (GST_PAD_CAPS (scope->srcpad) == NULL) {
- if (!gst_base_audio_visualizer_src_negotiate (scope))
- return GST_FLOW_NOT_NEGOTIATED;
+ if (scope->bps == 0) {
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto beach;
+ }
+ /* Make sure have an output format */
+ ret = gst_base_audio_visualizer_ensure_negotiated (scope);
+ if (ret != GST_FLOW_OK) {
+ gst_buffer_unref (buffer);
+ goto beach;
}
-
- /* Match timestamps from the incoming audio */
- if (GST_BUFFER_TIMESTAMP (buffer) != GST_CLOCK_TIME_NONE)
- scope->next_ts = GST_BUFFER_TIMESTAMP (buffer);
gst_adapter_push (scope->adapter, buffer);
@@ -762,7 +828,7 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstBuffer * buffer)
inbuf = scope->inbuf;
/* FIXME: the timestamp in the adapter would be different */
- gst_buffer_copy_metadata (inbuf, buffer, GST_BUFFER_COPY_ALL);
+ gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1);
/* this is what we have */
avail = gst_adapter_available (scope->adapter);
@@ -770,10 +836,37 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstBuffer * buffer)
while (avail >= sbpf) {
GstBuffer *outbuf;
+ /* get timestamp of the current adapter content */
+ ts = gst_adapter_prev_timestamp (scope->adapter, &dist);
+ if (GST_CLOCK_TIME_IS_VALID (ts)) {
+ /* convert bytes to time */
+ dist /= scope->bps;
+ ts += gst_util_uint64_scale_int (dist, GST_SECOND, scope->rate);
+ }
+
+ if (GST_CLOCK_TIME_IS_VALID (ts)) {
+ gint64 qostime;
+ gboolean need_skip;
+
+ qostime =
+ gst_segment_to_running_time (&scope->segment, GST_FORMAT_TIME, ts) +
+ scope->frame_duration;
+
+ GST_OBJECT_LOCK (scope);
+ /* check for QoS, don't compute buffers that are known to be late */
+ need_skip = scope->earliest_time != -1 && qostime <= scope->earliest_time;
+ GST_OBJECT_UNLOCK (scope);
+
+ if (need_skip) {
+ GST_WARNING_OBJECT (scope,
+ "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (qostime), GST_TIME_ARGS (scope->earliest_time));
+ goto skip;
+ }
+ }
+
g_mutex_unlock (scope->config_lock);
- ret = gst_pad_alloc_buffer_and_set_caps (scope->srcpad,
- GST_BUFFER_OFFSET_NONE,
- scope->bpf, GST_PAD_CAPS (scope->srcpad), &outbuf);
+ ret = gst_buffer_pool_acquire_buffer (scope->pool, &outbuf, NULL);
g_mutex_lock (scope->config_lock);
/* recheck as the value could have changed */
sbpf = scope->req_spf * scope->channels * sizeof (gint16);
@@ -783,22 +876,25 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstBuffer * buffer)
break;
/* sync controlled properties */
- gst_object_sync_values (G_OBJECT (scope), scope->next_ts);
+ gst_object_sync_values (GST_OBJECT (scope), ts);
- GST_BUFFER_TIMESTAMP (outbuf) = scope->next_ts;
+ GST_BUFFER_TIMESTAMP (outbuf) = ts;
GST_BUFFER_DURATION (outbuf) = scope->frame_duration;
+
+ vdata = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
if (scope->shader) {
- memcpy (GST_BUFFER_DATA (outbuf), scope->pixelbuf, scope->bpf);
+ memcpy (vdata, scope->pixelbuf, scope->bpf);
} else {
- memset (GST_BUFFER_DATA (outbuf), 0, scope->bpf);
+ memset (vdata, 0, scope->bpf);
}
/* this can fail as the data size we need could have changed */
- if (!(adata = (guint8 *) gst_adapter_peek (scope->adapter, sbpf)))
+ if (!(adata = (gpointer) gst_adapter_map (scope->adapter, sbpf)))
break;
- GST_BUFFER_DATA (inbuf) = adata;
- GST_BUFFER_SIZE (inbuf) = sbpf;
+ gst_buffer_take_memory (inbuf, -1,
+ gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, adata, NULL, sbpf, 0,
+ sbpf));
/* call class->render() vmethod */
if (render) {
@@ -807,59 +903,231 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstBuffer * buffer)
} else {
/* run various post processing (shading and geometri transformation */
if (scope->shader) {
- scope->shader (scope, GST_BUFFER_DATA (outbuf), scope->pixelbuf);
+ scope->shader (scope, vdata, scope->pixelbuf);
}
}
}
+ gst_buffer_unmap (outbuf, vdata, scope->bpf);
+
g_mutex_unlock (scope->config_lock);
ret = gst_pad_push (scope->srcpad, outbuf);
outbuf = NULL;
g_mutex_lock (scope->config_lock);
+ skip:
/* recheck as the value could have changed */
sbpf = scope->req_spf * scope->channels * sizeof (gint16);
GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
/* we want to take less or more, depending on spf : req_spf */
if (avail - sbpf >= sbpf) {
gst_adapter_flush (scope->adapter, sbpf);
+ gst_adapter_unmap (scope->adapter);
} else if (avail - sbpf >= 0) {
/* just flush a bit and stop */
gst_adapter_flush (scope->adapter, (avail - sbpf));
+ gst_adapter_unmap (scope->adapter);
break;
}
avail = gst_adapter_available (scope->adapter);
if (ret != GST_FLOW_OK)
break;
-
- if (scope->next_ts != GST_CLOCK_TIME_NONE)
- scope->next_ts += scope->frame_duration;
}
g_mutex_unlock (scope->config_lock);
- gst_object_unref (scope);
-
+beach:
return ret;
}
+static gboolean
+gst_base_audio_visualizer_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ gboolean res;
+ GstBaseAudioVisualizer *scope;
+
+ scope = GST_BASE_AUDIO_VISUALIZER (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_QOS:
+ {
+ gdouble proportion;
+ GstClockTimeDiff diff;
+ GstClockTime timestamp;
+
+ gst_event_parse_qos (event, NULL, &proportion, &diff, &timestamp);
+
+ /* save stuff for the _chain() function */
+ GST_OBJECT_LOCK (scope);
+ scope->proportion = proportion;
+ if (diff >= 0)
+ /* we're late, this is a good estimate for next displayable
+ * frame (see part-qos.txt) */
+ scope->earliest_time = timestamp + 2 * diff + scope->frame_duration;
+ else
+ scope->earliest_time = timestamp + diff;
+ GST_OBJECT_UNLOCK (scope);
+
+ res = gst_pad_push_event (scope->sinkpad, event);
+ break;
+ }
+ default:
+ res = gst_pad_push_event (scope->sinkpad, event);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_base_audio_visualizer_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ gboolean res;
+ GstBaseAudioVisualizer *scope;
+
+ scope = GST_BASE_AUDIO_VISUALIZER (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ res = gst_base_audio_visualizer_sink_setcaps (scope, caps);
+ break;
+ }
+ case GST_EVENT_FLUSH_START:
+ res = gst_pad_push_event (scope->srcpad, event);
+ break;
+ case GST_EVENT_FLUSH_STOP:
+ gst_base_audio_visualizer_reset (scope);
+ res = gst_pad_push_event (scope->srcpad, event);
+ break;
+ case GST_EVENT_SEGMENT:
+ {
+ /* the newsegment values are used to clip the input samples
+ * and to convert the incomming timestamps to running time so
+ * we can do QoS */
+ gst_event_copy_segment (event, &scope->segment);
+
+ res = gst_pad_push_event (scope->srcpad, event);
+ break;
+ }
+ default:
+ res = gst_pad_push_event (scope->srcpad, event);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_base_audio_visualizer_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
+{
+ gboolean res = FALSE;
+ GstBaseAudioVisualizer *scope;
+
+ scope = GST_BASE_AUDIO_VISUALIZER (parent);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_LATENCY:
+ {
+ /* We need to send the query upstream and add the returned latency to our
+ * own */
+ GstClockTime min_latency, max_latency;
+ gboolean us_live;
+ GstClockTime our_latency;
+ guint max_samples;
+
+ if (scope->rate == 0)
+ break;
+
+ if ((res = gst_pad_peer_query (scope->sinkpad, query))) {
+ gst_query_parse_latency (query, &us_live, &min_latency, &max_latency);
+
+ GST_DEBUG_OBJECT (scope, "Peer latency: min %"
+ GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+ /* the max samples we must buffer buffer */
+ max_samples = MAX (scope->req_spf, scope->spf);
+ our_latency =
+ gst_util_uint64_scale_int (max_samples, GST_SECOND, scope->rate);
+
+ GST_DEBUG_OBJECT (scope, "Our latency: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (our_latency));
+
+ /* we add some latency but only if we need to buffer more than what
+ * upstream gives us */
+ min_latency += our_latency;
+ if (max_latency != -1)
+ max_latency += our_latency;
+
+ GST_DEBUG_OBJECT (scope, "Calculated total latency : min %"
+ GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+ gst_query_set_latency (query, TRUE, min_latency, max_latency);
+ }
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_base_audio_visualizer_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
+{
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+ return res;
+}
+
static GstStateChangeReturn
gst_base_audio_visualizer_change_state (GstElement * element,
GstStateChange transition)
{
+ GstStateChangeReturn ret;
GstBaseAudioVisualizer *scope;
scope = GST_BASE_AUDIO_VISUALIZER (element);
switch (transition) {
case GST_STATE_CHANGE_READY_TO_PAUSED:
- scope->next_ts = GST_CLOCK_TIME_NONE;
- gst_adapter_clear (scope->adapter);
+ gst_base_audio_visualizer_reset (scope);
break;
default:
break;
}
- return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ if (scope->pool) {
+ gst_buffer_pool_set_active (scope->pool, FALSE);
+ gst_object_replace ((GstObject **) & scope->pool, NULL);
+ }
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+
+ return ret;
}
diff --git a/gst/audiovisualizers/gstbaseaudiovisualizer.h b/gst/audiovisualizers/gstbaseaudiovisualizer.h
index 42a4c0733..0bd7687b8 100644
--- a/gst/audiovisualizers/gstbaseaudiovisualizer.h
+++ b/gst/audiovisualizers/gstbaseaudiovisualizer.h
@@ -74,6 +74,7 @@ struct _GstBaseAudioVisualizer
/* pads */
GstPad *srcpad, *sinkpad;
+ GstBufferPool *pool;
GstAdapter *adapter;
GstBuffer *inbuf;
guint8 *pixelbuf;
@@ -82,7 +83,6 @@ struct _GstBaseAudioVisualizer
GstBaseAudioVisualizerShaderFunc shader;
guint32 shade_amount;
- guint64 next_ts; /* the timestamp of the next frame */
guint64 frame_duration;
guint bpf; /* bytes per frame */
guint bps; /* bytes per sample */
@@ -94,14 +94,20 @@ struct _GstBaseAudioVisualizer
gint fps_n, fps_d;
gint width;
gint height;
- gint channels;
/* audio state */
gint sample_rate;
+ gint channels;
gint rate;
/* configuration mutex */
GMutex *config_lock;
+
+ /* QoS stuff *//* with LOCK */
+ gdouble proportion;
+ GstClockTime earliest_time;
+
+ GstSegment segment;
};
struct _GstBaseAudioVisualizerClass
diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c
index 7d44d338d..b9efaf08a 100644
--- a/gst/audiovisualizers/gstspacescope.c
+++ b/gst/audiovisualizers/gstspacescope.c
@@ -42,14 +42,20 @@ static GstStaticPadTemplate gst_space_scope_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB_HOST_ENDIAN)
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
+#else
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRx"))
+#endif
);
static GstStaticPadTemplate gst_space_scope_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) [ 8000, 96000 ], " "channels = (int) 2")
);
@@ -109,30 +115,24 @@ static gboolean gst_space_scope_render (GstBaseAudioVisualizer * scope,
GstBuffer * audio, GstBuffer * video);
-GST_BOILERPLATE (GstSpaceScope, gst_space_scope, GstBaseAudioVisualizer,
- GST_TYPE_BASE_AUDIO_VISUALIZER);
+G_DEFINE_TYPE (GstSpaceScope, gst_space_scope, GST_TYPE_BASE_AUDIO_VISUALIZER);
static void
-gst_space_scope_base_init (gpointer g_class)
+gst_space_scope_class_init (GstSpaceScopeClass * g_class)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = (GObjectClass *) g_class;
+ GstElementClass *element_class = (GstElementClass *) g_class;
+ GstBaseAudioVisualizerClass *scope_class =
+ (GstBaseAudioVisualizerClass *) g_class;
gst_element_class_set_details_simple (element_class, "Stereo visualizer",
"Visualization",
"Simple stereo visualizer", "Stefan Kost <ensonic@users.sf.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_space_scope_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_space_scope_sink_template);
-}
-
-static void
-gst_space_scope_class_init (GstSpaceScopeClass * g_class)
-{
- GObjectClass *gobject_class = (GObjectClass *) g_class;
- GstBaseAudioVisualizerClass *scope_class =
- (GstBaseAudioVisualizerClass *) g_class;
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_space_scope_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_space_scope_sink_template));
gobject_class->set_property = gst_space_scope_set_property;
gobject_class->get_property = gst_space_scope_get_property;
@@ -147,7 +147,7 @@ gst_space_scope_class_init (GstSpaceScopeClass * g_class)
}
static void
-gst_space_scope_init (GstSpaceScope * scope, GstSpaceScopeClass * g_class)
+gst_space_scope_init (GstSpaceScope * scope)
{
/* do nothing */
}
@@ -427,12 +427,16 @@ gst_space_scope_render (GstBaseAudioVisualizer * base, GstBuffer * audio,
GstBuffer * video)
{
GstSpaceScope *scope = GST_SPACE_SCOPE (base);
- guint32 *vdata = (guint32 *) GST_BUFFER_DATA (video);
- gint16 *adata = (gint16 *) GST_BUFFER_DATA (audio);
+ gsize asize;
+ guint32 *vdata =
+ (guint32 *) gst_buffer_map (video, NULL, NULL, GST_MAP_WRITE);
+ gint16 *adata = (gint16 *) gst_buffer_map (audio, &asize, NULL, GST_MAP_READ);
guint num_samples;
- num_samples = GST_BUFFER_SIZE (audio) / (base->channels * sizeof (gint16));
+ num_samples = asize / (base->channels * sizeof (gint16));
scope->process (base, vdata, adata, num_samples);
+ gst_buffer_unmap (video, vdata, -1);
+ gst_buffer_unmap (audio, adata, -1);
return TRUE;
}
diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c
index 1b61f567f..d79675ac4 100644
--- a/gst/audiovisualizers/gstspectrascope.c
+++ b/gst/audiovisualizers/gstspectrascope.c
@@ -42,14 +42,20 @@ static GstStaticPadTemplate gst_spectra_scope_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB_HOST_ENDIAN)
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
+#else
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRx"))
+#endif
);
static GstStaticPadTemplate gst_spectra_scope_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) [ 8000, 96000 ], " "channels = (int) 2")
);
@@ -63,39 +69,34 @@ static gboolean gst_spectra_scope_render (GstBaseAudioVisualizer * scope,
GstBuffer * audio, GstBuffer * video);
-GST_BOILERPLATE (GstSpectraScope, gst_spectra_scope, GstBaseAudioVisualizer,
+G_DEFINE_TYPE (GstSpectraScope, gst_spectra_scope,
GST_TYPE_BASE_AUDIO_VISUALIZER);
static void
-gst_spectra_scope_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class,
- "Frequency spectrum scope", "Visualization",
- "Simple frequency spectrum scope", "Stefan Kost <ensonic@users.sf.net>");
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_spectra_scope_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_spectra_scope_sink_template);
-}
-
-static void
gst_spectra_scope_class_init (GstSpectraScopeClass * g_class)
{
GObjectClass *gobject_class = (GObjectClass *) g_class;
+ GstElementClass *element_class = (GstElementClass *) g_class;
GstBaseAudioVisualizerClass *scope_class =
(GstBaseAudioVisualizerClass *) g_class;
gobject_class->finalize = gst_spectra_scope_finalize;
+ gst_element_class_set_details_simple (element_class,
+ "Frequency spectrum scope", "Visualization",
+ "Simple frequency spectrum scope", "Stefan Kost <ensonic@users.sf.net>");
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_spectra_scope_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_spectra_scope_sink_template));
+
scope_class->setup = GST_DEBUG_FUNCPTR (gst_spectra_scope_setup);
scope_class->render = GST_DEBUG_FUNCPTR (gst_spectra_scope_render);
}
static void
-gst_spectra_scope_init (GstSpectraScope * scope, GstSpectraScopeClass * g_class)
+gst_spectra_scope_init (GstSpectraScope * scope)
{
/* do nothing */
}
@@ -114,7 +115,7 @@ gst_spectra_scope_finalize (GObject * object)
scope->freq_data = NULL;
}
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_spectra_scope_parent_class)->finalize (object);
}
static gboolean
@@ -164,9 +165,11 @@ gst_spectra_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
GstBuffer * video)
{
GstSpectraScope *scope = GST_SPECTRA_SCOPE (bscope);
- guint32 *vdata = (guint32 *) GST_BUFFER_DATA (video);
- gint16 *adata = (gint16 *) g_memdup (GST_BUFFER_DATA (audio),
- GST_BUFFER_SIZE (audio));
+ gsize asize;
+ guint32 *vdata =
+ (guint32 *) gst_buffer_map (video, NULL, NULL, GST_MAP_WRITE);
+ gint16 *adata = (gint16 *) gst_buffer_map (audio, &asize, NULL, GST_MAP_READ);
+ gint16 *mono_adata = (gint16 *) g_memdup (adata, asize);
GstFFTS16Complex *fdata = scope->freq_data;
guint x, y, off;
guint l, h = bscope->height - 1;
@@ -175,22 +178,22 @@ gst_spectra_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
if (bscope->channels > 1) {
guint ch = bscope->channels;
- guint num_samples = GST_BUFFER_SIZE (audio) / (ch * sizeof (gint16));
+ guint num_samples = asize / (ch * sizeof (gint16));
guint i, c, v, s = 0;
/* deinterleave and mixdown adata */
for (i = 0; i < num_samples; i++) {
v = 0;
for (c = 0; c < ch; c++) {
- v += adata[s++];
+ v += mono_adata[s++];
}
- adata[i] = v / ch;
+ mono_adata[i] = v / ch;
}
}
/* run fft */
- gst_fft_s16_window (scope->fft_ctx, adata, GST_FFT_WINDOW_HAMMING);
- gst_fft_s16_fft (scope->fft_ctx, adata, fdata);
+ gst_fft_s16_window (scope->fft_ctx, mono_adata, GST_FFT_WINDOW_HAMMING);
+ gst_fft_s16_fft (scope->fft_ctx, mono_adata, fdata);
g_free (adata);
/* draw lines */
@@ -210,6 +213,8 @@ gst_spectra_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
add_pixel (&vdata[off], 0x007F7F7F);
}
}
+ gst_buffer_unmap (video, vdata, -1);
+ gst_buffer_unmap (audio, adata, -1);
return TRUE;
}
diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c
index 7364b8f93..3754c00e0 100644
--- a/gst/audiovisualizers/gstsynaescope.c
+++ b/gst/audiovisualizers/gstsynaescope.c
@@ -41,14 +41,20 @@ static GstStaticPadTemplate gst_synae_scope_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB_HOST_ENDIAN)
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
+#else
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRx"))
+#endif
);
static GstStaticPadTemplate gst_synae_scope_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) [ 8000, 96000 ], " "channels = (int) 2")
);
@@ -62,40 +68,34 @@ static gboolean gst_synae_scope_render (GstBaseAudioVisualizer * scope,
GstBuffer * audio, GstBuffer * video);
-GST_BOILERPLATE (GstSynaeScope, gst_synae_scope, GstBaseAudioVisualizer,
- GST_TYPE_BASE_AUDIO_VISUALIZER);
-
-static void
-gst_synae_scope_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class, "Synaescope",
- "Visualization",
- "Creates video visualizations of audio input, using stereo and pitch information",
- "Stefan Kost <ensonic@users.sf.net>");
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_synae_scope_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_synae_scope_sink_template);
-}
+G_DEFINE_TYPE (GstSynaeScope, gst_synae_scope, GST_TYPE_BASE_AUDIO_VISUALIZER);
static void
gst_synae_scope_class_init (GstSynaeScopeClass * g_class)
{
GObjectClass *gobject_class = (GObjectClass *) g_class;
+ GstElementClass *element_class = (GstElementClass *) g_class;
GstBaseAudioVisualizerClass *scope_class =
(GstBaseAudioVisualizerClass *) g_class;
gobject_class->finalize = gst_synae_scope_finalize;
+ gst_element_class_set_details_simple (element_class, "Synaescope",
+ "Visualization",
+ "Creates video visualizations of audio input, using stereo and pitch information",
+ "Stefan Kost <ensonic@users.sf.net>");
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_synae_scope_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_synae_scope_sink_template));
+
scope_class->setup = GST_DEBUG_FUNCPTR (gst_synae_scope_setup);
scope_class->render = GST_DEBUG_FUNCPTR (gst_synae_scope_render);
}
static void
-gst_synae_scope_init (GstSynaeScope * scope, GstSynaeScopeClass * g_class)
+gst_synae_scope_init (GstSynaeScope * scope)
{
guint32 *colors = scope->colors;
guint *shade = scope->shade;
@@ -144,7 +144,7 @@ gst_synae_scope_finalize (GObject * object)
scope->adata_r = NULL;
}
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_synae_scope_parent_class)->finalize (object);
}
static gboolean
@@ -203,8 +203,10 @@ gst_synae_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
GstBuffer * video)
{
GstSynaeScope *scope = GST_SYNAE_SCOPE (bscope);
- guint32 *vdata = (guint32 *) GST_BUFFER_DATA (video);
- gint16 *adata = (gint16 *) GST_BUFFER_DATA (audio);
+ gsize asize;
+ guint32 *vdata =
+ (guint32 *) gst_buffer_map (video, NULL, NULL, GST_MAP_WRITE);
+ gint16 *adata = (gint16 *) gst_buffer_map (audio, &asize, NULL, GST_MAP_READ);
gint16 *adata_l = scope->adata_l;
gint16 *adata_r = scope->adata_r;
GstFFTS16Complex *fdata_l = scope->freq_data_l;
@@ -217,7 +219,7 @@ gst_synae_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
guint *shade = scope->shade;
//guint w2 = w /2;
guint ch = bscope->channels;
- guint num_samples = GST_BUFFER_SIZE (audio) / (ch * sizeof (gint16));
+ guint num_samples = asize / (ch * sizeof (gint16));
gint i, j, b;
gint br, br1, br2;
gint clarity;
diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c
index a2ee51f0c..cd93a2683 100644
--- a/gst/audiovisualizers/gstwavescope.c
+++ b/gst/audiovisualizers/gstwavescope.c
@@ -42,14 +42,20 @@ static GstStaticPadTemplate gst_wave_scope_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB_HOST_ENDIAN)
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
+#else
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRx"))
+#endif
);
static GstStaticPadTemplate gst_wave_scope_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) [ 8000, 96000 ], " "channels = (int) 2")
);
@@ -110,29 +116,14 @@ static gboolean gst_wave_scope_setup (GstBaseAudioVisualizer * scope);
static gboolean gst_wave_scope_render (GstBaseAudioVisualizer * base,
GstBuffer * audio, GstBuffer * video);
-
-GST_BOILERPLATE (GstWaveScope, gst_wave_scope, GstBaseAudioVisualizer,
- GST_TYPE_BASE_AUDIO_VISUALIZER);
-
-static void
-gst_wave_scope_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class, "Waveform oscilloscope",
- "Visualization",
- "Simple waveform oscilloscope", "Stefan Kost <ensonic@users.sf.net>");
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_wave_scope_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_wave_scope_sink_template);
-}
+#define gst_wave_scope_parent_class parent_class
+G_DEFINE_TYPE (GstWaveScope, gst_wave_scope, GST_TYPE_BASE_AUDIO_VISUALIZER);
static void
gst_wave_scope_class_init (GstWaveScopeClass * g_class)
{
GObjectClass *gobject_class = (GObjectClass *) g_class;
+ GstElementClass *gstelement_class = (GstElementClass *) g_class;
GstBaseAudioVisualizerClass *scope_class =
(GstBaseAudioVisualizerClass *) g_class;
@@ -148,10 +139,21 @@ gst_wave_scope_class_init (GstWaveScopeClass * g_class)
"Drawing styles for the wave form display.",
GST_TYPE_WAVE_SCOPE_STYLE, STYLE_DOTS,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "Waveform oscilloscope", "Visualization", "Simple waveform oscilloscope",
+ "Stefan Kost <ensonic@users.sf.net>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_wave_scope_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_wave_scope_sink_template));
+
+ scope_class->render = GST_DEBUG_FUNCPTR (gst_wave_scope_render);
}
static void
-gst_wave_scope_init (GstWaveScope * scope, GstWaveScopeClass * g_class)
+gst_wave_scope_init (GstWaveScope * scope)
{
/* do nothing */
}
@@ -403,12 +405,20 @@ gst_wave_scope_render (GstBaseAudioVisualizer * base, GstBuffer * audio,
GstBuffer * video)
{
GstWaveScope *scope = GST_WAVE_SCOPE (base);
- guint32 *vdata = (guint32 *) GST_BUFFER_DATA (video);
- gint16 *adata = (gint16 *) GST_BUFFER_DATA (audio);
+ guint32 *vdata;
+ gsize asize;
+ gint16 *adata;
guint num_samples;
- num_samples = GST_BUFFER_SIZE (audio) / (base->channels * sizeof (gint16));
+ adata = gst_buffer_map (audio, &asize, NULL, GST_MAP_READ);
+ vdata = gst_buffer_map (video, NULL, NULL, GST_MAP_WRITE);
+
+ num_samples = asize / (base->channels * sizeof (gint16));
scope->process (base, vdata, adata, num_samples);
+
+ gst_buffer_unmap (video, vdata, -1);
+ gst_buffer_unmap (audio, adata, -1);
+
return TRUE;
}
diff --git a/gst/audiovisualizers/plugin.c b/gst/audiovisualizers/plugin.c
index 4130f9725..e3ad7cb07 100644
--- a/gst/audiovisualizers/plugin.c
+++ b/gst/audiovisualizers/plugin.c
@@ -22,7 +22,6 @@
#include "config.h"
#endif
#include <gst/gst.h>
-#include <gst/controller/gstcontroller.h>
#include "gstspacescope.h"
#include "gstspectrascope.h"
@@ -34,9 +33,6 @@ plugin_init (GstPlugin * plugin)
{
gboolean res = TRUE;
- /* initialize gst controller library */
- gst_controller_init (NULL, NULL);
-
res &= gst_space_scope_plugin_init (plugin);
res &= gst_spectra_scope_plugin_init (plugin);
res &= gst_synae_scope_plugin_init (plugin);
diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c
index 43a7cc9fb..ef88c7038 100644
--- a/gst/autoconvert/gstautoconvert.c
+++ b/gst/autoconvert/gstautoconvert.c
@@ -168,8 +168,10 @@ gst_auto_convert_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class,
"Select convertor based on caps", "Generic/Bin",
diff --git a/gst/autoconvert/gstautovideoconvert.c b/gst/autoconvert/gstautovideoconvert.c
index cf35bb96d..00ee6db47 100644
--- a/gst/autoconvert/gstautovideoconvert.c
+++ b/gst/autoconvert/gstautovideoconvert.c
@@ -133,8 +133,10 @@ gst_auto_video_convert_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class,
"Select color space convertor based on caps", "Generic/Bin",
diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c
index 388ee2ea1..8c2e31b14 100644
--- a/gst/bayer/gstbayer2rgb.c
+++ b/gst/bayer/gstbayer2rgb.c
@@ -111,10 +111,9 @@ struct _GstBayer2RGB
GstBaseTransform basetransform;
/* < private > */
+ GstVideoInfo info;
int width;
int height;
- int stride;
- int pixsize; /* bytes per pixel */
int r_off; /* offset for red */
int g_off; /* offset for green */
int b_off; /* offset for blue */
@@ -127,14 +126,7 @@ struct _GstBayer2RGBClass
};
#define SRC_CAPS \
- GST_VIDEO_CAPS_RGBx ";" \
- GST_VIDEO_CAPS_xRGB ";" \
- GST_VIDEO_CAPS_BGRx ";" \
- GST_VIDEO_CAPS_xBGR ";" \
- GST_VIDEO_CAPS_RGBA ";" \
- GST_VIDEO_CAPS_ARGB ";" \
- GST_VIDEO_CAPS_BGRA ";" \
- GST_VIDEO_CAPS_ABGR
+ GST_VIDEO_CAPS_MAKE ("{ RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR }")
#define SINK_CAPS "video/x-raw-bayer,format=(string){bggr,grbg,gbrg,rggb}," \
"width=(int)[1,MAX],height=(int)[1,MAX],framerate=(fraction)[0/1,MAX]"
@@ -144,12 +136,10 @@ enum
PROP_0
};
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_bayer2rgb_debug, "bayer2rgb", 0, "bayer2rgb element");
-
GType gst_bayer2rgb_get_type (void);
-GST_BOILERPLATE_FULL (GstBayer2RGB, gst_bayer2rgb, GstBaseTransform,
- GST_TYPE_BASE_TRANSFORM, DEBUG_INIT);
+
+#define gst_bayer2rgb_parent_class parent_class
+G_DEFINE_TYPE (GstBayer2RGB, gst_bayer2rgb, GST_TYPE_BASE_TRANSFORM);
static void gst_bayer2rgb_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -162,43 +152,35 @@ static GstFlowReturn gst_bayer2rgb_transform (GstBaseTransform * base,
GstBuffer * inbuf, GstBuffer * outbuf);
static void gst_bayer2rgb_reset (GstBayer2RGB * filter);
static GstCaps *gst_bayer2rgb_transform_caps (GstBaseTransform * base,
- GstPadDirection direction, GstCaps * caps);
+ GstPadDirection direction, GstCaps * caps, GstCaps * filter);
static gboolean gst_bayer2rgb_get_unit_size (GstBaseTransform * base,
- GstCaps * caps, guint * size);
+ GstCaps * caps, gsize * size);
static void
-gst_bayer2rgb_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GstPadTemplate *pad_template;
-
- gst_element_class_set_details_simple (element_class,
- "Bayer to RGB decoder for cameras", "Filter/Converter/Video",
- "Converts video/x-raw-bayer to video/x-raw-rgb",
- "William Brack <wbrack@mmm.com.hk>");
-
- pad_template =
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_from_string (SRC_CAPS));
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
- pad_template =
- gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- gst_caps_from_string (SINK_CAPS));
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
-}
-
-static void
gst_bayer2rgb_class_init (GstBayer2RGBClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
gobject_class->set_property = gst_bayer2rgb_set_property;
gobject_class->get_property = gst_bayer2rgb_get_property;
+ gst_element_class_set_details_simple (gstelement_class,
+ "Bayer to RGB decoder for cameras", "Filter/Converter/Video",
+ "Converts video/x-raw-bayer to video/x-raw",
+ "William Brack <wbrack@mmm.com.hk>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+ gst_caps_from_string (SRC_CAPS)));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+ gst_caps_from_string (SINK_CAPS)));
+
GST_BASE_TRANSFORM_CLASS (klass)->transform_caps =
GST_DEBUG_FUNCPTR (gst_bayer2rgb_transform_caps);
GST_BASE_TRANSFORM_CLASS (klass)->get_unit_size =
@@ -207,10 +189,13 @@ gst_bayer2rgb_class_init (GstBayer2RGBClass * klass)
GST_DEBUG_FUNCPTR (gst_bayer2rgb_set_caps);
GST_BASE_TRANSFORM_CLASS (klass)->transform =
GST_DEBUG_FUNCPTR (gst_bayer2rgb_transform);
+
+ GST_DEBUG_CATEGORY_INIT (gst_bayer2rgb_debug, "bayer2rgb", 0,
+ "bayer2rgb element");
}
static void
-gst_bayer2rgb_init (GstBayer2RGB * filter, GstBayer2RGBClass * klass)
+gst_bayer2rgb_init (GstBayer2RGB * filter)
{
gst_bayer2rgb_reset (filter);
gst_base_transform_set_in_place (GST_BASE_TRANSFORM (filter), TRUE);
@@ -241,35 +226,14 @@ gst_bayer2rgb_get_property (GObject * object, guint prop_id,
}
}
-/* Routine to convert colormask value into relative byte offset */
-static int
-get_pix_offset (int mask, int bpp)
-{
- int bpp32 = (bpp / 8) - 3;
-
- switch (mask) {
- case 255:
- return 2 + bpp32;
- case 65280:
- return 1 + bpp32;
- case 16711680:
- return 0 + bpp32;
- case -16777216:
- return 0;
- default:
- GST_ERROR ("Invalid color mask 0x%08x", mask);
- return -1;
- }
-}
-
static gboolean
gst_bayer2rgb_set_caps (GstBaseTransform * base, GstCaps * incaps,
GstCaps * outcaps)
{
GstBayer2RGB *bayer2rgb = GST_BAYER2RGB (base);
GstStructure *structure;
- int val, bpp;
const char *format;
+ GstVideoInfo info;
GST_DEBUG ("in caps %" GST_PTR_FORMAT " out caps %" GST_PTR_FORMAT, incaps,
outcaps);
@@ -278,7 +242,6 @@ gst_bayer2rgb_set_caps (GstBaseTransform * base, GstCaps * incaps,
gst_structure_get_int (structure, "width", &bayer2rgb->width);
gst_structure_get_int (structure, "height", &bayer2rgb->height);
- bayer2rgb->stride = GST_ROUND_UP_4 (bayer2rgb->width);
format = gst_structure_get_string (structure, "format");
if (g_str_equal (format, "bggr")) {
@@ -294,15 +257,12 @@ gst_bayer2rgb_set_caps (GstBaseTransform * base, GstCaps * incaps,
}
/* To cater for different RGB formats, we need to set params for later */
- structure = gst_caps_get_structure (outcaps, 0);
- gst_structure_get_int (structure, "bpp", &bpp);
- bayer2rgb->pixsize = bpp / 8;
- gst_structure_get_int (structure, "red_mask", &val);
- bayer2rgb->r_off = get_pix_offset (val, bpp);
- gst_structure_get_int (structure, "green_mask", &val);
- bayer2rgb->g_off = get_pix_offset (val, bpp);
- gst_structure_get_int (structure, "blue_mask", &val);
- bayer2rgb->b_off = get_pix_offset (val, bpp);
+ gst_video_info_from_caps (&info, outcaps);
+ bayer2rgb->r_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 0);
+ bayer2rgb->g_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 1);
+ bayer2rgb->b_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 2);
+
+ bayer2rgb->info = info;
return TRUE;
}
@@ -312,16 +272,15 @@ gst_bayer2rgb_reset (GstBayer2RGB * filter)
{
filter->width = 0;
filter->height = 0;
- filter->stride = 0;
- filter->pixsize = 0;
filter->r_off = 0;
filter->g_off = 0;
filter->b_off = 0;
+ gst_video_info_init (&filter->info);
}
static GstCaps *
gst_bayer2rgb_transform_caps (GstBaseTransform * base,
- GstPadDirection direction, GstCaps * caps)
+ GstPadDirection direction, GstCaps * caps, GstCaps * filter)
{
GstStructure *structure;
GstCaps *newcaps;
@@ -335,7 +294,7 @@ gst_bayer2rgb_transform_caps (GstBaseTransform * base,
newcaps = gst_caps_from_string ("video/x-raw-bayer,"
"format=(string){bggr,grbg,gbrg,rggb}");
} else {
- newcaps = gst_caps_new_simple ("video/x-raw-rgb", NULL);
+ newcaps = gst_caps_new_empty_simple ("video/x-raw");
}
newstruct = gst_caps_get_structure (newcaps, 0);
@@ -353,12 +312,11 @@ gst_bayer2rgb_transform_caps (GstBaseTransform * base,
static gboolean
gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps,
- guint * size)
+ gsize * size)
{
GstStructure *structure;
int width;
int height;
- int pixsize;
const char *name;
structure = gst_caps_get_structure (caps, 0);
@@ -367,15 +325,13 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps,
gst_structure_get_int (structure, "height", &height)) {
name = gst_structure_get_name (structure);
/* Our name must be either video/x-raw-bayer video/x-raw-rgb */
- if (strcmp (name, "video/x-raw-rgb")) {
+ if (strcmp (name, "video/x-raw")) {
*size = GST_ROUND_UP_4 (width) * height;
return TRUE;
} else {
- /* For output, calculate according to format */
- if (gst_structure_get_int (structure, "bpp", &pixsize)) {
- *size = width * height * (pixsize / 8);
- return TRUE;
- }
+ /* For output, calculate according to format (always 32 bits) */
+ *size = width * height * 4;
+ return TRUE;
}
}
@@ -492,20 +448,17 @@ gst_bayer2rgb_transform (GstBaseTransform * base, GstBuffer * inbuf,
{
GstBayer2RGB *filter = GST_BAYER2RGB (base);
uint8_t *input, *output;
-
- /*
- * We need to lock our filter params to prevent changing
- * caps in the middle of a transformation (nice way to get
- * segfaults)
- */
- GST_OBJECT_LOCK (filter);
+ GstVideoFrame frame;
GST_DEBUG ("transforming buffer");
- input = (uint8_t *) GST_BUFFER_DATA (inbuf);
- output = (uint8_t *) GST_BUFFER_DATA (outbuf);
+ input = gst_buffer_map (inbuf, NULL, NULL, GST_MAP_READ);
+ gst_video_frame_map (&frame, &filter->info, inbuf, GST_MAP_WRITE);
+
+ output = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
gst_bayer2rgb_process (filter, output, filter->width * 4,
input, filter->width);
+ gst_video_frame_unmap (&frame);
+ gst_buffer_unmap (inbuf, input, -1);
- GST_OBJECT_UNLOCK (filter);
return GST_FLOW_OK;
}
diff --git a/gst/bayer/gstrgb2bayer.c b/gst/bayer/gstrgb2bayer.c
index fb7e9cbba..69aedb908 100644
--- a/gst/bayer/gstrgb2bayer.c
+++ b/gst/bayer/gstrgb2bayer.c
@@ -30,31 +30,24 @@
#define GST_CAT_DEFAULT gst_rgb2bayer_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
-static void gst_rgb2bayer_dispose (GObject * object);
static void gst_rgb2bayer_finalize (GObject * object);
static GstCaps *gst_rgb2bayer_transform_caps (GstBaseTransform * trans,
- GstPadDirection direction, GstCaps * caps);
+ GstPadDirection direction, GstCaps * caps, GstCaps * filter);
static gboolean
gst_rgb2bayer_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
- guint * size);
+ gsize * size);
static gboolean
gst_rgb2bayer_set_caps (GstBaseTransform * trans, GstCaps * incaps,
GstCaps * outcaps);
-static gboolean gst_rgb2bayer_start (GstBaseTransform * trans);
-static gboolean gst_rgb2bayer_stop (GstBaseTransform * trans);
-static gboolean gst_rgb2bayer_event (GstBaseTransform * trans,
- GstEvent * event);
static GstFlowReturn gst_rgb2bayer_transform (GstBaseTransform * trans,
GstBuffer * inbuf, GstBuffer * outbuf);
-static gboolean gst_rgb2bayer_src_event (GstBaseTransform * trans,
- GstEvent * event);
static GstStaticPadTemplate gst_rgb2bayer_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_ARGB)
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("ARGB"))
);
#if 0
@@ -81,65 +74,48 @@ GST_STATIC_PAD_TEMPLATE ("src",
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_rgb2bayer_debug, "rgb2bayer", 0, "rgb2bayer element");
-
-GST_BOILERPLATE_FULL (GstRGB2Bayer, gst_rgb2bayer, GstBaseTransform,
- GST_TYPE_BASE_TRANSFORM, DEBUG_INIT);
+#define gst_rgb2bayer_parent_class parent_class
+G_DEFINE_TYPE (GstRGB2Bayer, gst_rgb2bayer, GST_TYPE_BASE_TRANSFORM);
static void
-gst_rgb2bayer_base_init (gpointer g_class)
+gst_rgb2bayer_class_init (GstRGB2BayerClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseTransformClass *base_transform_class =
+ GST_BASE_TRANSFORM_CLASS (klass);
+
+ gobject_class->finalize = gst_rgb2bayer_finalize;
- gst_element_class_add_static_pad_template (element_class,
- &gst_rgb2bayer_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rgb2bayer_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rgb2bayer_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rgb2bayer_sink_template));
gst_element_class_set_details_simple (element_class,
"RGB to Bayer converter",
"Filter/Converter/Video",
- "Converts video/x-raw-rgb to video/x-raw-bayer",
+ "Converts video/x-raw to video/x-raw-bayer",
"David Schleef <ds@entropywave.com>");
-}
-static void
-gst_rgb2bayer_class_init (GstRGB2BayerClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseTransformClass *base_transform_class =
- GST_BASE_TRANSFORM_CLASS (klass);
-
- gobject_class->dispose = gst_rgb2bayer_dispose;
- gobject_class->finalize = gst_rgb2bayer_finalize;
base_transform_class->transform_caps =
GST_DEBUG_FUNCPTR (gst_rgb2bayer_transform_caps);
base_transform_class->get_unit_size =
GST_DEBUG_FUNCPTR (gst_rgb2bayer_get_unit_size);
base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_rgb2bayer_set_caps);
- base_transform_class->start = GST_DEBUG_FUNCPTR (gst_rgb2bayer_start);
- base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_rgb2bayer_stop);
- base_transform_class->event = GST_DEBUG_FUNCPTR (gst_rgb2bayer_event);
base_transform_class->transform = GST_DEBUG_FUNCPTR (gst_rgb2bayer_transform);
- base_transform_class->src_event = GST_DEBUG_FUNCPTR (gst_rgb2bayer_src_event);
+ GST_DEBUG_CATEGORY_INIT (gst_rgb2bayer_debug, "rgb2bayer", 0,
+ "rgb2bayer element");
}
static void
-gst_rgb2bayer_init (GstRGB2Bayer * rgb2bayer,
- GstRGB2BayerClass * rgb2bayer_class)
+gst_rgb2bayer_init (GstRGB2Bayer * rgb2bayer)
{
}
void
-gst_rgb2bayer_dispose (GObject * object)
-{
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
gst_rgb2bayer_finalize (GObject * object)
{
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -148,7 +124,7 @@ gst_rgb2bayer_finalize (GObject * object)
static GstCaps *
gst_rgb2bayer_transform_caps (GstBaseTransform * trans,
- GstPadDirection direction, GstCaps * caps)
+ GstPadDirection direction, GstCaps * caps, GstCaps * filter)
{
GstStructure *structure;
GstStructure *new_structure;
@@ -160,9 +136,9 @@ gst_rgb2bayer_transform_caps (GstBaseTransform * trans,
structure = gst_caps_get_structure (caps, 0);
if (direction == GST_PAD_SRC) {
- newcaps = gst_caps_new_simple ("video/x-raw-rgb", NULL);
+ newcaps = gst_caps_new_empty_simple ("video/x-raw");
} else {
- newcaps = gst_caps_new_simple ("video/x-raw-bayer", NULL);
+ newcaps = gst_caps_new_empty_simple ("video/x-raw-bayer");
}
new_structure = gst_caps_get_structure (newcaps, 0);
@@ -183,12 +159,11 @@ gst_rgb2bayer_transform_caps (GstBaseTransform * trans,
static gboolean
gst_rgb2bayer_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
- guint * size)
+ gsize * size)
{
GstStructure *structure;
int width;
int height;
- int pixsize;
const char *name;
structure = gst_caps_get_structure (caps, 0);
@@ -196,16 +171,14 @@ gst_rgb2bayer_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
if (gst_structure_get_int (structure, "width", &width) &&
gst_structure_get_int (structure, "height", &height)) {
name = gst_structure_get_name (structure);
- /* Our name must be either video/x-raw-bayer video/x-raw-rgb */
+ /* Our name must be either video/x-raw-bayer video/x-raw */
if (g_str_equal (name, "video/x-raw-bayer")) {
*size = width * height;
return TRUE;
} else {
/* For output, calculate according to format */
- if (gst_structure_get_int (structure, "bpp", &pixsize)) {
- *size = width * height * (pixsize / 8);
- return TRUE;
- }
+ *size = width * height * 4;
+ return TRUE;
}
}
@@ -220,10 +193,16 @@ gst_rgb2bayer_set_caps (GstBaseTransform * trans, GstCaps * incaps,
GstRGB2Bayer *rgb2bayer = GST_RGB_2_BAYER (trans);
GstStructure *structure;
const char *format;
+ GstVideoInfo info;
GST_DEBUG ("in caps %" GST_PTR_FORMAT " out caps %" GST_PTR_FORMAT, incaps,
outcaps);
+ if (!gst_video_info_from_caps (&info, incaps))
+ return FALSE;
+
+ rgb2bayer->info = info;
+
structure = gst_caps_get_structure (outcaps, 0);
gst_structure_get_int (structure, "width", &rgb2bayer->width);
@@ -245,27 +224,6 @@ gst_rgb2bayer_set_caps (GstBaseTransform * trans, GstCaps * incaps,
return TRUE;
}
-static gboolean
-gst_rgb2bayer_start (GstBaseTransform * trans)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_rgb2bayer_stop (GstBaseTransform * trans)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_rgb2bayer_event (GstBaseTransform * trans, GstEvent * event)
-{
-
- return TRUE;
-}
-
static GstFlowReturn
gst_rgb2bayer_transform (GstBaseTransform * trans, GstBuffer * inbuf,
GstBuffer * outbuf)
@@ -276,9 +234,12 @@ gst_rgb2bayer_transform (GstBaseTransform * trans, GstBuffer * inbuf,
int i, j;
int height = rgb2bayer->height;
int width = rgb2bayer->width;
+ GstVideoFrame frame;
+
+ gst_video_frame_map (&frame, &rgb2bayer->info, inbuf, GST_MAP_READ);
- dest = GST_BUFFER_DATA (outbuf);
- src = GST_BUFFER_DATA (inbuf);
+ dest = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_READ);
+ src = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
for (j = 0; j < height; j++) {
guint8 *dest_line = dest + width * j;
@@ -295,13 +256,8 @@ gst_rgb2bayer_transform (GstBaseTransform * trans, GstBuffer * inbuf,
}
}
}
+ gst_buffer_unmap (outbuf, dest, -1);
+ gst_video_frame_unmap (&frame);
return GST_FLOW_OK;
}
-
-static gboolean
-gst_rgb2bayer_src_event (GstBaseTransform * trans, GstEvent * event)
-{
-
- return TRUE;
-}
diff --git a/gst/bayer/gstrgb2bayer.h b/gst/bayer/gstrgb2bayer.h
index 7b7f073ee..cf37872d2 100644
--- a/gst/bayer/gstrgb2bayer.h
+++ b/gst/bayer/gstrgb2bayer.h
@@ -22,6 +22,7 @@
#include <gst/gst.h>
#include <gst/base/gstbasetransform.h>
+#include <gst/video/video.h>
G_BEGIN_DECLS
@@ -45,6 +46,7 @@ struct _GstRGB2Bayer
{
GstBaseTransform base_rgb2bayer;
+ GstVideoInfo info;
int width, height;
int format;
};
diff --git a/gst/camerabin/camerabinimage.c b/gst/camerabin/camerabinimage.c
index c69a5c339..ab82b4071 100644
--- a/gst/camerabin/camerabinimage.c
+++ b/gst/camerabin/camerabinimage.c
@@ -102,7 +102,8 @@ gst_camerabin_image_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (eklass, &sink_template);
+ gst_element_class_add_pad_template (eklass,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (eklass,
"Image capture bin for camerabin", "Bin/Image",
"Process and store image data",
@@ -216,9 +217,10 @@ gst_camerabin_image_dispose (GstCameraBinImage * img)
taken by bin and therefore gst_object_sink is called for
these elements (they may still be in floating state
and not unreffed properly without sinking first)
+ FIXME, something else is wrong if you have to sink here
*/
if (img->app_enc) {
- gst_object_sink (img->app_enc);
+ //gst_object_ref_sink (img->app_enc);
GST_LOG_OBJECT (img, "disposing %s with refcount %d",
GST_ELEMENT_NAME (img->app_enc),
GST_OBJECT_REFCOUNT_VALUE (img->app_enc));
@@ -227,7 +229,7 @@ gst_camerabin_image_dispose (GstCameraBinImage * img)
}
if (img->post) {
- gst_object_sink (img->post);
+ //gst_object_ref_sink (img->post);
GST_LOG_OBJECT (img, "disposing %s with refcount %d",
GST_ELEMENT_NAME (img->post), GST_OBJECT_REFCOUNT_VALUE (img->post));
gst_object_unref (img->post);
diff --git a/gst/camerabin/camerabinvideo.c b/gst/camerabin/camerabinvideo.c
index a98807b2d..0a81e0ccb 100644
--- a/gst/camerabin/camerabinvideo.c
+++ b/gst/camerabin/camerabinvideo.c
@@ -118,8 +118,10 @@ gst_camerabin_video_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (eklass, &sink_template);
- gst_element_class_add_static_pad_template (eklass, &src_template);
+ gst_element_class_add_pad_template (eklass,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (eklass,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (eklass,
"Video capture bin for camerabin", "Bin/Video",
"Process and store video data",
@@ -215,33 +217,34 @@ gst_camerabin_video_dispose (GstCameraBinVideo * vid)
taken by bin and therefore gst_object_sink is called for
these elements (they may still be in floating state
and not unreffed properly without sinking first)
+ FIXME, something else is wrong when you have to sink here
*/
if (vid->app_post) {
- gst_object_sink (vid->app_post);
+ //gst_object_sink (vid->app_post);
gst_object_unref (vid->app_post);
vid->app_post = NULL;
}
if (vid->app_vid_enc) {
- gst_object_sink (vid->app_vid_enc);
+ //gst_object_sink (vid->app_vid_enc);
gst_object_unref (vid->app_vid_enc);
vid->app_vid_enc = NULL;
}
if (vid->app_aud_enc) {
- gst_object_sink (vid->app_aud_enc);
+ //gst_object_sink (vid->app_aud_enc);
gst_object_unref (vid->app_aud_enc);
vid->app_aud_enc = NULL;
}
if (vid->app_aud_src) {
- gst_object_sink (vid->app_aud_src);
+ //gst_object_sink (vid->app_aud_src);
gst_object_unref (vid->app_aud_src);
vid->app_aud_src = NULL;
}
if (vid->app_mux) {
- gst_object_sink (vid->app_mux);
+ //gst_object_sink (vid->app_mux);
gst_object_unref (vid->app_mux);
vid->app_mux = NULL;
}
@@ -506,7 +509,7 @@ gst_camerabin_video_create_elements (GstCameraBinVideo * vid)
gst_object_unref (vid_sinkpad);
/* Add queue element for video */
- vid->tee_video_srcpad = gst_element_get_request_pad (vid->tee, "src%d");
+ vid->tee_video_srcpad = gst_element_get_request_pad (vid->tee, "src_%u");
vid->video_queue = gst_element_factory_make ("queue", "video-queue");
if (!gst_camerabin_add_element (vidbin, vid->video_queue)) {
@@ -617,7 +620,7 @@ gst_camerabin_video_create_elements (GstCameraBinVideo * vid)
}
}
/* Add queue leading out of the video bin and to view finder */
- vid->tee_vf_srcpad = gst_element_get_request_pad (vid->tee, "src%d");
+ vid->tee_vf_srcpad = gst_element_get_request_pad (vid->tee, "src_%u");
queue = gst_element_factory_make ("queue", "viewfinder-queue");
if (!gst_camerabin_add_element (vidbin, queue)) {
goto error;
diff --git a/gst/camerabin/gstcamerabin.c b/gst/camerabin/gstcamerabin.c
index be13b65d7..39cd2b91b 100644
--- a/gst/camerabin/gstcamerabin.c
+++ b/gst/camerabin/gstcamerabin.c
@@ -768,7 +768,7 @@ camerabin_create_elements (GstCameraBin * camera)
}
camera->pad_src_img =
- gst_element_get_request_pad (camera->src_out_sel, "src%d");
+ gst_element_get_request_pad (camera->src_out_sel, "src_%u");
gst_pad_add_data_probe (camera->pad_src_img,
G_CALLBACK (gst_camerabin_have_img_buffer), camera);
@@ -797,7 +797,7 @@ camerabin_create_elements (GstCameraBin * camera)
}
camera->pad_src_view =
- gst_element_get_request_pad (camera->src_out_sel, "src%d");
+ gst_element_get_request_pad (camera->src_out_sel, "src_%u");
/* Create view finder elements */
if (!camerabin_create_view_elements (camera)) {
@@ -811,7 +811,7 @@ camerabin_create_elements (GstCameraBin * camera)
/* Add video bin */
camera->pad_src_vid =
- gst_element_get_request_pad (camera->src_out_sel, "src%d");
+ gst_element_get_request_pad (camera->src_out_sel, "src_%u");
if (!gst_camerabin_add_element (GST_BIN (camera), camera->vidbin)) {
goto done;
}
@@ -821,7 +821,7 @@ camerabin_create_elements (GstCameraBin * camera)
/* Link video bin ! view finder */
unconnected_pad = gst_bin_find_unlinked_pad (GST_BIN (camera), GST_PAD_SRC);
camera->pad_view_vid =
- gst_element_get_request_pad (camera->view_in_sel, "sink%d");
+ gst_element_get_request_pad (camera->view_in_sel, "sink_%u");
link_ret =
gst_pad_link_full (unconnected_pad, camera->pad_view_vid,
GST_PAD_LINK_CHECK_CAPS);
diff --git a/gst/camerabin/gstcamerabincolorbalance.c b/gst/camerabin/gstcamerabincolorbalance.c
index 73a325d35..54899fabf 100644
--- a/gst/camerabin/gstcamerabincolorbalance.c
+++ b/gst/camerabin/gstcamerabincolorbalance.c
@@ -71,7 +71,7 @@ gst_camerabin_color_balance_get_value (GstColorBalance * cb,
*/
void
-gst_camerabin_color_balance_init (GstColorBalanceClass * iface)
+gst_camerabin_color_balance_init (GstColorBalanceInterface * iface)
{
/* FIXME: to get the same type as v4l2src */
GST_COLOR_BALANCE_TYPE (iface) = GST_COLOR_BALANCE_HARDWARE;
diff --git a/gst/camerabin/gstcamerabincolorbalance.h b/gst/camerabin/gstcamerabincolorbalance.h
index 442a23bc9..81984e7f3 100644
--- a/gst/camerabin/gstcamerabincolorbalance.h
+++ b/gst/camerabin/gstcamerabincolorbalance.h
@@ -23,6 +23,6 @@
#include <gst/interfaces/colorbalance.h>
-extern void gst_camerabin_color_balance_init (GstColorBalanceClass * iface);
+extern void gst_camerabin_color_balance_init (GstColorBalanceInterface * iface);
#endif /* #ifndef __GST_CAMERA_COLOR_BALANCE_H__ */
diff --git a/gst/camerabin/gstinputselector.c b/gst/camerabin/gstinputselector.c
index 62ee38044..8fe8c0f02 100644
--- a/gst/camerabin/gstinputselector.c
+++ b/gst/camerabin/gstinputselector.c
@@ -42,7 +42,7 @@ GST_DEBUG_CATEGORY_STATIC (input_selector_debug);
#define GST_CAT_DEFAULT input_selector_debug
static GstStaticPadTemplate gst_input_selector_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink%d",
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS_ANY);
@@ -745,10 +745,10 @@ gst_input_selector_base_init (GstInputSelectorClass * klass)
"Julien Moutte <julien@moutte.net>, "
"Jan Schmidt <thaytan@mad.scientist.com>, "
"Wim Taymans <wim.taymans@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_input_selector_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &gst_input_selector_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_input_selector_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_input_selector_src_factory));
}
static void
@@ -1298,7 +1298,7 @@ gst_input_selector_request_new_pad (GstElement * element,
GST_INPUT_SELECTOR_LOCK (sel);
GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount);
- name = g_strdup_printf ("sink%d", sel->padcount++);
+ name = g_strdup_printf ("sink_%u", sel->padcount++);
sinkpad = g_object_new (GST_TYPE_SELECTOR_PAD,
"name", name, "direction", templ->direction, "template", templ, NULL);
g_free (name);
diff --git a/gst/camerabin2/camerabingeneral.c b/gst/camerabin2/camerabingeneral.c
index 046ccd7da..25b057e49 100644
--- a/gst/camerabin2/camerabingeneral.c
+++ b/gst/camerabin2/camerabingeneral.c
@@ -230,19 +230,19 @@ void
gst_camerabin_remove_elements_from_bin (GstBin * bin)
{
GstIterator *iter = NULL;
- gpointer data = NULL;
+ GValue value = { 0 };
GstElement *elem = NULL;
gboolean done = FALSE;
iter = gst_bin_iterate_elements (bin);
while (!done) {
- switch (gst_iterator_next (iter, &data)) {
+ switch (gst_iterator_next (iter, &value)) {
case GST_ITERATOR_OK:
- elem = GST_ELEMENT (data);
+ elem = (GstElement *) g_value_get_object (&value);
gst_bin_remove (bin, elem);
gst_element_set_state (GST_ELEMENT (elem), GST_STATE_NULL);
/* Iterator increased the element refcount, so unref */
- gst_object_unref (elem);
+ g_value_unset (&value);
break;
case GST_ITERATOR_RESYNC:
gst_iterator_resync (iter);
diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c
index 073cb6f67..12c52b0a2 100644
--- a/gst/camerabin2/gstcamerabin2.c
+++ b/gst/camerabin2/gstcamerabin2.c
@@ -350,7 +350,7 @@ static GstEvent *
gst_camera_bin_new_event_renegotiate (void)
{
return gst_event_new_custom (GST_EVENT_CUSTOM_BOTH,
- gst_structure_new ("renegotiate", NULL));
+ gst_structure_new_empty ("renegotiate"));
}
static GstEvent *
@@ -755,7 +755,7 @@ gst_camera_bin_class_init (GstCameraBin2Class * klass)
GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_VIDEO_ENCODING_PROFILE,
- gst_param_spec_mini_object ("video-profile", "Video Profile",
+ g_param_spec_boxed ("video-profile", "Video Profile",
"The GstEncodingProfile to use for video recording. Audio is enabled "
"when this profile supports audio.", GST_TYPE_ENCODING_PROFILE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -828,7 +828,7 @@ gst_camera_bin_class_init (GstCameraBin2Class * klass)
* getting the 2nd buffer.
*/
g_object_class_install_property (object_class, PROP_IMAGE_ENCODING_PROFILE,
- gst_param_spec_mini_object ("image-profile", "Image Profile",
+ g_param_spec_boxed ("image-profile", "Image Profile",
"The GstEncodingProfile to use for image captures.",
GST_TYPE_ENCODING_PROFILE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -948,7 +948,7 @@ gst_video_capture_bin_post_video_done (GstCameraBin2 * camera)
GstMessage *msg;
msg = gst_message_new_element (GST_OBJECT_CAST (camera),
- gst_structure_new ("video-done", NULL));
+ gst_structure_new_empty ("video-done"));
if (!gst_element_post_message (GST_ELEMENT_CAST (camera), msg))
GST_WARNING_OBJECT (camera, "Failed to post video-done message");
@@ -1189,17 +1189,19 @@ encodebin_element_added (GstElement * encodebin, GstElement * new_element,
GstElementFactory *factory = gst_element_get_factory (new_element);
if (factory != NULL) {
- if (strcmp (GST_PLUGIN_FEATURE_NAME (factory), "audiorate") == 0 ||
- strcmp (GST_PLUGIN_FEATURE_NAME (factory), "videorate") == 0) {
+ if (strcmp (GST_OBJECT_NAME (factory), "audiorate") == 0 ||
+ strcmp (GST_OBJECT_NAME (factory), "videorate") == 0) {
g_object_set (new_element, "skip-to-first", TRUE, NULL);
}
}
- if (gst_element_implements_interface (new_element, GST_TYPE_TAG_SETTER)) {
- GstTagSetter *tagsetter = GST_TAG_SETTER (new_element);
+ /* TODO porting
+ if (gst_element_implements_interface (new_element, GST_TYPE_TAG_SETTER)) {
+ GstTagSetter *tagsetter = GST_TAG_SETTER (new_element);
- gst_tag_setter_set_tag_merge_mode (tagsetter, GST_TAG_MERGE_REPLACE);
- }
+ gst_tag_setter_set_tag_merge_mode (tagsetter, GST_TAG_MERGE_REPLACE);
+ }
+ */
}
#define VIDEO_PAD 1
@@ -1208,6 +1210,7 @@ static GstPad *
encodebin_find_pad (GstCameraBin2 * camera, GstElement * encodebin,
gint pad_type)
{
+ GValue value = { 0 };
GstPad *pad = NULL;
GstIterator *iter;
gboolean done;
@@ -1218,8 +1221,10 @@ encodebin_find_pad (GstCameraBin2 * camera, GstElement * encodebin,
iter = gst_element_iterate_sink_pads (encodebin);
done = FALSE;
while (!done) {
- switch (gst_iterator_next (iter, (gpointer *) & pad)) {
+ switch (gst_iterator_next (iter, &value)) {
case GST_ITERATOR_OK:
+ pad = g_value_dup_object (&value);
+ g_value_unset (&value);
if (pad_type == VIDEO_PAD) {
if (strstr (GST_PAD_NAME (pad), "video") != NULL) {
GST_DEBUG_OBJECT (camera, "Found video pad %s", GST_PAD_NAME (pad));
@@ -1340,11 +1345,11 @@ gst_camera_bin_src_notify_zoom_cb (GObject * self, GParamSpec * pspec,
g_object_notify (G_OBJECT (camera), "zoom");
}
-static gboolean
-gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstBuffer * buf,
+static GstPadProbeReturn
+gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer data)
{
- gboolean ret = TRUE;
+ GstPadProbeReturn ret = GST_PAD_PROBE_OK;
GstCameraBin2 *camerabin = data;
GstEvent *evt;
gchar *location = NULL;
@@ -1394,7 +1399,7 @@ gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstBuffer * buf,
} else {
/* This means we don't have to encode the capture, it is used for
* signaling the application just wants the preview */
- ret = FALSE;
+ ret = GST_PAD_PROBE_DROP;
GST_CAMERA_BIN2_PROCESSING_DEC (camerabin);
}
@@ -1402,11 +1407,12 @@ gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstBuffer * buf,
}
-static gboolean
-gst_camera_bin_image_sink_event_probe (GstPad * pad, GstEvent * event,
+static GstPadProbeReturn
+gst_camera_bin_image_sink_event_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer data)
{
GstCameraBin2 *camerabin = data;
+ GstEvent *event = GST_EVENT (info->data);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_CUSTOM_DOWNSTREAM:{
@@ -1432,21 +1438,22 @@ gst_camera_bin_image_sink_event_probe (GstPad * pad, GstEvent * event,
break;
}
- return TRUE;
+ return GST_PAD_PROBE_OK;
}
-static gboolean
-gst_camera_bin_audio_src_data_probe (GstPad * pad, GstMiniObject * obj,
+static GstPadProbeReturn
+gst_camera_bin_audio_src_data_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer data)
{
GstCameraBin2 *camera = data;
- gboolean ret = TRUE;
+ gboolean ret = GST_PAD_PROBE_OK;
- if (GST_IS_BUFFER (obj)) {
+ if (GST_IS_BUFFER (data)) {
if (G_UNLIKELY (camera->audio_send_newseg)) {
- GstBuffer *buf = GST_BUFFER_CAST (obj);
+ GstBuffer *buf = GST_BUFFER_CAST (data);
GstClockTime ts = GST_BUFFER_TIMESTAMP (buf);
GstPad *peer;
+ GstSegment segment;
if (!GST_CLOCK_TIME_IS_VALID (ts)) {
ts = 0;
@@ -1455,27 +1462,28 @@ gst_camera_bin_audio_src_data_probe (GstPad * pad, GstMiniObject * obj,
peer = gst_pad_get_peer (pad);
g_return_val_if_fail (peer != NULL, TRUE);
- gst_pad_send_event (peer, gst_event_new_new_segment (FALSE, 1.0,
- GST_FORMAT_TIME, ts, -1, 0));
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.start = ts;
+ gst_pad_send_event (peer, gst_event_new_segment (&segment));
gst_object_unref (peer);
camera->audio_send_newseg = FALSE;
}
} else {
- GstEvent *event = GST_EVENT_CAST (obj);
+ GstEvent *event = GST_EVENT_CAST (data);
if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
/* we only let an EOS pass when the user is stopping a capture */
if (camera->audio_drop_eos) {
- ret = FALSE;
+ ret = GST_PAD_PROBE_DROP;
} else {
camera->audio_drop_eos = TRUE;
/* should already be false, but reinforce in case no buffers get
* pushed */
camera->audio_send_newseg = FALSE;
}
- } else if (GST_EVENT_TYPE (event) == GST_EVENT_NEWSEGMENT) {
- ret = FALSE;
+ } else if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+ ret = GST_PAD_PROBE_DROP;
}
}
@@ -1540,12 +1548,12 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera)
GstEncodingContainerProfile *prof;
GstCaps *caps;
- caps = gst_caps_new_simple ("application/ogg", NULL);
+ caps = gst_caps_new_empty_simple ("application/ogg");
prof = gst_encoding_container_profile_new ("ogg", "theora+vorbis+ogg",
caps, NULL);
gst_caps_unref (caps);
- caps = gst_caps_new_simple ("video/x-theora", NULL);
+ caps = gst_caps_new_empty_simple ("video/x-theora");
if (!gst_encoding_container_profile_add_profile (prof,
(GstEncodingProfile *) gst_encoding_video_profile_new (caps,
NULL, NULL, 1))) {
@@ -1553,7 +1561,7 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera)
}
gst_caps_unref (caps);
- caps = gst_caps_new_simple ("audio/x-vorbis", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-vorbis");
if (!gst_encoding_container_profile_add_profile (prof,
(GstEncodingProfile *) gst_encoding_audio_profile_new (caps,
NULL, NULL, 1))) {
@@ -1592,7 +1600,7 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera)
GstEncodingVideoProfile *vprof;
GstCaps *caps;
- caps = gst_caps_new_simple ("image/jpeg", NULL);
+ caps = gst_caps_new_empty_simple ("image/jpeg");
vprof = gst_encoding_video_profile_new (caps, NULL, NULL, 1);
gst_encoding_video_profile_set_variableframerate (vprof, TRUE);
@@ -1639,8 +1647,9 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera)
srcpad = gst_element_get_static_pad (camera->image_encodebin, "src");
- gst_pad_add_event_probe (srcpad,
- (GCallback) gst_camera_bin_image_sink_event_probe, camera);
+ gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ gst_camera_bin_image_sink_event_probe, gst_object_ref (camera),
+ gst_object_unref);
gst_object_unref (srcpad);
}
@@ -1768,8 +1777,9 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera)
goto fail;
}
- gst_pad_add_buffer_probe (imgsrc,
- (GCallback) gst_camera_bin_image_src_buffer_probe, camera);
+ gst_pad_add_probe (imgsrc, GST_PAD_PROBE_TYPE_BUFFER,
+ gst_camera_bin_image_src_buffer_probe, gst_object_ref (camera),
+ gst_object_unref);
gst_object_unref (imgsrc);
}
@@ -1831,11 +1841,11 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera)
srcpad = gst_element_get_static_pad (camera->audio_src, "src");
- /* 1) drop EOS for audiosrc elements that push them on state_changes
- * (basesrc does this)
- * 2) Fix newsegment events to have start time = first buffer ts */
- gst_pad_add_data_probe (srcpad,
- (GCallback) gst_camera_bin_audio_src_data_probe, camera);
+ /* drop EOS for audiosrc elements that push them on state_changes
+ * (basesrc does this) */
+ gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM,
+ gst_camera_bin_audio_src_data_probe, gst_object_ref (camera),
+ gst_object_unref);
gst_object_unref (srcpad);
}
@@ -2171,8 +2181,7 @@ gst_camera_bin_set_property (GObject * object, guint prop_id,
case PROP_VIDEO_ENCODING_PROFILE:
if (camera->video_profile)
gst_encoding_profile_unref (camera->video_profile);
- camera->video_profile =
- (GstEncodingProfile *) gst_value_dup_mini_object (value);
+ camera->video_profile = (GstEncodingProfile *) g_value_dup_boxed (value);
camera->video_profile_switch = TRUE;
break;
case PROP_IMAGE_FILTER:
@@ -2228,8 +2237,7 @@ gst_camera_bin_set_property (GObject * object, guint prop_id,
case PROP_IMAGE_ENCODING_PROFILE:
if (camera->image_profile)
gst_encoding_profile_unref (camera->image_profile);
- camera->image_profile =
- (GstEncodingProfile *) gst_value_dup_mini_object (value);
+ camera->image_profile = (GstEncodingProfile *) g_value_dup_boxed (value);
camera->image_profile_switch = TRUE;
break;
case PROP_FLAGS:
@@ -2300,7 +2308,7 @@ gst_camera_bin_get_property (GObject * object, guint prop_id,
* won't negotiate. Need to take care on the special case of the
* pad being unlinked.
*/
- caps = gst_pad_get_caps_reffed (pad);
+ caps = gst_pad_query_caps (pad, NULL);
if (caps) {
gst_value_set_caps (value, caps);
gst_caps_unref (caps);
@@ -2366,8 +2374,7 @@ gst_camera_bin_get_property (GObject * object, guint prop_id,
break;
case PROP_VIDEO_ENCODING_PROFILE:
if (camera->video_profile) {
- gst_value_set_mini_object (value,
- (GstMiniObject *) camera->video_profile);
+ g_value_set_boxed (value, camera->video_profile);
}
break;
case PROP_VIDEO_FILTER:
@@ -2405,8 +2412,7 @@ gst_camera_bin_get_property (GObject * object, guint prop_id,
break;
case PROP_IMAGE_ENCODING_PROFILE:
if (camera->image_profile) {
- gst_value_set_mini_object (value,
- (GstMiniObject *) camera->image_profile);
+ g_value_set_boxed (value, camera->image_profile);
}
break;
case PROP_IDLE:
diff --git a/gst/camerabin2/gstviewfinderbin.c b/gst/camerabin2/gstviewfinderbin.c
index abf996bba..90c78d5ab 100644
--- a/gst/camerabin2/gstviewfinderbin.c
+++ b/gst/camerabin2/gstviewfinderbin.c
@@ -61,8 +61,8 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
);
/* class initialization */
-
-GST_BOILERPLATE (GstViewfinderBin, gst_viewfinder_bin, GstBin, GST_TYPE_BIN);
+#define gst_viewfinder_bin_parent_class parent_class
+G_DEFINE_TYPE (GstViewfinderBin, gst_viewfinder_bin, GST_TYPE_BIN);
static void gst_viewfinder_bin_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * spec);
@@ -96,19 +96,6 @@ gst_viewfinder_bin_dispose (GObject * object)
}
static void
-gst_viewfinder_bin_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
-
- gst_element_class_set_details_simple (element_class, "Viewfinder Bin",
- "Sink/Video", "Viewfinder Bin used in camerabin2",
- "Thiago Santos <thiago.sousa.santos@collabora.co.uk>");
-}
-
-static void
gst_viewfinder_bin_class_init (GstViewfinderBinClass * klass)
{
GObjectClass *gobject_klass;
@@ -134,11 +121,17 @@ gst_viewfinder_bin_class_init (GstViewfinderBinClass * klass)
"If video converters should be disabled (must be set on NULL)",
DEFAULT_DISABLE_CONVERTERS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+
+ gst_element_class_set_details_simple (element_class, "Viewfinder Bin",
+ "Sink/Video", "Viewfinder Bin used in camerabin2",
+ "Thiago Santos <thiago.sousa.santos@collabora.com>");
}
static void
-gst_viewfinder_bin_init (GstViewfinderBin * viewfinderbin,
- GstViewfinderBinClass * viewfinderbin_class)
+gst_viewfinder_bin_init (GstViewfinderBin * viewfinderbin)
{
GstPadTemplate *templ = gst_static_pad_template_get (&sink_template);
viewfinderbin->ghostpad = gst_ghost_pad_new_no_target_from_template ("sink",
diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c
index 1fc71c0b2..e0f52df40 100644
--- a/gst/camerabin2/gstwrappercamerabinsrc.c
+++ b/gst/camerabin2/gstwrappercamerabinsrc.c
@@ -1,7 +1,7 @@
/*
* GStreamer
* Copyright (C) 2010 Texas Instruments, Inc
- * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ * Copyright (C) 2011 Thiago Santos <thiago.sousa.santos@collabora.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -46,8 +46,9 @@ enum
GST_DEBUG_CATEGORY (wrapper_camera_bin_src_debug);
#define GST_CAT_DEFAULT wrapper_camera_bin_src_debug
-GST_BOILERPLATE (GstWrapperCameraBinSrc, gst_wrapper_camera_bin_src,
- GstBaseCameraSrc, GST_TYPE_BASE_CAMERA_SRC);
+#define gst_wrapper_camera_bin_src_parent_class parent_class
+G_DEFINE_TYPE (GstWrapperCameraBinSrc, gst_wrapper_camera_bin_src,
+ GST_TYPE_BIN);
static void set_capsfilter_caps (GstWrapperCameraBinSrc * self,
GstCaps * new_caps);
@@ -167,13 +168,14 @@ gst_wrapper_camera_bin_reset_video_src_caps (GstWrapperCameraBinSrc * self,
if (GST_IS_BIN (self->src_vid_src)) {
GstIterator *it =
gst_bin_iterate_elements (GST_BIN (self->src_vid_src));
- gpointer item = NULL;
+ GValue item = { 0 };
gboolean done = FALSE;
while (!done) {
switch (gst_iterator_next (it, &item)) {
case GST_ITERATOR_OK:
- gst_element_set_base_time (GST_ELEMENT (item), base_time);
- gst_object_unref (item);
+ gst_element_set_base_time (GST_ELEMENT (g_value_get_object
+ (&item)), base_time);
+ g_value_unset (&item);
break;
case GST_ITERATOR_RESYNC:
gst_iterator_resync (it);
@@ -199,20 +201,21 @@ gst_wrapper_camera_bin_reset_video_src_caps (GstWrapperCameraBinSrc * self,
*
* Buffer probe called before sending each buffer to image queue.
*/
-static gboolean
-gst_wrapper_camera_bin_src_imgsrc_probe (GstPad * pad, GstBuffer * buffer,
+static GstPadProbeReturn
+gst_wrapper_camera_bin_src_imgsrc_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer data)
{
GstWrapperCameraBinSrc *self = GST_WRAPPER_CAMERA_BIN_SRC (data);
GstBaseCameraSrc *camerasrc = GST_BASE_CAMERA_SRC (data);
- gboolean ret = FALSE;
+ GstBuffer *buffer = GST_BUFFER (info->data);
+ GstPadProbeReturn ret = GST_PAD_PROBE_DROP;
GST_LOG_OBJECT (self, "Image probe, mode %d, capture count %d",
camerasrc->mode, self->image_capture_count);
g_mutex_lock (camerasrc->capturing_mutex);
if (self->image_capture_count > 0) {
- ret = TRUE;
+ ret = GST_PAD_PROBE_OK;
self->image_capture_count--;
/* post preview */
@@ -234,13 +237,14 @@ gst_wrapper_camera_bin_src_imgsrc_probe (GstPad * pad, GstBuffer * buffer,
*
* Buffer probe called before sending each buffer to image queue.
*/
-static gboolean
-gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer,
+static GstPadProbeReturn
+gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer data)
{
GstWrapperCameraBinSrc *self = GST_WRAPPER_CAMERA_BIN_SRC (data);
GstBaseCameraSrc *camerasrc = GST_BASE_CAMERA_SRC_CAST (self);
- gboolean ret = FALSE;
+ GstPadProbeReturn ret = GST_PAD_PROBE_DROP;
+ GstBuffer *buffer = GST_BUFFER (info->data);
GST_LOG_OBJECT (self, "Video probe, mode %d, capture status %d",
camerasrc->mode, self->video_rec_status);
@@ -256,6 +260,7 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer,
/* NOP */
} else if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_STARTING) {
GstClockTime ts;
+ GstSegment segment;
GST_DEBUG_OBJECT (self, "Starting video recording");
self->video_rec_status = GST_VIDEO_RECORDING_STATUS_RUNNING;
@@ -263,14 +268,15 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer,
ts = GST_BUFFER_TIMESTAMP (buffer);
if (!GST_CLOCK_TIME_IS_VALID (ts))
ts = 0;
- gst_pad_push_event (self->vidsrc, gst_event_new_new_segment (FALSE, 1.0,
- GST_FORMAT_TIME, ts, -1, 0));
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.start = ts;
+ gst_pad_push_event (self->vidsrc, gst_event_new_segment (&segment));
/* post preview */
GST_DEBUG_OBJECT (self, "Posting preview for video");
gst_base_camera_src_post_preview (camerasrc, buffer);
- ret = TRUE;
+ ret = GST_PAD_PROBE_OK;
} else if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_FINISHING) {
/* send eos */
GST_DEBUG_OBJECT (self, "Finishing video recording, pushing eos");
@@ -278,14 +284,15 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer,
self->video_rec_status = GST_VIDEO_RECORDING_STATUS_DONE;
gst_base_camera_src_finish_capture (camerasrc);
} else {
- ret = TRUE;
+ ret = GST_PAD_PROBE_OK;
}
g_mutex_unlock (camerasrc->capturing_mutex);
return ret;
}
static gboolean
-gst_wrapper_camera_bin_src_event (GstPad * pad, GstEvent * event)
+gst_wrapper_camera_bin_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
GstWrapperCameraBinSrc *src =
GST_WRAPPER_CAMERA_BIN_SRC (GST_PAD_PARENT (pad));
@@ -302,25 +309,27 @@ gst_wrapper_camera_bin_src_event (GstPad * pad, GstEvent * event)
src->video_renegotiate = TRUE;
}
}
-
- return src->srcpad_event_func (pad, event);
+ //TODO porting
+ //return src->srcpad_event_func (pad, event);
+ return TRUE;
}
-static gboolean
-gst_wrapper_camera_src_src_event_probe (GstPad * pad, GstEvent * evt,
+static GstPadProbeReturn
+gst_wrapper_camera_src_src_event_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer udata)
{
- gboolean ret = TRUE;
+ GstPadProbeReturn ret = GST_PAD_PROBE_OK;
GstWrapperCameraBinSrc *self = udata;
+ GstEvent *evt = GST_EVENT (info->data);
switch (GST_EVENT_TYPE (evt)) {
case GST_EVENT_EOS:
/* drop */
- ret = FALSE;
+ ret = GST_PAD_PROBE_DROP;
break;
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
if (self->drop_newseg) {
- ret = FALSE;
+ ret = GST_PAD_PROBE_DROP;
self->drop_newseg = FALSE;
}
break;
@@ -343,7 +352,7 @@ gst_wrapper_camera_bin_src_caps_cb (GObject * gobject, GParamSpec * pspec,
/* get the new caps that were set on the capsfilter that configures the
* source */
src_caps_src_pad = gst_element_get_static_pad (self->src_filter, "src");
- caps = gst_pad_get_caps_reffed (src_caps_src_pad);
+ caps = gst_pad_query_caps (src_caps_src_pad, NULL);
gst_object_unref (src_caps_src_pad);
GST_DEBUG_OBJECT (self, "src-filter caps changed to %s",
gst_caps_to_string (caps));
@@ -439,8 +448,10 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc)
GstPad *pad;
pad = gst_element_get_static_pad (self->src_vid_src, "src");
- self->src_event_probe_id = gst_pad_add_event_probe (pad,
- (GCallback) gst_wrapper_camera_src_src_event_probe, self);
+ self->src_event_probe_id =
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ gst_wrapper_camera_src_src_event_probe, gst_object_ref (self),
+ gst_object_unref);
gst_object_unref (pad);
}
@@ -480,13 +491,13 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc)
goto done;
/* viewfinder pad */
- vf_pad = gst_element_get_request_pad (tee, "src%d");
+ vf_pad = gst_element_get_request_pad (tee, "src_%u");
g_object_set (tee, "alloc-pad", vf_pad, NULL);
gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), vf_pad);
gst_object_unref (vf_pad);
/* image/video pad from tee */
- tee_capture_pad = gst_element_get_request_pad (tee, "src%d");
+ tee_capture_pad = gst_element_get_request_pad (tee, "src_%u");
self->output_selector =
gst_element_factory_make ("output-selector", "outsel");
@@ -503,17 +514,19 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc)
/* Create the 2 output pads for video and image */
self->outsel_vidpad =
- gst_element_get_request_pad (self->output_selector, "src%d");
+ gst_element_get_request_pad (self->output_selector, "src_%u");
self->outsel_imgpad =
- gst_element_get_request_pad (self->output_selector, "src%d");
+ gst_element_get_request_pad (self->output_selector, "src_%u");
g_assert (self->outsel_vidpad != NULL);
g_assert (self->outsel_imgpad != NULL);
- gst_pad_add_buffer_probe (self->outsel_imgpad,
- G_CALLBACK (gst_wrapper_camera_bin_src_imgsrc_probe), self);
- gst_pad_add_buffer_probe (self->outsel_vidpad,
- G_CALLBACK (gst_wrapper_camera_bin_src_vidsrc_probe), self);
+ gst_pad_add_probe (self->outsel_imgpad, GST_PAD_PROBE_TYPE_BUFFER,
+ gst_wrapper_camera_bin_src_imgsrc_probe, gst_object_ref (self),
+ gst_object_unref);
+ gst_pad_add_probe (self->outsel_vidpad, GST_PAD_PROBE_TYPE_BUFFER,
+ gst_wrapper_camera_bin_src_vidsrc_probe, gst_object_ref (self),
+ gst_object_unref);
gst_ghost_pad_set_target (GST_GHOST_PAD (self->imgsrc),
self->outsel_imgpad);
gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc),
@@ -1062,19 +1075,6 @@ end:
}
static void
-gst_wrapper_camera_bin_src_base_init (gpointer g_class)
-{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
-
- GST_DEBUG_CATEGORY_INIT (wrapper_camera_bin_src_debug, "wrappercamerabinsrc",
- 0, "V4l2 camera src");
-
- gst_element_class_set_details_simple (gstelement_class,
- "V4l2 camera src element for camerabin", "Source/Video",
- "V4l2 camera src element for camerabin", "Rob Clark <rob@ti.com>");
-}
-
-static void
gst_wrapper_camera_bin_src_class_init (GstWrapperCameraBinSrcClass * klass)
{
GObjectClass *gobject_class;
@@ -1111,11 +1111,18 @@ gst_wrapper_camera_bin_src_class_init (GstWrapperCameraBinSrcClass * klass)
gst_wrapper_camera_bin_src_start_capture;
gstbasecamerasrc_class->stop_capture =
gst_wrapper_camera_bin_src_stop_capture;
+
+ GST_DEBUG_CATEGORY_INIT (wrapper_camera_bin_src_debug, "wrappercamerabinsrc",
+ 0, "wrapper camera src");
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "Wrapper camera src element for camerabin2", "Source/Video",
+ "Wrapper camera src element for camerabin2",
+ "Thiago Santos <thiago.sousa.santos@collabora.com>");
}
static void
-gst_wrapper_camera_bin_src_init (GstWrapperCameraBinSrc * self,
- GstWrapperCameraBinSrcClass * klass)
+gst_wrapper_camera_bin_src_init (GstWrapperCameraBinSrc * self)
{
self->vfsrc =
gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME,
diff --git a/gst/cdxaparse/gstcdxaparse.c b/gst/cdxaparse/gstcdxaparse.c
index 1f997b7bb..efcda2117 100644
--- a/gst/cdxaparse/gstcdxaparse.c
+++ b/gst/cdxaparse/gstcdxaparse.c
@@ -71,10 +71,10 @@ gst_cdxa_parse_base_init (gpointer g_class)
"Wim Taymans <wim.taymans@tvd.be>");
/* register src pads */
- gst_element_class_add_static_pad_template (element_class,
- &sink_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &src_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template_factory));
}
static void
diff --git a/gst/cdxaparse/gstvcdparse.c b/gst/cdxaparse/gstvcdparse.c
index 601cb6b59..4bf148b82 100644
--- a/gst/cdxaparse/gstvcdparse.c
+++ b/gst/cdxaparse/gstvcdparse.c
@@ -55,8 +55,10 @@ gst_vcd_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
gst_element_class_set_details_simple (element_class, "(S)VCD stream parser",
"Codec/Parser", "Strip (S)VCD stream from its sync headers",
diff --git a/gst/chart/gstchart.c b/gst/chart/gstchart.c
index da0a622ff..4e818b62a 100644
--- a/gst/chart/gstchart.c
+++ b/gst/chart/gstchart.c
@@ -138,8 +138,10 @@ gst_chart_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "Chart drawer",
"Visualization",
"Takes frames of data and outputs video frames of a chart of data",
diff --git a/gst/coloreffects/Makefile.am b/gst/coloreffects/Makefile.am
index 2dcbdd8e1..24a8b8062 100644
--- a/gst/coloreffects/Makefile.am
+++ b/gst/coloreffects/Makefile.am
@@ -6,12 +6,10 @@ libgstcoloreffects_la_SOURCES = \
gstchromahold.c
libgstcoloreffects_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_CONTROLLER_CFLAGS) \
$(GST_BASE_CFLAGS) \
$(GST_CFLAGS)
libgstcoloreffects_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_MAJORMINOR@ \
- $(GST_CONTROLLER_LIBS) \
$(GST_BASE_LIBS) \
$(GST_LIBS)
libgstcoloreffects_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/gst/coloreffects/gstchromahold.c b/gst/coloreffects/gstchromahold.c
index e6e7c4028..1c5524af4 100644
--- a/gst/coloreffects/gstchromahold.c
+++ b/gst/coloreffects/gstchromahold.c
@@ -128,10 +128,10 @@ gst_chroma_hold_base_init (gpointer g_class)
"Removes all color information except for one color",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_chroma_hold_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_chroma_hold_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_chroma_hold_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_chroma_hold_src_template));
GST_DEBUG_CATEGORY_INIT (gst_chroma_hold_debug, "chromahold", 0,
"chromahold - Removes all color information except for one color");
@@ -437,7 +437,7 @@ gst_chroma_hold_before_transform (GstBaseTransform * btrans, GstBuffer * buf)
GST_BUFFER_TIMESTAMP (buf));
GST_LOG ("Got stream time of %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (timestamp))
- gst_object_sync_values (G_OBJECT (self), timestamp);
+ gst_object_sync_values (GST_OBJECT (self), timestamp);
}
static GstFlowReturn
diff --git a/gst/coloreffects/gstcoloreffects.c b/gst/coloreffects/gstcoloreffects.c
index 0941df195..df78b8660 100644
--- a/gst/coloreffects/gstcoloreffects.c
+++ b/gst/coloreffects/gstcoloreffects.c
@@ -506,10 +506,10 @@ gst_color_effects_base_init (gpointer g_class)
"Color Look-up Table filter",
"Filippo Argiolas <filippo.argiolas@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_color_effects_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_color_effects_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_color_effects_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_color_effects_src_template));
}
static void
diff --git a/gst/colorspace/Makefile.am b/gst/colorspace/Makefile.am
deleted file mode 100644
index c5f5bd4cb..000000000
--- a/gst/colorspace/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-plugin_LTLIBRARIES = libgstcolorspace.la
-
-ORC_SOURCE=gstcolorspaceorc
-include $(top_srcdir)/common/orc.mak
-
-libgstcolorspace_la_SOURCES = gstcolorspace.c colorspace.c
-nodist_libgstcolorspace_la_SOURCES = $(ORC_NODIST_SOURCES)
-libgstcolorspace_la_CFLAGS = \
- $(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_CFLAGS) \
- $(ORC_CFLAGS)
-libgstcolorspace_la_LIBADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \
- $(GST_BASE_LIBS) \
- $(GST_LIBS) \
- $(ORC_LIBS)
-libgstcolorspace_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstcolorspace_la_LIBTOOLFLAGS = --tag=disable-static
-
-noinst_HEADERS = gstcolorspace.h colorspace.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
- androgenizer \
- -:PROJECT libgstcolorspace -:SHARED libgstcolorspace \
- -:TAGS eng debug \
- -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
- -:SOURCES $(libgstcolorspace_la_SOURCES) \
- $(nodist_libgstcolorspace_la_SOURCES) \
- -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstcolorspace_la_CFLAGS) \
- -:LDFLAGS $(libgstcolorspace_la_LDFLAGS) \
- $(libgstcolorspace_la_LIBADD) \
- -ldl \
- -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
- LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
- > $@
diff --git a/gst/colorspace/colorspace.c b/gst/colorspace/colorspace.c
deleted file mode 100644
index 15b6caf41..000000000
--- a/gst/colorspace/colorspace.c
+++ /dev/null
@@ -1,2474 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "colorspace.h"
-#include <glib.h>
-#include <string.h>
-#include "gstcolorspaceorc.h"
-
-
-static void colorspace_convert_generic (ColorspaceConvert * convert,
- guint8 * dest, const guint8 * src);
-static void colorspace_convert_lookup_fastpath (ColorspaceConvert * convert);
-static void colorspace_convert_lookup_getput (ColorspaceConvert * convert);
-static void colorspace_dither_none (ColorspaceConvert * convert, int j);
-static void colorspace_dither_verterr (ColorspaceConvert * convert, int j);
-static void colorspace_dither_halftone (ColorspaceConvert * convert, int j);
-
-
-ColorspaceConvert *
-colorspace_convert_new (GstVideoFormat to_format, ColorSpaceColorSpec to_spec,
- GstVideoFormat from_format, ColorSpaceColorSpec from_spec,
- int width, int height)
-{
- ColorspaceConvert *convert;
- int i;
-
- g_return_val_if_fail (!gst_video_format_is_rgb (to_format)
- || to_spec == COLOR_SPEC_RGB, NULL);
- g_return_val_if_fail (!gst_video_format_is_yuv (to_format)
- || to_spec == COLOR_SPEC_YUV_BT709
- || to_spec == COLOR_SPEC_YUV_BT470_6
- || to_spec == COLOR_SPEC_YUV_JPEG, NULL);
- g_return_val_if_fail (gst_video_format_is_rgb (to_format)
- || gst_video_format_is_yuv (to_format)
- || (gst_video_format_is_gray (to_format) &&
- to_spec == COLOR_SPEC_GRAY), NULL);
-
- g_return_val_if_fail (!gst_video_format_is_rgb (from_format)
- || from_spec == COLOR_SPEC_RGB, NULL);
- g_return_val_if_fail (!gst_video_format_is_yuv (from_format)
- || from_spec == COLOR_SPEC_YUV_BT709
- || from_spec == COLOR_SPEC_YUV_BT470_6
- || from_spec == COLOR_SPEC_YUV_JPEG, NULL);
- g_return_val_if_fail (gst_video_format_is_rgb (from_format)
- || gst_video_format_is_yuv (from_format)
- || (gst_video_format_is_gray (from_format) &&
- from_spec == COLOR_SPEC_GRAY), NULL);
-
- convert = g_malloc (sizeof (ColorspaceConvert));
- memset (convert, 0, sizeof (ColorspaceConvert));
-
- convert->to_format = to_format;
- convert->to_spec = to_spec;
- convert->from_format = from_format;
- convert->from_spec = from_spec;
- convert->height = height;
- convert->width = width;
- convert->convert = colorspace_convert_generic;
- convert->dither16 = colorspace_dither_none;
-
- if (gst_video_format_get_component_depth (to_format, 0) > 8 ||
- gst_video_format_get_component_depth (from_format, 0) > 8) {
- convert->use_16bit = TRUE;
- } else {
- convert->use_16bit = FALSE;
- }
-
- for (i = 0; i < 4; i++) {
- convert->dest_stride[i] = gst_video_format_get_row_stride (to_format, i,
- width);
- convert->dest_offset[i] = gst_video_format_get_component_offset (to_format,
- i, width, height);
- if (i == 0)
- convert->dest_offset[i] = 0;
-
- convert->src_stride[i] = gst_video_format_get_row_stride (from_format, i,
- width);
- convert->src_offset[i] = gst_video_format_get_component_offset (from_format,
- i, width, height);
- if (i == 0)
- convert->src_offset[i] = 0;
-
- GST_DEBUG ("%d: dest %d %d src %d %d", i,
- convert->dest_stride[i], convert->dest_offset[i],
- convert->src_stride[i], convert->src_offset[i]);
- }
-
- colorspace_convert_lookup_fastpath (convert);
- colorspace_convert_lookup_getput (convert);
-
- convert->tmpline = g_malloc (sizeof (guint8) * (width + 8) * 4);
- convert->tmpline16 = g_malloc (sizeof (guint16) * (width + 8) * 4);
- convert->errline = g_malloc (sizeof (guint16) * width * 4);
-
- if (to_format == GST_VIDEO_FORMAT_RGB8_PALETTED) {
- /* build poor man's palette, taken from ffmpegcolorspace */
- static const guint8 pal_value[6] = { 0x00, 0x33, 0x66, 0x99, 0xcc, 0xff };
- guint32 *palette;
- gint r, g, b;
-
- convert->palette = palette = g_new (guint32, 256);
- i = 0;
- for (r = 0; r < 6; r++) {
- for (g = 0; g < 6; g++) {
- for (b = 0; b < 6; b++) {
- palette[i++] =
- (0xffU << 24) | (pal_value[r] << 16) | (pal_value[g] << 8) |
- pal_value[b];
- }
- }
- }
- palette[i++] = 0; /* 100% transparent, i == 6*6*6 */
- while (i < 256)
- palette[i++] = 0xff000000;
- }
-
- return convert;
-}
-
-void
-colorspace_convert_free (ColorspaceConvert * convert)
-{
- g_free (convert->palette);
- g_free (convert->tmpline);
- g_free (convert->tmpline16);
- g_free (convert->errline);
-
- g_free (convert);
-}
-
-void
-colorspace_convert_set_interlaced (ColorspaceConvert * convert,
- gboolean interlaced)
-{
- convert->interlaced = interlaced;
-}
-
-void
-colorspace_convert_set_dither (ColorspaceConvert * convert, int type)
-{
- switch (type) {
- case 0:
- default:
- convert->dither16 = colorspace_dither_none;
- break;
- case 1:
- convert->dither16 = colorspace_dither_verterr;
- break;
- case 2:
- convert->dither16 = colorspace_dither_halftone;
- break;
- }
-}
-
-void
-colorspace_convert_set_palette (ColorspaceConvert * convert,
- const guint32 * palette)
-{
- if (convert->palette == NULL) {
- convert->palette = g_malloc (sizeof (guint32) * 256);
- }
- memcpy (convert->palette, palette, sizeof (guint32) * 256);
-}
-
-const guint32 *
-colorspace_convert_get_palette (ColorspaceConvert * convert)
-{
- return convert->palette;
-}
-
-void
-colorspace_convert_convert (ColorspaceConvert * convert,
- guint8 * dest, const guint8 * src)
-{
- convert->convert (convert, dest, src);
-}
-
-/* Line conversion to AYUV */
-
-#define FRAME_GET_LINE(dir, comp, line) \
- ((dir) + convert-> dir ## _offset[(comp)] + convert-> dir ## _stride[(comp)] * (line))
-
-static void
-getline_I420 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_I420 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j >> 1),
- FRAME_GET_LINE (src, 2, j >> 1), convert->width);
-}
-
-static void
-putline_I420 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_I420 (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 1, j >> 1),
- FRAME_GET_LINE (dest, 2, j >> 1), src, convert->width / 2);
-}
-
-static void
-getline_YV12 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_I420 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j >> 1),
- FRAME_GET_LINE (src, 2, j >> 1), convert->width);
-}
-
-static void
-putline_YV12 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_I420 (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 1, j >> 1),
- FRAME_GET_LINE (dest, 2, j >> 1), src, convert->width / 2);
-}
-
-static void
-getline_YUY2 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_YUY2 (dest, FRAME_GET_LINE (src, 0, j), convert->width / 2);
-}
-
-static void
-putline_YUY2 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_YUY2 (FRAME_GET_LINE (dest, 0, j), src, convert->width / 2);
-}
-
-static void
-getline_UYVY (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_UYVY (dest, FRAME_GET_LINE (src, 0, j), convert->width / 2);
-}
-
-static void
-putline_UYVY (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_UYVY (FRAME_GET_LINE (dest, 0, j), src, convert->width / 2);
-}
-
-static void
-getline_YVYU (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_YVYU (dest, FRAME_GET_LINE (src, 0, j), convert->width / 2);
-}
-
-static void
-putline_YVYU (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_YVYU (FRAME_GET_LINE (dest, 0, j), src, convert->width / 2);
-}
-
-static void
-getline_v308 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = srcline[i * 3 + 0];
- dest[i * 4 + 2] = srcline[i * 3 + 1];
- dest[i * 4 + 3] = srcline[i * 3 + 2];
- }
-}
-
-static void
-putline_v308 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i * 3 + 0] = src[i * 4 + 1];
- destline[i * 3 + 1] = src[i * 4 + 2];
- destline[i * 3 + 2] = src[i * 4 + 3];
- }
-}
-
-static void
-getline_AYUV (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- memcpy (dest, FRAME_GET_LINE (src, 0, j), convert->width * 4);
-}
-
-static void
-putline_AYUV (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- memcpy (FRAME_GET_LINE (dest, 0, j), src, convert->width * 4);
-}
-
-#if 0
-static void
-getline_v410 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = GST_READ_UINT16_LE (srcline + i * 8 + 0);
- dest[i * 4 + 1] = GST_READ_UINT16_LE (srcline + i * 8 + 2);
- dest[i * 4 + 2] = GST_READ_UINT16_LE (srcline + i * 8 + 4);
- dest[i * 4 + 3] = GST_READ_UINT16_LE (srcline + i * 8 + 6);
- }
-}
-#endif
-
-static void
-getline_v210 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
-
- for (i = 0; i < convert->width; i += 6) {
- guint32 a0, a1, a2, a3;
- guint16 y0, y1, y2, y3, y4, y5;
- guint16 u0, u2, u4;
- guint16 v0, v2, v4;
-
- a0 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 0);
- a1 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 4);
- a2 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 8);
- a3 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 12);
-
- u0 = ((a0 >> 0) & 0x3ff) >> 2;
- y0 = ((a0 >> 10) & 0x3ff) >> 2;
- v0 = ((a0 >> 20) & 0x3ff) >> 2;
- y1 = ((a1 >> 0) & 0x3ff) >> 2;
-
- u2 = ((a1 >> 10) & 0x3ff) >> 2;
- y2 = ((a1 >> 20) & 0x3ff) >> 2;
- v2 = ((a2 >> 0) & 0x3ff) >> 2;
- y3 = ((a2 >> 10) & 0x3ff) >> 2;
-
- u4 = ((a2 >> 20) & 0x3ff) >> 2;
- y4 = ((a3 >> 0) & 0x3ff) >> 2;
- v4 = ((a3 >> 10) & 0x3ff) >> 2;
- y5 = ((a3 >> 20) & 0x3ff) >> 2;
-
- dest[4 * (i + 0) + 0] = 0xff;
- dest[4 * (i + 0) + 1] = y0;
- dest[4 * (i + 0) + 2] = u0;
- dest[4 * (i + 0) + 3] = v0;
-
- dest[4 * (i + 1) + 0] = 0xff;
- dest[4 * (i + 1) + 1] = y1;
- dest[4 * (i + 1) + 2] = u0;
- dest[4 * (i + 1) + 3] = v0;
-
- dest[4 * (i + 2) + 0] = 0xff;
- dest[4 * (i + 2) + 1] = y2;
- dest[4 * (i + 2) + 2] = u2;
- dest[4 * (i + 2) + 3] = v2;
-
- dest[4 * (i + 3) + 0] = 0xff;
- dest[4 * (i + 3) + 1] = y3;
- dest[4 * (i + 3) + 2] = u2;
- dest[4 * (i + 3) + 3] = v2;
-
- dest[4 * (i + 4) + 0] = 0xff;
- dest[4 * (i + 4) + 1] = y4;
- dest[4 * (i + 4) + 2] = u4;
- dest[4 * (i + 4) + 3] = v4;
-
- dest[4 * (i + 5) + 0] = 0xff;
- dest[4 * (i + 5) + 1] = y5;
- dest[4 * (i + 5) + 2] = u4;
- dest[4 * (i + 5) + 3] = v4;
-
- }
-
-}
-
-static void
-putline_v210 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
-
- for (i = 0; i < convert->width + 5; i += 6) {
- guint32 a0, a1, a2, a3;
- guint16 y0, y1, y2, y3, y4, y5;
- guint16 u0, u1, u2;
- guint16 v0, v1, v2;
-
- y0 = src[4 * (i + 0) + 1] << 2;
- y1 = src[4 * (i + 1) + 1] << 2;
- y2 = src[4 * (i + 2) + 1] << 2;
- y3 = src[4 * (i + 3) + 1] << 2;
- y4 = src[4 * (i + 4) + 1] << 2;
- y5 = src[4 * (i + 5) + 1] << 2;
-
- u0 = (src[4 * (i + 0) + 2] + src[4 * (i + 1) + 2]) << 1;
- u1 = (src[4 * (i + 2) + 2] + src[4 * (i + 3) + 2]) << 1;
- u2 = (src[4 * (i + 4) + 2] + src[4 * (i + 5) + 2]) << 1;
-
- v0 = (src[4 * (i + 0) + 3] + src[4 * (i + 1) + 3]) << 1;
- v1 = (src[4 * (i + 2) + 3] + src[4 * (i + 3) + 3]) << 1;
- v2 = (src[4 * (i + 4) + 3] + src[4 * (i + 5) + 3]) << 1;
-
- a0 = u0 | (y0 << 10) | (v0 << 20);
- a1 = y1 | (u1 << 10) | (y2 << 20);
- a2 = v1 | (y3 << 10) | (u2 << 20);
- a3 = y4 | (v2 << 10) | (y5 << 20);
-
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 0, a0);
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 4, a1);
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 8, a2);
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 12, a3);
- }
-}
-
-static void
-getline16_v210 (ColorspaceConvert * convert, guint16 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
-
- for (i = 0; i < convert->width; i += 6) {
- guint32 a0, a1, a2, a3;
- guint16 y0, y1, y2, y3, y4, y5;
- guint16 u0, u2, u4;
- guint16 v0, v2, v4;
-
- a0 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 0);
- a1 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 4);
- a2 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 8);
- a3 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 12);
-
- u0 = ((a0 >> 0) & 0x3ff) << 6;
- y0 = ((a0 >> 10) & 0x3ff) << 6;
- v0 = ((a0 >> 20) & 0x3ff) << 6;
- y1 = ((a1 >> 0) & 0x3ff) << 6;
-
- u2 = ((a1 >> 10) & 0x3ff) << 6;
- y2 = ((a1 >> 20) & 0x3ff) << 6;
- v2 = ((a2 >> 0) & 0x3ff) << 6;
- y3 = ((a2 >> 10) & 0x3ff) << 6;
-
- u4 = ((a2 >> 20) & 0x3ff) << 6;
- y4 = ((a3 >> 0) & 0x3ff) << 6;
- v4 = ((a3 >> 10) & 0x3ff) << 6;
- y5 = ((a3 >> 20) & 0x3ff) << 6;
-
- dest[4 * (i + 0) + 0] = 0xffff;
- dest[4 * (i + 0) + 1] = y0;
- dest[4 * (i + 0) + 2] = u0;
- dest[4 * (i + 0) + 3] = v0;
-
- dest[4 * (i + 1) + 0] = 0xffff;
- dest[4 * (i + 1) + 1] = y1;
- dest[4 * (i + 1) + 2] = u0;
- dest[4 * (i + 1) + 3] = v0;
-
- dest[4 * (i + 2) + 0] = 0xffff;
- dest[4 * (i + 2) + 1] = y2;
- dest[4 * (i + 2) + 2] = u2;
- dest[4 * (i + 2) + 3] = v2;
-
- dest[4 * (i + 3) + 0] = 0xffff;
- dest[4 * (i + 3) + 1] = y3;
- dest[4 * (i + 3) + 2] = u2;
- dest[4 * (i + 3) + 3] = v2;
-
- dest[4 * (i + 4) + 0] = 0xffff;
- dest[4 * (i + 4) + 1] = y4;
- dest[4 * (i + 4) + 2] = u4;
- dest[4 * (i + 4) + 3] = v4;
-
- dest[4 * (i + 5) + 0] = 0xffff;
- dest[4 * (i + 5) + 1] = y5;
- dest[4 * (i + 5) + 2] = u4;
- dest[4 * (i + 5) + 3] = v4;
-
- }
-}
-
-static void
-putline16_v210 (ColorspaceConvert * convert, guint8 * dest, const guint16 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
-
- for (i = 0; i < convert->width + 5; i += 6) {
- guint32 a0, a1, a2, a3;
- guint16 y0, y1, y2, y3, y4, y5;
- guint16 u0, u1, u2;
- guint16 v0, v1, v2;
-
- y0 = src[4 * (i + 0) + 1] >> 6;
- y1 = src[4 * (i + 1) + 1] >> 6;
- y2 = src[4 * (i + 2) + 1] >> 6;
- y3 = src[4 * (i + 3) + 1] >> 6;
- y4 = src[4 * (i + 4) + 1] >> 6;
- y5 = src[4 * (i + 5) + 1] >> 6;
-
- u0 = (src[4 * (i + 0) + 2] + src[4 * (i + 1) + 2] + 1) >> 7;
- u1 = (src[4 * (i + 2) + 2] + src[4 * (i + 3) + 2] + 1) >> 7;
- u2 = (src[4 * (i + 4) + 2] + src[4 * (i + 5) + 2] + 1) >> 7;
-
- v0 = (src[4 * (i + 0) + 3] + src[4 * (i + 1) + 3] + 1) >> 7;
- v1 = (src[4 * (i + 2) + 3] + src[4 * (i + 3) + 3] + 1) >> 7;
- v2 = (src[4 * (i + 4) + 3] + src[4 * (i + 5) + 3] + 1) >> 7;
-
- a0 = u0 | (y0 << 10) | (v0 << 20);
- a1 = y1 | (u1 << 10) | (y2 << 20);
- a2 = v1 | (y3 << 10) | (u2 << 20);
- a3 = y4 | (v2 << 10) | (y5 << 20);
-
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 0, a0);
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 4, a1);
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 8, a2);
- GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 12, a3);
- }
-}
-
-static void
-getline_v216 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = GST_READ_UINT16_LE (srcline + i * 4 + 2) >> 8;
- dest[i * 4 + 2] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 0) >> 8;
- dest[i * 4 + 3] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 4) >> 8;
- }
-}
-
-static void
-putline_v216 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width / 2; i++) {
- GST_WRITE_UINT16_LE (destline + i * 8 + 0, src[(i * 2 + 0) * 4 + 2] << 8);
- GST_WRITE_UINT16_LE (destline + i * 8 + 2, src[(i * 2 + 0) * 4 + 1] << 8);
- GST_WRITE_UINT16_LE (destline + i * 8 + 4, src[(i * 2 + 1) * 4 + 3] << 8);
- GST_WRITE_UINT16_LE (destline + i * 8 + 8, src[(i * 2 + 0) * 4 + 1] << 8);
- }
-}
-
-static void
-getline16_v216 (ColorspaceConvert * convert, guint16 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xffff;
- dest[i * 4 + 1] = GST_READ_UINT16_LE (srcline + i * 4 + 2);
- dest[i * 4 + 2] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 0);
- dest[i * 4 + 3] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 4);
- }
-}
-
-static void
-putline16_v216 (ColorspaceConvert * convert, guint8 * dest, const guint16 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width / 2; i++) {
- GST_WRITE_UINT16_LE (destline + i * 8 + 0, src[(i * 2 + 0) * 4 + 2]);
- GST_WRITE_UINT16_LE (destline + i * 8 + 2, src[(i * 2 + 0) * 4 + 1]);
- GST_WRITE_UINT16_LE (destline + i * 8 + 4, src[(i * 2 + 1) * 4 + 3]);
- GST_WRITE_UINT16_LE (destline + i * 8 + 8, src[(i * 2 + 0) * 4 + 1]);
- }
-}
-
-static void
-getline_Y41B (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_YUV9 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j), FRAME_GET_LINE (src, 2, j),
- convert->width / 2);
-}
-
-static void
-putline_Y41B (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destlineY = FRAME_GET_LINE (dest, 0, j);
- guint8 *destlineU = FRAME_GET_LINE (dest, 1, j);
- guint8 *destlineV = FRAME_GET_LINE (dest, 2, j);
-
- for (i = 0; i < convert->width - 3; i += 4) {
- destlineY[i] = src[i * 4 + 1];
- destlineY[i + 1] = src[i * 4 + 5];
- destlineY[i + 2] = src[i * 4 + 9];
- destlineY[i + 3] = src[i * 4 + 13];
-
- destlineU[i >> 2] =
- (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + src[i * 4 + 14] +
- 2) >> 2;
- destlineV[i >> 2] =
- (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + src[i * 4 + 15] +
- 2) >> 2;
- }
-
- if (i == convert->width - 3) {
- destlineY[i] = src[i * 4 + 1];
- destlineY[i + 1] = src[i * 4 + 5];
- destlineY[i + 2] = src[i * 4 + 9];
-
- destlineU[i >> 2] =
- (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + 1) / 3;
- destlineV[i >> 2] =
- (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + 1) / 3;
- } else if (i == convert->width - 2) {
- destlineY[i] = src[i * 4 + 1];
- destlineY[i + 1] = src[i * 4 + 5];
-
- destlineU[i >> 2] = (src[i * 4 + 2] + src[i * 4 + 6] + 1) >> 1;
- destlineV[i >> 2] = (src[i * 4 + 3] + src[i * 4 + 7] + 1) >> 1;
- } else if (i == convert->width - 1) {
- destlineY[i + 1] = src[i * 4 + 5];
-
- destlineU[i >> 2] = src[i * 4 + 2];
- destlineV[i >> 2] = src[i * 4 + 3];
- }
-}
-
-static void
-getline_Y42B (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_Y42B (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j),
- FRAME_GET_LINE (src, 2, j), convert->width / 2);
-}
-
-static void
-putline_Y42B (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_Y42B (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 1, j),
- FRAME_GET_LINE (dest, 2, j), src, convert->width / 2);
-}
-
-static void
-getline_Y444 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_Y444 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j), FRAME_GET_LINE (src, 2, j), convert->width);
-}
-
-static void
-putline_Y444 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_Y444 (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 1, j),
- FRAME_GET_LINE (dest, 2, j), src, convert->width);
-}
-
-static void
-getline_Y800 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_Y800 (dest, FRAME_GET_LINE (src, 0, j), convert->width);
-}
-
-static void
-putline_Y800 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_Y800 (FRAME_GET_LINE (dest, 0, j), src, convert->width);
-}
-
-static void
-getline_Y16 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_Y16 (dest, FRAME_GET_LINE (src, 0, j), convert->width);
-}
-
-static void
-putline_Y16 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_Y16 (FRAME_GET_LINE (dest, 0, j), src, convert->width);
-}
-
-static void
-getline_RGB16 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = ((srcline[i] >> 11) & 0x1f) << 3;
- dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x3f) << 2;
- dest[i * 4 + 3] = ((srcline[i]) & 0x1f) << 3;
- }
-}
-
-static void
-putline_RGB16 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i] =
- ((src[i * 4 + 1] >> 3) << 11) | ((src[i * 4 +
- 2] >> 2) << 5) | (src[i * 4 + 3] >> 3);
- }
-}
-
-static void
-getline_BGR16 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 3] = ((srcline[i] >> 11) & 0x1f) << 3;
- dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x3f) << 2;
- dest[i * 4 + 1] = ((srcline[i]) & 0x1f) << 3;
- }
-}
-
-static void
-putline_BGR16 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i] =
- ((src[i * 4 + 3] >> 3) << 11) | ((src[i * 4 +
- 2] >> 2) << 5) | (src[i * 4 + 1] >> 3);
- }
-}
-
-static void
-getline_RGB15 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = ((srcline[i] >> 10) & 0x1f) << 3;
- dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x1f) << 3;
- dest[i * 4 + 3] = ((srcline[i]) & 0x1f) << 3;
- }
-}
-
-static void
-putline_RGB15 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i] =
- ((src[i * 4 + 1] >> 3) << 10) | ((src[i * 4 +
- 2] >> 3) << 5) | (src[i * 4 + 3] >> 3);
- }
-}
-
-static void
-getline_BGR15 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 3] = ((srcline[i] >> 10) & 0x1f) << 3;
- dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x1f) << 3;
- dest[i * 4 + 1] = ((srcline[i]) & 0x1f) << 3;
- }
-}
-
-static void
-putline_BGR15 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i] =
- ((src[i * 4 + 3] >> 3) << 10) | ((src[i * 4 +
- 2] >> 3) << 5) | (src[i * 4 + 1] >> 3);
- }
-}
-
-static void
-getline_BGRA (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_BGRA (dest, FRAME_GET_LINE (src, 0, j), convert->width);
-}
-
-static void
-putline_BGRA (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_BGRA (FRAME_GET_LINE (dest, 0, j), src, convert->width);
-}
-
-static void
-getline_ABGR (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_ABGR (dest, FRAME_GET_LINE (src, 0, j), convert->width);
-}
-
-static void
-putline_ABGR (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_ABGR (FRAME_GET_LINE (dest, 0, j), src, convert->width);
-}
-
-static void
-getline_RGBA (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_RGBA (dest, FRAME_GET_LINE (src, 0, j), convert->width);
-}
-
-static void
-putline_RGBA (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_RGBA (FRAME_GET_LINE (dest, 0, j), src, convert->width);
-}
-
-static void
-getline_RGB (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = srcline[i * 3 + 0];
- dest[i * 4 + 2] = srcline[i * 3 + 1];
- dest[i * 4 + 3] = srcline[i * 3 + 2];
- }
-}
-
-static void
-putline_RGB (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i * 3 + 0] = src[i * 4 + 1];
- destline[i * 3 + 1] = src[i * 4 + 2];
- destline[i * 3 + 2] = src[i * 4 + 3];
- }
-}
-
-static void
-getline_BGR (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = srcline[i * 3 + 2];
- dest[i * 4 + 2] = srcline[i * 3 + 1];
- dest[i * 4 + 3] = srcline[i * 3 + 0];
- }
-}
-
-static void
-putline_BGR (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- destline[i * 3 + 0] = src[i * 4 + 3];
- destline[i * 3 + 1] = src[i * 4 + 2];
- destline[i * 3 + 2] = src[i * 4 + 1];
- }
-}
-
-static void
-getline_NV12 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_NV12 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j >> 1), convert->width / 2);
-}
-
-static void
-putline_NV12 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_NV12 (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 1, j >> 1), src, convert->width / 2);
-}
-
-static void
-getline_NV21 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_NV21 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 2, j >> 1), convert->width / 2);
-}
-
-static void
-putline_NV21 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_NV21 (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 2, j >> 1), src, convert->width / 2);
-}
-
-static void
-getline_UYVP (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
-
- for (i = 0; i < convert->width; i += 2) {
- guint16 y0, y1;
- guint16 u0;
- guint16 v0;
-
- u0 = (src[(i / 2) * 5 + 0] << 2) | (src[(i / 2) * 5 + 1] >> 6);
- y0 = ((src[(i / 2) * 5 + 1] & 0x3f) << 4) | (src[(i / 2) * 5 + 2] >> 4);
- v0 = ((src[(i / 2) * 5 + 2] & 0x0f) << 6) | (src[(i / 2) * 5 + 3] >> 2);
- y1 = ((src[(i / 2) * 5 + 3] & 0x03) << 8) | src[(i / 2) * 5 + 4];
-
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = y0 >> 2;
- dest[i * 4 + 2] = u0 >> 2;
- dest[i * 4 + 3] = v0 >> 2;
- dest[i * 4 + 4] = 0xff;
- dest[i * 4 + 5] = y1 >> 2;
- dest[i * 4 + 6] = u0 >> 2;
- dest[i * 4 + 7] = v0 >> 2;
- }
-}
-
-static void
-putline_UYVP (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
-
- for (i = 0; i < convert->width; i += 2) {
- guint16 y0, y1;
- guint16 u0;
- guint16 v0;
-
- y0 = src[4 * (i + 0) + 1];
- y1 = src[4 * (i + 1) + 1];
- u0 = (src[4 * (i + 0) + 2] + src[4 * (i + 1) + 2] + 1) >> 1;
- v0 = (src[4 * (i + 0) + 3] + src[4 * (i + 1) + 3] + 1) >> 1;
-
- dest[(i / 2) * 5 + 0] = u0;
- dest[(i / 2) * 5 + 1] = y0 >> 2;
- dest[(i / 2) * 5 + 2] = (y0 << 6) | (v0 >> 4);
- dest[(i / 2) * 5 + 3] = (v0 << 4) | (y1 >> 2);
- dest[(i / 2) * 5 + 4] = (y1 << 2);
- }
-}
-
-static void
-getline_A420 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_A420 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j >> 1),
- FRAME_GET_LINE (src, 2, j >> 1),
- FRAME_GET_LINE (src, 3, j), convert->width);
-}
-
-static void
-putline_A420 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_putline_A420 (FRAME_GET_LINE (dest, 0, j),
- FRAME_GET_LINE (dest, 1, j >> 1),
- FRAME_GET_LINE (dest, 2, j >> 1),
- FRAME_GET_LINE (dest, 3, j), src, convert->width / 2);
-}
-
-static void
-getline_RGB8P (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- guint32 v = convert->palette[srcline[i]];
- dest[i * 4 + 0] = (v >> 24) & 0xff;
- dest[i * 4 + 1] = (v >> 16) & 0xff;
- dest[i * 4 + 2] = (v >> 8) & 0xff;
- dest[i * 4 + 3] = (v) & 0xff;
- }
-}
-
-static void
-putline_RGB8P (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- /* Use our poor man's palette, taken from ffmpegcolorspace too */
- for (i = 0; i < convert->width; i++) {
- /* crude approximation for alpha ! */
- if (src[i * 4 + 0] < 0x80)
- destline[i] = 6 * 6 * 6;
- else
- destline[i] =
- ((((src[i * 4 + 1]) / 47) % 6) * 6 * 6 + (((src[i * 4 +
- 2]) / 47) % 6) * 6 + (((src[i * 4 + 3]) / 47) % 6));
- }
-}
-
-
-static void
-getline_YUV9 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- cogorc_getline_YUV9 (dest,
- FRAME_GET_LINE (src, 0, j),
- FRAME_GET_LINE (src, 1, j >> 2),
- FRAME_GET_LINE (src, 2, j >> 2), convert->width / 2);
-}
-
-static void
-putline_YUV9 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destY = FRAME_GET_LINE (dest, 0, j);
- guint8 *destU = FRAME_GET_LINE (dest, 1, j >> 2);
- guint8 *destV = FRAME_GET_LINE (dest, 2, j >> 2);
-
- for (i = 0; i < convert->width - 3; i += 4) {
- destY[i] = src[i * 4 + 1];
- destY[i + 1] = src[i * 4 + 5];
- destY[i + 2] = src[i * 4 + 9];
- destY[i + 3] = src[i * 4 + 13];
- if (j % 4 == 0) {
- destU[i >> 2] =
- (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + src[i * 4 +
- 14]) >> 2;
- destV[i >> 2] =
- (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + src[i * 4 +
- 15]) >> 2;
- }
- }
-
- if (i == convert->width - 3) {
- destY[i] = src[i * 4 + 1];
- destY[i + 1] = src[i * 4 + 5];
- destY[i + 2] = src[i * 4 + 9];
- if (j % 4 == 0) {
- destU[i >> 2] = (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10]) / 3;
- destV[i >> 2] = (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11]) / 3;
- }
- } else if (i == convert->width - 2) {
- destY[i] = src[i * 4 + 1];
- destY[i + 1] = src[i * 4 + 5];
- if (j % 4 == 0) {
- destU[i >> 2] = (src[i * 4 + 2] + src[i * 4 + 6]) >> 1;
- destV[i >> 2] = (src[i * 4 + 3] + src[i * 4 + 7]) >> 1;
- }
- } else if (i == convert->width - 1) {
- destY[i] = src[i * 4 + 1];
- destU[i >> 2] = src[i * 4 + 2];
- destV[i >> 2] = src[i * 4 + 3];
- }
-}
-
-static void
-getline_IYU1 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
-
- for (i = 0; i < convert->width - 3; i += 4) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 4] = 0xff;
- dest[i * 4 + 8] = 0xff;
- dest[i * 4 + 12] = 0xff;
- dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
- dest[i * 4 + 5] = srcline[(i >> 2) * 6 + 2];
- dest[i * 4 + 9] = srcline[(i >> 2) * 6 + 4];
- dest[i * 4 + 13] = srcline[(i >> 2) * 6 + 5];
- dest[i * 4 + 2] = dest[i * 4 + 6] = dest[i * 4 + 10] = dest[i * 4 + 14] =
- srcline[(i >> 2) * 6 + 0];
- dest[i * 4 + 3] = dest[i * 4 + 7] = dest[i * 4 + 11] = dest[i * 4 + 15] =
- srcline[(i >> 2) * 6 + 3];
- }
-
- if (i == convert->width - 3) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 4] = 0xff;
- dest[i * 4 + 8] = 0xff;
- dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
- dest[i * 4 + 5] = srcline[(i >> 2) * 6 + 2];
- dest[i * 4 + 9] = srcline[(i >> 2) * 6 + 4];
- dest[i * 4 + 2] = dest[i * 4 + 6] = dest[i * 4 + 10] =
- srcline[(i >> 2) * 6 + 0];
- dest[i * 4 + 3] = dest[i * 4 + 7] = dest[i * 4 + 11] =
- srcline[(i >> 2) * 6 + 3];
- } else if (i == convert->width - 2) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 4] = 0xff;
- dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
- dest[i * 4 + 5] = srcline[(i >> 2) * 6 + 2];
- dest[i * 4 + 2] = dest[i * 4 + 6] = srcline[(i >> 2) * 6 + 0];
- dest[i * 4 + 3] = dest[i * 4 + 7] = srcline[(i >> 2) * 6 + 3];
- } else if (i == convert->width - 1) {
- dest[i * 4 + 0] = 0xff;
- dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
- dest[i * 4 + 2] = srcline[(i >> 2) * 6 + 0];
- dest[i * 4 + 3] = srcline[(i >> 2) * 6 + 3];
- }
-}
-
-static void
-putline_IYU1 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
-
- for (i = 0; i < convert->width - 3; i += 4) {
- destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
- destline[(i >> 2) * 6 + 2] = src[i * 4 + 5];
- destline[(i >> 2) * 6 + 4] = src[i * 4 + 9];
- destline[(i >> 2) * 6 + 5] = src[i * 4 + 13];
- destline[(i >> 2) * 6 + 0] =
- (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + src[i * 4 +
- 14]) >> 2;
- destline[(i >> 2) * 6 + 3] =
- (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + src[i * 4 +
- 15]) >> 2;
- }
-
- if (i == convert->width - 3) {
- destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
- destline[(i >> 2) * 6 + 2] = src[i * 4 + 5];
- destline[(i >> 2) * 6 + 4] = src[i * 4 + 9];
- destline[(i >> 2) * 6 + 0] =
- (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10]) / 3;
- destline[(i >> 2) * 6 + 3] =
- (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11]) / 3;
- } else if (i == convert->width - 2) {
- destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
- destline[(i >> 2) * 6 + 2] = src[i * 4 + 5];
- destline[(i >> 2) * 6 + 0] = (src[i * 4 + 2] + src[i * 4 + 6]) >> 1;
- destline[(i >> 2) * 6 + 3] = (src[i * 4 + 3] + src[i * 4 + 7]) >> 1;
- } else if (i == convert->width - 1) {
- destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
- destline[(i >> 2) * 6 + 0] = src[i * 4 + 2];
- destline[(i >> 2) * 6 + 3] = src[i * 4 + 3];
- }
-}
-
-static void
-getline_AY64 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width * 4; i++) {
- dest[i] = srcline[i] >> 8;
- }
-}
-
-static void
-putline_AY64 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width * 4; i++) {
- destline[i] = src[i] << 8;
- }
-}
-
-static void
-getline16_AY64 (ColorspaceConvert * convert, guint16 * dest, const guint8 * src,
- int j)
-{
- memcpy (dest, FRAME_GET_LINE (src, 0, j), convert->width * 8);
-}
-
-static void
-putline16_AY64 (ColorspaceConvert * convert, guint8 * dest, const guint16 * src,
- int j)
-{
- memcpy (FRAME_GET_LINE (dest, 0, j), src, convert->width * 8);
-}
-
-static void
-getline_r210 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- guint8 x;
- dest[i * 4 + 0] = 0xff;
- x = GST_READ_UINT32_BE (srcline + i * 4);
- dest[i * 4 + 1] = (x >> 22) & 0xff;
- dest[i * 4 + 2] = (x >> 12) & 0xff;
- dest[i * 4 + 3] = (x >> 2) & 0xff;
- }
-}
-
-static void
-putline_r210 (ColorspaceConvert * convert, guint8 * dest, const guint8 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width / 2; i++) {
- guint32 x = 0;
- x |= src[i * 4 + 1] << 22;
- x |= (src[i * 4 + 1] & 0xc0) << 14;
- x |= src[i * 4 + 2] << 12;
- x |= (src[i * 4 + 2] & 0xc0) << 10;
- x |= src[i * 4 + 3] << 2;
- x |= (src[i * 4 + 3] & 0xc0) >> 6;
- GST_WRITE_UINT32_BE (destline + i * 4, x);
- }
-}
-
-static void
-getline16_r210 (ColorspaceConvert * convert, guint16 * dest, const guint8 * src,
- int j)
-{
- int i;
- const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
- for (i = 0; i < convert->width; i++) {
- guint32 x;
- dest[i * 4 + 0] = 0xffff;
- x = GST_READ_UINT32_BE (srcline + i * 4);
- dest[i * 4 + 1] = ((x >> 14) & 0xffc0) | (x >> 24);
- dest[i * 4 + 2] = ((x >> 4) & 0xffc0) | ((x >> 14) & 0x3f);
- dest[i * 4 + 3] = ((x << 6) & 0xffc0) | ((x >> 4) & 0x3f);
- }
-}
-
-static void
-putline16_r210 (ColorspaceConvert * convert, guint8 * dest, const guint16 * src,
- int j)
-{
- int i;
- guint8 *destline = FRAME_GET_LINE (dest, 0, j);
- for (i = 0; i < convert->width; i++) {
- guint32 x = 0;
- x |= (src[i * 4 + 1] & 0xffc0) << 14;
- x |= (src[i * 4 + 2] & 0xffc0) << 4;
- x |= (src[i * 4 + 3] & 0xffc0) >> 6;
- GST_WRITE_UINT32_BE (destline + i * 4, x);
- }
-}
-
-static void
-getline16_convert (ColorspaceConvert * convert, guint16 * dest,
- const guint8 * src, int j)
-{
- int i;
- convert->getline (convert, convert->tmpline, src, j);
- for (i = 0; i < convert->width * 4; i++) {
- dest[i] = convert->tmpline[i] << 8;
- }
-}
-
-static void
-putline16_convert (ColorspaceConvert * convert, guint8 * dest,
- const guint16 * src, int j)
-{
- int i;
- for (i = 0; i < convert->width * 4; i++) {
- convert->tmpline[i] = src[i] >> 8;
- }
- convert->putline (convert, dest, convert->tmpline, j);
-}
-
-typedef struct
-{
- GstVideoFormat format;
- void (*getline) (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src, int j);
- void (*putline) (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src, int j);
- void (*getline16) (ColorspaceConvert * convert, guint16 * dest,
- const guint8 * src, int j);
- void (*putline16) (ColorspaceConvert * convert, guint8 * dest,
- const guint16 * src, int j);
-} ColorspaceLine;
-static const ColorspaceLine lines[] = {
- {GST_VIDEO_FORMAT_I420, getline_I420, putline_I420},
- {GST_VIDEO_FORMAT_YV12, getline_YV12, putline_YV12},
- {GST_VIDEO_FORMAT_YUY2, getline_YUY2, putline_YUY2},
- {GST_VIDEO_FORMAT_UYVY, getline_UYVY, putline_UYVY},
- {GST_VIDEO_FORMAT_AYUV, getline_AYUV, putline_AYUV},
- {GST_VIDEO_FORMAT_RGBx, getline_RGBA, putline_RGBA},
- {GST_VIDEO_FORMAT_BGRx, getline_BGRA, putline_BGRA},
- {GST_VIDEO_FORMAT_xRGB, getline_AYUV, putline_AYUV},
- {GST_VIDEO_FORMAT_xBGR, getline_ABGR, putline_ABGR},
- {GST_VIDEO_FORMAT_RGBA, getline_RGBA, putline_RGBA},
- {GST_VIDEO_FORMAT_BGRA, getline_BGRA, putline_BGRA},
- {GST_VIDEO_FORMAT_ARGB, getline_AYUV, putline_AYUV},
- {GST_VIDEO_FORMAT_ABGR, getline_ABGR, putline_ABGR},
- {GST_VIDEO_FORMAT_RGB, getline_RGB, putline_RGB},
- {GST_VIDEO_FORMAT_BGR, getline_BGR, putline_BGR},
- {GST_VIDEO_FORMAT_Y41B, getline_Y41B, putline_Y41B},
- {GST_VIDEO_FORMAT_Y42B, getline_Y42B, putline_Y42B},
- {GST_VIDEO_FORMAT_YVYU, getline_YVYU, putline_YVYU},
- {GST_VIDEO_FORMAT_Y444, getline_Y444, putline_Y444},
- {GST_VIDEO_FORMAT_v210, getline_v210, putline_v210,
- getline16_v210, putline16_v210},
- {GST_VIDEO_FORMAT_v216, getline_v216, putline_v216,
- getline16_v216, putline16_v216},
- {GST_VIDEO_FORMAT_NV12, getline_NV12, putline_NV12},
- {GST_VIDEO_FORMAT_NV21, getline_NV21, putline_NV21},
- //{GST_VIDEO_FORMAT_GRAY8, getline_GRAY8, putline_GRAY8},
- //{GST_VIDEO_FORMAT_GRAY16_BE, getline_GRAY16_BE, putline_GRAY16_BE},
- //{GST_VIDEO_FORMAT_GRAY16_LE, getline_GRAY16_LE, putline_GRAY16_LE},
- {GST_VIDEO_FORMAT_v308, getline_v308, putline_v308},
- {GST_VIDEO_FORMAT_Y800, getline_Y800, putline_Y800},
- {GST_VIDEO_FORMAT_Y16, getline_Y16, putline_Y16},
- {GST_VIDEO_FORMAT_RGB16, getline_RGB16, putline_RGB16},
- {GST_VIDEO_FORMAT_BGR16, getline_BGR16, putline_BGR16},
- {GST_VIDEO_FORMAT_RGB15, getline_RGB15, putline_RGB15},
- {GST_VIDEO_FORMAT_BGR15, getline_BGR15, putline_BGR15},
- {GST_VIDEO_FORMAT_UYVP, getline_UYVP, putline_UYVP},
- {GST_VIDEO_FORMAT_A420, getline_A420, putline_A420}
- , {GST_VIDEO_FORMAT_RGB8_PALETTED, getline_RGB8P, putline_RGB8P},
- {GST_VIDEO_FORMAT_YUV9, getline_YUV9, putline_YUV9},
- {GST_VIDEO_FORMAT_YVU9, getline_YUV9, putline_YUV9}, /* alias */
- {GST_VIDEO_FORMAT_IYU1, getline_IYU1, putline_IYU1},
- {GST_VIDEO_FORMAT_ARGB64, getline_AY64, putline_AY64, getline16_AY64,
- putline16_AY64},
- {GST_VIDEO_FORMAT_AYUV64, getline_AY64, putline_AY64, getline16_AY64,
- putline16_AY64},
- {GST_VIDEO_FORMAT_r210, getline_r210, putline_r210, getline16_r210,
- putline16_r210}
-};
-
-static void
-matrix_rgb_to_yuv_bt470_6 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint8 *tmpline = convert->tmpline;
-
- for (i = 0; i < convert->width; i++) {
- r = tmpline[i * 4 + 1];
- g = tmpline[i * 4 + 2];
- b = tmpline[i * 4 + 3];
-
- y = (66 * r + 129 * g + 25 * b + 4096) >> 8;
- u = (-38 * r - 74 * g + 112 * b + 32768) >> 8;
- v = (112 * r - 94 * g - 18 * b + 32768) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (y, 0, 255);
- tmpline[i * 4 + 2] = CLAMP (u, 0, 255);
- tmpline[i * 4 + 3] = CLAMP (v, 0, 255);
- }
-}
-
-static void
-matrix_rgb_to_yuv_bt709 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint8 *tmpline = convert->tmpline;
-
- for (i = 0; i < convert->width; i++) {
- r = tmpline[i * 4 + 1];
- g = tmpline[i * 4 + 2];
- b = tmpline[i * 4 + 3];
-
- y = (47 * r + 157 * g + 16 * b + 4096) >> 8;
- u = (-26 * r - 87 * g + 112 * b + 32768) >> 8;
- v = (112 * r - 102 * g - 10 * b + 32768) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (y, 0, 255);
- tmpline[i * 4 + 2] = CLAMP (u, 0, 255);
- tmpline[i * 4 + 3] = CLAMP (v, 0, 255);
- }
-}
-
-static void
-matrix_yuv_bt470_6_to_rgb (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint8 *tmpline = convert->tmpline;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (298 * y + 409 * v - 57068) >> 8;
- g = (298 * y - 100 * u - 208 * v + 34707) >> 8;
- b = (298 * y + 516 * u - 70870) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
- }
-}
-
-static void
-matrix_yuv_bt709_to_rgb (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint8 *tmpline = convert->tmpline;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (298 * y + 459 * v - 63514) >> 8;
- g = (298 * y - 55 * u - 136 * v + 19681) >> 8;
- b = (298 * y + 541 * u - 73988) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
- }
-}
-
-static void
-matrix_yuv_bt709_to_yuv_bt470_6 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint8 *tmpline = convert->tmpline;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (256 * y + 25 * u + 49 * v - 9536) >> 8;
- g = (253 * u - 28 * v + 3958) >> 8;
- b = (-19 * u + 252 * v + 2918) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
- }
-}
-
-static void
-matrix_yuv_bt470_6_to_yuv_bt709 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint8 *tmpline = convert->tmpline;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (256 * y - 30 * u - 53 * v + 10600) >> 8;
- g = (261 * u + 29 * v - 4367) >> 8;
- b = (19 * u + 262 * v - 3289) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
- }
-}
-
-static void
-matrix_identity (ColorspaceConvert * convert)
-{
- /* do nothing */
-}
-
-static void
-matrix16_rgb_to_yuv_bt470_6 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint16 *tmpline = convert->tmpline16;
-
- for (i = 0; i < convert->width; i++) {
- r = tmpline[i * 4 + 1];
- g = tmpline[i * 4 + 2];
- b = tmpline[i * 4 + 3];
-
- y = (66 * r + 129 * g + 25 * b + 4096 * 256) >> 8;
- u = (-38 * r - 74 * g + 112 * b + 32768 * 256) >> 8;
- v = (112 * r - 94 * g - 18 * b + 32768 * 256) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (y, 0, 65535);
- tmpline[i * 4 + 2] = CLAMP (u, 0, 65535);
- tmpline[i * 4 + 3] = CLAMP (v, 0, 65535);
- }
-}
-
-static void
-matrix16_rgb_to_yuv_bt709 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint16 *tmpline = convert->tmpline16;
-
- for (i = 0; i < convert->width; i++) {
- r = tmpline[i * 4 + 1];
- g = tmpline[i * 4 + 2];
- b = tmpline[i * 4 + 3];
-
- y = (47 * r + 157 * g + 16 * b + 4096 * 256) >> 8;
- u = (-26 * r - 87 * g + 112 * b + 32768 * 256) >> 8;
- v = (112 * r - 102 * g - 10 * b + 32768 * 256) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (y, 0, 65535);
- tmpline[i * 4 + 2] = CLAMP (u, 0, 65535);
- tmpline[i * 4 + 3] = CLAMP (v, 0, 65535);
- }
-}
-
-static void
-matrix16_yuv_bt470_6_to_rgb (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint16 *tmpline = convert->tmpline16;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (298 * y + 409 * v - 57068 * 256) >> 8;
- g = (298 * y - 100 * u - 208 * v + 34707 * 256) >> 8;
- b = (298 * y + 516 * u - 70870 * 256) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
- }
-}
-
-static void
-matrix16_yuv_bt709_to_rgb (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint16 *tmpline = convert->tmpline16;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (298 * y + 459 * v - 63514 * 256) >> 8;
- g = (298 * y - 55 * u - 136 * v + 19681 * 256) >> 8;
- b = (298 * y + 541 * u - 73988 * 256) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
- }
-}
-
-static void
-matrix16_yuv_bt709_to_yuv_bt470_6 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint16 *tmpline = convert->tmpline16;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (256 * y + 25 * u + 49 * v - 9536 * 256) >> 8;
- g = (253 * u - 28 * v + 3958 * 256) >> 8;
- b = (-19 * u + 252 * v + 2918 * 256) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
- }
-}
-
-static void
-matrix16_yuv_bt470_6_to_yuv_bt709 (ColorspaceConvert * convert)
-{
- int i;
- int r, g, b;
- int y, u, v;
- guint16 *tmpline = convert->tmpline16;
-
- for (i = 0; i < convert->width; i++) {
- y = tmpline[i * 4 + 1];
- u = tmpline[i * 4 + 2];
- v = tmpline[i * 4 + 3];
-
- r = (256 * y - 30 * u - 53 * v + 10600 * 256) >> 8;
- g = (261 * u + 29 * v - 4367 * 256) >> 8;
- b = (19 * u + 262 * v - 3289 * 256) >> 8;
-
- tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
- tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
- tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
- }
-}
-
-static void
-matrix16_identity (ColorspaceConvert * convert)
-{
- /* do nothing */
-}
-
-
-
-static void
-colorspace_convert_lookup_getput (ColorspaceConvert * convert)
-{
- int i;
-
- convert->getline = NULL;
- convert->getline16 = NULL;
- for (i = 0; i < sizeof (lines) / sizeof (lines[0]); i++) {
- if (lines[i].format == convert->from_format) {
- convert->getline = lines[i].getline;
- convert->getline16 = lines[i].getline16;
- break;
- }
- }
- convert->putline = NULL;
- convert->putline16 = NULL;
- for (i = 0; i < sizeof (lines) / sizeof (lines[0]); i++) {
- if (lines[i].format == convert->to_format) {
- convert->putline = lines[i].putline;
- convert->putline16 = lines[i].putline16;
- break;
- }
- }
- GST_DEBUG ("get %p put %p", convert->getline, convert->putline);
-
- if (convert->getline16 == NULL) {
- convert->getline16 = getline16_convert;
- }
- if (convert->putline16 == NULL) {
- convert->putline16 = putline16_convert;
- }
-
- if (convert->from_spec == convert->to_spec) {
- convert->matrix = matrix_identity;
- convert->matrix16 = matrix16_identity;
- } else if (convert->from_spec == COLOR_SPEC_RGB
- && convert->to_spec == COLOR_SPEC_YUV_BT470_6) {
- convert->matrix = matrix_rgb_to_yuv_bt470_6;
- convert->matrix16 = matrix16_rgb_to_yuv_bt470_6;
- } else if (convert->from_spec == COLOR_SPEC_RGB
- && convert->to_spec == COLOR_SPEC_YUV_BT709) {
- convert->matrix = matrix_rgb_to_yuv_bt709;
- convert->matrix16 = matrix16_rgb_to_yuv_bt709;
- } else if (convert->from_spec == COLOR_SPEC_YUV_BT470_6
- && convert->to_spec == COLOR_SPEC_RGB) {
- convert->matrix = matrix_yuv_bt470_6_to_rgb;
- convert->matrix16 = matrix16_yuv_bt470_6_to_rgb;
- } else if (convert->from_spec == COLOR_SPEC_YUV_BT709
- && convert->to_spec == COLOR_SPEC_RGB) {
- convert->matrix = matrix_yuv_bt709_to_rgb;
- convert->matrix16 = matrix16_yuv_bt709_to_rgb;
- } else if (convert->from_spec == COLOR_SPEC_YUV_BT709
- && convert->to_spec == COLOR_SPEC_YUV_BT470_6) {
- convert->matrix = matrix_yuv_bt709_to_yuv_bt470_6;
- convert->matrix16 = matrix16_yuv_bt709_to_yuv_bt470_6;
- } else if (convert->from_spec == COLOR_SPEC_YUV_BT470_6
- && convert->to_spec == COLOR_SPEC_YUV_BT709) {
- convert->matrix = matrix_yuv_bt470_6_to_yuv_bt709;
- convert->matrix16 = matrix16_yuv_bt470_6_to_yuv_bt709;
- }
-}
-
-static void
-colorspace_convert_generic (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int j;
-
- if (convert->getline == NULL) {
- GST_ERROR ("no getline");
- return;
- }
-
- if (convert->putline == NULL) {
- GST_ERROR ("no putline");
- return;
- }
-
- if (convert->use_16bit) {
- for (j = 0; j < convert->height; j++) {
- convert->getline16 (convert, convert->tmpline16, src, j);
- convert->matrix16 (convert);
- convert->dither16 (convert, j);
- convert->putline16 (convert, dest, convert->tmpline16, j);
- }
- } else {
- for (j = 0; j < convert->height; j++) {
- convert->getline (convert, convert->tmpline, src, j);
- convert->matrix (convert);
- convert->putline (convert, dest, convert->tmpline, j);
- }
- }
-}
-
-static void
-colorspace_dither_none (ColorspaceConvert * convert, int j)
-{
-}
-
-static void
-colorspace_dither_verterr (ColorspaceConvert * convert, int j)
-{
- int i;
- guint16 *tmpline = convert->tmpline16;
- guint16 *errline = convert->errline;
-
- for (i = 0; i < 4 * convert->width; i++) {
- tmpline[i] += errline[i];
- errline[i] = tmpline[i] & 0xff;
- }
-}
-
-static void
-colorspace_dither_halftone (ColorspaceConvert * convert, int j)
-{
- int i;
- guint16 *tmpline = convert->tmpline16;
- static guint16 halftone[8][8] = {
- {0, 128, 32, 160, 8, 136, 40, 168},
- {192, 64, 224, 96, 200, 72, 232, 104},
- {48, 176, 16, 144, 56, 184, 24, 152},
- {240, 112, 208, 80, 248, 120, 216, 88},
- {12, 240, 44, 172, 4, 132, 36, 164},
- {204, 76, 236, 108, 196, 68, 228, 100},
- {60, 188, 28, 156, 52, 180, 20, 148},
- {252, 142, 220, 92, 244, 116, 212, 84}
- };
-
- for (i = 0; i < convert->width * 4; i++) {
- tmpline[i] += halftone[(i >> 2) & 7][j & 7];
- }
-}
-
-/* Fast paths */
-
-static void
-convert_I420_YUY2 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int i;
-
- for (i = 0; i < GST_ROUND_DOWN_2 (convert->height); i += 2) {
- cogorc_convert_I420_YUY2 (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (dest, 0, i + 1),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 0, i + 1),
- FRAME_GET_LINE (src, 1, i >> 1),
- FRAME_GET_LINE (src, 2, i >> 1), (convert->width + 1) / 2);
- }
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_I420 (convert, convert->tmpline, src, convert->height - 1);
- putline_YUY2 (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_I420_UYVY (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int i;
-
- for (i = 0; i < GST_ROUND_DOWN_2 (convert->height); i += 2) {
- cogorc_convert_I420_UYVY (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (dest, 0, i + 1),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 0, i + 1),
- FRAME_GET_LINE (src, 1, i >> 1),
- FRAME_GET_LINE (src, 2, i >> 1), (convert->width + 1) / 2);
- }
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_I420 (convert, convert->tmpline, src, convert->height - 1);
- putline_UYVY (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_I420_AYUV (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int i;
-
- for (i = 0; i < GST_ROUND_DOWN_2 (convert->height); i += 2) {
- cogorc_convert_I420_AYUV (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (dest, 0, i + 1),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 0, i + 1),
- FRAME_GET_LINE (src, 1, i >> 1),
- FRAME_GET_LINE (src, 2, i >> 1), convert->width);
- }
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_I420 (convert, convert->tmpline, src, convert->height - 1);
- putline_AYUV (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_I420_Y42B (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), convert->dest_stride[0],
- FRAME_GET_LINE (src, 0, 0), convert->src_stride[0],
- convert->width, convert->height);
-
- cogorc_planar_chroma_420_422 (FRAME_GET_LINE (dest, 1, 0),
- 2 * convert->dest_stride[1], FRAME_GET_LINE (dest, 1, 1),
- 2 * convert->dest_stride[1], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], (convert->width + 1) / 2, convert->height / 2);
-
- cogorc_planar_chroma_420_422 (FRAME_GET_LINE (dest, 2, 0),
- 2 * convert->dest_stride[2], FRAME_GET_LINE (dest, 2, 1),
- 2 * convert->dest_stride[2], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height / 2);
-}
-
-static void
-convert_I420_Y444 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), convert->dest_stride[0],
- FRAME_GET_LINE (src, 0, 0), convert->src_stride[0],
- convert->width, convert->height);
-
- cogorc_planar_chroma_420_444 (FRAME_GET_LINE (dest, 1, 0),
- 2 * convert->dest_stride[1], FRAME_GET_LINE (dest, 1, 1),
- 2 * convert->dest_stride[1], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], (convert->width + 1) / 2, convert->height / 2);
-
- cogorc_planar_chroma_420_444 (FRAME_GET_LINE (dest, 2, 0),
- 2 * convert->dest_stride[2], FRAME_GET_LINE (dest, 2, 1),
- 2 * convert->dest_stride[2], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height / 2);
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_I420 (convert, convert->tmpline, src, convert->height - 1);
- putline_Y444 (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_YUY2_I420 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int i, h;
-
- h = convert->height;
- if (convert->width & 1)
- h--;
-
- for (i = 0; i < h; i += 2) {
- cogorc_convert_YUY2_I420 (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (dest, 0, i + 1),
- FRAME_GET_LINE (dest, 1, i >> 1),
- FRAME_GET_LINE (dest, 2, i >> 1),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 0, i + 1), (convert->width + 1) / 2);
- }
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_YUY2 (convert, convert->tmpline, src, convert->height - 1);
- putline_I420 (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_YUY2_AYUV (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_YUY2_AYUV (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2,
- convert->height & 1 ? convert->height - 1 : convert->height);
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_YUY2 (convert, convert->tmpline, src, convert->height - 1);
- putline_AYUV (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_YUY2_Y42B (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_YUY2_Y42B (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_YUY2_Y444 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_YUY2_Y444 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2, convert->height);
-}
-
-
-static void
-convert_UYVY_I420 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int i;
-
- for (i = 0; i < GST_ROUND_DOWN_2 (convert->height); i += 2) {
- cogorc_convert_UYVY_I420 (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (dest, 0, i + 1),
- FRAME_GET_LINE (dest, 1, i >> 1),
- FRAME_GET_LINE (dest, 2, i >> 1),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 0, i + 1), (convert->width + 1) / 2);
- }
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_UYVY (convert, convert->tmpline, src, convert->height - 1);
- putline_I420 (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_UYVY_AYUV (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_UYVY_AYUV (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2,
- convert->height & 1 ? convert->height - 1 : convert->height);
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_UYVY (convert, convert->tmpline, src, convert->height - 1);
- putline_AYUV (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_UYVY_YUY2 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_UYVY_YUY2 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_UYVY_Y42B (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_UYVY_Y42B (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_UYVY_Y444 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_UYVY_Y444 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_AYUV_I420 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_I420 (FRAME_GET_LINE (dest, 0, 0),
- 2 * convert->dest_stride[0], FRAME_GET_LINE (dest, 0, 1),
- 2 * convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- 2 * convert->src_stride[0], FRAME_GET_LINE (src, 0, 1),
- 2 * convert->src_stride[0], convert->width / 2, convert->height / 2);
-}
-
-static void
-convert_AYUV_YUY2 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_YUY2 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width / 2, convert->height);
-}
-
-static void
-convert_AYUV_UYVY (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_UYVY (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width / 2, convert->height);
-}
-
-static void
-convert_AYUV_Y42B (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_Y42B (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], (convert->width + 1) / 2,
- convert->height & 1 ? convert->height - 1 : convert->height);
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_AYUV (convert, convert->tmpline, src, convert->height - 1);
- putline_Y42B (convert, dest, convert->tmpline, convert->height - 1);
- }
-
-}
-
-static void
-convert_AYUV_Y444 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_Y444 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width, convert->height);
-}
-
-static void
-convert_Y42B_I420 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), convert->dest_stride[0],
- FRAME_GET_LINE (src, 0, 0), convert->src_stride[0],
- convert->width, convert->height);
-
- cogorc_planar_chroma_422_420 (FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (src, 1, 0),
- 2 * convert->src_stride[1], FRAME_GET_LINE (src, 1, 1),
- 2 * convert->src_stride[1], (convert->width + 1) / 2,
- convert->height / 2);
-
- cogorc_planar_chroma_422_420 (FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 2, 0),
- 2 * convert->src_stride[2], FRAME_GET_LINE (src, 2, 1),
- 2 * convert->src_stride[2], (convert->width + 1) / 2,
- convert->height / 2);
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_Y42B (convert, convert->tmpline, src, convert->height - 1);
- putline_I420 (convert, dest, convert->tmpline, convert->height - 1);
- }
-
-}
-
-static void
-convert_Y42B_Y444 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), convert->dest_stride[0],
- FRAME_GET_LINE (src, 0, 0), convert->src_stride[0],
- convert->width, convert->height);
-
- cogorc_planar_chroma_422_444 (FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], (convert->width + 1) / 2, convert->height);
-
- cogorc_planar_chroma_422_444 (FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_Y42B_YUY2 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_Y42B_YUY2 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_Y42B_UYVY (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_Y42B_UYVY (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_Y42B_AYUV (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_Y42B_AYUV (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width) / 2, convert->height);
-}
-
-static void
-convert_Y444_I420 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), convert->dest_stride[0],
- FRAME_GET_LINE (src, 0, 0), convert->src_stride[0],
- convert->width, convert->height);
-
- cogorc_planar_chroma_444_420 (FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (src, 1, 0),
- 2 * convert->src_stride[1], FRAME_GET_LINE (src, 1, 1),
- 2 * convert->src_stride[1], (convert->width + 1) / 2,
- convert->height / 2);
-
- cogorc_planar_chroma_444_420 (FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 2, 0),
- 2 * convert->src_stride[2], FRAME_GET_LINE (src, 2, 1),
- 2 * convert->src_stride[2], (convert->width + 1) / 2,
- convert->height / 2);
-
- /* now handle last line */
- if (convert->height & 1) {
- getline_Y444 (convert, convert->tmpline, src, convert->height - 1);
- putline_I420 (convert, dest, convert->tmpline, convert->height - 1);
- }
-}
-
-static void
-convert_Y444_Y42B (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), convert->dest_stride[0],
- FRAME_GET_LINE (src, 0, 0), convert->src_stride[0],
- convert->width, convert->height);
-
- cogorc_planar_chroma_444_422 (FRAME_GET_LINE (dest, 1, 0),
- convert->dest_stride[1], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], (convert->width + 1) / 2, convert->height);
-
- cogorc_planar_chroma_444_422 (FRAME_GET_LINE (dest, 2, 0),
- convert->dest_stride[2], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_Y444_YUY2 (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_Y444_YUY2 (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_Y444_UYVY (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_Y444_UYVY (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], (convert->width + 1) / 2, convert->height);
-}
-
-static void
-convert_Y444_AYUV (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_Y444_AYUV (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], FRAME_GET_LINE (src, 1, 0),
- convert->src_stride[1], FRAME_GET_LINE (src, 2, 0),
- convert->src_stride[2], convert->width, convert->height);
-}
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-static void
-convert_AYUV_ARGB (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_ARGB (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width, convert->height);
-}
-
-static void
-convert_AYUV_BGRA (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_BGRA (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width, convert->height);
-}
-
-static void
-convert_AYUV_ABGR (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_ABGR (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width, convert->height);
-}
-
-static void
-convert_AYUV_RGBA (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- cogorc_convert_AYUV_RGBA (FRAME_GET_LINE (dest, 0, 0),
- convert->dest_stride[0], FRAME_GET_LINE (src, 0, 0),
- convert->src_stride[0], convert->width, convert->height);
-}
-
-static void
-convert_I420_BGRA (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src)
-{
- int i;
- int quality = 0;
-
- if (quality > 3) {
- for (i = 0; i < convert->height; i++) {
- if (i & 1) {
- cogorc_convert_I420_BGRA_avg (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 1, i >> 1),
- FRAME_GET_LINE (src, 1, (i >> 1) + 1),
- FRAME_GET_LINE (src, 2, i >> 1),
- FRAME_GET_LINE (src, 2, (i >> 1) + 1), convert->width);
- } else {
- cogorc_convert_I420_BGRA (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 1, i >> 1),
- FRAME_GET_LINE (src, 2, i >> 1), convert->width);
- }
- }
- } else {
- for (i = 0; i < convert->height; i++) {
- cogorc_convert_I420_BGRA (FRAME_GET_LINE (dest, 0, i),
- FRAME_GET_LINE (src, 0, i),
- FRAME_GET_LINE (src, 1, i >> 1),
- FRAME_GET_LINE (src, 2, i >> 1), convert->width);
- }
- }
-}
-#endif
-
-
-
-/* Fast paths */
-
-typedef struct
-{
- GstVideoFormat from_format;
- ColorSpaceColorSpec from_spec;
- GstVideoFormat to_format;
- ColorSpaceColorSpec to_spec;
- gboolean keeps_color_spec;
- void (*convert) (ColorspaceConvert * convert, guint8 * dest,
- const guint8 * src);
-} ColorspaceTransform;
-static const ColorspaceTransform transforms[] = {
- {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
- COLOR_SPEC_NONE, TRUE, convert_I420_YUY2},
- {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
- COLOR_SPEC_NONE, TRUE, convert_I420_UYVY},
- {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
- COLOR_SPEC_NONE, TRUE, convert_I420_AYUV},
- {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
- COLOR_SPEC_NONE, TRUE, convert_I420_Y42B},
- {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
- COLOR_SPEC_NONE, TRUE, convert_I420_Y444},
-
- {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
- COLOR_SPEC_NONE, TRUE, convert_YUY2_I420},
- {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, TRUE, convert_UYVY_YUY2}, /* alias */
- {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
- COLOR_SPEC_NONE, TRUE, convert_YUY2_AYUV},
- {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
- COLOR_SPEC_NONE, TRUE, convert_YUY2_Y42B},
- {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
- COLOR_SPEC_NONE, TRUE, convert_YUY2_Y444},
-
- {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
- COLOR_SPEC_NONE, TRUE, convert_UYVY_I420},
- {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
- COLOR_SPEC_NONE, TRUE, convert_UYVY_YUY2},
- {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
- COLOR_SPEC_NONE, TRUE, convert_UYVY_AYUV},
- {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
- COLOR_SPEC_NONE, TRUE, convert_UYVY_Y42B},
- {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
- COLOR_SPEC_NONE, TRUE, convert_UYVY_Y444},
-
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
- COLOR_SPEC_NONE, TRUE, convert_AYUV_I420},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
- COLOR_SPEC_NONE, TRUE, convert_AYUV_YUY2},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
- COLOR_SPEC_NONE, TRUE, convert_AYUV_UYVY},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
- COLOR_SPEC_NONE, TRUE, convert_AYUV_Y42B},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
- COLOR_SPEC_NONE, TRUE, convert_AYUV_Y444},
-
- {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
- COLOR_SPEC_NONE, TRUE, convert_Y42B_I420},
- {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
- COLOR_SPEC_NONE, TRUE, convert_Y42B_YUY2},
- {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
- COLOR_SPEC_NONE, TRUE, convert_Y42B_UYVY},
- {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
- COLOR_SPEC_NONE, TRUE, convert_Y42B_AYUV},
- {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
- COLOR_SPEC_NONE, TRUE, convert_Y42B_Y444},
-
- {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
- COLOR_SPEC_NONE, TRUE, convert_Y444_I420},
- {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
- COLOR_SPEC_NONE, TRUE, convert_Y444_YUY2},
- {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
- COLOR_SPEC_NONE, TRUE, convert_Y444_UYVY},
- {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
- COLOR_SPEC_NONE, TRUE, convert_Y444_AYUV},
- {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
- COLOR_SPEC_NONE, TRUE, convert_Y444_Y42B},
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_ARGB,
- COLOR_SPEC_RGB, FALSE, convert_AYUV_ARGB},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_BGRA,
- COLOR_SPEC_RGB, FALSE, convert_AYUV_BGRA},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_xRGB, COLOR_SPEC_RGB, FALSE, convert_AYUV_ARGB}, /* alias */
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_BGRx, COLOR_SPEC_RGB, FALSE, convert_AYUV_BGRA}, /* alias */
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_ABGR,
- COLOR_SPEC_RGB, FALSE, convert_AYUV_ABGR},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_RGBA,
- COLOR_SPEC_RGB, FALSE, convert_AYUV_RGBA},
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_xBGR, COLOR_SPEC_RGB, FALSE, convert_AYUV_ABGR}, /* alias */
- {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_RGBx, COLOR_SPEC_RGB, FALSE, convert_AYUV_RGBA}, /* alias */
-
- {GST_VIDEO_FORMAT_I420, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_BGRA,
- COLOR_SPEC_RGB, FALSE, convert_I420_BGRA},
-#endif
-};
-
-static void
-colorspace_convert_lookup_fastpath (ColorspaceConvert * convert)
-{
- int i;
-
- for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) {
- if (transforms[i].to_format == convert->to_format &&
- transforms[i].from_format == convert->from_format &&
- (transforms[i].keeps_color_spec ||
- (transforms[i].from_spec == convert->from_spec &&
- transforms[i].to_spec == convert->to_spec))) {
- convert->convert = transforms[i].convert;
- return;
- }
- }
-}
diff --git a/gst/colorspace/colorspace.h b/gst/colorspace/colorspace.h
deleted file mode 100644
index 7ae889206..000000000
--- a/gst/colorspace/colorspace.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Colorspace conversion functions
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __COLORSPACE_H__
-#define __COLORSPACE_H__
-
-#include <gst/video/video.h>
-
-G_BEGIN_DECLS
-
-typedef struct _ColorspaceConvert ColorspaceConvert;
-typedef struct _ColorspaceFrame ColorspaceComponent;
-
-typedef enum {
- COLOR_SPEC_NONE = 0,
- COLOR_SPEC_RGB,
- COLOR_SPEC_GRAY,
- COLOR_SPEC_YUV_BT470_6,
- COLOR_SPEC_YUV_BT709,
- COLOR_SPEC_YUV_JPEG
-} ColorSpaceColorSpec;
-
-typedef enum {
- DITHER_NONE,
- DITHER_VERTERR,
- DITHER_HALFTONE
-} ColorSpaceDitherMethod;
-
-struct _ColorspaceComponent {
- int offset;
- int stride;
-};
-
-struct _ColorspaceConvert {
- gint width, height;
- gboolean interlaced;
- gboolean use_16bit;
- gboolean dither;
-
- GstVideoFormat from_format;
- ColorSpaceColorSpec from_spec;
- GstVideoFormat to_format;
- ColorSpaceColorSpec to_spec;
- guint32 *palette;
-
- guint8 *tmpline;
- guint16 *tmpline16;
- guint16 *errline;
-
- int dest_offset[4];
- int dest_stride[4];
- int src_offset[4];
- int src_stride[4];
-
- void (*convert) (ColorspaceConvert *convert, guint8 *dest, const guint8 *src);
- void (*getline) (ColorspaceConvert *convert, guint8 *dest, const guint8 *src, int j);
- void (*putline) (ColorspaceConvert *convert, guint8 *dest, const guint8 *src, int j);
- void (*matrix) (ColorspaceConvert *convert);
-
- void (*getline16) (ColorspaceConvert *convert, guint16 *dest, const guint8 *src, int j);
- void (*putline16) (ColorspaceConvert *convert, guint8 *dest, const guint16 *src, int j);
- void (*matrix16) (ColorspaceConvert *convert);
- void (*dither16) (ColorspaceConvert *convert, int j);
-};
-
-ColorspaceConvert * colorspace_convert_new (GstVideoFormat to_format,
- ColorSpaceColorSpec from_spec, GstVideoFormat from_format,
- ColorSpaceColorSpec to_spec, int width, int height);
-void colorspace_convert_set_dither (ColorspaceConvert * convert, int type);
-void colorspace_convert_set_interlaced (ColorspaceConvert *convert,
- gboolean interlaced);
-void colorspace_convert_set_palette (ColorspaceConvert *convert,
- const guint32 *palette);
-const guint32 * colorspace_convert_get_palette (ColorspaceConvert *convert);
-void colorspace_convert_free (ColorspaceConvert * convert);
-void colorspace_convert_convert (ColorspaceConvert * convert,
- guint8 *dest, const guint8 *src);
-
-
-G_END_DECLS
-
-#endif /* __GST_COLORSPACE_H__ */
diff --git a/gst/colorspace/colorspace.vcproj b/gst/colorspace/colorspace.vcproj
deleted file mode 100644
index f6ca6ceb9..000000000
--- a/gst/colorspace/colorspace.vcproj
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="colorspace"
- ProjectGUID="{979C216F-0ACF-4956-AE00-055A42D678AB}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="../../win32/Debug"
- IntermediateDirectory="../../win32/Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../../../gstreamer/win32;../../../gstreamer;../../../gstreamer/libs;../../../glib;../../../glib/glib;../../../glib/gmodule;&quot;../../gst-libs&quot;;../../../popt/include;../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;colorspace_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstcolorspace.dll"
- LinkIncremental="2"
- AdditionalLibraryDirectories="../../../gstreamer/win32/Debug;../../../glib/glib;../../../glib/gmodule;../../../glib/gthread;../../../glib/gobject;../../../gettext/lib;../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/colorspace.pdb"
- SubSystem="2"
- OptimizeReferences="2"
- ImportLibrary="$(OutDir)/gstcolorspace.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="../../win32/Release"
- IntermediateDirectory="../../win32/Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../gstreamer/win32;../../../gstreamer;../../../gstreamer/libs;../../../glib;../../../glib/glib;../../../glib/gmodule;&quot;../../gst-libs&quot;;../../../popt/include;../../../libxml2/include/libxml2"
- PreprocessorDefinitions="WIN32;NDEBUG;GST_DISABLE_GST_DEBUG;_WINDOWS;_USRDLL;colorspace_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="glib-2.0.lib gmodule-2.0.lib gthread-2.0.lib gobject-2.0.lib libgstreamer.lib gstbytestream.lib iconv.lib intl.lib"
- OutputFile="$(OutDir)/gstcolorspace.dll"
- LinkIncremental="1"
- AdditionalLibraryDirectories="../../../gstreamer/win32/Release;../../../glib/glib;../../../glib/gmodule;../../../glib/gthread;../../../glib/gobject;../../../gettext/lib;../../../libiconv/lib"
- ModuleDefinitionFile=""
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/gstcolorspace.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy /Y $(TargetPath) c:\gstreamer\plugins"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\gstcolorspace.c">
- </File>
- <File
- RelativePath=".\yuv2rgb.c">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\gstcolorspace.h">
- </File>
- <File
- RelativePath=".\yuv2rgb.h">
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/gst/colorspace/gstcolorspace.c b/gst/colorspace/gstcolorspace.c
deleted file mode 100644
index c1d68e72d..000000000
--- a/gst/colorspace/gstcolorspace.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * This file:
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/**
- * SECTION:element-colorspace
- *
- * Convert video frames between a great variety of colorspace formats.
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch -v videotestsrc ! video/x-raw-yuv,format=\(fourcc\)YUY2 ! colorspace ! ximagesink
- * ]|
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gstcolorspace.h"
-#include <gst/video/video.h>
-
-#include <string.h>
-
-GST_DEBUG_CATEGORY (colorspace_debug);
-#define GST_CAT_DEFAULT colorspace_debug
-GST_DEBUG_CATEGORY (colorspace_performance);
-
-enum
-{
- PROP_0,
- PROP_DITHER
-};
-
-#define CSP_VIDEO_CAPS \
- "video/x-raw-yuv, width = "GST_VIDEO_SIZE_RANGE" , " \
- "height="GST_VIDEO_SIZE_RANGE",framerate="GST_VIDEO_FPS_RANGE"," \
- "format= (fourcc) { I420 , NV12 , NV21 , YV12 , YUY2 , Y42B , Y444 , YUV9 , YVU9 , Y41B , Y800 , Y8 , GREY , Y16 , UYVY , YVYU , IYU1 , v308 , AYUV, v210, v216, A420, AY64 } ;" \
- GST_VIDEO_CAPS_RGB";" \
- GST_VIDEO_CAPS_BGR";" \
- GST_VIDEO_CAPS_RGBx";" \
- GST_VIDEO_CAPS_xRGB";" \
- GST_VIDEO_CAPS_BGRx";" \
- GST_VIDEO_CAPS_xBGR";" \
- GST_VIDEO_CAPS_RGBA";" \
- GST_VIDEO_CAPS_ARGB";" \
- GST_VIDEO_CAPS_BGRA";" \
- GST_VIDEO_CAPS_ABGR";" \
- GST_VIDEO_CAPS_RGB_16";" \
- GST_VIDEO_CAPS_BGR_16";" \
- GST_VIDEO_CAPS_RGB_15";" \
- GST_VIDEO_CAPS_BGR_15";" \
- GST_VIDEO_CAPS_RGB8_PALETTED "; " \
- GST_VIDEO_CAPS_GRAY8";" \
- GST_VIDEO_CAPS_GRAY16("BIG_ENDIAN")";" \
- GST_VIDEO_CAPS_GRAY16("LITTLE_ENDIAN")";" \
- GST_VIDEO_CAPS_r210";" \
- GST_VIDEO_CAPS_ARGB_64
-
-static GstStaticPadTemplate gst_csp_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (CSP_VIDEO_CAPS)
- );
-
-static GstStaticPadTemplate gst_csp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (CSP_VIDEO_CAPS)
- );
-
-GType gst_csp_get_type (void);
-
-static void gst_csp_set_property (GObject * object,
- guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_csp_get_property (GObject * object,
- guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_csp_dispose (GObject * object);
-
-static gboolean gst_csp_set_caps (GstBaseTransform * btrans,
- GstCaps * incaps, GstCaps * outcaps);
-static gboolean gst_csp_get_unit_size (GstBaseTransform * btrans,
- GstCaps * caps, guint * size);
-static GstFlowReturn gst_csp_transform (GstBaseTransform * btrans,
- GstBuffer * inbuf, GstBuffer * outbuf);
-
-static GQuark _QRAWRGB; /* "video/x-raw-rgb" */
-static GQuark _QRAWYUV; /* "video/x-raw-yuv" */
-static GQuark _QALPHAMASK; /* "alpha_mask" */
-
-
-static GType
-dither_method_get_type (void)
-{
- static GType gtype = 0;
-
- if (gtype == 0) {
- static const GEnumValue values[] = {
- {DITHER_NONE, "No dithering (default)", "none"},
- {DITHER_VERTERR, "Vertical error propogation", "verterr"},
- {DITHER_HALFTONE, "Half-tone", "halftone"},
- {0, NULL, NULL}
- };
-
- gtype = g_enum_register_static ("GstColorspaceDitherMethod", values);
- }
- return gtype;
-}
-
-/* copies the given caps */
-static GstCaps *
-gst_csp_caps_remove_format_info (GstCaps * caps)
-{
- GstStructure *yuvst, *rgbst, *grayst;
-
- /* We know there's only one structure since we're given simple caps */
- caps = gst_caps_copy (caps);
-
- yuvst = gst_caps_get_structure (caps, 0);
-
- gst_structure_set_name (yuvst, "video/x-raw-yuv");
- gst_structure_remove_fields (yuvst, "format", "endianness", "depth",
- "bpp", "red_mask", "green_mask", "blue_mask", "alpha_mask",
- "palette_data", "color-matrix", NULL);
-
- rgbst = gst_structure_copy (yuvst);
- gst_structure_set_name (rgbst, "video/x-raw-rgb");
- gst_structure_remove_fields (rgbst, "color-matrix", "chroma-site", NULL);
-
- grayst = gst_structure_copy (rgbst);
- gst_structure_set_name (grayst, "video/x-raw-gray");
-
- gst_caps_append_structure (caps, rgbst);
- gst_caps_append_structure (caps, grayst);
-
- return caps;
-}
-
-
-static gboolean
-gst_csp_structure_is_alpha (GstStructure * s)
-{
- GQuark name;
-
- name = gst_structure_get_name_id (s);
-
- if (name == _QRAWRGB) {
- return gst_structure_id_has_field (s, _QALPHAMASK);
- } else if (name == _QRAWYUV) {
- guint32 fourcc;
-
- if (!gst_structure_get_fourcc (s, "format", &fourcc))
- return FALSE;
-
- return (fourcc == GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'));
- }
-
- return FALSE;
-}
-
-/* The caps can be transformed into any other caps with format info removed.
- * However, we should prefer passthrough, so if passthrough is possible,
- * put it first in the list. */
-static GstCaps *
-gst_csp_transform_caps (GstBaseTransform * btrans,
- GstPadDirection direction, GstCaps * caps)
-{
- GstCaps *template;
- GstCaps *tmp, *tmp2;
- GstCaps *result;
- GstStructure *s;
- GstCaps *alpha, *non_alpha;
-
- template = gst_static_pad_template_get_caps (&gst_csp_src_template);
- result = gst_caps_copy (caps);
-
- /* Get all possible caps that we can transform to */
- tmp = gst_csp_caps_remove_format_info (caps);
- tmp2 = gst_caps_intersect (tmp, template);
- gst_caps_unref (tmp);
- tmp = tmp2;
-
- /* Now move alpha formats to the beginning if caps is an alpha format
- * or at the end if caps is no alpha format */
- alpha = gst_caps_new_empty ();
- non_alpha = gst_caps_new_empty ();
-
- while ((s = gst_caps_steal_structure (tmp, 0))) {
- if (gst_csp_structure_is_alpha (s))
- gst_caps_append_structure (alpha, s);
- else
- gst_caps_append_structure (non_alpha, s);
- }
-
- s = gst_caps_get_structure (caps, 0);
- gst_caps_unref (tmp);
-
- if (gst_csp_structure_is_alpha (s)) {
- gst_caps_append (alpha, non_alpha);
- tmp = alpha;
- } else {
- gst_caps_append (non_alpha, alpha);
- tmp = non_alpha;
- }
-
- gst_caps_append (result, tmp);
-
- GST_DEBUG_OBJECT (btrans, "transformed %" GST_PTR_FORMAT " into %"
- GST_PTR_FORMAT, caps, result);
-
- return result;
-}
-
-static gboolean
-gst_csp_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
- GstCaps * outcaps)
-{
- GstCsp *space;
- GstVideoFormat in_format;
- GstVideoFormat out_format;
- gint in_height, in_width;
- gint out_height, out_width;
- gint in_fps_n, in_fps_d, in_par_n, in_par_d;
- gint out_fps_n, out_fps_d, out_par_n, out_par_d;
- gboolean have_in_par, have_out_par;
- gboolean have_in_interlaced, have_out_interlaced;
- gboolean in_interlaced, out_interlaced;
- gboolean ret;
- ColorSpaceColorSpec in_spec, out_spec;
-
- space = GST_CSP (btrans);
-
- if (space->convert) {
- colorspace_convert_free (space->convert);
- }
-
- /* input caps */
-
- ret = gst_video_format_parse_caps (incaps, &in_format, &in_width, &in_height);
- if (!ret)
- goto no_width_height;
-
- ret = gst_video_parse_caps_framerate (incaps, &in_fps_n, &in_fps_d);
- if (!ret)
- goto no_framerate;
-
- have_in_par = gst_video_parse_caps_pixel_aspect_ratio (incaps,
- &in_par_n, &in_par_d);
- have_in_interlaced = gst_video_format_parse_caps_interlaced (incaps,
- &in_interlaced);
-
- if (gst_video_format_is_rgb (in_format)) {
- in_spec = COLOR_SPEC_RGB;
- } else if (gst_video_format_is_yuv (in_format)) {
- const gchar *matrix = gst_video_parse_caps_color_matrix (incaps);
-
- if (matrix && g_str_equal (matrix, "hdtv"))
- in_spec = COLOR_SPEC_YUV_BT709;
- else if (matrix && g_str_equal (matrix, "jpeg"))
- in_spec = COLOR_SPEC_YUV_JPEG;
- else
- in_spec = COLOR_SPEC_YUV_BT470_6;
- } else {
- in_spec = COLOR_SPEC_GRAY;
- }
-
- /* output caps */
-
- ret =
- gst_video_format_parse_caps (outcaps, &out_format, &out_width,
- &out_height);
- if (!ret)
- goto no_width_height;
-
- ret = gst_video_parse_caps_framerate (outcaps, &out_fps_n, &out_fps_d);
- if (!ret)
- goto no_framerate;
-
- have_out_par = gst_video_parse_caps_pixel_aspect_ratio (outcaps,
- &out_par_n, &out_par_d);
- have_out_interlaced = gst_video_format_parse_caps_interlaced (incaps,
- &out_interlaced);
-
- if (gst_video_format_is_rgb (out_format)) {
- out_spec = COLOR_SPEC_RGB;
- } else if (gst_video_format_is_yuv (out_format)) {
- const gchar *matrix = gst_video_parse_caps_color_matrix (outcaps);
-
- if (matrix && g_str_equal (matrix, "hdtv"))
- out_spec = COLOR_SPEC_YUV_BT709;
- else if (matrix && g_str_equal (matrix, "jpeg"))
- out_spec = COLOR_SPEC_YUV_JPEG;
- else
- out_spec = COLOR_SPEC_YUV_BT470_6;
- } else {
- out_spec = COLOR_SPEC_GRAY;
- }
-
- /* these must match */
- if (in_width != out_width || in_height != out_height ||
- in_fps_n != out_fps_n || in_fps_d != out_fps_d)
- goto format_mismatch;
-
- /* if present, these must match too */
- if (have_in_par && have_out_par &&
- (in_par_n != out_par_n || in_par_d != out_par_d))
- goto format_mismatch;
-
- /* if present, these must match too */
- if (have_in_interlaced && have_out_interlaced &&
- in_interlaced != out_interlaced)
- goto format_mismatch;
-
- space->from_format = in_format;
- space->from_spec = in_spec;
- space->to_format = out_format;
- space->to_spec = out_spec;
- space->width = in_width;
- space->height = in_height;
- space->interlaced = in_interlaced;
-
- space->convert = colorspace_convert_new (out_format, out_spec, in_format,
- in_spec, in_width, in_height);
- if (space->convert) {
- colorspace_convert_set_interlaced (space->convert, in_interlaced);
- }
- /* palette, only for from data */
- if (space->from_format == GST_VIDEO_FORMAT_RGB8_PALETTED &&
- space->to_format == GST_VIDEO_FORMAT_RGB8_PALETTED) {
- goto format_mismatch;
- } else if (space->from_format == GST_VIDEO_FORMAT_RGB8_PALETTED) {
- GstBuffer *palette;
-
- palette = gst_video_parse_caps_palette (incaps);
-
- if (!palette || GST_BUFFER_SIZE (palette) < 256 * 4) {
- if (palette)
- gst_buffer_unref (palette);
- goto invalid_palette;
- }
- colorspace_convert_set_palette (space->convert,
- (const guint32 *) GST_BUFFER_DATA (palette));
- gst_buffer_unref (palette);
- } else if (space->to_format == GST_VIDEO_FORMAT_RGB8_PALETTED) {
- const guint32 *palette;
- GstBuffer *p_buf;
-
- palette = colorspace_convert_get_palette (space->convert);
- p_buf = gst_buffer_new_and_alloc (256 * 4);
- memcpy (GST_BUFFER_DATA (p_buf), palette, 256 * 4);
- gst_caps_set_simple (outcaps, "palette_data", GST_TYPE_BUFFER, p_buf, NULL);
- gst_buffer_unref (p_buf);
- }
-
- GST_DEBUG ("reconfigured %d %d", space->from_format, space->to_format);
-
- return TRUE;
-
- /* ERRORS */
-no_width_height:
- {
- GST_ERROR_OBJECT (space, "did not specify width or height");
- space->from_format = GST_VIDEO_FORMAT_UNKNOWN;
- space->to_format = GST_VIDEO_FORMAT_UNKNOWN;
- return FALSE;
- }
-no_framerate:
- {
- GST_ERROR_OBJECT (space, "did not specify framerate");
- space->from_format = GST_VIDEO_FORMAT_UNKNOWN;
- space->to_format = GST_VIDEO_FORMAT_UNKNOWN;
- return FALSE;
- }
-format_mismatch:
- {
- GST_ERROR_OBJECT (space, "input and output formats do not match");
- space->from_format = GST_VIDEO_FORMAT_UNKNOWN;
- space->to_format = GST_VIDEO_FORMAT_UNKNOWN;
- return FALSE;
- }
-invalid_palette:
- {
- GST_ERROR_OBJECT (space, "invalid palette");
- space->from_format = GST_VIDEO_FORMAT_UNKNOWN;
- space->to_format = GST_VIDEO_FORMAT_UNKNOWN;
- return FALSE;
- }
-}
-
-GST_BOILERPLATE (GstCsp, gst_csp, GstVideoFilter, GST_TYPE_VIDEO_FILTER);
-
-static void
-gst_csp_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_csp_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_csp_sink_template);
-
- gst_element_class_set_details_simple (element_class,
- " Colorspace converter", "Filter/Converter/Video",
- "Converts video from one colorspace to another",
- "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
-
- _QRAWRGB = g_quark_from_string ("video/x-raw-rgb");
- _QRAWYUV = g_quark_from_string ("video/x-raw-yuv");
- _QALPHAMASK = g_quark_from_string ("alpha_mask");
-}
-
-void
-gst_csp_dispose (GObject * object)
-{
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-gst_csp_finalize (GObject * obj)
-{
- GstCsp *space = GST_CSP (obj);
-
- if (space->convert) {
- colorspace_convert_free (space->convert);
- }
-
- G_OBJECT_CLASS (parent_class)->finalize (obj);
-
-}
-
-static void
-gst_csp_class_init (GstCspClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
- GstBaseTransformClass *gstbasetransform_class =
- (GstBaseTransformClass *) klass;
-
- gobject_class->set_property = gst_csp_set_property;
- gobject_class->get_property = gst_csp_get_property;
- gobject_class->dispose = gst_csp_dispose;
- gobject_class->finalize = gst_csp_finalize;
-
- gstbasetransform_class->transform_caps =
- GST_DEBUG_FUNCPTR (gst_csp_transform_caps);
- gstbasetransform_class->set_caps = GST_DEBUG_FUNCPTR (gst_csp_set_caps);
- gstbasetransform_class->get_unit_size =
- GST_DEBUG_FUNCPTR (gst_csp_get_unit_size);
- gstbasetransform_class->transform = GST_DEBUG_FUNCPTR (gst_csp_transform);
-
- gstbasetransform_class->passthrough_on_same_caps = TRUE;
-
- g_object_class_install_property (gobject_class, PROP_DITHER,
- g_param_spec_enum ("dither", "Dither", "Apply dithering while converting",
- dither_method_get_type (), DITHER_NONE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-}
-
-static void
-gst_csp_init (GstCsp * space, GstCspClass * klass)
-{
- space->from_format = GST_VIDEO_FORMAT_UNKNOWN;
- space->to_format = GST_VIDEO_FORMAT_UNKNOWN;
-}
-
-void
-gst_csp_set_property (GObject * object, guint property_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstCsp *csp;
-
- g_return_if_fail (GST_IS_CSP (object));
- csp = GST_CSP (object);
-
- switch (property_id) {
- case PROP_DITHER:
- csp->dither = g_value_get_enum (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-void
-gst_csp_get_property (GObject * object, guint property_id,
- GValue * value, GParamSpec * pspec)
-{
- GstCsp *csp;
-
- g_return_if_fail (GST_IS_CSP (object));
- csp = GST_CSP (object);
-
- switch (property_id) {
- case PROP_DITHER:
- g_value_set_enum (value, csp->dither);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static gboolean
-gst_csp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, guint * size)
-{
- gboolean ret = TRUE;
- GstVideoFormat format;
- gint width, height;
-
- g_assert (size);
-
- ret = gst_video_format_parse_caps (caps, &format, &width, &height);
- if (ret) {
- *size = gst_video_format_get_size (format, width, height);
- }
-
- return ret;
-}
-
-static GstFlowReturn
-gst_csp_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
- GstBuffer * outbuf)
-{
- GstCsp *space;
-
- space = GST_CSP (btrans);
-
- GST_DEBUG ("from %d -> to %d", space->from_format, space->to_format);
-
- if (G_UNLIKELY (space->from_format == GST_VIDEO_FORMAT_UNKNOWN ||
- space->to_format == GST_VIDEO_FORMAT_UNKNOWN))
- goto unknown_format;
-
- colorspace_convert_set_dither (space->convert, space->dither);
-
- colorspace_convert_convert (space->convert, GST_BUFFER_DATA (outbuf),
- GST_BUFFER_DATA (inbuf));
-
- /* baseclass copies timestamps */
- GST_DEBUG ("from %d -> to %d done", space->from_format, space->to_format);
-
- return GST_FLOW_OK;
-
- /* ERRORS */
-unknown_format:
- {
- GST_ELEMENT_ERROR (space, CORE, NOT_IMPLEMENTED, (NULL),
- ("attempting to convert colorspaces between unknown formats"));
- return GST_FLOW_NOT_NEGOTIATED;
- }
-#if 0
-not_supported:
- {
- GST_ELEMENT_ERROR (space, CORE, NOT_IMPLEMENTED, (NULL),
- ("cannot convert between formats"));
- return GST_FLOW_NOT_SUPPORTED;
- }
-#endif
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
- GST_DEBUG_CATEGORY_INIT (colorspace_debug, "colorspace", 0,
- "Colorspace Converter");
- GST_DEBUG_CATEGORY_GET (colorspace_performance, "GST_PERFORMANCE");
-
- return gst_element_register (plugin, "colorspace",
- GST_RANK_NONE, GST_TYPE_CSP);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "colorspace", "Colorspace conversion", plugin_init, VERSION, "LGPL", "", "")
diff --git a/gst/colorspace/gstcolorspace.h b/gst/colorspace/gstcolorspace.h
deleted file mode 100644
index 71245b831..000000000
--- a/gst/colorspace/gstcolorspace.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * This file:
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_COLORSPACE_H__
-#define __GST_COLORSPACE_H__
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideofilter.h>
-#include "colorspace.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_CSP (gst_csp_get_type())
-#define GST_CSP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CSP,GstCsp))
-#define GST_CSP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CSP,GstCspClass))
-#define GST_IS_CSP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CSP))
-#define GST_IS_CSP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CSP))
-
-typedef struct _GstCsp GstCsp;
-typedef struct _GstCspClass GstCspClass;
-
-/**
- * GstCsp:
- *
- * Opaque object data structure.
- */
-struct _GstCsp {
- GstVideoFilter element;
-
- gint width, height;
- gboolean interlaced;
- gfloat fps;
-
- GstVideoFormat from_format;
- ColorSpaceColorSpec from_spec;
- GstVideoFormat to_format;
- ColorSpaceColorSpec to_spec;
-
- ColorspaceConvert *convert;
- gboolean dither;
-};
-
-struct _GstCspClass
-{
- GstVideoFilterClass parent_class;
-};
-
-G_END_DECLS
-
-#endif /* __GST_COLORSPACE_H__ */
diff --git a/gst/colorspace/gstcolorspaceorc-dist.c b/gst/colorspace/gstcolorspaceorc-dist.c
deleted file mode 100644
index 06d75b242..000000000
--- a/gst/colorspace/gstcolorspaceorc-dist.c
+++ /dev/null
@@ -1,19395 +0,0 @@
-
-/* autogenerated from gstcolorspaceorc.orc */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <glib.h>
-
-#ifndef _ORC_INTEGER_TYPEDEFS_
-#define _ORC_INTEGER_TYPEDEFS_
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <stdint.h>
-typedef int8_t orc_int8;
-typedef int16_t orc_int16;
-typedef int32_t orc_int32;
-typedef int64_t orc_int64;
-typedef uint8_t orc_uint8;
-typedef uint16_t orc_uint16;
-typedef uint32_t orc_uint32;
-typedef uint64_t orc_uint64;
-#define ORC_UINT64_C(x) UINT64_C(x)
-#elif defined(_MSC_VER)
-typedef signed __int8 orc_int8;
-typedef signed __int16 orc_int16;
-typedef signed __int32 orc_int32;
-typedef signed __int64 orc_int64;
-typedef unsigned __int8 orc_uint8;
-typedef unsigned __int16 orc_uint16;
-typedef unsigned __int32 orc_uint32;
-typedef unsigned __int64 orc_uint64;
-#define ORC_UINT64_C(x) (x##Ui64)
-#define inline __inline
-#else
-#include <limits.h>
-typedef signed char orc_int8;
-typedef short orc_int16;
-typedef int orc_int32;
-typedef unsigned char orc_uint8;
-typedef unsigned short orc_uint16;
-typedef unsigned int orc_uint32;
-#if INT_MAX == LONG_MAX
-typedef long long orc_int64;
-typedef unsigned long long orc_uint64;
-#define ORC_UINT64_C(x) (x##ULL)
-#else
-typedef long orc_int64;
-typedef unsigned long orc_uint64;
-#define ORC_UINT64_C(x) (x##UL)
-#endif
-#endif
-typedef union
-{
- orc_int16 i;
- orc_int8 x2[2];
-} orc_union16;
-typedef union
-{
- orc_int32 i;
- float f;
- orc_int16 x2[2];
- orc_int8 x4[4];
-} orc_union32;
-typedef union
-{
- orc_int64 i;
- double f;
- orc_int32 x2[2];
- float x2f[2];
- orc_int16 x4[4];
-} orc_union64;
-#endif
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-
-#ifndef DISABLE_ORC
-#include <orc/orc.h>
-#endif
-void cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
-void orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
- int p2, int n);
-void orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
- int p2, int n);
-void orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int p4, int n);
-void orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int n);
-void orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
- int n);
-void orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
- int n);
-void orc_pack_123x (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int n);
-void orc_pack_x123 (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int n);
-void cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
- int p2, int n);
-void cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1,
- guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
- const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
- guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
- const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
- guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
- const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
- guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
- guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
- int s1_stride, int n, int m);
-void cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
- int s1_stride, int n, int m);
-void cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1,
- guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
- guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
- const guint8 * ORC_RESTRICT s5, int n);
-void cogorc_getline_I420 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_getline_A420 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, int n);
-
-
-/* begin Orc C target preamble */
-#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
-#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
-#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
-#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
-#define ORC_SB_MAX 127
-#define ORC_SB_MIN (-1-ORC_SB_MAX)
-#define ORC_UB_MAX 255
-#define ORC_UB_MIN 0
-#define ORC_SW_MAX 32767
-#define ORC_SW_MIN (-1-ORC_SW_MAX)
-#define ORC_UW_MAX 65535
-#define ORC_UW_MIN 0
-#define ORC_SL_MAX 2147483647
-#define ORC_SL_MIN (-1-ORC_SL_MAX)
-#define ORC_UL_MAX 4294967295U
-#define ORC_UL_MIN 0
-#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
-#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
-#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
-#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
-#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
-#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
-#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
-#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
-#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
-#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
-#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
-#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
-#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
-#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-/* end Orc C target preamble */
-
-
-
-/* cogorc_memcpy_2d */
-#ifdef DISABLE_ORC
-void
-cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var32;
- orc_int8 var33;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: copyb */
- var33 = var32;
- /* 2: storeb */
- ptr0[i] = var33;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var32;
- orc_int8 var33;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: copyb */
- var33 = var32;
- /* 2: storeb */
- ptr0[i] = var33;
- }
- }
-
-}
-
-void
-cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_memcpy_2d");
- orc_program_set_backup_function (p, _backup_cogorc_memcpy_2d);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
-
- orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_downsample_horiz_cosite_1tap */
-#ifdef DISABLE_ORC
-void
-cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var32;
- orc_int8 var33;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union16 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var32 = ptr4[i];
- /* 1: select0wb */
- {
- orc_union16 _src;
- _src.i = var32.i;
- var33 = _src.x2[0];
- }
- /* 2: storeb */
- ptr0[i] = var33;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_downsample_horiz_cosite_1tap (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var32;
- orc_int8 var33;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var32 = ptr4[i];
- /* 1: select0wb */
- {
- orc_union16 _src;
- _src.i = var32.i;
- var33 = _src.x2[0];
- }
- /* 2: storeb */
- ptr0[i] = var33;
- }
-
-}
-
-void
-cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_downsample_horiz_cosite_1tap");
- orc_program_set_backup_function (p,
- _backup_cogorc_downsample_horiz_cosite_1tap);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
-
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_downsample_horiz_cosite_3tap */
-#ifdef DISABLE_ORC
-void
-cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_union16 *) s2;
-
- /* 9: loadpw */
- var40.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
- /* 13: loadpw */
- var41.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var38 = ptr4[i];
- /* 1: copyw */
- var43.i = var38.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var44 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var45 = _src.x2[1];
- }
- /* 4: loadw */
- var39 = ptr5[i];
- /* 5: select0wb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var46 = _src.x2[0];
- }
- /* 6: convubw */
- var47.i = (orc_uint8) var44;
- /* 7: convubw */
- var48.i = (orc_uint8) var45;
- /* 8: convubw */
- var49.i = (orc_uint8) var46;
- /* 10: mullw */
- var50.i = (var48.i * var40.i) & 0xffff;
- /* 11: addw */
- var51.i = var47.i + var49.i;
- /* 12: addw */
- var52.i = var51.i + var50.i;
- /* 14: addw */
- var53.i = var52.i + var41.i;
- /* 15: shrsw */
- var54.i = var53.i >> 2;
- /* 16: convsuswb */
- var42 = ORC_CLAMP_UB (var54.i);
- /* 17: storeb */
- ptr0[i] = var42;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_downsample_horiz_cosite_3tap (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_union16 *) ex->arrays[5];
-
- /* 9: loadpw */
- var40.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
- /* 13: loadpw */
- var41.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var38 = ptr4[i];
- /* 1: copyw */
- var43.i = var38.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var44 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var45 = _src.x2[1];
- }
- /* 4: loadw */
- var39 = ptr5[i];
- /* 5: select0wb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var46 = _src.x2[0];
- }
- /* 6: convubw */
- var47.i = (orc_uint8) var44;
- /* 7: convubw */
- var48.i = (orc_uint8) var45;
- /* 8: convubw */
- var49.i = (orc_uint8) var46;
- /* 10: mullw */
- var50.i = (var48.i * var40.i) & 0xffff;
- /* 11: addw */
- var51.i = var47.i + var49.i;
- /* 12: addw */
- var52.i = var51.i + var50.i;
- /* 14: addw */
- var53.i = var52.i + var41.i;
- /* 15: shrsw */
- var54.i = var53.i >> 2;
- /* 16: convsuswb */
- var42 = ORC_CLAMP_UB (var54.i);
- /* 17: storeb */
- ptr0[i] = var42;
- }
-
-}
-
-void
-cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_downsample_horiz_cosite_3tap");
- orc_program_set_backup_function (p,
- _backup_cogorc_downsample_horiz_cosite_3tap);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_constant (p, 4, 0x00000002, "c1");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
-
- orc_program_append_2 (p, "copyw", 0, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_S2,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_downsample_420_jpeg */
-#ifdef DISABLE_ORC
-void
-cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_union16 *) s2;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var37 = ptr4[i];
- /* 1: copyw */
- var40.i = var37.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var40.i;
- var41 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.i;
- var42 = _src.x2[1];
- }
- /* 4: avgub */
- var43 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
- /* 5: loadw */
- var38 = ptr5[i];
- /* 6: copyw */
- var44.i = var38.i;
- /* 7: select0wb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var45 = _src.x2[0];
- }
- /* 8: select1wb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var46 = _src.x2[1];
- }
- /* 9: avgub */
- var47 = ((orc_uint8) var45 + (orc_uint8) var46 + 1) >> 1;
- /* 10: avgub */
- var39 = ((orc_uint8) var43 + (orc_uint8) var47 + 1) >> 1;
- /* 11: storeb */
- ptr0[i] = var39;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_downsample_420_jpeg (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_union16 *) ex->arrays[5];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var37 = ptr4[i];
- /* 1: copyw */
- var40.i = var37.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var40.i;
- var41 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.i;
- var42 = _src.x2[1];
- }
- /* 4: avgub */
- var43 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
- /* 5: loadw */
- var38 = ptr5[i];
- /* 6: copyw */
- var44.i = var38.i;
- /* 7: select0wb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var45 = _src.x2[0];
- }
- /* 8: select1wb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var46 = _src.x2[1];
- }
- /* 9: avgub */
- var47 = ((orc_uint8) var45 + (orc_uint8) var46 + 1) >> 1;
- /* 10: avgub */
- var39 = ((orc_uint8) var43 + (orc_uint8) var47 + 1) >> 1;
- /* 11: storeb */
- ptr0[i] = var39;
- }
-
-}
-
-void
-cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_downsample_420_jpeg");
- orc_program_set_backup_function (p, _backup_cogorc_downsample_420_jpeg);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 1, "t5");
-
- orc_program_append_2 (p, "copyw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T3, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "copyw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T4, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_downsample_vert_halfsite_2tap */
-#ifdef DISABLE_ORC
-void
-cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: loadb */
- var33 = ptr5[i];
- /* 2: avgub */
- var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_downsample_vert_halfsite_2tap (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: loadb */
- var33 = ptr5[i];
- /* 2: avgub */
- var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_downsample_vert_halfsite_2tap");
- orc_program_set_backup_function (p,
- _backup_cogorc_downsample_vert_halfsite_2tap);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
-
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_downsample_vert_cosite_3tap */
-#ifdef DISABLE_ORC
-void
-cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 6: loadpw */
- var38.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
- /* 10: loadpw */
- var39.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var35 = ptr4[i];
- /* 1: convubw */
- var41.i = (orc_uint8) var35;
- /* 2: loadb */
- var36 = ptr5[i];
- /* 3: convubw */
- var42.i = (orc_uint8) var36;
- /* 4: loadb */
- var37 = ptr6[i];
- /* 5: convubw */
- var43.i = (orc_uint8) var37;
- /* 7: mullw */
- var44.i = (var42.i * var38.i) & 0xffff;
- /* 8: addw */
- var45.i = var41.i + var43.i;
- /* 9: addw */
- var46.i = var45.i + var44.i;
- /* 11: addw */
- var47.i = var46.i + var39.i;
- /* 12: shrsw */
- var48.i = var47.i >> 2;
- /* 13: convsuswb */
- var40 = ORC_CLAMP_UB (var48.i);
- /* 14: storeb */
- ptr0[i] = var40;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_downsample_vert_cosite_3tap (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 6: loadpw */
- var38.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
- /* 10: loadpw */
- var39.i = (int) 0x00000002; /* 2 or 9.88131e-324f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var35 = ptr4[i];
- /* 1: convubw */
- var41.i = (orc_uint8) var35;
- /* 2: loadb */
- var36 = ptr5[i];
- /* 3: convubw */
- var42.i = (orc_uint8) var36;
- /* 4: loadb */
- var37 = ptr6[i];
- /* 5: convubw */
- var43.i = (orc_uint8) var37;
- /* 7: mullw */
- var44.i = (var42.i * var38.i) & 0xffff;
- /* 8: addw */
- var45.i = var41.i + var43.i;
- /* 9: addw */
- var46.i = var45.i + var44.i;
- /* 11: addw */
- var47.i = var46.i + var39.i;
- /* 12: shrsw */
- var48.i = var47.i >> 2;
- /* 13: convsuswb */
- var40 = ORC_CLAMP_UB (var48.i);
- /* 14: storeb */
- ptr0[i] = var40;
- }
-
-}
-
-void
-cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_downsample_vert_cosite_3tap");
- orc_program_set_backup_function (p,
- _backup_cogorc_downsample_vert_cosite_3tap);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 4, 0x00000002, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_downsample_vert_halfsite_4tap */
-#ifdef DISABLE_ORC
-void
-cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
- ptr7 = (orc_int8 *) s4;
-
- /* 9: loadpw */
- var40.i = (int) 0x0000001a; /* 26 or 1.28457e-322f */
- /* 12: loadpw */
- var41.i = (int) 0x00000006; /* 6 or 2.96439e-323f */
- /* 15: loadpw */
- var42.i = (int) 0x00000020; /* 32 or 1.58101e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr4[i];
- /* 1: convubw */
- var44.i = (orc_uint8) var36;
- /* 2: loadb */
- var37 = ptr5[i];
- /* 3: convubw */
- var45.i = (orc_uint8) var37;
- /* 4: loadb */
- var38 = ptr6[i];
- /* 5: convubw */
- var46.i = (orc_uint8) var38;
- /* 6: loadb */
- var39 = ptr7[i];
- /* 7: convubw */
- var47.i = (orc_uint8) var39;
- /* 8: addw */
- var48.i = var45.i + var46.i;
- /* 10: mullw */
- var49.i = (var48.i * var40.i) & 0xffff;
- /* 11: addw */
- var50.i = var44.i + var47.i;
- /* 13: mullw */
- var51.i = (var50.i * var41.i) & 0xffff;
- /* 14: addw */
- var52.i = var49.i + var51.i;
- /* 16: addw */
- var53.i = var52.i + var42.i;
- /* 17: shrsw */
- var54.i = var53.i >> 6;
- /* 18: convsuswb */
- var43 = ORC_CLAMP_UB (var54.i);
- /* 19: storeb */
- ptr0[i] = var43;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_downsample_vert_halfsite_4tap (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
- ptr7 = (orc_int8 *) ex->arrays[7];
-
- /* 9: loadpw */
- var40.i = (int) 0x0000001a; /* 26 or 1.28457e-322f */
- /* 12: loadpw */
- var41.i = (int) 0x00000006; /* 6 or 2.96439e-323f */
- /* 15: loadpw */
- var42.i = (int) 0x00000020; /* 32 or 1.58101e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr4[i];
- /* 1: convubw */
- var44.i = (orc_uint8) var36;
- /* 2: loadb */
- var37 = ptr5[i];
- /* 3: convubw */
- var45.i = (orc_uint8) var37;
- /* 4: loadb */
- var38 = ptr6[i];
- /* 5: convubw */
- var46.i = (orc_uint8) var38;
- /* 6: loadb */
- var39 = ptr7[i];
- /* 7: convubw */
- var47.i = (orc_uint8) var39;
- /* 8: addw */
- var48.i = var45.i + var46.i;
- /* 10: mullw */
- var49.i = (var48.i * var40.i) & 0xffff;
- /* 11: addw */
- var50.i = var44.i + var47.i;
- /* 13: mullw */
- var51.i = (var50.i * var41.i) & 0xffff;
- /* 14: addw */
- var52.i = var49.i + var51.i;
- /* 16: addw */
- var53.i = var52.i + var42.i;
- /* 17: shrsw */
- var54.i = var53.i >> 6;
- /* 18: convsuswb */
- var43 = ORC_CLAMP_UB (var54.i);
- /* 19: storeb */
- ptr0[i] = var43;
- }
-
-}
-
-void
-cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_downsample_vert_halfsite_4tap");
- orc_program_set_backup_function (p,
- _backup_cogorc_downsample_vert_halfsite_4tap);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_source (p, 1, "s4");
- orc_program_add_constant (p, 4, 0x0000001a, "c1");
- orc_program_add_constant (p, 4, 0x00000006, "c2");
- orc_program_add_constant (p, 4, 0x00000020, "c3");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T2,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->arrays[ORC_VAR_S4] = (void *) s4;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_upsample_horiz_cosite_1tap */
-#ifdef DISABLE_ORC
-void
-cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_union16 var34;
- orc_int8 var35;
-
- ptr0 = (orc_union16 *) d1;
- ptr4 = (orc_int8 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr4[i];
- /* 1: copyb */
- var35 = var33;
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35;
- _dest.x2[1] = var35;
- var34.i = _dest.i;
- }
- /* 3: storew */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_upsample_horiz_cosite_1tap (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_union16 var34;
- orc_int8 var35;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr4[i];
- /* 1: copyb */
- var35 = var33;
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35;
- _dest.x2[1] = var35;
- var34.i = _dest.i;
- }
- /* 3: storew */
- ptr0[i] = var34;
- }
-
-}
-
-void
-cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_upsample_horiz_cosite_1tap");
- orc_program_set_backup_function (p,
- _backup_cogorc_upsample_horiz_cosite_1tap);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_temporary (p, 1, "t1");
-
- orc_program_append_2 (p, "copyb", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_upsample_horiz_cosite */
-#ifdef DISABLE_ORC
-void
-cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var34;
- orc_int8 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_int8 var38;
-
- ptr0 = (orc_union16 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: copyb */
- var37 = var34;
- /* 2: loadb */
- var35 = ptr5[i];
- /* 3: avgub */
- var38 = ((orc_uint8) var37 + (orc_uint8) var35 + 1) >> 1;
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37;
- _dest.x2[1] = var38;
- var36.i = _dest.i;
- }
- /* 5: storew */
- ptr0[i] = var36;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_upsample_horiz_cosite (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var34;
- orc_int8 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_int8 var38;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: copyb */
- var37 = var34;
- /* 2: loadb */
- var35 = ptr5[i];
- /* 3: avgub */
- var38 = ((orc_uint8) var37 + (orc_uint8) var35 + 1) >> 1;
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37;
- _dest.x2[1] = var38;
- var36.i = _dest.i;
- }
- /* 5: storew */
- ptr0[i] = var36;
- }
-
-}
-
-void
-cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_upsample_horiz_cosite");
- orc_program_set_backup_function (p, _backup_cogorc_upsample_horiz_cosite);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
-
- orc_program_append_2 (p, "copyb", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_upsample_vert_avgub */
-#ifdef DISABLE_ORC
-void
-cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: loadb */
- var33 = ptr5[i];
- /* 2: avgub */
- var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_upsample_vert_avgub (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: loadb */
- var33 = ptr5[i];
- /* 2: avgub */
- var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_upsample_vert_avgub");
- orc_program_set_backup_function (p, _backup_cogorc_upsample_vert_avgub);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
-
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_unpack_yuyv_y */
-#ifdef DISABLE_ORC
-void
-orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var32;
- orc_int8 var33;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union16 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var32 = ptr4[i];
- /* 1: select0wb */
- {
- orc_union16 _src;
- _src.i = var32.i;
- var33 = _src.x2[0];
- }
- /* 2: storeb */
- ptr0[i] = var33;
- }
-
-}
-
-#else
-static void
-_backup_orc_unpack_yuyv_y (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var32;
- orc_int8 var33;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var32 = ptr4[i];
- /* 1: select0wb */
- {
- orc_union16 _src;
- _src.i = var32.i;
- var33 = _src.x2[0];
- }
- /* 2: storeb */
- ptr0[i] = var33;
- }
-
-}
-
-void
-orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_unpack_yuyv_y");
- orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_y);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
-
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_unpack_yuyv_u */
-#ifdef DISABLE_ORC
-void
-orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[1];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_orc_unpack_yuyv_u (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[1];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_unpack_yuyv_u");
- orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_u);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_unpack_yuyv_v */
-#ifdef DISABLE_ORC
-void
-orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select1lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[1];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[1];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_orc_unpack_yuyv_v (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select1lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[1];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[1];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_unpack_yuyv_v");
- orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_v);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_pack_yuyv */
-#ifdef DISABLE_ORC
-void
-orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_union16 var37;
- orc_int8 var38;
- orc_int8 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var37 = ptr4[i];
- /* 1: copyw */
- var41.i = var37.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var42 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var43 = _src.x2[1];
- }
- /* 4: loadb */
- var38 = ptr5[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var42;
- _dest.x2[1] = var38;
- var44.i = _dest.i;
- }
- /* 6: loadb */
- var39 = ptr6[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43;
- _dest.x2[1] = var39;
- var45.i = _dest.i;
- }
- /* 8: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.i;
- _dest.x2[1] = var45.i;
- var40.i = _dest.i;
- }
- /* 9: storel */
- ptr0[i] = var40;
- }
-
-}
-
-#else
-static void
-_backup_orc_pack_yuyv (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_union16 var37;
- orc_int8 var38;
- orc_int8 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var37 = ptr4[i];
- /* 1: copyw */
- var41.i = var37.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var42 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var43 = _src.x2[1];
- }
- /* 4: loadb */
- var38 = ptr5[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var42;
- _dest.x2[1] = var38;
- var44.i = _dest.i;
- }
- /* 6: loadb */
- var39 = ptr6[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43;
- _dest.x2[1] = var39;
- var45.i = _dest.i;
- }
- /* 8: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.i;
- _dest.x2[1] = var45.i;
- var40.i = _dest.i;
- }
- /* 9: storel */
- ptr0[i] = var40;
- }
-
-}
-
-void
-orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_pack_yuyv");
- orc_program_set_backup_function (p, _backup_orc_pack_yuyv);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 2, "t5");
-
- orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T5,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T5,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_unpack_uyvy_y */
-#ifdef DISABLE_ORC
-void
-orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var32;
- orc_int8 var33;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union16 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var32 = ptr4[i];
- /* 1: select1wb */
- {
- orc_union16 _src;
- _src.i = var32.i;
- var33 = _src.x2[1];
- }
- /* 2: storeb */
- ptr0[i] = var33;
- }
-
-}
-
-#else
-static void
-_backup_orc_unpack_uyvy_y (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var32;
- orc_int8 var33;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var32 = ptr4[i];
- /* 1: select1wb */
- {
- orc_union16 _src;
- _src.i = var32.i;
- var33 = _src.x2[1];
- }
- /* 2: storeb */
- ptr0[i] = var33;
- }
-
-}
-
-void
-orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_unpack_uyvy_y");
- orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_y);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
-
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_unpack_uyvy_u */
-#ifdef DISABLE_ORC
-void
-orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[0];
- }
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[0];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_orc_unpack_uyvy_u (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[0];
- }
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[0];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_unpack_uyvy_u");
- orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_u);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_unpack_uyvy_v */
-#ifdef DISABLE_ORC
-void
-orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select1lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[1];
- }
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[0];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_orc_unpack_uyvy_v (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select1lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[1];
- }
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[0];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_unpack_uyvy_v");
- orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_v);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_pack_uyvy */
-#ifdef DISABLE_ORC
-void
-orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_union16 var37;
- orc_int8 var38;
- orc_int8 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var37 = ptr4[i];
- /* 1: copyw */
- var41.i = var37.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var42 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var43 = _src.x2[1];
- }
- /* 4: loadb */
- var38 = ptr5[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38;
- _dest.x2[1] = var42;
- var44.i = _dest.i;
- }
- /* 6: loadb */
- var39 = ptr6[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var43;
- var45.i = _dest.i;
- }
- /* 8: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.i;
- _dest.x2[1] = var45.i;
- var40.i = _dest.i;
- }
- /* 9: storel */
- ptr0[i] = var40;
- }
-
-}
-
-#else
-static void
-_backup_orc_pack_uyvy (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_union16 var37;
- orc_int8 var38;
- orc_int8 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var37 = ptr4[i];
- /* 1: copyw */
- var41.i = var37.i;
- /* 2: select0wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var42 = _src.x2[0];
- }
- /* 3: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.i;
- var43 = _src.x2[1];
- }
- /* 4: loadb */
- var38 = ptr5[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38;
- _dest.x2[1] = var42;
- var44.i = _dest.i;
- }
- /* 6: loadb */
- var39 = ptr6[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var43;
- var45.i = _dest.i;
- }
- /* 8: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.i;
- _dest.x2[1] = var45.i;
- var40.i = _dest.i;
- }
- /* 9: storel */
- ptr0[i] = var40;
- }
-
-}
-
-void
-orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_pack_uyvy");
- orc_program_set_backup_function (p, _backup_orc_pack_uyvy);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 2, "t5");
-
- orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T5,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T5,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_S3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix2_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
- /* 2: loadpw */
- var35.i = p1;
- /* 6: loadpw */
- var37.i = p2;
- /* 9: loadpw */
- var38.i = p3;
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var40.i = (orc_uint8) var34;
- /* 3: mullw */
- var41.i = (var40.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var42.i = (orc_uint8) var36;
- /* 7: mullw */
- var43.i = (var42.i * var37.i) & 0xffff;
- /* 8: addw */
- var44.i = var41.i + var43.i;
- /* 10: addw */
- var45.i = var44.i + var38.i;
- /* 11: shrsw */
- var46.i = var45.i >> 6;
- /* 12: convsuswb */
- var39 = ORC_CLAMP_UB (var46.i);
- /* 13: storeb */
- ptr0[i] = var39;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix2_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
- /* 2: loadpw */
- var35.i = ex->params[24];
- /* 6: loadpw */
- var37.i = ex->params[25];
- /* 9: loadpw */
- var38.i = ex->params[26];
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var40.i = (orc_uint8) var34;
- /* 3: mullw */
- var41.i = (var40.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var42.i = (orc_uint8) var36;
- /* 7: mullw */
- var43.i = (var42.i * var37.i) & 0xffff;
- /* 8: addw */
- var44.i = var41.i + var43.i;
- /* 10: addw */
- var45.i = var44.i + var38.i;
- /* 11: shrsw */
- var46.i = var45.i >> 6;
- /* 12: convsuswb */
- var39 = ORC_CLAMP_UB (var46.i);
- /* 13: storeb */
- ptr0[i] = var39;
- }
-
-}
-
-void
-orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix2_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix2_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_constant (p, 4, 0x00000006, "c1");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_parameter (p, 2, "p3");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
- ex->params[ORC_VAR_P3] = p3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix2_11_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
- /* 2: loadpw */
- var37.i = (int) 0x00000010; /* 16 or 7.90505e-323f */
- /* 4: loadpw */
- var38.i = p1;
- /* 8: loadpw */
- var40.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 10: loadpw */
- var41.i = p2;
- /* 13: loadpw */
- var42.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr4[i];
- /* 1: convubw */
- var44.i = (orc_uint8) var36;
- /* 3: subw */
- var45.i = var44.i - var37.i;
- /* 5: mullw */
- var46.i = (var45.i * var38.i) & 0xffff;
- /* 6: loadb */
- var39 = ptr5[i];
- /* 7: convubw */
- var47.i = (orc_uint8) var39;
- /* 9: subw */
- var48.i = var47.i - var40.i;
- /* 11: mullw */
- var49.i = (var48.i * var41.i) & 0xffff;
- /* 12: addw */
- var50.i = var46.i + var49.i;
- /* 14: addw */
- var51.i = var50.i + var42.i;
- /* 15: shrsw */
- var52.i = var51.i >> 8;
- /* 16: addw */
- var53.i = var52.i + var45.i;
- /* 17: addw */
- var54.i = var53.i + var48.i;
- /* 18: convsuswb */
- var43 = ORC_CLAMP_UB (var54.i);
- /* 19: storeb */
- ptr0[i] = var43;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix2_11_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
- /* 2: loadpw */
- var37.i = (int) 0x00000010; /* 16 or 7.90505e-323f */
- /* 4: loadpw */
- var38.i = ex->params[24];
- /* 8: loadpw */
- var40.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 10: loadpw */
- var41.i = ex->params[25];
- /* 13: loadpw */
- var42.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr4[i];
- /* 1: convubw */
- var44.i = (orc_uint8) var36;
- /* 3: subw */
- var45.i = var44.i - var37.i;
- /* 5: mullw */
- var46.i = (var45.i * var38.i) & 0xffff;
- /* 6: loadb */
- var39 = ptr5[i];
- /* 7: convubw */
- var47.i = (orc_uint8) var39;
- /* 9: subw */
- var48.i = var47.i - var40.i;
- /* 11: mullw */
- var49.i = (var48.i * var41.i) & 0xffff;
- /* 12: addw */
- var50.i = var46.i + var49.i;
- /* 14: addw */
- var51.i = var50.i + var42.i;
- /* 15: shrsw */
- var52.i = var51.i >> 8;
- /* 16: addw */
- var53.i = var52.i + var45.i;
- /* 17: addw */
- var54.i = var53.i + var48.i;
- /* 18: convsuswb */
- var43 = ORC_CLAMP_UB (var54.i);
- /* 19: storeb */
- ptr0[i] = var43;
- }
-
-}
-
-void
-orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix2_11_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix2_11_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_constant (p, 4, 0x00000010, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x00000008, "c3");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix2_12_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union16 var55;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
- /* 2: loadpw */
- var37.i = (int) 0x00000010; /* 16 or 7.90505e-323f */
- /* 4: loadpw */
- var38.i = p1;
- /* 8: loadpw */
- var40.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 10: loadpw */
- var41.i = p2;
- /* 13: loadpw */
- var42.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr4[i];
- /* 1: convubw */
- var44.i = (orc_uint8) var36;
- /* 3: subw */
- var45.i = var44.i - var37.i;
- /* 5: mullw */
- var46.i = (var45.i * var38.i) & 0xffff;
- /* 6: loadb */
- var39 = ptr5[i];
- /* 7: convubw */
- var47.i = (orc_uint8) var39;
- /* 9: subw */
- var48.i = var47.i - var40.i;
- /* 11: mullw */
- var49.i = (var48.i * var41.i) & 0xffff;
- /* 12: addw */
- var50.i = var46.i + var49.i;
- /* 14: addw */
- var51.i = var50.i + var42.i;
- /* 15: shrsw */
- var52.i = var51.i >> 8;
- /* 16: addw */
- var53.i = var52.i + var45.i;
- /* 17: addw */
- var54.i = var53.i + var48.i;
- /* 18: addw */
- var55.i = var54.i + var48.i;
- /* 19: convsuswb */
- var43 = ORC_CLAMP_UB (var55.i);
- /* 20: storeb */
- ptr0[i] = var43;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix2_12_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union16 var55;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
- /* 2: loadpw */
- var37.i = (int) 0x00000010; /* 16 or 7.90505e-323f */
- /* 4: loadpw */
- var38.i = ex->params[24];
- /* 8: loadpw */
- var40.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 10: loadpw */
- var41.i = ex->params[25];
- /* 13: loadpw */
- var42.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr4[i];
- /* 1: convubw */
- var44.i = (orc_uint8) var36;
- /* 3: subw */
- var45.i = var44.i - var37.i;
- /* 5: mullw */
- var46.i = (var45.i * var38.i) & 0xffff;
- /* 6: loadb */
- var39 = ptr5[i];
- /* 7: convubw */
- var47.i = (orc_uint8) var39;
- /* 9: subw */
- var48.i = var47.i - var40.i;
- /* 11: mullw */
- var49.i = (var48.i * var41.i) & 0xffff;
- /* 12: addw */
- var50.i = var46.i + var49.i;
- /* 14: addw */
- var51.i = var50.i + var42.i;
- /* 15: shrsw */
- var52.i = var51.i >> 8;
- /* 16: addw */
- var53.i = var52.i + var45.i;
- /* 17: addw */
- var54.i = var53.i + var48.i;
- /* 18: addw */
- var55.i = var54.i + var48.i;
- /* 19: convsuswb */
- var43 = ORC_CLAMP_UB (var55.i);
- /* 20: storeb */
- ptr0[i] = var43;
- }
-
-}
-
-void
-orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix2_12_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix2_12_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_constant (p, 4, 0x00000010, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x00000008, "c3");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix3_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int p4, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 2: loadpw */
- var35.i = p1;
- /* 6: loadpw */
- var37.i = p2;
- /* 11: loadpw */
- var39.i = p3;
- /* 14: loadpw */
- var40.i = p4;
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var42.i = (orc_uint8) var34;
- /* 3: mullw */
- var43.i = (var42.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var44.i = (orc_uint8) var36;
- /* 7: mullw */
- var45.i = (var44.i * var37.i) & 0xffff;
- /* 8: addw */
- var46.i = var43.i + var45.i;
- /* 9: loadb */
- var38 = ptr6[i];
- /* 10: convubw */
- var47.i = (orc_uint8) var38;
- /* 12: mullw */
- var48.i = (var47.i * var39.i) & 0xffff;
- /* 13: addw */
- var49.i = var46.i + var48.i;
- /* 15: addw */
- var50.i = var49.i + var40.i;
- /* 16: shrsw */
- var51.i = var50.i >> 6;
- /* 17: convsuswb */
- var41 = ORC_CLAMP_UB (var51.i);
- /* 18: storeb */
- ptr0[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix3_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 2: loadpw */
- var35.i = ex->params[24];
- /* 6: loadpw */
- var37.i = ex->params[25];
- /* 11: loadpw */
- var39.i = ex->params[26];
- /* 14: loadpw */
- var40.i = ex->params[27];
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var42.i = (orc_uint8) var34;
- /* 3: mullw */
- var43.i = (var42.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var44.i = (orc_uint8) var36;
- /* 7: mullw */
- var45.i = (var44.i * var37.i) & 0xffff;
- /* 8: addw */
- var46.i = var43.i + var45.i;
- /* 9: loadb */
- var38 = ptr6[i];
- /* 10: convubw */
- var47.i = (orc_uint8) var38;
- /* 12: mullw */
- var48.i = (var47.i * var39.i) & 0xffff;
- /* 13: addw */
- var49.i = var46.i + var48.i;
- /* 15: addw */
- var50.i = var49.i + var40.i;
- /* 16: shrsw */
- var51.i = var50.i >> 6;
- /* 17: convsuswb */
- var41 = ORC_CLAMP_UB (var51.i);
- /* 18: storeb */
- ptr0[i] = var41;
- }
-
-}
-
-void
-orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int p4, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix3_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix3_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 4, 0x00000006, "c1");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_parameter (p, 2, "p3");
- orc_program_add_parameter (p, 2, "p4");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
- ex->params[ORC_VAR_P3] = p3;
- ex->params[ORC_VAR_P4] = p4;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix3_100_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_int8 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union16 var55;
- orc_union16 var56;
- orc_union16 var57;
- orc_union16 var58;
- orc_union16 var59;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 2: loadpw */
- var36.i = (int) 0x00000010; /* 16 or 7.90505e-323f */
- /* 4: loadpw */
- var37.i = p1;
- /* 8: loadpw */
- var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 10: loadpw */
- var40.i = p2;
- /* 15: loadpw */
- var42.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 17: loadpw */
- var43.i = p3;
- /* 20: loadpw */
- var44.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var35 = ptr4[i];
- /* 1: convubw */
- var46.i = (orc_uint8) var35;
- /* 3: subw */
- var47.i = var46.i - var36.i;
- /* 5: mullw */
- var48.i = (var47.i * var37.i) & 0xffff;
- /* 6: loadb */
- var38 = ptr5[i];
- /* 7: convubw */
- var49.i = (orc_uint8) var38;
- /* 9: subw */
- var50.i = var49.i - var39.i;
- /* 11: mullw */
- var51.i = (var50.i * var40.i) & 0xffff;
- /* 12: addw */
- var52.i = var48.i + var51.i;
- /* 13: loadb */
- var41 = ptr6[i];
- /* 14: convubw */
- var53.i = (orc_uint8) var41;
- /* 16: subw */
- var54.i = var53.i - var42.i;
- /* 18: mullw */
- var55.i = (var54.i * var43.i) & 0xffff;
- /* 19: addw */
- var56.i = var52.i + var55.i;
- /* 21: addw */
- var57.i = var56.i + var44.i;
- /* 22: shrsw */
- var58.i = var57.i >> 8;
- /* 23: addw */
- var59.i = var58.i + var47.i;
- /* 24: convsuswb */
- var45 = ORC_CLAMP_UB (var59.i);
- /* 25: storeb */
- ptr0[i] = var45;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix3_100_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_int8 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union16 var55;
- orc_union16 var56;
- orc_union16 var57;
- orc_union16 var58;
- orc_union16 var59;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 2: loadpw */
- var36.i = (int) 0x00000010; /* 16 or 7.90505e-323f */
- /* 4: loadpw */
- var37.i = ex->params[24];
- /* 8: loadpw */
- var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 10: loadpw */
- var40.i = ex->params[25];
- /* 15: loadpw */
- var42.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 17: loadpw */
- var43.i = ex->params[26];
- /* 20: loadpw */
- var44.i = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var35 = ptr4[i];
- /* 1: convubw */
- var46.i = (orc_uint8) var35;
- /* 3: subw */
- var47.i = var46.i - var36.i;
- /* 5: mullw */
- var48.i = (var47.i * var37.i) & 0xffff;
- /* 6: loadb */
- var38 = ptr5[i];
- /* 7: convubw */
- var49.i = (orc_uint8) var38;
- /* 9: subw */
- var50.i = var49.i - var39.i;
- /* 11: mullw */
- var51.i = (var50.i * var40.i) & 0xffff;
- /* 12: addw */
- var52.i = var48.i + var51.i;
- /* 13: loadb */
- var41 = ptr6[i];
- /* 14: convubw */
- var53.i = (orc_uint8) var41;
- /* 16: subw */
- var54.i = var53.i - var42.i;
- /* 18: mullw */
- var55.i = (var54.i * var43.i) & 0xffff;
- /* 19: addw */
- var56.i = var52.i + var55.i;
- /* 21: addw */
- var57.i = var56.i + var44.i;
- /* 22: shrsw */
- var58.i = var57.i >> 8;
- /* 23: addw */
- var59.i = var58.i + var47.i;
- /* 24: convsuswb */
- var45 = ORC_CLAMP_UB (var59.i);
- /* 25: storeb */
- ptr0[i] = var45;
- }
-
-}
-
-void
-orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix3_100_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix3_100_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 4, 0x00000010, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x00000008, "c3");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_parameter (p, 2, "p3");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
- ex->params[ORC_VAR_P3] = p3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix3_100_offset_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 2: loadpw */
- var36.i = p1;
- /* 6: loadpw */
- var38.i = p2;
- /* 11: loadpw */
- var40.i = p3;
- /* 14: loadpw */
- var41.i = p4;
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var35 = ptr4[i];
- /* 1: convubw */
- var43.i = (orc_uint8) var35;
- /* 3: mullw */
- var44.i = (var43.i * var36.i) & 0xffff;
- /* 4: loadb */
- var37 = ptr5[i];
- /* 5: convubw */
- var45.i = (orc_uint8) var37;
- /* 7: mullw */
- var46.i = (var45.i * var38.i) & 0xffff;
- /* 8: addw */
- var47.i = var44.i + var46.i;
- /* 9: loadb */
- var39 = ptr6[i];
- /* 10: convubw */
- var48.i = (orc_uint8) var39;
- /* 12: mullw */
- var49.i = (var48.i * var40.i) & 0xffff;
- /* 13: addw */
- var50.i = var47.i + var49.i;
- /* 15: addw */
- var51.i = var50.i + var41.i;
- /* 16: shrsw */
- var52.i = var51.i >> p5;
- /* 17: addw */
- var53.i = var52.i + var43.i;
- /* 18: convsuswb */
- var42 = ORC_CLAMP_UB (var53.i);
- /* 19: storeb */
- ptr0[i] = var42;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix3_100_offset_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_int8 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 2: loadpw */
- var36.i = ex->params[24];
- /* 6: loadpw */
- var38.i = ex->params[25];
- /* 11: loadpw */
- var40.i = ex->params[26];
- /* 14: loadpw */
- var41.i = ex->params[27];
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var35 = ptr4[i];
- /* 1: convubw */
- var43.i = (orc_uint8) var35;
- /* 3: mullw */
- var44.i = (var43.i * var36.i) & 0xffff;
- /* 4: loadb */
- var37 = ptr5[i];
- /* 5: convubw */
- var45.i = (orc_uint8) var37;
- /* 7: mullw */
- var46.i = (var45.i * var38.i) & 0xffff;
- /* 8: addw */
- var47.i = var44.i + var46.i;
- /* 9: loadb */
- var39 = ptr6[i];
- /* 10: convubw */
- var48.i = (orc_uint8) var39;
- /* 12: mullw */
- var49.i = (var48.i * var40.i) & 0xffff;
- /* 13: addw */
- var50.i = var47.i + var49.i;
- /* 15: addw */
- var51.i = var50.i + var41.i;
- /* 16: shrsw */
- var52.i = var51.i >> ex->params[28];
- /* 17: addw */
- var53.i = var52.i + var43.i;
- /* 18: convsuswb */
- var42 = ORC_CLAMP_UB (var53.i);
- /* 19: storeb */
- ptr0[i] = var42;
- }
-
-}
-
-void
-orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix3_100_offset_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix3_100_offset_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_parameter (p, 2, "p3");
- orc_program_add_parameter (p, 2, "p4");
- orc_program_add_parameter (p, 2, "p5");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
- ex->params[ORC_VAR_P3] = p3;
- ex->params[ORC_VAR_P4] = p4;
- ex->params[ORC_VAR_P5] = p5;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_matrix3_000_u8 */
-#ifdef DISABLE_ORC
-void
-orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int p4, int p5, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 2: loadpw */
- var35.i = p1;
- /* 6: loadpw */
- var37.i = p2;
- /* 11: loadpw */
- var39.i = p3;
- /* 14: loadpw */
- var40.i = p4;
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var42.i = (orc_uint8) var34;
- /* 3: mullw */
- var43.i = (var42.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var44.i = (orc_uint8) var36;
- /* 7: mullw */
- var45.i = (var44.i * var37.i) & 0xffff;
- /* 8: addw */
- var46.i = var43.i + var45.i;
- /* 9: loadb */
- var38 = ptr6[i];
- /* 10: convubw */
- var47.i = (orc_uint8) var38;
- /* 12: mullw */
- var48.i = (var47.i * var39.i) & 0xffff;
- /* 13: addw */
- var49.i = var46.i + var48.i;
- /* 15: addw */
- var50.i = var49.i + var40.i;
- /* 16: shrsw */
- var51.i = var50.i >> p5;
- /* 17: convwb */
- var41 = var51.i;
- /* 18: storeb */
- ptr0[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_orc_matrix3_000_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_union16 var47;
- orc_union16 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 2: loadpw */
- var35.i = ex->params[24];
- /* 6: loadpw */
- var37.i = ex->params[25];
- /* 11: loadpw */
- var39.i = ex->params[26];
- /* 14: loadpw */
- var40.i = ex->params[27];
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var42.i = (orc_uint8) var34;
- /* 3: mullw */
- var43.i = (var42.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var44.i = (orc_uint8) var36;
- /* 7: mullw */
- var45.i = (var44.i * var37.i) & 0xffff;
- /* 8: addw */
- var46.i = var43.i + var45.i;
- /* 9: loadb */
- var38 = ptr6[i];
- /* 10: convubw */
- var47.i = (orc_uint8) var38;
- /* 12: mullw */
- var48.i = (var47.i * var39.i) & 0xffff;
- /* 13: addw */
- var49.i = var46.i + var48.i;
- /* 15: addw */
- var50.i = var49.i + var40.i;
- /* 16: shrsw */
- var51.i = var50.i >> ex->params[28];
- /* 17: convwb */
- var41 = var51.i;
- /* 18: storeb */
- ptr0[i] = var41;
- }
-
-}
-
-void
-orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int p2, int p3, int p4, int p5, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_matrix3_000_u8");
- orc_program_set_backup_function (p, _backup_orc_matrix3_000_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_parameter (p, 2, "p3");
- orc_program_add_parameter (p, 2, "p4");
- orc_program_add_parameter (p, 2, "p5");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
- ex->params[ORC_VAR_P3] = p3;
- ex->params[ORC_VAR_P4] = p4;
- ex->params[ORC_VAR_P5] = p5;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_pack_123x */
-#ifdef DISABLE_ORC
-void
-orc_pack_123x (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 4: loadpb */
- var37 = p1;
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: loadb */
- var35 = ptr5[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 3: loadb */
- var36 = ptr6[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var40.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_orc_pack_123x (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 4: loadpb */
- var37 = ex->params[24];
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: loadb */
- var35 = ptr5[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 3: loadb */
- var36 = ptr6[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var40.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-orc_pack_123x (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_pack_123x");
- orc_program_set_backup_function (p, _backup_orc_pack_123x);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_parameter (p, 1, "p1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_P1] = p1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* orc_pack_x123 */
-#ifdef DISABLE_ORC
-void
-orc_pack_x123 (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 0: loadpb */
- var34 = p1;
-
- for (i = 0; i < n; i++) {
- /* 1: loadb */
- var35 = ptr4[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 3: loadb */
- var36 = ptr5[i];
- /* 4: loadb */
- var37 = ptr6[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var40.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_orc_pack_x123 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 0: loadpb */
- var34 = ex->params[24];
-
- for (i = 0; i < n; i++) {
- /* 1: loadb */
- var35 = ptr4[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 3: loadb */
- var36 = ptr5[i];
- /* 4: loadb */
- var37 = ptr6[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var40.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-orc_pack_x123 (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "orc_pack_x123");
- orc_program_set_backup_function (p, _backup_orc_pack_x123);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_parameter (p, 1, "p1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_P1] = p1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_combine2_u8 */
-#ifdef DISABLE_ORC
-void
-cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
-
- /* 2: loadpw */
- var35.i = p1;
- /* 6: loadpw */
- var37.i = p2;
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var39.i = (orc_uint8) var34;
- /* 3: mullw */
- var40.i = (var39.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var41.i = (orc_uint8) var36;
- /* 7: mullw */
- var42.i = (var41.i * var37.i) & 0xffff;
- /* 8: addw */
- var43.i = var40.i + var42.i;
- /* 9: shruw */
- var44.i = ((orc_uint16) var43.i) >> 8;
- /* 10: convsuswb */
- var38 = ORC_CLAMP_UB (var44.i);
- /* 11: storeb */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_combine2_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var34;
- orc_union16 var35;
- orc_int8 var36;
- orc_union16 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
-
- /* 2: loadpw */
- var35.i = ex->params[24];
- /* 6: loadpw */
- var37.i = ex->params[25];
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr4[i];
- /* 1: convubw */
- var39.i = (orc_uint8) var34;
- /* 3: mullw */
- var40.i = (var39.i * var35.i) & 0xffff;
- /* 4: loadb */
- var36 = ptr5[i];
- /* 5: convubw */
- var41.i = (orc_uint8) var36;
- /* 7: mullw */
- var42.i = (var41.i * var37.i) & 0xffff;
- /* 8: addw */
- var43.i = var40.i + var42.i;
- /* 9: shruw */
- var44.i = ((orc_uint16) var43.i) >> 8;
- /* 10: convsuswb */
- var38 = ORC_CLAMP_UB (var44.i);
- /* 11: storeb */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_combine2_u8");
- orc_program_set_backup_function (p, _backup_cogorc_combine2_u8);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_constant (p, 4, 0x00000008, "c1");
- orc_program_add_parameter (p, 2, "p1");
- orc_program_add_parameter (p, 2, "p2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shruw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_P1] = p1;
- ex->params[ORC_VAR_P2] = p2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_I420_UYVY */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- orc_union32 *ORC_RESTRICT ptr1;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
- orc_union32 var38;
- orc_union16 var39;
-
- ptr0 = (orc_union32 *) d1;
- ptr1 = (orc_union32 *) d2;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_union16 *) s2;
- ptr6 = (orc_int8 *) s3;
- ptr7 = (orc_int8 *) s4;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr6[i];
- /* 1: loadb */
- var34 = ptr7[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var39.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[0];
- _dest.x2[1] = var35.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[1];
- _dest.x2[1] = var35.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- /* 6: loadw */
- var37 = ptr5[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[0];
- _dest.x2[1] = var37.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[1];
- _dest.x2[1] = var37.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 8: storel */
- ptr1[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- orc_union32 *ORC_RESTRICT ptr1;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
- orc_union32 var38;
- orc_union16 var39;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr1 = (orc_union32 *) ex->arrays[1];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_union16 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
- ptr7 = (orc_int8 *) ex->arrays[7];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr6[i];
- /* 1: loadb */
- var34 = ptr7[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var39.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[0];
- _dest.x2[1] = var35.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[1];
- _dest.x2[1] = var35.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- /* 6: loadw */
- var37 = ptr5[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[0];
- _dest.x2[1] = var37.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var39.x2[1];
- _dest.x2[1] = var37.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 8: storel */
- ptr1[i] = var38;
- }
-
-}
-
-void
-cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_I420_UYVY");
- orc_program_set_backup_function (p, _backup_cogorc_convert_I420_UYVY);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_destination (p, 4, "d2");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_source (p, 1, "s4");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->arrays[ORC_VAR_S4] = (void *) s4;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_I420_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- orc_union32 *ORC_RESTRICT ptr1;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
- orc_union32 var38;
- orc_union16 var39;
-
- ptr0 = (orc_union32 *) d1;
- ptr1 = (orc_union32 *) d2;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_union16 *) s2;
- ptr6 = (orc_int8 *) s3;
- ptr7 = (orc_int8 *) s4;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr6[i];
- /* 1: loadb */
- var34 = ptr7[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var39.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[0];
- _dest.x2[1] = var39.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[1];
- _dest.x2[1] = var39.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- /* 6: loadw */
- var37 = ptr5[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var39.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var39.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 8: storel */
- ptr1[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- orc_union32 *ORC_RESTRICT ptr1;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
- orc_union32 var38;
- orc_union16 var39;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr1 = (orc_union32 *) ex->arrays[1];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_union16 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
- ptr7 = (orc_int8 *) ex->arrays[7];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr6[i];
- /* 1: loadb */
- var34 = ptr7[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var39.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[0];
- _dest.x2[1] = var39.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[1];
- _dest.x2[1] = var39.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- /* 6: loadw */
- var37 = ptr5[i];
- /* 7: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var39.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var39.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 8: storel */
- ptr1[i] = var38;
- }
-
-}
-
-void
-cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_I420_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_convert_I420_YUY2);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_destination (p, 4, "d2");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_source (p, 1, "s4");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->arrays[ORC_VAR_S4] = (void *) s4;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_I420_AYUV */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- orc_union32 *ORC_RESTRICT ptr1;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_int8 var39;
- orc_int8 var40;
- orc_union32 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
-
- ptr0 = (orc_union32 *) d1;
- ptr1 = (orc_union32 *) d2;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
- ptr7 = (orc_int8 *) s4;
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 8: loadpb */
- var39 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var42 = ptr6[i >> 1];
- /* 1: loadupdb */
- var43 = ptr7[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var42;
- _dest.x2[1] = var43;
- var44.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var45.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var45.i;
- _dest.x2[1] = var44.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- /* 9: loadb */
- var40 = ptr5[i];
- /* 10: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var40;
- var46.i = _dest.i;
- }
- /* 11: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var46.i;
- _dest.x2[1] = var44.i;
- var41.i = _dest.i;
- }
- /* 12: storel */
- ptr1[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- orc_union32 *ORC_RESTRICT ptr1;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_int8 var39;
- orc_int8 var40;
- orc_union32 var41;
- orc_int8 var42;
- orc_int8 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_union16 var46;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr1 = (orc_union32 *) ex->arrays[1];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
- ptr7 = (orc_int8 *) ex->arrays[7];
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 8: loadpb */
- var39 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var42 = ptr6[i >> 1];
- /* 1: loadupdb */
- var43 = ptr7[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var42;
- _dest.x2[1] = var43;
- var44.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var45.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var45.i;
- _dest.x2[1] = var44.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- /* 9: loadb */
- var40 = ptr5[i];
- /* 10: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var40;
- var46.i = _dest.i;
- }
- /* 11: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var46.i;
- _dest.x2[1] = var44.i;
- var41.i = _dest.i;
- }
- /* 12: storel */
- ptr1[i] = var41;
- }
-
-}
-
-void
-cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_I420_AYUV");
- orc_program_set_backup_function (p, _backup_cogorc_convert_I420_AYUV);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_destination (p, 4, "d2");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_source (p, 1, "s4");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
-
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->arrays[ORC_VAR_S4] = (void *) s4;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_YUY2_I420 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_int8 *ORC_RESTRICT ptr3;
- const orc_union32 *ORC_RESTRICT ptr4;
- const orc_union32 *ORC_RESTRICT ptr5;
- orc_union32 var35;
- orc_union32 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_union16 *) d2;
- ptr2 = (orc_int8 *) d3;
- ptr3 = (orc_int8 *) d4;
- ptr4 = (orc_union32 *) s1;
- ptr5 = (orc_union32 *) s2;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var40;
- /* 3: loadl */
- var36 = ptr5[i];
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var41.x2[0] = _src.x2[1];
- var42.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var41.x2[1] = _src.x2[1];
- var42.x2[1] = _src.x2[0];
- }
- /* 5: storew */
- ptr1[i] = var42;
- /* 6: avgub */
- var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
- /* 7: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 8: storeb */
- ptr3[i] = var37;
- /* 9: storeb */
- ptr2[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_int8 *ORC_RESTRICT ptr3;
- const orc_union32 *ORC_RESTRICT ptr4;
- const orc_union32 *ORC_RESTRICT ptr5;
- orc_union32 var35;
- orc_union32 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_union16 *) ex->arrays[1];
- ptr2 = (orc_int8 *) ex->arrays[2];
- ptr3 = (orc_int8 *) ex->arrays[3];
- ptr4 = (orc_union32 *) ex->arrays[4];
- ptr5 = (orc_union32 *) ex->arrays[5];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var40;
- /* 3: loadl */
- var36 = ptr5[i];
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var41.x2[0] = _src.x2[1];
- var42.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var41.x2[1] = _src.x2[1];
- var42.x2[1] = _src.x2[0];
- }
- /* 5: storew */
- ptr1[i] = var42;
- /* 6: avgub */
- var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
- /* 7: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 8: storeb */
- ptr3[i] = var37;
- /* 9: storeb */
- ptr2[i] = var38;
- }
-
-}
-
-void
-cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_YUY2_I420");
- orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_I420);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_destination (p, 1, "d4");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_source (p, 4, "s2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->arrays[ORC_VAR_D4] = d4;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_UYVY_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var32;
- orc_union32 var33;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var32 = ptr4[i];
- /* 1: swapw */
- var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
- var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
- /* 2: storel */
- ptr0[i] = var33;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var32;
- orc_union32 var33;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var32 = ptr4[i];
- /* 1: swapw */
- var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
- var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
- /* 2: storel */
- ptr0[i] = var33;
- }
- }
-
-}
-
-void
-cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_UYVY_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_YUY2);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
-
- orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_planar_chroma_420_422 */
-#ifdef DISABLE_ORC
-void
-cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
- int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_int8 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
- orc_int8 var35;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: copyb */
- var33 = var32;
- /* 2: storeb */
- ptr0[i] = var33;
- /* 3: loadb */
- var34 = ptr4[i];
- /* 4: copyb */
- var35 = var34;
- /* 5: storeb */
- ptr1[i] = var35;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_int8 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
- orc_int8 var35;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: copyb */
- var33 = var32;
- /* 2: storeb */
- ptr0[i] = var33;
- /* 3: loadb */
- var34 = ptr4[i];
- /* 4: copyb */
- var35 = var34;
- /* 5: storeb */
- ptr1[i] = var35;
- }
- }
-
-}
-
-void
-cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
- int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_planar_chroma_420_422");
- orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_420_422);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_source (p, 1, "s1");
-
- orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_planar_chroma_420_444 */
-#ifdef DISABLE_ORC
-void
-cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
- int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_union16 var34;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr4[i];
- /* 1: splatbw */
- var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
- /* 2: storew */
- ptr0[i] = var34;
- /* 3: storew */
- ptr1[i] = var34;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_union16 var34;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr4[i];
- /* 1: splatbw */
- var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
- /* 2: storew */
- ptr0[i] = var34;
- /* 3: storew */
- ptr1[i] = var34;
- }
- }
-
-}
-
-void
-cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
- int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_planar_chroma_420_444");
- orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_420_444);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_planar_chroma_422_444 */
-#ifdef DISABLE_ORC
-void
-cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_union16 var34;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr4[i];
- /* 1: splatbw */
- var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
- /* 2: storew */
- ptr0[i] = var34;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_union16 var34;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr4[i];
- /* 1: splatbw */
- var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
- /* 2: storew */
- ptr0[i] = var34;
- }
- }
-
-}
-
-void
-cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_planar_chroma_422_444");
- orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_422_444);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_planar_chroma_444_422 */
-#ifdef DISABLE_ORC
-void
-cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var34 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var34.i;
- var36 = _src.x2[1];
- var37 = _src.x2[0];
- }
- /* 2: avgub */
- var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var35;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var34 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var34.i;
- var36 = _src.x2[1];
- var37 = _src.x2[0];
- }
- /* 2: avgub */
- var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var35;
- }
- }
-
-}
-
-void
-cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_planar_chroma_444_422");
- orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_444_422);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
-
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_planar_chroma_444_420 */
-#ifdef DISABLE_ORC
-void
-cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
- int i;
- int j;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_int8 var40;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var35 = ptr4[i];
- /* 1: loadw */
- var36 = ptr5[i];
- /* 2: avgub */
- var38.x2[0] =
- ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
- var38.x2[1] =
- ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var38.i;
- var39 = _src.x2[1];
- var40 = _src.x2[0];
- }
- /* 4: avgub */
- var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
- /* 5: storeb */
- ptr0[i] = var37;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_int8 var39;
- orc_int8 var40;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var35 = ptr4[i];
- /* 1: loadw */
- var36 = ptr5[i];
- /* 2: avgub */
- var38.x2[0] =
- ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
- var38.x2[1] =
- ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var38.i;
- var39 = _src.x2[1];
- var40 = _src.x2[0];
- }
- /* 4: avgub */
- var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
- /* 5: storeb */
- ptr0[i] = var37;
- }
- }
-
-}
-
-void
-cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_planar_chroma_444_420");
- orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_444_420);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
-
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_planar_chroma_422_420 */
-#ifdef DISABLE_ORC
-void
-cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
- int i;
- int j;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: loadb */
- var33 = ptr5[i];
- /* 2: avgub */
- var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var34;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- orc_int8 var32;
- orc_int8 var33;
- orc_int8 var34;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var32 = ptr4[i];
- /* 1: loadb */
- var33 = ptr5[i];
- /* 2: avgub */
- var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
- /* 3: storeb */
- ptr0[i] = var34;
- }
- }
-
-}
-
-void
-cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_planar_chroma_422_420");
- orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_422_420);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
-
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_YUY2_AYUV */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var40.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var40.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var39.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var40.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var40.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var39.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_YUY2_AYUV");
- orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_AYUV);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_UYVY_AYUV */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var39.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var39.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var40.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var39.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var39.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var40.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_UYVY_AYUV");
- orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_AYUV);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_YUY2_Y42B */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_union16 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var33.x2[0];
- var37.x2[0] = _src.x2[1];
- var34.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var33.x2[1];
- var37.x2[1] = _src.x2[1];
- var34.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var34;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var37.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 4: storeb */
- ptr2[i] = var35;
- /* 5: storeb */
- ptr1[i] = var36;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_union16 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var33.x2[0];
- var37.x2[0] = _src.x2[1];
- var34.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var33.x2[1];
- var37.x2[1] = _src.x2[1];
- var34.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var34;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var37.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 4: storeb */
- ptr2[i] = var35;
- /* 5: storeb */
- ptr1[i] = var36;
- }
- }
-
-}
-
-void
-cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_YUY2_Y42B");
- orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_Y42B);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_UYVY_Y42B */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_union16 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var33.x2[0];
- var34.x2[0] = _src.x2[1];
- var37.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var33.x2[1];
- var34.x2[1] = _src.x2[1];
- var37.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var34;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var37.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 4: storeb */
- ptr2[i] = var35;
- /* 5: storeb */
- ptr1[i] = var36;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_union16 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var33.x2[0];
- var34.x2[0] = _src.x2[1];
- var37.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var33.x2[1];
- var34.x2[1] = _src.x2[1];
- var37.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var34;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var37.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 4: storeb */
- ptr2[i] = var35;
- /* 5: storeb */
- ptr1[i] = var36;
- }
- }
-
-}
-
-void
-cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_UYVY_Y42B");
- orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_Y42B);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_YUY2_Y444 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_union16 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_int8 var41;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var39.x2[0] = _src.x2[1];
- var36.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var39.x2[1] = _src.x2[1];
- var36.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var36;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var40 = _src.x2[1];
- var41 = _src.x2[0];
- }
- /* 4: splatbw */
- var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
- /* 5: storew */
- ptr1[i] = var37;
- /* 6: splatbw */
- var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
- /* 7: storew */
- ptr2[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_union16 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_int8 var41;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var39.x2[0] = _src.x2[1];
- var36.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var39.x2[1] = _src.x2[1];
- var36.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var36;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var40 = _src.x2[1];
- var41 = _src.x2[0];
- }
- /* 4: splatbw */
- var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
- /* 5: storew */
- ptr1[i] = var37;
- /* 6: splatbw */
- var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
- /* 7: storew */
- ptr2[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_YUY2_Y444");
- orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_Y444);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_destination (p, 2, "d3");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_UYVY_Y444 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_union16 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_int8 var41;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var36.x2[0] = _src.x2[1];
- var39.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var36.x2[1] = _src.x2[1];
- var39.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var36;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var40 = _src.x2[1];
- var41 = _src.x2[0];
- }
- /* 4: splatbw */
- var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
- /* 5: storew */
- ptr1[i] = var37;
- /* 6: splatbw */
- var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
- /* 7: storew */
- ptr2[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_union16 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_int8 var41;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var36.x2[0] = _src.x2[1];
- var39.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var36.x2[1] = _src.x2[1];
- var39.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var36;
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var40 = _src.x2[1];
- var41 = _src.x2[0];
- }
- /* 4: splatbw */
- var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
- /* 5: storew */
- ptr1[i] = var37;
- /* 6: splatbw */
- var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
- /* 7: storew */
- ptr2[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_UYVY_Y444");
- orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_Y444);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_destination (p, 2, "d3");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_UYVY_I420 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_int8 *ORC_RESTRICT ptr3;
- const orc_union32 *ORC_RESTRICT ptr4;
- const orc_union32 *ORC_RESTRICT ptr5;
- orc_union32 var35;
- orc_union32 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_union16 *) d2;
- ptr2 = (orc_int8 *) d3;
- ptr3 = (orc_int8 *) d4;
- ptr4 = (orc_union32 *) s1;
- ptr5 = (orc_union32 *) s2;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var39;
- /* 3: loadl */
- var36 = ptr5[i];
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var41.x2[0] = _src.x2[1];
- var42.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var41.x2[1] = _src.x2[1];
- var42.x2[1] = _src.x2[0];
- }
- /* 5: storew */
- ptr1[i] = var41;
- /* 6: avgub */
- var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 7: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 8: storeb */
- ptr3[i] = var37;
- /* 9: storeb */
- ptr2[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_int8 *ORC_RESTRICT ptr3;
- const orc_union32 *ORC_RESTRICT ptr4;
- const orc_union32 *ORC_RESTRICT ptr5;
- orc_union32 var35;
- orc_union32 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_union16 *) ex->arrays[1];
- ptr2 = (orc_int8 *) ex->arrays[2];
- ptr3 = (orc_int8 *) ex->arrays[3];
- ptr4 = (orc_union32 *) ex->arrays[4];
- ptr5 = (orc_union32 *) ex->arrays[5];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var35 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var35.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var35.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: storew */
- ptr0[i] = var39;
- /* 3: loadl */
- var36 = ptr5[i];
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var41.x2[0] = _src.x2[1];
- var42.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var41.x2[1] = _src.x2[1];
- var42.x2[1] = _src.x2[0];
- }
- /* 5: storew */
- ptr1[i] = var41;
- /* 6: avgub */
- var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 7: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 8: storeb */
- ptr3[i] = var37;
- /* 9: storeb */
- ptr2[i] = var38;
- }
-
-}
-
-void
-cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_UYVY_I420");
- orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_I420);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_destination (p, 1, "d4");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_source (p, 4, "s2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->arrays[ORC_VAR_D4] = d4;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_I420 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_int8 *ORC_RESTRICT ptr3;
- const orc_union64 *ORC_RESTRICT ptr4;
- const orc_union64 *ORC_RESTRICT ptr5;
- orc_union64 var40;
- orc_union16 var41;
- orc_union64 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_union32 var46;
- orc_union32 var47;
- orc_union32 var48;
- orc_union32 var49;
- orc_union32 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_int8 var53;
- orc_int8 var54;
- orc_int8 var55;
- orc_int8 var56;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.x2[0];
- var46.x2[0] = _src.x2[1];
- var47.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var40.x2[1];
- var46.x2[1] = _src.x2[1];
- var47.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var47.x2[0];
- var41.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var47.x2[1];
- var41.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var41;
- /* 4: loadq */
- var42 = ptr5[i];
- /* 5: splitlw */
- {
- orc_union32 _src;
- _src.i = var42.x2[0];
- var48.x2[0] = _src.x2[1];
- var49.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var42.x2[1];
- var48.x2[1] = _src.x2[1];
- var49.x2[1] = _src.x2[0];
- }
- /* 6: select1wb */
- {
- orc_union16 _src;
- _src.i = var49.x2[0];
- var43.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var49.x2[1];
- var43.x2[1] = _src.x2[1];
- }
- /* 7: storew */
- ptr1[i] = var43;
- /* 8: avgub */
- var50.x4[0] =
- ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
- var50.x4[1] =
- ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
- var50.x4[2] =
- ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
- var50.x4[3] =
- ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
- /* 9: splitwb */
- {
- orc_union16 _src;
- _src.i = var50.x2[0];
- var51.x2[0] = _src.x2[1];
- var52.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var50.x2[1];
- var51.x2[1] = _src.x2[1];
- var52.x2[1] = _src.x2[0];
- }
- /* 10: splitwb */
- {
- orc_union16 _src;
- _src.i = var52.i;
- var53 = _src.x2[1];
- var54 = _src.x2[0];
- }
- /* 11: avgub */
- var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
- /* 12: storeb */
- ptr2[i] = var44;
- /* 13: splitwb */
- {
- orc_union16 _src;
- _src.i = var51.i;
- var55 = _src.x2[1];
- var56 = _src.x2[0];
- }
- /* 14: avgub */
- var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
- /* 15: storeb */
- ptr3[i] = var45;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_int8 *ORC_RESTRICT ptr3;
- const orc_union64 *ORC_RESTRICT ptr4;
- const orc_union64 *ORC_RESTRICT ptr5;
- orc_union64 var40;
- orc_union16 var41;
- orc_union64 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_union32 var46;
- orc_union32 var47;
- orc_union32 var48;
- orc_union32 var49;
- orc_union32 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_int8 var53;
- orc_int8 var54;
- orc_int8 var55;
- orc_int8 var56;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.x2[0];
- var46.x2[0] = _src.x2[1];
- var47.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var40.x2[1];
- var46.x2[1] = _src.x2[1];
- var47.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var47.x2[0];
- var41.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var47.x2[1];
- var41.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var41;
- /* 4: loadq */
- var42 = ptr5[i];
- /* 5: splitlw */
- {
- orc_union32 _src;
- _src.i = var42.x2[0];
- var48.x2[0] = _src.x2[1];
- var49.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var42.x2[1];
- var48.x2[1] = _src.x2[1];
- var49.x2[1] = _src.x2[0];
- }
- /* 6: select1wb */
- {
- orc_union16 _src;
- _src.i = var49.x2[0];
- var43.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var49.x2[1];
- var43.x2[1] = _src.x2[1];
- }
- /* 7: storew */
- ptr1[i] = var43;
- /* 8: avgub */
- var50.x4[0] =
- ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
- var50.x4[1] =
- ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
- var50.x4[2] =
- ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
- var50.x4[3] =
- ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
- /* 9: splitwb */
- {
- orc_union16 _src;
- _src.i = var50.x2[0];
- var51.x2[0] = _src.x2[1];
- var52.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var50.x2[1];
- var51.x2[1] = _src.x2[1];
- var52.x2[1] = _src.x2[0];
- }
- /* 10: splitwb */
- {
- orc_union16 _src;
- _src.i = var52.i;
- var53 = _src.x2[1];
- var54 = _src.x2[0];
- }
- /* 11: avgub */
- var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
- /* 12: storeb */
- ptr2[i] = var44;
- /* 13: splitwb */
- {
- orc_union16 _src;
- _src.i = var51.i;
- var55 = _src.x2[1];
- var56 = _src.x2[0];
- }
- /* 14: avgub */
- var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
- /* 15: storeb */
- ptr3[i] = var45;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_I420");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_I420);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_destination (p, 1, "d4");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_source (p, 8, "s2");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 1, "t7");
- orc_program_add_temporary (p, 1, "t8");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_D4] = d4;
- ex->params[ORC_VAR_D4] = d4_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var43.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var43.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var43.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var43.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_YUY2);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 4, "t4");
- orc_program_add_temporary (p, 4, "t5");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_UYVY */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[0];
- _dest.x2[1] = var44.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[1];
- _dest.x2[1] = var44.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[0];
- _dest.x2[1] = var44.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[1];
- _dest.x2[1] = var44.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_UYVY");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_UYVY);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 4, "t4");
- orc_program_add_temporary (p, 4, "t5");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_Y42B */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var36 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var36.x2[0];
- var40.x2[0] = _src.x2[1];
- var41.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var36.x2[1];
- var40.x2[1] = _src.x2[1];
- var41.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 3: avgub */
- var44.x2[0] =
- ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
- var44.x2[1] =
- ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 5: storeb */
- ptr2[i] = var37;
- /* 6: storeb */
- ptr1[i] = var38;
- /* 7: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var41.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 8: storew */
- ptr0[i] = var39;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var36 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var36.x2[0];
- var40.x2[0] = _src.x2[1];
- var41.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var36.x2[1];
- var40.x2[1] = _src.x2[1];
- var41.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 3: avgub */
- var44.x2[0] =
- ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
- var44.x2[1] =
- ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 5: storeb */
- ptr2[i] = var37;
- /* 6: storeb */
- ptr1[i] = var38;
- /* 7: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var41.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 8: storew */
- ptr0[i] = var39;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_Y42B");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_Y42B);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_Y444 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_int8 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
- ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var34 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var34.i;
- var38.i = _src.x2[1];
- var39.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var38.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 3: storeb */
- ptr2[i] = var35;
- /* 4: storeb */
- ptr1[i] = var36;
- /* 5: select1wb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var37 = _src.x2[1];
- }
- /* 6: storeb */
- ptr0[i] = var37;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_int8 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
- ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var34 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var34.i;
- var38.i = _src.x2[1];
- var39.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var38.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 3: storeb */
- ptr2[i] = var35;
- /* 4: storeb */
- ptr1[i] = var36;
- /* 5: select1wb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var37 = _src.x2[1];
- }
- /* 6: storeb */
- ptr0[i] = var37;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
- guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
- int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_Y444");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_Y444);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->params[ORC_VAR_D2] = d2_stride;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->params[ORC_VAR_D3] = d3_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_Y42B_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
- ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr5[i];
- /* 1: loadb */
- var34 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var37.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[0];
- _dest.x2[1] = var37.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[1];
- _dest.x2[1] = var37.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
- ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr5[i];
- /* 1: loadb */
- var34 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var37.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[0];
- _dest.x2[1] = var37.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var35.x2[1];
- _dest.x2[1] = var37.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- }
- }
-
-}
-
-void
-cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_Y42B_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_YUY2);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_S3] = s3_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_Y42B_UYVY */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
- ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr5[i];
- /* 1: loadb */
- var34 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var37.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var35.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var35.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
- ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var33 = ptr5[i];
- /* 1: loadb */
- var34 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var37.i = _dest.i;
- }
- /* 3: loadw */
- var35 = ptr4[i];
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var35.x2[0];
- var36.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var35.x2[1];
- var36.x2[1] = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- }
- }
-
-}
-
-void
-cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_Y42B_UYVY");
- orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_UYVY);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_S3] = s3_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_Y42B_AYUV */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- int i;
- int j;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_union64 var40;
- orc_union16 var41;
- orc_union32 var42;
- orc_union32 var43;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
- ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
- /* 3: loadpb */
- var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr5[i];
- /* 1: loadb */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var41.i = _dest.i;
- }
- /* 4: loadw */
- var39 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[0];
- _dest.x2[1] = var39.x2[0];
- var42.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[1];
- _dest.x2[1] = var39.x2[1];
- var42.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.i;
- _dest.x2[1] = var41.i;
- var43.i = _dest.i;
- }
- /* 7: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[0];
- _dest.x2[1] = var43.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[1];
- _dest.x2[1] = var43.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 8: storeq */
- ptr0[i] = var40;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_union64 var40;
- orc_union16 var41;
- orc_union32 var42;
- orc_union32 var43;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
- ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
- /* 3: loadpb */
- var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr5[i];
- /* 1: loadb */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var41.i = _dest.i;
- }
- /* 4: loadw */
- var39 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[0];
- _dest.x2[1] = var39.x2[0];
- var42.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[1];
- _dest.x2[1] = var39.x2[1];
- var42.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.i;
- _dest.x2[1] = var41.i;
- var43.i = _dest.i;
- }
- /* 7: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[0];
- _dest.x2[1] = var43.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[1];
- _dest.x2[1] = var43.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 8: storeq */
- ptr0[i] = var40;
- }
- }
-
-}
-
-void
-cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_Y42B_AYUV");
- orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_AYUV);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_S3] = s3_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_Y444_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_union16 *ORC_RESTRICT ptr6;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
- ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var36 = ptr5[i];
- /* 1: loadw */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 4: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 5: loadw */
- var38 = ptr4[i];
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[0];
- _dest.x2[1] = var43.x2[0];
- var39.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[1];
- _dest.x2[1] = var43.x2[1];
- var39.x2[1] = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var39;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_union16 *ORC_RESTRICT ptr6;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
- ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var36 = ptr5[i];
- /* 1: loadw */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 4: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 5: loadw */
- var38 = ptr4[i];
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[0];
- _dest.x2[1] = var43.x2[0];
- var39.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[1];
- _dest.x2[1] = var43.x2[1];
- var39.x2[1] = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var39;
- }
- }
-
-}
-
-void
-cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_Y444_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_YUY2);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_source (p, 2, "s3");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_S3] = s3_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_Y444_UYVY */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_union16 *ORC_RESTRICT ptr6;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
- ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var36 = ptr5[i];
- /* 1: loadw */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 4: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 5: loadw */
- var38 = ptr4[i];
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[0];
- _dest.x2[1] = var38.x2[0];
- var39.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[1];
- _dest.x2[1] = var38.x2[1];
- var39.x2[1] = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var39;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- const orc_union16 *ORC_RESTRICT ptr6;
- orc_union16 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
- ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var36 = ptr5[i];
- /* 1: loadw */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 4: avgub */
- var43.x2[0] =
- ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] =
- ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 5: loadw */
- var38 = ptr4[i];
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[0];
- _dest.x2[1] = var38.x2[0];
- var39.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[1];
- _dest.x2[1] = var38.x2[1];
- var39.x2[1] = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var39;
- }
- }
-
-}
-
-void
-cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_Y444_UYVY");
- orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_UYVY);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_source (p, 2, "s3");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_S3] = s3_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_Y444_AYUV */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
- ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
- ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr5[i];
- /* 1: loadb */
- var35 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var39.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
- ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
- ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr5[i];
- /* 1: loadb */
- var35 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var39.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
- }
-
-}
-
-void
-cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride,
- const guint8 * ORC_RESTRICT s2, int s2_stride,
- const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_Y444_AYUV");
- orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_AYUV);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->params[ORC_VAR_S2] = s2_stride;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->params[ORC_VAR_S3] = s3_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_ARGB */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var61;
- _dest.x2[1] = var87;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var88;
- _dest.x2[1] = var89;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var61;
- _dest.x2[1] = var87;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var88;
- _dest.x2[1] = var89;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_ARGB");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_ARGB);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 1, 0x00000008, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x0000002a, "c3");
- orc_program_add_constant (p, 4, 0x00000067, "c4");
- orc_program_add_constant (p, 4, 0x00000004, "c5");
- orc_program_add_constant (p, 4, 0x00000064, "c6");
- orc_program_add_constant (p, 4, 0x00000068, "c7");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
- orc_program_add_temporary (p, 2, "t9");
- orc_program_add_temporary (p, 2, "t10");
- orc_program_add_temporary (p, 2, "t11");
- orc_program_add_temporary (p, 2, "t12");
- orc_program_add_temporary (p, 1, "t13");
- orc_program_add_temporary (p, 1, "t14");
- orc_program_add_temporary (p, 1, "t15");
- orc_program_add_temporary (p, 4, "t16");
-
- orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T9, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T8, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3,
- ORC_VAR_T13, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T14,
- ORC_VAR_T15, ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_BGRA */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var89;
- _dest.x2[1] = var88;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var87;
- _dest.x2[1] = var61;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var89;
- _dest.x2[1] = var88;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var87;
- _dest.x2[1] = var61;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_BGRA");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_BGRA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 1, 0x00000008, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x0000002a, "c3");
- orc_program_add_constant (p, 4, 0x00000067, "c4");
- orc_program_add_constant (p, 4, 0x00000004, "c5");
- orc_program_add_constant (p, 4, 0x00000064, "c6");
- orc_program_add_constant (p, 4, 0x00000068, "c7");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
- orc_program_add_temporary (p, 2, "t9");
- orc_program_add_temporary (p, 2, "t10");
- orc_program_add_temporary (p, 2, "t11");
- orc_program_add_temporary (p, 2, "t12");
- orc_program_add_temporary (p, 1, "t13");
- orc_program_add_temporary (p, 1, "t14");
- orc_program_add_temporary (p, 1, "t15");
- orc_program_add_temporary (p, 4, "t16");
-
- orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T9, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T8, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T15,
- ORC_VAR_T14, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T13,
- ORC_VAR_T3, ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_ABGR */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var61;
- _dest.x2[1] = var89;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var88;
- _dest.x2[1] = var87;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var61;
- _dest.x2[1] = var89;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var88;
- _dest.x2[1] = var87;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_ABGR");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_ABGR);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 1, 0x00000008, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x0000002a, "c3");
- orc_program_add_constant (p, 4, 0x00000067, "c4");
- orc_program_add_constant (p, 4, 0x00000004, "c5");
- orc_program_add_constant (p, 4, 0x00000064, "c6");
- orc_program_add_constant (p, 4, 0x00000068, "c7");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
- orc_program_add_temporary (p, 2, "t9");
- orc_program_add_temporary (p, 2, "t10");
- orc_program_add_temporary (p, 2, "t11");
- orc_program_add_temporary (p, 2, "t12");
- orc_program_add_temporary (p, 1, "t13");
- orc_program_add_temporary (p, 1, "t14");
- orc_program_add_temporary (p, 1, "t15");
- orc_program_add_temporary (p, 4, "t16");
-
- orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T9, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T8, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3,
- ORC_VAR_T15, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T14,
- ORC_VAR_T13, ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_AYUV_RGBA */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- int i;
- int j;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
- ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var87;
- _dest.x2[1] = var88;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var89;
- _dest.x2[1] = var61;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int j;
- int n = ex->n;
- int m = ex->params[ORC_VAR_A1];
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var48;
- orc_union32 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_union16 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_int8 var87;
- orc_int8 var88;
- orc_int8 var89;
- orc_union16 var90;
- orc_union16 var91;
- orc_union32 var92;
-
- for (j = 0; j < m; j++) {
- ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
- ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
- /* 1: loadpb */
- var49.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var49.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 14: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 21: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 25: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 29: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 40: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var48 = ptr4[i];
- /* 2: subb */
- var57.x4[0] = var48.x4[0] - var49.x4[0];
- var57.x4[1] = var48.x4[1] - var49.x4[1];
- var57.x4[2] = var48.x4[2] - var49.x4[2];
- var57.x4[3] = var48.x4[3] - var49.x4[3];
- /* 3: splitlw */
- {
- orc_union32 _src;
- _src.i = var57.i;
- var58.i = _src.x2[1];
- var59.i = _src.x2[0];
- }
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var59.i;
- var60 = _src.x2[1];
- var61 = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var58.i;
- var62 = _src.x2[1];
- var63 = _src.x2[0];
- }
- /* 6: convsbw */
- var64.i = var60;
- /* 7: convsbw */
- var65.i = var63;
- /* 8: convsbw */
- var66.i = var62;
- /* 10: mullw */
- var67.i = (var64.i * var50.i) & 0xffff;
- /* 11: shrsw */
- var68.i = var67.i >> 8;
- /* 12: addssw */
- var69.i = ORC_CLAMP_SW (var64.i + var68.i);
- /* 13: addssw */
- var70.i = ORC_CLAMP_SW (var69.i + var66.i);
- /* 15: mullw */
- var71.i = (var66.i * var51.i) & 0xffff;
- /* 16: shrsw */
- var72.i = var71.i >> 8;
- /* 17: subssw */
- var73.i = ORC_CLAMP_SW (var70.i - var72.i);
- /* 18: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var66.i);
- /* 19: addssw */
- var75.i = ORC_CLAMP_SW (var69.i + var65.i);
- /* 20: addssw */
- var76.i = ORC_CLAMP_SW (var75.i + var65.i);
- /* 22: mullw */
- var77.i = (var65.i * var52.i) & 0xffff;
- /* 23: shrsw */
- var78.i = var77.i >> 8;
- /* 24: addssw */
- var79.i = ORC_CLAMP_SW (var76.i + var78.i);
- /* 26: mullw */
- var80.i = (var65.i * var53.i) & 0xffff;
- /* 27: shrsw */
- var81.i = var80.i >> 8;
- /* 28: subssw */
- var82.i = ORC_CLAMP_SW (var69.i - var81.i);
- /* 30: mullw */
- var83.i = (var66.i * var54.i) & 0xffff;
- /* 31: shrsw */
- var84.i = var83.i >> 8;
- /* 32: subssw */
- var85.i = ORC_CLAMP_SW (var82.i - var84.i);
- /* 33: subssw */
- var86.i = ORC_CLAMP_SW (var85.i - var84.i);
- /* 34: convssswb */
- var87 = ORC_CLAMP_SB (var74.i);
- /* 35: convssswb */
- var88 = ORC_CLAMP_SB (var86.i);
- /* 36: convssswb */
- var89 = ORC_CLAMP_SB (var79.i);
- /* 37: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var87;
- _dest.x2[1] = var88;
- var90.i = _dest.i;
- }
- /* 38: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var89;
- _dest.x2[1] = var61;
- var91.i = _dest.i;
- }
- /* 39: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var90.i;
- _dest.x2[1] = var91.i;
- var92.i = _dest.i;
- }
- /* 41: addb */
- var56.x4[0] = var92.x4[0] + var55.x4[0];
- var56.x4[1] = var92.x4[1] + var55.x4[1];
- var56.x4[2] = var92.x4[2] + var55.x4[2];
- var56.x4[3] = var92.x4[3] + var55.x4[3];
- /* 42: storel */
- ptr0[i] = var56;
- }
- }
-
-}
-
-void
-cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
- const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_2d (p);
- orc_program_set_name (p, "cogorc_convert_AYUV_RGBA");
- orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_RGBA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 1, 0x00000008, "c1");
- orc_program_add_constant (p, 4, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x0000002a, "c3");
- orc_program_add_constant (p, 4, 0x00000067, "c4");
- orc_program_add_constant (p, 4, 0x00000004, "c5");
- orc_program_add_constant (p, 4, 0x00000064, "c6");
- orc_program_add_constant (p, 4, 0x00000068, "c7");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
- orc_program_add_temporary (p, 2, "t9");
- orc_program_add_temporary (p, 2, "t10");
- orc_program_add_temporary (p, 2, "t11");
- orc_program_add_temporary (p, 2, "t12");
- orc_program_add_temporary (p, 1, "t13");
- orc_program_add_temporary (p, 1, "t14");
- orc_program_add_temporary (p, 1, "t15");
- orc_program_add_temporary (p, 4, "t16");
-
- orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T9, ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T8, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T13,
- ORC_VAR_T14, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T15,
- ORC_VAR_T3, ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ORC_EXECUTOR_M (ex) = m;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->params[ORC_VAR_D1] = d1_stride;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->params[ORC_VAR_S1] = s1_stride;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_I420_BGRA */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_int8 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_int8 var57;
- orc_union16 var58;
- orc_int8 var59;
- orc_int8 var60;
- orc_union16 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_int8 var85;
- orc_int8 var86;
- orc_int8 var87;
- orc_union16 var88;
- orc_union16 var89;
- orc_union32 var90;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 1: loadpb */
- var46 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 5: loadpb */
- var47 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpb */
- var48 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 12: loadpw */
- var49.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 17: loadpw */
- var50.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 24: loadpw */
- var51.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 28: loadpw */
- var52.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 32: loadpw */
- var53.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 41: loadpb */
- var54 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 44: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var45 = ptr4[i];
- /* 2: subb */
- var57 = var45 - var46;
- /* 3: convsbw */
- var58.i = var57;
- /* 4: loadupib */
- var59 =
- (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
- 1) >> 1 : ptr5[i >> 1];
- /* 6: subb */
- var60 = var59 - var47;
- /* 7: convsbw */
- var61.i = var60;
- /* 8: loadupib */
- var62 =
- (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
- 1) >> 1 : ptr6[i >> 1];
- /* 10: subb */
- var63 = var62 - var48;
- /* 11: convsbw */
- var64.i = var63;
- /* 13: mullw */
- var65.i = (var58.i * var49.i) & 0xffff;
- /* 14: shrsw */
- var66.i = var65.i >> 8;
- /* 15: addssw */
- var67.i = ORC_CLAMP_SW (var58.i + var66.i);
- /* 16: addssw */
- var68.i = ORC_CLAMP_SW (var67.i + var64.i);
- /* 18: mullw */
- var69.i = (var64.i * var50.i) & 0xffff;
- /* 19: shrsw */
- var70.i = var69.i >> 8;
- /* 20: subssw */
- var71.i = ORC_CLAMP_SW (var68.i - var70.i);
- /* 21: addssw */
- var72.i = ORC_CLAMP_SW (var71.i + var64.i);
- /* 22: addssw */
- var73.i = ORC_CLAMP_SW (var67.i + var61.i);
- /* 23: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var61.i);
- /* 25: mullw */
- var75.i = (var61.i * var51.i) & 0xffff;
- /* 26: shrsw */
- var76.i = var75.i >> 8;
- /* 27: addssw */
- var77.i = ORC_CLAMP_SW (var74.i + var76.i);
- /* 29: mullw */
- var78.i = (var61.i * var52.i) & 0xffff;
- /* 30: shrsw */
- var79.i = var78.i >> 8;
- /* 31: subssw */
- var80.i = ORC_CLAMP_SW (var67.i - var79.i);
- /* 33: mullw */
- var81.i = (var64.i * var53.i) & 0xffff;
- /* 34: shrsw */
- var82.i = var81.i >> 8;
- /* 35: subssw */
- var83.i = ORC_CLAMP_SW (var80.i - var82.i);
- /* 36: subssw */
- var84.i = ORC_CLAMP_SW (var83.i - var82.i);
- /* 37: convssswb */
- var85 = ORC_CLAMP_SB (var72.i);
- /* 38: convssswb */
- var86 = ORC_CLAMP_SB (var84.i);
- /* 39: convssswb */
- var87 = ORC_CLAMP_SB (var77.i);
- /* 40: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var87;
- _dest.x2[1] = var86;
- var88.i = _dest.i;
- }
- /* 42: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var85;
- _dest.x2[1] = var54;
- var89.i = _dest.i;
- }
- /* 43: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var88.i;
- _dest.x2[1] = var89.i;
- var90.i = _dest.i;
- }
- /* 45: addb */
- var56.x4[0] = var90.x4[0] + var55.x4[0];
- var56.x4[1] = var90.x4[1] + var55.x4[1];
- var56.x4[2] = var90.x4[2] + var55.x4[2];
- var56.x4[3] = var90.x4[3] + var55.x4[3];
- /* 46: storel */
- ptr0[i] = var56;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_union16 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_int8 var54;
- orc_union32 var55;
- orc_union32 var56;
- orc_int8 var57;
- orc_union16 var58;
- orc_int8 var59;
- orc_int8 var60;
- orc_union16 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_union16 var65;
- orc_union16 var66;
- orc_union16 var67;
- orc_union16 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_int8 var85;
- orc_int8 var86;
- orc_int8 var87;
- orc_union16 var88;
- orc_union16 var89;
- orc_union32 var90;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 1: loadpb */
- var46 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 5: loadpb */
- var47 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 9: loadpb */
- var48 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 12: loadpw */
- var49.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 17: loadpw */
- var50.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 24: loadpw */
- var51.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 28: loadpw */
- var52.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 32: loadpw */
- var53.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 41: loadpb */
- var54 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 44: loadpb */
- var55.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var55.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var45 = ptr4[i];
- /* 2: subb */
- var57 = var45 - var46;
- /* 3: convsbw */
- var58.i = var57;
- /* 4: loadupib */
- var59 =
- (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
- 1) >> 1 : ptr5[i >> 1];
- /* 6: subb */
- var60 = var59 - var47;
- /* 7: convsbw */
- var61.i = var60;
- /* 8: loadupib */
- var62 =
- (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
- 1) >> 1 : ptr6[i >> 1];
- /* 10: subb */
- var63 = var62 - var48;
- /* 11: convsbw */
- var64.i = var63;
- /* 13: mullw */
- var65.i = (var58.i * var49.i) & 0xffff;
- /* 14: shrsw */
- var66.i = var65.i >> 8;
- /* 15: addssw */
- var67.i = ORC_CLAMP_SW (var58.i + var66.i);
- /* 16: addssw */
- var68.i = ORC_CLAMP_SW (var67.i + var64.i);
- /* 18: mullw */
- var69.i = (var64.i * var50.i) & 0xffff;
- /* 19: shrsw */
- var70.i = var69.i >> 8;
- /* 20: subssw */
- var71.i = ORC_CLAMP_SW (var68.i - var70.i);
- /* 21: addssw */
- var72.i = ORC_CLAMP_SW (var71.i + var64.i);
- /* 22: addssw */
- var73.i = ORC_CLAMP_SW (var67.i + var61.i);
- /* 23: addssw */
- var74.i = ORC_CLAMP_SW (var73.i + var61.i);
- /* 25: mullw */
- var75.i = (var61.i * var51.i) & 0xffff;
- /* 26: shrsw */
- var76.i = var75.i >> 8;
- /* 27: addssw */
- var77.i = ORC_CLAMP_SW (var74.i + var76.i);
- /* 29: mullw */
- var78.i = (var61.i * var52.i) & 0xffff;
- /* 30: shrsw */
- var79.i = var78.i >> 8;
- /* 31: subssw */
- var80.i = ORC_CLAMP_SW (var67.i - var79.i);
- /* 33: mullw */
- var81.i = (var64.i * var53.i) & 0xffff;
- /* 34: shrsw */
- var82.i = var81.i >> 8;
- /* 35: subssw */
- var83.i = ORC_CLAMP_SW (var80.i - var82.i);
- /* 36: subssw */
- var84.i = ORC_CLAMP_SW (var83.i - var82.i);
- /* 37: convssswb */
- var85 = ORC_CLAMP_SB (var72.i);
- /* 38: convssswb */
- var86 = ORC_CLAMP_SB (var84.i);
- /* 39: convssswb */
- var87 = ORC_CLAMP_SB (var77.i);
- /* 40: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var87;
- _dest.x2[1] = var86;
- var88.i = _dest.i;
- }
- /* 42: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var85;
- _dest.x2[1] = var54;
- var89.i = _dest.i;
- }
- /* 43: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var88.i;
- _dest.x2[1] = var89.i;
- var90.i = _dest.i;
- }
- /* 45: addb */
- var56.x4[0] = var90.x4[0] + var55.x4[0];
- var56.x4[1] = var90.x4[1] + var55.x4[1];
- var56.x4[2] = var90.x4[2] + var55.x4[2];
- var56.x4[3] = var90.x4[3] + var55.x4[3];
- /* 46: storel */
- ptr0[i] = var56;
- }
-
-}
-
-void
-cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_I420_BGRA");
- orc_program_set_backup_function (p, _backup_cogorc_convert_I420_BGRA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x00000008, "c1");
- orc_program_add_constant (p, 1, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x0000002a, "c3");
- orc_program_add_constant (p, 4, 0x00000067, "c4");
- orc_program_add_constant (p, 4, 0x00000004, "c5");
- orc_program_add_constant (p, 4, 0x00000064, "c6");
- orc_program_add_constant (p, 4, 0x00000068, "c7");
- orc_program_add_constant (p, 4, 0x000000ff, "c8");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
- orc_program_add_temporary (p, 2, "t9");
- orc_program_add_temporary (p, 1, "t10");
- orc_program_add_temporary (p, 1, "t11");
- orc_program_add_temporary (p, 1, "t12");
- orc_program_add_temporary (p, 4, "t13");
-
- orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S2,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S3,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T4, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T4, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T10, ORC_VAR_T7,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T12,
- ORC_VAR_T11, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T10,
- ORC_VAR_C8, ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T13, ORC_VAR_T1,
- ORC_VAR_T2, ORC_VAR_D1);
- orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T13, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_convert_I420_BGRA_avg */
-#ifdef DISABLE_ORC
-void
-cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
- const guint8 * ORC_RESTRICT s5, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- const orc_int8 *ORC_RESTRICT ptr8;
- orc_int8 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_int8 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_int8 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_int8 var65;
- orc_int8 var66;
- orc_int8 var67;
- orc_int8 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_union16 var87;
- orc_union16 var88;
- orc_union16 var89;
- orc_int8 var90;
- orc_int8 var91;
- orc_int8 var92;
- orc_union16 var93;
- orc_union16 var94;
- orc_union32 var95;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
- ptr7 = (orc_int8 *) s4;
- ptr8 = (orc_int8 *) s5;
-
- /* 1: loadpb */
- var47 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 7: loadpb */
- var48 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 13: loadpb */
- var49 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 16: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 21: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 28: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 32: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 36: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 45: loadpb */
- var55 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 48: loadpb */
- var56.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var56.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var56.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var56.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var46 = ptr4[i];
- /* 2: subb */
- var58 = var46 - var47;
- /* 3: convsbw */
- var59.i = var58;
- /* 4: loadupib */
- var60 =
- (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
- 1) >> 1 : ptr5[i >> 1];
- /* 5: loadupib */
- var61 =
- (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
- 1) >> 1 : ptr6[i >> 1];
- /* 6: avgub */
- var62 = ((orc_uint8) var60 + (orc_uint8) var61 + 1) >> 1;
- /* 8: subb */
- var63 = var62 - var48;
- /* 9: convsbw */
- var64.i = var63;
- /* 10: loadupib */
- var65 =
- (i & 1) ? ((orc_uint8) ptr7[i >> 1] + (orc_uint8) ptr7[(i >> 1) + 1] +
- 1) >> 1 : ptr7[i >> 1];
- /* 11: loadupib */
- var66 =
- (i & 1) ? ((orc_uint8) ptr8[i >> 1] + (orc_uint8) ptr8[(i >> 1) + 1] +
- 1) >> 1 : ptr8[i >> 1];
- /* 12: avgub */
- var67 = ((orc_uint8) var65 + (orc_uint8) var66 + 1) >> 1;
- /* 14: subb */
- var68 = var67 - var49;
- /* 15: convsbw */
- var69.i = var68;
- /* 17: mullw */
- var70.i = (var59.i * var50.i) & 0xffff;
- /* 18: shrsw */
- var71.i = var70.i >> 8;
- /* 19: addssw */
- var72.i = ORC_CLAMP_SW (var59.i + var71.i);
- /* 20: addssw */
- var73.i = ORC_CLAMP_SW (var72.i + var69.i);
- /* 22: mullw */
- var74.i = (var69.i * var51.i) & 0xffff;
- /* 23: shrsw */
- var75.i = var74.i >> 8;
- /* 24: subssw */
- var76.i = ORC_CLAMP_SW (var73.i - var75.i);
- /* 25: addssw */
- var77.i = ORC_CLAMP_SW (var76.i + var69.i);
- /* 26: addssw */
- var78.i = ORC_CLAMP_SW (var72.i + var64.i);
- /* 27: addssw */
- var79.i = ORC_CLAMP_SW (var78.i + var64.i);
- /* 29: mullw */
- var80.i = (var64.i * var52.i) & 0xffff;
- /* 30: shrsw */
- var81.i = var80.i >> 8;
- /* 31: addssw */
- var82.i = ORC_CLAMP_SW (var79.i + var81.i);
- /* 33: mullw */
- var83.i = (var64.i * var53.i) & 0xffff;
- /* 34: shrsw */
- var84.i = var83.i >> 8;
- /* 35: subssw */
- var85.i = ORC_CLAMP_SW (var72.i - var84.i);
- /* 37: mullw */
- var86.i = (var69.i * var54.i) & 0xffff;
- /* 38: shrsw */
- var87.i = var86.i >> 8;
- /* 39: subssw */
- var88.i = ORC_CLAMP_SW (var85.i - var87.i);
- /* 40: subssw */
- var89.i = ORC_CLAMP_SW (var88.i - var87.i);
- /* 41: convssswb */
- var90 = ORC_CLAMP_SB (var77.i);
- /* 42: convssswb */
- var91 = ORC_CLAMP_SB (var89.i);
- /* 43: convssswb */
- var92 = ORC_CLAMP_SB (var82.i);
- /* 44: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var92;
- _dest.x2[1] = var91;
- var93.i = _dest.i;
- }
- /* 46: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var90;
- _dest.x2[1] = var55;
- var94.i = _dest.i;
- }
- /* 47: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var93.i;
- _dest.x2[1] = var94.i;
- var95.i = _dest.i;
- }
- /* 49: addb */
- var57.x4[0] = var95.x4[0] + var56.x4[0];
- var57.x4[1] = var95.x4[1] + var56.x4[1];
- var57.x4[2] = var95.x4[2] + var56.x4[2];
- var57.x4[3] = var95.x4[3] + var56.x4[3];
- /* 50: storel */
- ptr0[i] = var57;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_convert_I420_BGRA_avg (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- const orc_int8 *ORC_RESTRICT ptr8;
- orc_int8 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_union16 var50;
- orc_union16 var51;
- orc_union16 var52;
- orc_union16 var53;
- orc_union16 var54;
- orc_int8 var55;
- orc_union32 var56;
- orc_union32 var57;
- orc_int8 var58;
- orc_union16 var59;
- orc_int8 var60;
- orc_int8 var61;
- orc_int8 var62;
- orc_int8 var63;
- orc_union16 var64;
- orc_int8 var65;
- orc_int8 var66;
- orc_int8 var67;
- orc_int8 var68;
- orc_union16 var69;
- orc_union16 var70;
- orc_union16 var71;
- orc_union16 var72;
- orc_union16 var73;
- orc_union16 var74;
- orc_union16 var75;
- orc_union16 var76;
- orc_union16 var77;
- orc_union16 var78;
- orc_union16 var79;
- orc_union16 var80;
- orc_union16 var81;
- orc_union16 var82;
- orc_union16 var83;
- orc_union16 var84;
- orc_union16 var85;
- orc_union16 var86;
- orc_union16 var87;
- orc_union16 var88;
- orc_union16 var89;
- orc_int8 var90;
- orc_int8 var91;
- orc_int8 var92;
- orc_union16 var93;
- orc_union16 var94;
- orc_union32 var95;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
- ptr7 = (orc_int8 *) ex->arrays[7];
- ptr8 = (orc_int8 *) ex->arrays[8];
-
- /* 1: loadpb */
- var47 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 7: loadpb */
- var48 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 13: loadpb */
- var49 = (int) 0x00000080; /* 128 or 6.32404e-322f */
- /* 16: loadpw */
- var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
- /* 21: loadpw */
- var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
- /* 28: loadpw */
- var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
- /* 32: loadpw */
- var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
- /* 36: loadpw */
- var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
- /* 45: loadpb */
- var55 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 48: loadpb */
- var56.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var56.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var56.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */
- var56.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var46 = ptr4[i];
- /* 2: subb */
- var58 = var46 - var47;
- /* 3: convsbw */
- var59.i = var58;
- /* 4: loadupib */
- var60 =
- (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
- 1) >> 1 : ptr5[i >> 1];
- /* 5: loadupib */
- var61 =
- (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
- 1) >> 1 : ptr6[i >> 1];
- /* 6: avgub */
- var62 = ((orc_uint8) var60 + (orc_uint8) var61 + 1) >> 1;
- /* 8: subb */
- var63 = var62 - var48;
- /* 9: convsbw */
- var64.i = var63;
- /* 10: loadupib */
- var65 =
- (i & 1) ? ((orc_uint8) ptr7[i >> 1] + (orc_uint8) ptr7[(i >> 1) + 1] +
- 1) >> 1 : ptr7[i >> 1];
- /* 11: loadupib */
- var66 =
- (i & 1) ? ((orc_uint8) ptr8[i >> 1] + (orc_uint8) ptr8[(i >> 1) + 1] +
- 1) >> 1 : ptr8[i >> 1];
- /* 12: avgub */
- var67 = ((orc_uint8) var65 + (orc_uint8) var66 + 1) >> 1;
- /* 14: subb */
- var68 = var67 - var49;
- /* 15: convsbw */
- var69.i = var68;
- /* 17: mullw */
- var70.i = (var59.i * var50.i) & 0xffff;
- /* 18: shrsw */
- var71.i = var70.i >> 8;
- /* 19: addssw */
- var72.i = ORC_CLAMP_SW (var59.i + var71.i);
- /* 20: addssw */
- var73.i = ORC_CLAMP_SW (var72.i + var69.i);
- /* 22: mullw */
- var74.i = (var69.i * var51.i) & 0xffff;
- /* 23: shrsw */
- var75.i = var74.i >> 8;
- /* 24: subssw */
- var76.i = ORC_CLAMP_SW (var73.i - var75.i);
- /* 25: addssw */
- var77.i = ORC_CLAMP_SW (var76.i + var69.i);
- /* 26: addssw */
- var78.i = ORC_CLAMP_SW (var72.i + var64.i);
- /* 27: addssw */
- var79.i = ORC_CLAMP_SW (var78.i + var64.i);
- /* 29: mullw */
- var80.i = (var64.i * var52.i) & 0xffff;
- /* 30: shrsw */
- var81.i = var80.i >> 8;
- /* 31: addssw */
- var82.i = ORC_CLAMP_SW (var79.i + var81.i);
- /* 33: mullw */
- var83.i = (var64.i * var53.i) & 0xffff;
- /* 34: shrsw */
- var84.i = var83.i >> 8;
- /* 35: subssw */
- var85.i = ORC_CLAMP_SW (var72.i - var84.i);
- /* 37: mullw */
- var86.i = (var69.i * var54.i) & 0xffff;
- /* 38: shrsw */
- var87.i = var86.i >> 8;
- /* 39: subssw */
- var88.i = ORC_CLAMP_SW (var85.i - var87.i);
- /* 40: subssw */
- var89.i = ORC_CLAMP_SW (var88.i - var87.i);
- /* 41: convssswb */
- var90 = ORC_CLAMP_SB (var77.i);
- /* 42: convssswb */
- var91 = ORC_CLAMP_SB (var89.i);
- /* 43: convssswb */
- var92 = ORC_CLAMP_SB (var82.i);
- /* 44: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var92;
- _dest.x2[1] = var91;
- var93.i = _dest.i;
- }
- /* 46: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var90;
- _dest.x2[1] = var55;
- var94.i = _dest.i;
- }
- /* 47: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var93.i;
- _dest.x2[1] = var94.i;
- var95.i = _dest.i;
- }
- /* 49: addb */
- var57.x4[0] = var95.x4[0] + var56.x4[0];
- var57.x4[1] = var95.x4[1] + var56.x4[1];
- var57.x4[2] = var95.x4[2] + var56.x4[2];
- var57.x4[3] = var95.x4[3] + var56.x4[3];
- /* 50: storel */
- ptr0[i] = var57;
- }
-
-}
-
-void
-cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1,
- const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
- const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
- const guint8 * ORC_RESTRICT s5, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_convert_I420_BGRA_avg");
- orc_program_set_backup_function (p, _backup_cogorc_convert_I420_BGRA_avg);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_source (p, 1, "s4");
- orc_program_add_source (p, 1, "s5");
- orc_program_add_constant (p, 1, 0x00000008, "c1");
- orc_program_add_constant (p, 1, 0x00000080, "c2");
- orc_program_add_constant (p, 4, 0x0000002a, "c3");
- orc_program_add_constant (p, 4, 0x00000067, "c4");
- orc_program_add_constant (p, 4, 0x00000004, "c5");
- orc_program_add_constant (p, 4, 0x00000064, "c6");
- orc_program_add_constant (p, 4, 0x00000068, "c7");
- orc_program_add_constant (p, 4, 0x000000ff, "c8");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
- orc_program_add_temporary (p, 2, "t9");
- orc_program_add_temporary (p, 2, "t10");
- orc_program_add_temporary (p, 1, "t11");
- orc_program_add_temporary (p, 1, "t12");
- orc_program_add_temporary (p, 1, "t13");
- orc_program_add_temporary (p, 4, "t14");
-
- orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S2,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T4, ORC_VAR_S3,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T4, ORC_VAR_S5,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T3, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T6, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
- ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T13,
- ORC_VAR_T12, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T11,
- ORC_VAR_C8, ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T1,
- ORC_VAR_T2, ORC_VAR_D1);
- orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->arrays[ORC_VAR_S4] = (void *) s4;
- ex->arrays[ORC_VAR_S5] = (void *) s5;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_I420 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_int8 var39;
- orc_int8 var40;
- orc_union16 var41;
- orc_union16 var42;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var39 = ptr5[i >> 1];
- /* 1: loadupdb */
- var40 = ptr6[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var40;
- var41.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var42.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.i;
- _dest.x2[1] = var41.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_int8 var39;
- orc_int8 var40;
- orc_union16 var41;
- orc_union16 var42;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var39 = ptr5[i >> 1];
- /* 1: loadupdb */
- var40 = ptr6[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var40;
- var41.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var42.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.i;
- _dest.x2[1] = var41.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_I420");
- orc_program_set_backup_function (p, _backup_cogorc_getline_I420);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
-
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S2,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S3,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_YUV9 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_union16 var37;
- orc_union16 var38;
- orc_union64 var39;
- orc_int8 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union32 var43;
- orc_union32 var44;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 4: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var40 = ptr5[i >> 1];
- /* 1: loadupdb */
- var41 = ptr6[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var40;
- _dest.x2[1] = var41;
- var42.i = _dest.i;
- }
- /* 3: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.i;
- _dest.x2[1] = var42.i;
- var43.i = _dest.i;
- }
- /* 5: loadw */
- var38 = ptr4[i];
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var38.x2[0];
- var44.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var38.x2[1];
- var44.x2[1] = _dest.i;
- }
- /* 7: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var43.x2[0];
- var39.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var43.x2[1];
- var39.x2[1] = _dest.i;
- }
- /* 8: storeq */
- ptr0[i] = var39;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_YUV9 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_union16 var37;
- orc_union16 var38;
- orc_union64 var39;
- orc_int8 var40;
- orc_int8 var41;
- orc_union16 var42;
- orc_union32 var43;
- orc_union32 var44;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 4: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var40 = ptr5[i >> 1];
- /* 1: loadupdb */
- var41 = ptr6[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var40;
- _dest.x2[1] = var41;
- var42.i = _dest.i;
- }
- /* 3: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.i;
- _dest.x2[1] = var42.i;
- var43.i = _dest.i;
- }
- /* 5: loadw */
- var38 = ptr4[i];
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var38.x2[0];
- var44.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var38.x2[1];
- var44.x2[1] = _dest.i;
- }
- /* 7: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var43.x2[0];
- var39.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var43.x2[1];
- var39.x2[1] = _dest.i;
- }
- /* 8: storeq */
- ptr0[i] = var39;
- }
-
-}
-
-void
-cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_YUV9");
- orc_program_set_backup_function (p, _backup_cogorc_getline_YUV9);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 1, "t5");
-
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S2,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T5, ORC_VAR_S3,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union32 *) s1;
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var40.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var40.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var39.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var40.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var40.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var39.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_getline_YUY2);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_UYVY */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union32 *) s1;
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var39.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var39.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var40.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union32 var41;
- orc_union32 var42;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
- /* 2: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var39.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var39.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var40.i;
- var42.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var42.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var42.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_UYVY");
- orc_program_set_backup_function (p, _backup_cogorc_getline_UYVY);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_YVYU */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union32 var42;
- orc_union32 var43;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union32 *) s1;
-
- /* 3: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: swapw */
- var41.i = ORC_SWAP_W (var39.i);
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var40.x2[0];
- var42.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var40.x2[1];
- var42.x2[1] = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.i;
- _dest.x2[1] = var41.i;
- var43.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[0];
- _dest.x2[1] = var43.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[1];
- _dest.x2[1] = var43.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_YVYU (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_union16 var41;
- orc_union32 var42;
- orc_union32 var43;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
- /* 3: loadpb */
- var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var36 = ptr4[i];
- /* 1: splitwb */
- {
- orc_union16 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: swapw */
- var41.i = ORC_SWAP_W (var39.i);
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[0];
- _dest.x2[1] = var40.x2[0];
- var42.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var37.x2[1];
- _dest.x2[1] = var40.x2[1];
- var42.x2[1] = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.i;
- _dest.x2[1] = var41.i;
- var43.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[0];
- _dest.x2[1] = var43.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[1];
- _dest.x2[1] = var43.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_YVYU");
- orc_program_set_backup_function (p, _backup_cogorc_getline_YVYU);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 2, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "swapw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_Y42B */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_union64 var40;
- orc_union16 var41;
- orc_union32 var42;
- orc_union32 var43;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 3: loadpb */
- var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr5[i];
- /* 1: loadb */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var41.i = _dest.i;
- }
- /* 4: loadw */
- var39 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[0];
- _dest.x2[1] = var39.x2[0];
- var42.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[1];
- _dest.x2[1] = var39.x2[1];
- var42.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.i;
- _dest.x2[1] = var41.i;
- var43.i = _dest.i;
- }
- /* 7: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[0];
- _dest.x2[1] = var43.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[1];
- _dest.x2[1] = var43.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 8: storeq */
- ptr0[i] = var40;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_union64 var40;
- orc_union16 var41;
- orc_union32 var42;
- orc_union32 var43;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 3: loadpb */
- var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var36 = ptr5[i];
- /* 1: loadb */
- var37 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var41.i = _dest.i;
- }
- /* 4: loadw */
- var39 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[0];
- _dest.x2[1] = var39.x2[0];
- var42.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var38.x2[1];
- _dest.x2[1] = var39.x2[1];
- var42.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.i;
- _dest.x2[1] = var41.i;
- var43.i = _dest.i;
- }
- /* 7: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[0];
- _dest.x2[1] = var43.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.x2[1];
- _dest.x2[1] = var43.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 8: storeq */
- ptr0[i] = var40;
- }
-
-}
-
-void
-cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_Y42B");
- orc_program_set_backup_function (p, _backup_cogorc_getline_Y42B);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 4, "t3");
- orc_program_add_temporary (p, 4, "t4");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_Y444 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr5[i];
- /* 1: loadb */
- var35 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var39.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- orc_int8 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_union16 var39;
- orc_union16 var40;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
-
- /* 3: loadpb */
- var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadb */
- var34 = ptr5[i];
- /* 1: loadb */
- var35 = ptr6[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var34;
- _dest.x2[1] = var35;
- var39.i = _dest.i;
- }
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var40.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.i;
- _dest.x2[1] = var39.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_Y444");
- orc_program_set_backup_function (p, _backup_cogorc_getline_Y444);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_Y800 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
-
- /* 0: loadpb */
- var33 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 3: loadpw */
- var35.i = (int) 0x00008080; /* 32896 or 1.62528e-319f */
-
- for (i = 0; i < n; i++) {
- /* 1: loadb */
- var34 = ptr4[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var37.i = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var37.i;
- _dest.x2[1] = var35.i;
- var36.i = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_Y800 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- orc_int8 var33;
- orc_int8 var34;
- orc_union16 var35;
- orc_union32 var36;
- orc_union16 var37;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
-
- /* 0: loadpb */
- var33 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 3: loadpw */
- var35.i = (int) 0x00008080; /* 32896 or 1.62528e-319f */
-
- for (i = 0; i < n; i++) {
- /* 1: loadb */
- var34 = ptr4[i];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var33;
- _dest.x2[1] = var34;
- var37.i = _dest.i;
- }
- /* 4: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var37.i;
- _dest.x2[1] = var35.i;
- var36.i = _dest.i;
- }
- /* 5: storel */
- ptr0[i] = var36;
- }
-
-}
-
-void
-cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_Y800");
- orc_program_set_backup_function (p, _backup_cogorc_getline_Y800);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_constant (p, 2, 0x00008080, "c2");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_Y16 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var34;
- orc_int8 var35;
- orc_union16 var36;
- orc_union32 var37;
- orc_int8 var38;
- orc_union16 var39;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union16 *) s1;
-
- /* 2: loadpb */
- var35 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 4: loadpw */
- var36.i = (int) 0x00008080; /* 32896 or 1.62528e-319f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var34 = ptr4[i];
- /* 1: convhwb */
- var38 = ((orc_uint16) var34.i) >> 8;
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35;
- _dest.x2[1] = var38;
- var39.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var36.i;
- var37.i = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var37;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_Y16 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- orc_union16 var34;
- orc_int8 var35;
- orc_union16 var36;
- orc_union32 var37;
- orc_int8 var38;
- orc_union16 var39;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
-
- /* 2: loadpb */
- var35 = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- /* 4: loadpw */
- var36.i = (int) 0x00008080; /* 32896 or 1.62528e-319f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var34 = ptr4[i];
- /* 1: convhwb */
- var38 = ((orc_uint16) var34.i) >> 8;
- /* 3: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var35;
- _dest.x2[1] = var38;
- var39.i = _dest.i;
- }
- /* 5: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var36.i;
- var37.i = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var37;
- }
-
-}
-
-void
-cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_Y16");
- orc_program_set_backup_function (p, _backup_cogorc_getline_Y16);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_constant (p, 2, 0x00008080, "c2");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 1, "t2");
-
- orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_BGRA */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var32;
- orc_union32 var33;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var32 = ptr4[i];
- /* 1: swapl */
- var33.i = ORC_SWAP_L (var32.i);
- /* 2: storel */
- ptr0[i] = var33;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_BGRA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var32;
- orc_union32 var33;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var32 = ptr4[i];
- /* 1: swapl */
- var33.i = ORC_SWAP_L (var32.i);
- /* 2: storel */
- ptr0[i] = var33;
- }
-
-}
-
-void
-cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_BGRA");
- orc_program_set_backup_function (p, _backup_cogorc_getline_BGRA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
-
- orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_ABGR */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var47;
- _dest.x2[1] = var44;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var45;
- _dest.x2[1] = var46;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var48.i;
- _dest.x2[1] = var49.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_ABGR (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var47;
- _dest.x2[1] = var44;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var45;
- _dest.x2[1] = var46;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var48.i;
- _dest.x2[1] = var49.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-void
-cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_ABGR");
- orc_program_set_backup_function (p, _backup_cogorc_getline_ABGR);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
-
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_RGBA */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var45;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44;
- _dest.x2[1] = var47;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var48.i;
- _dest.x2[1] = var49.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_RGBA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var45;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44;
- _dest.x2[1] = var47;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var48.i;
- _dest.x2[1] = var49.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-void
-cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_RGBA");
- orc_program_set_backup_function (p, _backup_cogorc_getline_RGBA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
-
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_NV12 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var34;
- orc_union16 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union32 var39;
- orc_union32 var40;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_union16 *) s2;
-
- /* 3: loadpb */
- var36.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var36.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var34 = ptr5[i];
- /* 1: loadw */
- var35 = ptr5[i];
- /* 2: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var34.i;
- _dest.x2[1] = var35.i;
- var39.i = _dest.i;
- }
- /* 4: loadw */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.x2[0];
- _dest.x2[1] = var39.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.x2[1];
- _dest.x2[1] = var39.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_NV12 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var34;
- orc_union16 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union32 var39;
- orc_union32 var40;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_union16 *) ex->arrays[5];
-
- /* 3: loadpb */
- var36.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var36.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var34 = ptr5[i];
- /* 1: loadw */
- var35 = ptr5[i];
- /* 2: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var34.i;
- _dest.x2[1] = var35.i;
- var39.i = _dest.i;
- }
- /* 4: loadw */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var40.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var40.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.x2[0];
- _dest.x2[1] = var39.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var40.x2[1];
- _dest.x2[1] = var39.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_NV12");
- orc_program_set_backup_function (p, _backup_cogorc_getline_NV12);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
-
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_NV21 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int n)
-{
- int i;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
-
- ptr0 = (orc_union64 *) d1;
- ptr4 = (orc_union16 *) s1;
- ptr5 = (orc_union16 *) s2;
-
- /* 3: loadpb */
- var36.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var36.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var35 = ptr5[i];
- /* 1: swapw */
- var39.i = ORC_SWAP_W (var35.i);
- /* 2: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var39.i;
- var40.i = _dest.i;
- }
- /* 4: loadw */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var40.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var40.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_NV21 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union64 *ORC_RESTRICT ptr0;
- const orc_union16 *ORC_RESTRICT ptr4;
- const orc_union16 *ORC_RESTRICT ptr5;
- orc_union16 var35;
- orc_union16 var36;
- orc_union16 var37;
- orc_union64 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
-
- ptr0 = (orc_union64 *) ex->arrays[0];
- ptr4 = (orc_union16 *) ex->arrays[4];
- ptr5 = (orc_union16 *) ex->arrays[5];
-
- /* 3: loadpb */
- var36.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
- var36.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */
-
- for (i = 0; i < n; i++) {
- /* 0: loadw */
- var35 = ptr5[i];
- /* 1: swapw */
- var39.i = ORC_SWAP_W (var35.i);
- /* 2: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var39.i;
- _dest.x2[1] = var39.i;
- var40.i = _dest.i;
- }
- /* 4: loadw */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[0];
- _dest.x2[1] = var37.x2[0];
- var41.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var36.x2[1];
- _dest.x2[1] = var37.x2[1];
- var41.x2[1] = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[0];
- _dest.x2[1] = var40.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union32 _dest;
- _dest.x2[0] = var41.x2[1];
- _dest.x2[1] = var40.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storeq */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_NV21");
- orc_program_set_backup_function (p, _backup_cogorc_getline_NV21);
- orc_program_add_destination (p, 8, "d1");
- orc_program_add_source (p, 2, "s1");
- orc_program_add_source (p, 2, "s2");
- orc_program_add_constant (p, 1, 0x000000ff, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 4, "t3");
-
- orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_getline_A420 */
-#ifdef DISABLE_ORC
-void
-cogorc_getline_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
- const guint8 * ORC_RESTRICT s4, int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_int8 var39;
- orc_int8 var40;
- orc_union16 var41;
- orc_union16 var42;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_int8 *) s1;
- ptr5 = (orc_int8 *) s2;
- ptr6 = (orc_int8 *) s3;
- ptr7 = (orc_int8 *) s4;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var39 = ptr5[i >> 1];
- /* 1: loadupdb */
- var40 = ptr6[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var40;
- var41.i = _dest.i;
- }
- /* 3: loadb */
- var36 = ptr7[i];
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var42.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.i;
- _dest.x2[1] = var41.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_getline_A420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_int8 *ORC_RESTRICT ptr4;
- const orc_int8 *ORC_RESTRICT ptr5;
- const orc_int8 *ORC_RESTRICT ptr6;
- const orc_int8 *ORC_RESTRICT ptr7;
- orc_int8 var36;
- orc_int8 var37;
- orc_union32 var38;
- orc_int8 var39;
- orc_int8 var40;
- orc_union16 var41;
- orc_union16 var42;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_int8 *) ex->arrays[4];
- ptr5 = (orc_int8 *) ex->arrays[5];
- ptr6 = (orc_int8 *) ex->arrays[6];
- ptr7 = (orc_int8 *) ex->arrays[7];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadupdb */
- var39 = ptr5[i >> 1];
- /* 1: loadupdb */
- var40 = ptr6[i >> 1];
- /* 2: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var39;
- _dest.x2[1] = var40;
- var41.i = _dest.i;
- }
- /* 3: loadb */
- var36 = ptr7[i];
- /* 4: loadb */
- var37 = ptr4[i];
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var36;
- _dest.x2[1] = var37;
- var42.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var42.i;
- _dest.x2[1] = var41.i;
- var38.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_getline_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
- const guint8 * ORC_RESTRICT s4, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_getline_A420");
- orc_program_set_backup_function (p, _backup_cogorc_getline_A420);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 1, "s1");
- orc_program_add_source (p, 1, "s2");
- orc_program_add_source (p, 1, "s3");
- orc_program_add_source (p, 1, "s4");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
-
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S2,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S3,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
- ex->arrays[ORC_VAR_S2] = (void *) s2;
- ex->arrays[ORC_VAR_S3] = (void *) s3;
- ex->arrays[ORC_VAR_S4] = (void *) s4;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_I420 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_int8 var41;
- orc_union32 var42;
- orc_union32 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_int8 var49;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_int8 *) d2;
- ptr2 = (orc_int8 *) d3;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var38 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var38.x2[0];
- var42.x2[0] = _src.x2[1];
- var43.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var38.x2[1];
- var42.x2[1] = _src.x2[1];
- var43.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var43.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var43.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var39;
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.x2[0];
- var44.x2[0] = _src.x2[1];
- var45.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var42.x2[1];
- var44.x2[1] = _src.x2[1];
- var45.x2[1] = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var45.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 6: avgub */
- var40 = ((orc_uint8) var46 + (orc_uint8) var47 + 1) >> 1;
- /* 7: storeb */
- ptr1[i] = var40;
- /* 8: splitwb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var48 = _src.x2[1];
- var49 = _src.x2[0];
- }
- /* 9: avgub */
- var41 = ((orc_uint8) var48 + (orc_uint8) var49 + 1) >> 1;
- /* 10: storeb */
- ptr2[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var38;
- orc_union16 var39;
- orc_int8 var40;
- orc_int8 var41;
- orc_union32 var42;
- orc_union32 var43;
- orc_union16 var44;
- orc_union16 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_int8 var49;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_int8 *) ex->arrays[1];
- ptr2 = (orc_int8 *) ex->arrays[2];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var38 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var38.x2[0];
- var42.x2[0] = _src.x2[1];
- var43.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var38.x2[1];
- var42.x2[1] = _src.x2[1];
- var43.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var43.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var43.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var39;
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.x2[0];
- var44.x2[0] = _src.x2[1];
- var45.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var42.x2[1];
- var44.x2[1] = _src.x2[1];
- var45.x2[1] = _src.x2[0];
- }
- /* 5: splitwb */
- {
- orc_union16 _src;
- _src.i = var45.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 6: avgub */
- var40 = ((orc_uint8) var46 + (orc_uint8) var47 + 1) >> 1;
- /* 7: storeb */
- ptr1[i] = var40;
- /* 8: splitwb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var48 = _src.x2[1];
- var49 = _src.x2[0];
- }
- /* 9: avgub */
- var41 = ((orc_uint8) var48 + (orc_uint8) var49 + 1) >> 1;
- /* 10: storeb */
- ptr2[i] = var41;
- }
-
-}
-
-void
-cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_I420");
- orc_program_set_backup_function (p, _backup_cogorc_putline_I420);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D2, ORC_VAR_T5, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T5, ORC_VAR_T6,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_YUY2 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var43.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var43.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var43.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var43.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_YUY2");
- orc_program_set_backup_function (p, _backup_cogorc_putline_YUY2);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 4, "t4");
- orc_program_add_temporary (p, 4, "t5");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_YVYU */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: swapw */
- var45.i = ORC_SWAP_W (var43.i);
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var45.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var45.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_YVYU (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
- orc_union16 var45;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: swapw */
- var45.i = ORC_SWAP_W (var43.i);
- /* 6: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[0];
- _dest.x2[1] = var45.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var44.x2[1];
- _dest.x2[1] = var45.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_YVYU");
- orc_program_set_backup_function (p, _backup_cogorc_putline_YVYU);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 4, "t4");
- orc_program_add_temporary (p, 4, "t5");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "swapw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_UYVY */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[0];
- _dest.x2[1] = var44.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[1];
- _dest.x2[1] = var44.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union32 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 3: avgub */
- var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 4: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var44.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var44.x2[1] = _src.x2[1];
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[0];
- _dest.x2[1] = var44.x2[0];
- var38.x2[0] = _dest.i;
- }
- {
- orc_union16 _dest;
- _dest.x2[0] = var43.x2[1];
- _dest.x2[1] = var44.x2[1];
- var38.x2[1] = _dest.i;
- }
- /* 6: storel */
- ptr0[i] = var38;
- }
-
-}
-
-void
-cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_UYVY");
- orc_program_set_backup_function (p, _backup_cogorc_putline_UYVY);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 4, "t4");
- orc_program_add_temporary (p, 4, "t5");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_Y42B */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_int8 *) d2;
- ptr2 = (orc_int8 *) d3;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var36 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var36.x2[0];
- var40.x2[0] = _src.x2[1];
- var41.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var36.x2[1];
- var40.x2[1] = _src.x2[1];
- var41.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 3: avgub */
- var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
- var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 5: storeb */
- ptr2[i] = var37;
- /* 6: storeb */
- ptr1[i] = var38;
- /* 7: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var41.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 8: storew */
- ptr0[i] = var39;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var36;
- orc_int8 var37;
- orc_int8 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_int8 *) ex->arrays[1];
- ptr2 = (orc_int8 *) ex->arrays[2];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var36 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var36.x2[0];
- var40.x2[0] = _src.x2[1];
- var41.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var36.x2[1];
- var40.x2[1] = _src.x2[1];
- var41.x2[1] = _src.x2[0];
- }
- /* 2: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 3: avgub */
- var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
- var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
- /* 4: splitwb */
- {
- orc_union16 _src;
- _src.i = var44.i;
- var37 = _src.x2[1];
- var38 = _src.x2[0];
- }
- /* 5: storeb */
- ptr2[i] = var37;
- /* 6: storeb */
- ptr1[i] = var38;
- /* 7: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var41.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 8: storew */
- ptr0[i] = var39;
- }
-
-}
-
-void
-cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_Y42B");
- orc_program_set_backup_function (p, _backup_cogorc_putline_Y42B);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_Y444 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
-
- ptr0 = (orc_int8 *) d1;
- ptr1 = (orc_int8 *) d2;
- ptr2 = (orc_int8 *) d3;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var34 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var34.i;
- var38.i = _src.x2[1];
- var39.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var38.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 3: storeb */
- ptr2[i] = var35;
- /* 4: storeb */
- ptr1[i] = var36;
- /* 5: select1wb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var37 = _src.x2[1];
- }
- /* 6: storeb */
- ptr0[i] = var37;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var34;
- orc_int8 var35;
- orc_int8 var36;
- orc_int8 var37;
- orc_union16 var38;
- orc_union16 var39;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr1 = (orc_int8 *) ex->arrays[1];
- ptr2 = (orc_int8 *) ex->arrays[2];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var34 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var34.i;
- var38.i = _src.x2[1];
- var39.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var38.i;
- var35 = _src.x2[1];
- var36 = _src.x2[0];
- }
- /* 3: storeb */
- ptr2[i] = var35;
- /* 4: storeb */
- ptr1[i] = var36;
- /* 5: select1wb */
- {
- orc_union16 _src;
- _src.i = var39.i;
- var37 = _src.x2[1];
- }
- /* 6: storeb */
- ptr0[i] = var37;
- }
-
-}
-
-void
-cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_Y444");
- orc_program_set_backup_function (p, _backup_cogorc_putline_Y444);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 2, "t2");
-
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_Y800 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[1];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_Y800 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_int8 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var33;
- orc_int8 var34;
- orc_union16 var35;
-
- ptr0 = (orc_int8 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var33 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var33.i;
- var35.i = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var35.i;
- var34 = _src.x2[1];
- }
- /* 3: storeb */
- ptr0[i] = var34;
- }
-
-}
-
-void
-cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_Y800");
- orc_program_set_backup_function (p, _backup_cogorc_putline_Y800);
- orc_program_add_destination (p, 1, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 2, "t1");
-
- orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_Y16 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var34;
- orc_union16 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_union16 var38;
-
- ptr0 = (orc_union16 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var34 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var34.i;
- var36.i = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var36.i;
- var37 = _src.x2[1];
- }
- /* 3: convubw */
- var38.i = (orc_uint8) var37;
- /* 4: shlw */
- var35.i = var38.i << 8;
- /* 5: storew */
- ptr0[i] = var35;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_Y16 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var34;
- orc_union16 var35;
- orc_union16 var36;
- orc_int8 var37;
- orc_union16 var38;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var34 = ptr4[i];
- /* 1: select0lw */
- {
- orc_union32 _src;
- _src.i = var34.i;
- var36.i = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var36.i;
- var37 = _src.x2[1];
- }
- /* 3: convubw */
- var38.i = (orc_uint8) var37;
- /* 4: shlw */
- var35.i = var38.i << 8;
- /* 5: storew */
- ptr0[i] = var35;
- }
-
-}
-
-void
-cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_Y16");
- orc_program_set_backup_function (p, _backup_cogorc_putline_Y16);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_constant (p, 4, 0x00000008, "c1");
- orc_program_add_temporary (p, 2, "t1");
- orc_program_add_temporary (p, 1, "t2");
-
- orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_D1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "shlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_BGRA */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var32;
- orc_union32 var33;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var32 = ptr4[i];
- /* 1: swapl */
- var33.i = ORC_SWAP_L (var32.i);
- /* 2: storel */
- ptr0[i] = var33;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_BGRA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var32;
- orc_union32 var33;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var32 = ptr4[i];
- /* 1: swapl */
- var33.i = ORC_SWAP_L (var32.i);
- /* 2: storel */
- ptr0[i] = var33;
- }
-
-}
-
-void
-cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_BGRA");
- orc_program_set_backup_function (p, _backup_cogorc_putline_BGRA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
-
- orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_ABGR */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var47;
- _dest.x2[1] = var44;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var45;
- _dest.x2[1] = var46;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var48.i;
- _dest.x2[1] = var49.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_ABGR (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var47;
- _dest.x2[1] = var44;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var45;
- _dest.x2[1] = var46;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var48.i;
- _dest.x2[1] = var49.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-void
-cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_ABGR");
- orc_program_set_backup_function (p, _backup_cogorc_putline_ABGR);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
-
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_T5,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_RGBA */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- int i;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) d1;
- ptr4 = (orc_union32 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44;
- _dest.x2[1] = var47;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var45;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var49.i;
- _dest.x2[1] = var48.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_RGBA (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union32 *ORC_RESTRICT ptr0;
- const orc_union32 *ORC_RESTRICT ptr4;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_int8 var44;
- orc_int8 var45;
- orc_int8 var46;
- orc_int8 var47;
- orc_union16 var48;
- orc_union16 var49;
-
- ptr0 = (orc_union32 *) ex->arrays[0];
- ptr4 = (orc_union32 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadl */
- var40 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 2: splitwb */
- {
- orc_union16 _src;
- _src.i = var42.i;
- var44 = _src.x2[1];
- var45 = _src.x2[0];
- }
- /* 3: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.i;
- var46 = _src.x2[1];
- var47 = _src.x2[0];
- }
- /* 4: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var44;
- _dest.x2[1] = var47;
- var48.i = _dest.i;
- }
- /* 5: mergebw */
- {
- orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var45;
- var49.i = _dest.i;
- }
- /* 6: mergewl */
- {
- orc_union32 _dest;
- _dest.x2[0] = var49.i;
- _dest.x2[1] = var48.i;
- var41.i = _dest.i;
- }
- /* 7: storel */
- ptr0[i] = var41;
- }
-
-}
-
-void
-cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
- int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_RGBA");
- orc_program_set_backup_function (p, _backup_cogorc_putline_RGBA);
- orc_program_add_destination (p, 4, "d1");
- orc_program_add_source (p, 4, "s1");
- orc_program_add_temporary (p, 1, "t1");
- orc_program_add_temporary (p, 1, "t2");
- orc_program_add_temporary (p, 1, "t3");
- orc_program_add_temporary (p, 1, "t4");
- orc_program_add_temporary (p, 2, "t5");
- orc_program_add_temporary (p, 2, "t6");
- orc_program_add_temporary (p, 2, "t7");
- orc_program_add_temporary (p, 2, "t8");
-
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_NV12 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_union16 *) d2;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var36 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var37.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var37.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var37;
- /* 4: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 5: avgub */
- var38.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var38.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 6: storew */
- ptr1[i] = var38;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_NV12 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var36;
- orc_union16 var37;
- orc_union16 var38;
- orc_union32 var39;
- orc_union32 var40;
- orc_union16 var41;
- orc_union16 var42;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_union16 *) ex->arrays[1];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var36 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var36.x2[0];
- var39.x2[0] = _src.x2[1];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var36.x2[1];
- var39.x2[1] = _src.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var40.x2[0];
- var37.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var40.x2[1];
- var37.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var37;
- /* 4: splitlw */
- {
- orc_union32 _src;
- _src.i = var39.i;
- var41.i = _src.x2[1];
- var42.i = _src.x2[0];
- }
- /* 5: avgub */
- var38.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
- var38.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
- /* 6: storew */
- ptr1[i] = var38;
- }
-
-}
-
-void
-cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_NV12");
- orc_program_set_backup_function (p, _backup_cogorc_putline_NV12);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_NV21 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_union16 *) d2;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var40.x2[0] = _src.x2[1];
- var41.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var40.x2[1] = _src.x2[1];
- var41.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.x2[0];
- var38.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var41.x2[1];
- var38.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var38;
- /* 4: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 5: avgub */
- var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
- var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
- /* 6: swapw */
- var39.i = ORC_SWAP_W (var44.i);
- /* 7: storew */
- ptr1[i] = var39;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_NV21 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_union16 *ORC_RESTRICT ptr1;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var37;
- orc_union16 var38;
- orc_union16 var39;
- orc_union32 var40;
- orc_union32 var41;
- orc_union16 var42;
- orc_union16 var43;
- orc_union16 var44;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_union16 *) ex->arrays[1];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var37 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var37.x2[0];
- var40.x2[0] = _src.x2[1];
- var41.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var37.x2[1];
- var40.x2[1] = _src.x2[1];
- var41.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var41.x2[0];
- var38.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var41.x2[1];
- var38.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var38;
- /* 4: splitlw */
- {
- orc_union32 _src;
- _src.i = var40.i;
- var42.i = _src.x2[1];
- var43.i = _src.x2[0];
- }
- /* 5: avgub */
- var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
- var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
- /* 6: swapw */
- var39.i = ORC_SWAP_W (var44.i);
- /* 7: storew */
- ptr1[i] = var39;
- }
-
-}
-
-void
-cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_NV21");
- orc_program_set_backup_function (p, _backup_cogorc_putline_NV21);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 2, "d2");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 2, "t5");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "swapw", 0, ORC_VAR_D2, ORC_VAR_T5, ORC_VAR_D1,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
-
-
-/* cogorc_putline_A420 */
-#ifdef DISABLE_ORC
-void
-cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- int i;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_union16 *ORC_RESTRICT ptr3;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_int8 var42;
- orc_union32 var43;
- orc_union32 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_int8 var50;
-
- ptr0 = (orc_union16 *) d1;
- ptr1 = (orc_int8 *) d2;
- ptr2 = (orc_int8 *) d3;
- ptr3 = (orc_union16 *) d4;
- ptr4 = (orc_union64 *) s1;
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var38 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var38.x2[0];
- var43.x2[0] = _src.x2[1];
- var44.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var38.x2[1];
- var43.x2[1] = _src.x2[1];
- var44.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var44.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var44.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var39;
- /* 4: select0wb */
- {
- orc_union16 _src;
- _src.i = var44.x2[0];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var44.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 5: storew */
- ptr3[i] = var40;
- /* 6: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.x2[0];
- var45.x2[0] = _src.x2[1];
- var46.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var43.x2[1];
- var45.x2[1] = _src.x2[1];
- var46.x2[1] = _src.x2[0];
- }
- /* 7: splitwb */
- {
- orc_union16 _src;
- _src.i = var46.i;
- var47 = _src.x2[1];
- var48 = _src.x2[0];
- }
- /* 8: avgub */
- var41 = ((orc_uint8) var47 + (orc_uint8) var48 + 1) >> 1;
- /* 9: storeb */
- ptr1[i] = var41;
- /* 10: splitwb */
- {
- orc_union16 _src;
- _src.i = var45.i;
- var49 = _src.x2[1];
- var50 = _src.x2[0];
- }
- /* 11: avgub */
- var42 = ((orc_uint8) var49 + (orc_uint8) var50 + 1) >> 1;
- /* 12: storeb */
- ptr2[i] = var42;
- }
-
-}
-
-#else
-static void
-_backup_cogorc_putline_A420 (OrcExecutor * ORC_RESTRICT ex)
-{
- int i;
- int n = ex->n;
- orc_union16 *ORC_RESTRICT ptr0;
- orc_int8 *ORC_RESTRICT ptr1;
- orc_int8 *ORC_RESTRICT ptr2;
- orc_union16 *ORC_RESTRICT ptr3;
- const orc_union64 *ORC_RESTRICT ptr4;
- orc_union64 var38;
- orc_union16 var39;
- orc_union16 var40;
- orc_int8 var41;
- orc_int8 var42;
- orc_union32 var43;
- orc_union32 var44;
- orc_union16 var45;
- orc_union16 var46;
- orc_int8 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_int8 var50;
-
- ptr0 = (orc_union16 *) ex->arrays[0];
- ptr1 = (orc_int8 *) ex->arrays[1];
- ptr2 = (orc_int8 *) ex->arrays[2];
- ptr3 = (orc_union16 *) ex->arrays[3];
- ptr4 = (orc_union64 *) ex->arrays[4];
-
-
- for (i = 0; i < n; i++) {
- /* 0: loadq */
- var38 = ptr4[i];
- /* 1: splitlw */
- {
- orc_union32 _src;
- _src.i = var38.x2[0];
- var43.x2[0] = _src.x2[1];
- var44.x2[0] = _src.x2[0];
- }
- {
- orc_union32 _src;
- _src.i = var38.x2[1];
- var43.x2[1] = _src.x2[1];
- var44.x2[1] = _src.x2[0];
- }
- /* 2: select1wb */
- {
- orc_union16 _src;
- _src.i = var44.x2[0];
- var39.x2[0] = _src.x2[1];
- }
- {
- orc_union16 _src;
- _src.i = var44.x2[1];
- var39.x2[1] = _src.x2[1];
- }
- /* 3: storew */
- ptr0[i] = var39;
- /* 4: select0wb */
- {
- orc_union16 _src;
- _src.i = var44.x2[0];
- var40.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var44.x2[1];
- var40.x2[1] = _src.x2[0];
- }
- /* 5: storew */
- ptr3[i] = var40;
- /* 6: splitwb */
- {
- orc_union16 _src;
- _src.i = var43.x2[0];
- var45.x2[0] = _src.x2[1];
- var46.x2[0] = _src.x2[0];
- }
- {
- orc_union16 _src;
- _src.i = var43.x2[1];
- var45.x2[1] = _src.x2[1];
- var46.x2[1] = _src.x2[0];
- }
- /* 7: splitwb */
- {
- orc_union16 _src;
- _src.i = var46.i;
- var47 = _src.x2[1];
- var48 = _src.x2[0];
- }
- /* 8: avgub */
- var41 = ((orc_uint8) var47 + (orc_uint8) var48 + 1) >> 1;
- /* 9: storeb */
- ptr1[i] = var41;
- /* 10: splitwb */
- {
- orc_union16 _src;
- _src.i = var45.i;
- var49 = _src.x2[1];
- var50 = _src.x2[0];
- }
- /* 11: avgub */
- var42 = ((orc_uint8) var49 + (orc_uint8) var50 + 1) >> 1;
- /* 12: storeb */
- ptr2[i] = var42;
- }
-
-}
-
-void
-cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
- guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
- const guint8 * ORC_RESTRICT s1, int n)
-{
- OrcExecutor _ex, *ex = &_ex;
- static int p_inited = 0;
- static OrcProgram *p = 0;
- void (*func) (OrcExecutor *);
-
- if (!p_inited) {
- orc_once_mutex_lock ();
- if (!p_inited) {
-
- p = orc_program_new ();
- orc_program_set_name (p, "cogorc_putline_A420");
- orc_program_set_backup_function (p, _backup_cogorc_putline_A420);
- orc_program_add_destination (p, 2, "d1");
- orc_program_add_destination (p, 1, "d2");
- orc_program_add_destination (p, 1, "d3");
- orc_program_add_destination (p, 2, "d4");
- orc_program_add_source (p, 8, "s1");
- orc_program_add_temporary (p, 4, "t1");
- orc_program_add_temporary (p, 4, "t2");
- orc_program_add_temporary (p, 2, "t3");
- orc_program_add_temporary (p, 2, "t4");
- orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
-
- orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "select0wb", 1, ORC_VAR_D4, ORC_VAR_T1,
- ORC_VAR_D1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T3,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D2, ORC_VAR_T5, ORC_VAR_T6,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T4,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T5, ORC_VAR_T6,
- ORC_VAR_D1);
-
- orc_program_compile (p);
- }
- p_inited = TRUE;
- orc_once_mutex_unlock ();
- }
- ex->program = p;
-
- ex->n = n;
- ex->arrays[ORC_VAR_D1] = d1;
- ex->arrays[ORC_VAR_D2] = d2;
- ex->arrays[ORC_VAR_D3] = d3;
- ex->arrays[ORC_VAR_D4] = d4;
- ex->arrays[ORC_VAR_S1] = (void *) s1;
-
- func = p->code_exec;
- func (ex);
-}
-#endif
diff --git a/gst/colorspace/gstcolorspaceorc-dist.h b/gst/colorspace/gstcolorspaceorc-dist.h
deleted file mode 100644
index 2384b522d..000000000
--- a/gst/colorspace/gstcolorspaceorc-dist.h
+++ /dev/null
@@ -1,168 +0,0 @@
-
-/* autogenerated from gstcolorspaceorc.orc */
-
-#ifndef _GSTCOLORSPACEORC_H_
-#define _GSTCOLORSPACEORC_H_
-
-#include <glib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#ifndef _ORC_INTEGER_TYPEDEFS_
-#define _ORC_INTEGER_TYPEDEFS_
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <stdint.h>
-typedef int8_t orc_int8;
-typedef int16_t orc_int16;
-typedef int32_t orc_int32;
-typedef int64_t orc_int64;
-typedef uint8_t orc_uint8;
-typedef uint16_t orc_uint16;
-typedef uint32_t orc_uint32;
-typedef uint64_t orc_uint64;
-#define ORC_UINT64_C(x) UINT64_C(x)
-#elif defined(_MSC_VER)
-typedef signed __int8 orc_int8;
-typedef signed __int16 orc_int16;
-typedef signed __int32 orc_int32;
-typedef signed __int64 orc_int64;
-typedef unsigned __int8 orc_uint8;
-typedef unsigned __int16 orc_uint16;
-typedef unsigned __int32 orc_uint32;
-typedef unsigned __int64 orc_uint64;
-#define ORC_UINT64_C(x) (x##Ui64)
-#define inline __inline
-#else
-#include <limits.h>
-typedef signed char orc_int8;
-typedef short orc_int16;
-typedef int orc_int32;
-typedef unsigned char orc_uint8;
-typedef unsigned short orc_uint16;
-typedef unsigned int orc_uint32;
-#if INT_MAX == LONG_MAX
-typedef long long orc_int64;
-typedef unsigned long long orc_uint64;
-#define ORC_UINT64_C(x) (x##ULL)
-#else
-typedef long orc_int64;
-typedef unsigned long orc_uint64;
-#define ORC_UINT64_C(x) (x##UL)
-#endif
-#endif
-typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
-typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
-typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
-#endif
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-void cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
-void orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int n);
-void orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int n);
-void orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int n);
-void orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int n);
-void orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n);
-void orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n);
-void orc_pack_123x (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int n);
-void orc_pack_x123 (guint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int n);
-void cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int n);
-void cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, int n);
-void cogorc_getline_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
-void cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void cogorc_getline_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
-void cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, int n);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/gst/colorspace/gstcolorspaceorc.orc b/gst/colorspace/gstcolorspaceorc.orc
deleted file mode 100644
index 086990e15..000000000
--- a/gst/colorspace/gstcolorspaceorc.orc
+++ /dev/null
@@ -1,1757 +0,0 @@
-
-.function cogorc_memcpy_2d
-.flags 2d
-.dest 1 d1 guint8
-.source 1 s1 guint8
-
-copyb d1, s1
-
-
-.function cogorc_downsample_horiz_cosite_1tap
-.dest 1 d1 guint8
-.source 2 s1 guint8
-
-select0wb d1, s1
-
-
-.function cogorc_downsample_horiz_cosite_3tap
-.dest 1 d1 guint8
-.source 2 s1 guint8
-.source 2 s2 guint8
-.temp 1 t1
-.temp 1 t2
-.temp 1 t3
-.temp 2 t4
-.temp 2 t5
-.temp 2 t6
-
-copyw t4, s1
-select0wb t1, t4
-select1wb t2, t4
-select0wb t3, s2
-convubw t4, t1
-convubw t5, t2
-convubw t6, t3
-mullw t5, t5, 2
-addw t4, t4, t6
-addw t4, t4, t5
-addw t4, t4, 2
-shrsw t4, t4, 2
-convsuswb d1, t4
-
-
-.function cogorc_downsample_420_jpeg
-.dest 1 d1 guint8
-.source 2 s1 guint8
-.source 2 s2 guint8
-.temp 2 t1
-.temp 1 t2
-.temp 1 t3
-.temp 1 t4
-.temp 1 t5
-
-copyw t1, s1
-select0wb t2, t1
-select1wb t3, t1
-avgub t2, t2, t3
-copyw t1, s2
-select0wb t4, t1
-select1wb t5, t1
-avgub t4, t4, t5
-avgub d1, t2, t4
-
-
-.function cogorc_downsample_vert_halfsite_2tap
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-
-avgub d1, s1, s2
-
-
-.function cogorc_downsample_vert_cosite_3tap
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 2 t3
-
-convubw t1, s1
-convubw t2, s2
-convubw t3, s3
-mullw t2, t2, 2
-addw t1, t1, t3
-addw t1, t1, t2
-addw t1, t1, 2
-shrsw t1, t1, 2
-convsuswb d1, t1
-
-
-
-.function cogorc_downsample_vert_halfsite_4tap
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.source 1 s4 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 2 t3
-.temp 2 t4
-
-convubw t1, s1
-convubw t2, s2
-convubw t3, s3
-convubw t4, s4
-addw t2, t2, t3
-mullw t2, t2, 26
-addw t1, t1, t4
-mullw t1, t1, 6
-addw t2, t2, t1
-addw t2, t2, 32
-shrsw t2, t2, 6
-convsuswb d1, t2
-
-
-.function cogorc_upsample_horiz_cosite_1tap
-.dest 2 d1 guint8 guint8
-.source 1 s1 guint8
-.temp 1 t1
-
-copyb t1, s1
-mergebw d1, t1, t1
-
-
-.function cogorc_upsample_horiz_cosite
-.dest 2 d1 guint8 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.temp 1 t1
-.temp 1 t2
-
-copyb t1, s1
-avgub t2, t1, s2
-mergebw d1, t1, t2
-
-
-.function cogorc_upsample_vert_avgub
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-
-avgub d1, s1, s2
-
-
-
-
-.function orc_unpack_yuyv_y
-.dest 1 d1 guint8
-.source 2 s1 guint8
-
-select0wb d1, s1
-
-
-.function orc_unpack_yuyv_u
-.dest 1 d1 guint8
-.source 4 s1 guint8
-.temp 2 t1
-
-select0lw t1, s1
-select1wb d1, t1
-
-
-.function orc_unpack_yuyv_v
-.dest 1 d1 guint8
-.source 4 s1 guint8
-.temp 2 t1
-
-select1lw t1, s1
-select1wb d1, t1
-
-
-.function orc_pack_yuyv
-.dest 4 d1 guint8
-.source 2 s1 guint8 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.temp 1 t1
-.temp 1 t2
-.temp 2 t3
-.temp 2 t4
-.temp 2 t5
-
-copyw t5, s1
-select0wb t1, t5
-select1wb t2, t5
-mergebw t3, t1, s2
-mergebw t4, t2, s3
-mergewl d1, t3, t4
-
-
-.function orc_unpack_uyvy_y
-.dest 1 d1 guint8
-.source 2 s1 guint8
-
-select1wb d1, s1
-
-
-.function orc_unpack_uyvy_u
-.dest 1 d1 guint8
-.source 4 s1 guint8
-.temp 2 t1
-
-select0lw t1, s1
-select0wb d1, t1
-
-
-.function orc_unpack_uyvy_v
-.dest 1 d1 guint8
-.source 4 s1 guint8
-.temp 2 t1
-
-select1lw t1, s1
-select0wb d1, t1
-
-
-.function orc_pack_uyvy
-.dest 4 d1 guint8
-.source 2 s1 guint8 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.temp 1 t1
-.temp 1 t2
-.temp 2 t3
-.temp 2 t4
-.temp 2 t5
-
-copyw t5, s1
-select0wb t1, t5
-select1wb t2, t5
-mergebw t3, s2, t1
-mergebw t4, s3, t2
-mergewl d1, t3, t4
-
-
-.function orc_matrix2_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.temp 2 t1
-.temp 2 t2
-
-convubw t1, s1
-mullw t1, t1, p1
-convubw t2, s2
-mullw t2, t2, p2
-addw t1, t1, t2
-addw t1, t1, p3
-shrsw t1, t1, 6
-convsuswb d1, t1
-
-
-.function orc_matrix2_11_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.param 2 p1
-.param 2 p2
-.temp 2 t1
-.temp 2 t2
-.temp 2 t3
-.temp 2 t4
-
-convubw t1, s1
-subw t1, t1, 16
-mullw t3, t1, p1
-convubw t2, s2
-subw t2, t2, 128
-mullw t4, t2, p2
-addw t3, t3, t4
-addw t3, t3, 128
-shrsw t3, t3, 8
-addw t3, t3, t1
-addw t3, t3, t2
-convsuswb d1, t3
-
-
-.function orc_matrix2_12_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.param 2 p1
-.param 2 p2
-.temp 2 t1
-.temp 2 t2
-.temp 2 t3
-.temp 2 t4
-
-convubw t1, s1
-subw t1, t1, 16
-mullw t3, t1, p1
-convubw t2, s2
-subw t2, t2, 128
-mullw t4, t2, p2
-addw t3, t3, t4
-addw t3, t3, 128
-shrsw t3, t3, 8
-addw t3, t3, t1
-addw t3, t3, t2
-addw t3, t3, t2
-convsuswb d1, t3
-
-
-.function orc_matrix3_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.source 1 s3 guint8 guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.temp 2 t1
-.temp 2 t2
-
-convubw t1, s1
-mullw t1, t1, p1
-convubw t2, s2
-mullw t2, t2, p2
-addw t1, t1, t2
-convubw t2, s3
-mullw t2, t2, p3
-addw t1, t1, t2
-addw t1, t1, p4
-shrsw t1, t1, 6
-convsuswb d1, t1
-
-
-.function orc_matrix3_100_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.source 1 s3 guint8 guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.temp 2 t1
-.temp 2 t2
-.temp 2 t3
-#.temp 2 t4
-
-convubw t1, s1
-subw t1, t1, 16
-mullw t3, t1, p1
-convubw t2, s2
-subw t2, t2, 128
-mullw t2, t2, p2
-addw t3, t3, t2
-convubw t2, s3
-subw t2, t2, 128
-mullw t2, t2, p3
-addw t3, t3, t2
-addw t3, t3, 128
-shrsw t3, t3, 8
-addw t3, t3, t1
-convsuswb d1, t3
-
-
-.function orc_matrix3_100_offset_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.source 1 s3 guint8 guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-#.param 2 p6
-.temp 2 t1
-.temp 2 t2
-.temp 2 t3
-#.temp 2 t3
-#.temp 2 t4
-
-convubw t3, s1
-mullw t1, t3, p1
-convubw t2, s2
-mullw t2, t2, p2
-addw t1, t1, t2
-convubw t2, s3
-mullw t2, t2, p3
-addw t1, t1, t2
-addw t1, t1, p4
-shrsw t1, t1, p5
-#addw t1, t1, p6
-addw t1, t1, t3
-convsuswb d1, t1
-
-
-
-.function orc_matrix3_000_u8
-.dest 1 d1 guint8 guint8
-.source 1 s1 guint8 guint8
-.source 1 s2 guint8 guint8
-.source 1 s3 guint8 guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-#.param 2 p6
-.temp 2 t1
-.temp 2 t2
-#.temp 2 t3
-#.temp 2 t4
-
-convubw t1, s1
-mullw t1, t1, p1
-convubw t2, s2
-mullw t2, t2, p2
-addw t1, t1, t2
-convubw t2, s3
-mullw t2, t2, p3
-addw t1, t1, t2
-addw t1, t1, p4
-shrsw t1, t1, p5
-#addw t1, t1, p6
-convwb d1, t1
-
-
-
-.function orc_pack_123x
-.dest 4 d1 guint32 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.param 1 p1
-.temp 2 t1
-.temp 2 t2
-
-mergebw t1, s1, s2
-mergebw t2, s3, p1
-mergewl d1, t1, t2
-
-
-.function orc_pack_x123
-.dest 4 d1 guint32 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.param 1 p1
-.temp 2 t1
-.temp 2 t2
-
-mergebw t1, p1, s1
-mergebw t2, s2, s3
-mergewl d1, t1, t2
-
-
-.function cogorc_combine2_u8
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.param 2 p1
-.param 2 p2
-.temp 2 t1
-.temp 2 t2
-
-convubw t1, s1
-mullw t1, t1, p1
-convubw t2, s2
-mullw t2, t2, p2
-addw t1, t1, t2
-shruw t1, t1, 8
-convsuswb d1, t1
-
-
-.function cogorc_convert_I420_UYVY
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 2 y1 guint8
-.source 2 y2 guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw d1, uv, y1
-x2 mergebw d2, uv, y2
-
-
-.function cogorc_convert_I420_YUY2
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 2 y1 guint8
-.source 2 y2 guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw d1, y1, uv
-x2 mergebw d2, y2, uv
-
-
-
-.function cogorc_convert_I420_AYUV
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 1 y1 guint8
-.source 1 y2 guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-.temp 1 tu
-.temp 1 tv
-
-loadupdb tu, u
-loadupdb tv, v
-mergebw uv, tu, tv
-mergebw ay, c255, y1
-mergewl d1, ay, uv
-mergebw ay, c255, y2
-mergewl d2, ay, uv
-
-
-.function cogorc_convert_YUY2_I420
-.dest 2 y1 guint8
-.dest 2 y2 guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 yuv1 guint8
-.source 4 yuv2 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 2 ty
-
-x2 splitwb t1, ty, yuv1
-storew y1, ty
-x2 splitwb t2, ty, yuv2
-storew y2, ty
-x2 avgub t1, t1, t2
-splitwb v, u, t1
-
-
-.function cogorc_convert_UYVY_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 4 uyvy guint8
-
-x2 swapw yuy2, uyvy
-
-
-.function cogorc_planar_chroma_420_422
-.flags 2d
-.dest 1 d1 guint8
-.dest 1 d2 guint8
-.source 1 s guint8
-
-copyb d1, s
-copyb d2, s
-
-
-.function cogorc_planar_chroma_420_444
-.flags 2d
-.dest 2 d1 guint8
-.dest 2 d2 guint8
-.source 1 s guint8
-.temp 2 t
-
-splatbw t, s
-storew d1, t
-storew d2, t
-
-
-.function cogorc_planar_chroma_422_444
-.flags 2d
-.dest 2 d1 guint8
-.source 1 s guint8
-.temp 2 t
-
-splatbw t, s
-storew d1, t
-
-
-.function cogorc_planar_chroma_444_422
-.flags 2d
-.dest 1 d guint8
-.source 2 s guint8
-.temp 1 t1
-.temp 1 t2
-
-splitwb t1, t2, s
-avgub d, t1, t2
-
-
-.function cogorc_planar_chroma_444_420
-.flags 2d
-.dest 1 d guint8
-.source 2 s1 guint8
-.source 2 s2 guint8
-.temp 2 t
-.temp 1 t1
-.temp 1 t2
-
-x2 avgub t, s1, s2
-splitwb t1, t2, t
-avgub d, t1, t2
-
-
-.function cogorc_planar_chroma_422_420
-.flags 2d
-.dest 1 d guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-
-avgub d, s1, s2
-
-
-.function cogorc_convert_YUY2_AYUV
-.flags 2d
-.dest 8 ayuv guint8
-.source 4 yuy2 guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb uv, yy, yuy2
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_convert_UYVY_AYUV
-.flags 2d
-.dest 8 ayuv guint8
-.source 4 uyvy guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb yy, uv, uyvy
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_convert_YUY2_Y42B
-.flags 2d
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 yuy2 guint8
-.temp 2 uv
-
-x2 splitwb uv, y, yuy2
-splitwb v, u, uv
-
-
-.function cogorc_convert_UYVY_Y42B
-.flags 2d
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 uyvy guint8
-.temp 2 uv
-
-x2 splitwb y, uv, uyvy
-splitwb v, u, uv
-
-
-.function cogorc_convert_YUY2_Y444
-.flags 2d
-.dest 2 y guint8
-.dest 2 uu guint8
-.dest 2 vv guint8
-.source 4 yuy2 guint8
-.temp 2 uv
-.temp 1 u
-.temp 1 v
-
-x2 splitwb uv, y, yuy2
-splitwb v, u, uv
-splatbw uu, u
-splatbw vv, v
-
-
-.function cogorc_convert_UYVY_Y444
-.flags 2d
-.dest 2 y guint8
-.dest 2 uu guint8
-.dest 2 vv guint8
-.source 4 uyvy guint8
-.temp 2 uv
-.temp 1 u
-.temp 1 v
-
-x2 splitwb y, uv, uyvy
-splitwb v, u, uv
-splatbw uu, u
-splatbw vv, v
-
-
-.function cogorc_convert_UYVY_I420
-.dest 2 y1 guint8
-.dest 2 y2 guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 yuv1 guint8
-.source 4 yuv2 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 2 ty
-
-x2 splitwb ty, t1, yuv1
-storew y1, ty
-x2 splitwb ty, t2, yuv2
-storew y2, ty
-x2 avgub t1, t1, t2
-splitwb v, u, t1
-
-
-
-.function cogorc_convert_AYUV_I420
-.flags 2d
-.dest 2 y1 guint8
-.dest 2 y2 guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 8 ayuv1 guint8
-.source 8 ayuv2 guint8
-.temp 4 ay
-.temp 4 uv1
-.temp 4 uv2
-.temp 4 uv
-.temp 2 uu
-.temp 2 vv
-.temp 1 t1
-.temp 1 t2
-
-x2 splitlw uv1, ay, ayuv1
-x2 select1wb y1, ay
-x2 splitlw uv2, ay, ayuv2
-x2 select1wb y2, ay
-x4 avgub uv, uv1, uv2
-x2 splitwb vv, uu, uv
-splitwb t1, t2, uu
-avgub u, t1, t2
-splitwb t1, t2, vv
-avgub v, t1, t2
-
-
-
-.function cogorc_convert_AYUV_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-x2 mergebw yuy2, yy, uv1
-
-
-.function cogorc_convert_AYUV_UYVY
-.flags 2d
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-x2 mergebw yuy2, uv1, yy
-
-
-
-.function cogorc_convert_AYUV_Y42B
-.flags 2d
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 8 ayuv guint8
-.temp 4 ayay
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-splitwb v, u, uv1
-x2 select1wb y, ayay
-
-
-.function cogorc_convert_AYUV_Y444
-.flags 2d
-.dest 1 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 ayuv guint8
-.temp 2 ay
-.temp 2 uv
-
-splitlw uv, ay, ayuv
-splitwb v, u, uv
-select1wb y, ay
-
-
-.function cogorc_convert_Y42B_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 2 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw yuy2, y, uv
-
-
-.function cogorc_convert_Y42B_UYVY
-.flags 2d
-.dest 4 uyvy guint8
-.source 2 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw uyvy, uv, y
-
-
-.function cogorc_convert_Y42B_AYUV
-.flags 2d
-.dest 8 ayuv guint8
-.source 2 yy guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-.temp 4 uvuv
-.temp 4 ayay
-
-mergebw uv, u, v
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_convert_Y444_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 2 y guint8
-.source 2 u guint8
-.source 2 v guint8
-.temp 2 uv
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 mergebw uvuv, u, v
-splitlw uv1, uv2, uvuv
-x2 avgub uv, uv1, uv2
-x2 mergebw yuy2, y, uv
-
-
-.function cogorc_convert_Y444_UYVY
-.flags 2d
-.dest 4 uyvy guint8
-.source 2 y guint8
-.source 2 u guint8
-.source 2 v guint8
-.temp 2 uv
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 mergebw uvuv, u, v
-splitlw uv1, uv2, uvuv
-x2 avgub uv, uv1, uv2
-x2 mergebw uyvy, uv, y
-
-
-.function cogorc_convert_Y444_AYUV
-.flags 2d
-.dest 4 ayuv guint8
-.source 1 yy guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-
-mergebw uv, u, v
-mergebw ay, c255, yy
-mergewl ayuv, ay, uv
-
-
-
-.function cogorc_convert_AYUV_ARGB
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.temp 2 t1
-.temp 2 t2
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c8 8
-
-x4 subb x, ayuv, 128
-splitlw t1, t2, x
-splitwb y, a, t2
-splitwb v, u, t1
-convsbw wy, y
-convsbw wu, u
-convsbw wv, v
-
-mullw t1, wy, 42
-shrsw t1, t1, c8
-addssw wy, wy, t1
-
-addssw wr, wy, wv
-mullw t1, wv, 103
-shrsw t1, t1, c8
-subssw wr, wr, t1
-addssw wr, wr, wv
-
-addssw wb, wy, wu
-addssw wb, wb, wu
-mullw t1, wu, 4
-shrsw t1, t1, c8
-addssw wb, wb, t1
-
-mullw t1, wu, 100
-shrsw t1, t1, c8
-subssw wg, wy, t1
-mullw t1, wv, 104
-shrsw t1, t1, c8
-subssw wg, wg, t1
-subssw wg, wg, t1
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw t1, a, r
-mergebw t2, g, b
-mergewl x, t1, t2
-x4 addb argb, x, 128
-
-
-
-.function cogorc_convert_AYUV_BGRA
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.temp 2 t1
-.temp 2 t2
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c8 8
-
-x4 subb x, ayuv, 128
-splitlw t1, t2, x
-splitwb y, a, t2
-splitwb v, u, t1
-convsbw wy, y
-convsbw wu, u
-convsbw wv, v
-
-mullw t1, wy, 42
-shrsw t1, t1, c8
-addssw wy, wy, t1
-
-addssw wr, wy, wv
-mullw t1, wv, 103
-shrsw t1, t1, c8
-subssw wr, wr, t1
-addssw wr, wr, wv
-
-addssw wb, wy, wu
-addssw wb, wb, wu
-mullw t1, wu, 4
-shrsw t1, t1, c8
-addssw wb, wb, t1
-
-mullw t1, wu, 100
-shrsw t1, t1, c8
-subssw wg, wy, t1
-mullw t1, wv, 104
-shrsw t1, t1, c8
-subssw wg, wg, t1
-subssw wg, wg, t1
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw t1, b, g
-mergebw t2, r, a
-mergewl x, t1, t2
-x4 addb argb, x, 128
-
-
-
-
-.function cogorc_convert_AYUV_ABGR
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.temp 2 t1
-.temp 2 t2
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c8 8
-
-x4 subb x, ayuv, 128
-splitlw t1, t2, x
-splitwb y, a, t2
-splitwb v, u, t1
-convsbw wy, y
-convsbw wu, u
-convsbw wv, v
-
-mullw t1, wy, 42
-shrsw t1, t1, c8
-addssw wy, wy, t1
-
-addssw wr, wy, wv
-mullw t1, wv, 103
-shrsw t1, t1, c8
-subssw wr, wr, t1
-addssw wr, wr, wv
-
-addssw wb, wy, wu
-addssw wb, wb, wu
-mullw t1, wu, 4
-shrsw t1, t1, c8
-addssw wb, wb, t1
-
-mullw t1, wu, 100
-shrsw t1, t1, c8
-subssw wg, wy, t1
-mullw t1, wv, 104
-shrsw t1, t1, c8
-subssw wg, wg, t1
-subssw wg, wg, t1
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw t1, a, b
-mergebw t2, g, r
-mergewl x, t1, t2
-x4 addb argb, x, 128
-
-
-
-.function cogorc_convert_AYUV_RGBA
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.temp 2 t1
-.temp 2 t2
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c8 8
-
-x4 subb x, ayuv, 128
-splitlw t1, t2, x
-splitwb y, a, t2
-splitwb v, u, t1
-convsbw wy, y
-convsbw wu, u
-convsbw wv, v
-
-mullw t1, wy, 42
-shrsw t1, t1, c8
-addssw wy, wy, t1
-
-addssw wr, wy, wv
-mullw t1, wv, 103
-shrsw t1, t1, c8
-subssw wr, wr, t1
-addssw wr, wr, wv
-
-addssw wb, wy, wu
-addssw wb, wb, wu
-mullw t1, wu, 4
-shrsw t1, t1, c8
-addssw wb, wb, t1
-
-mullw t1, wu, 100
-shrsw t1, t1, c8
-subssw wg, wy, t1
-mullw t1, wv, 104
-shrsw t1, t1, c8
-subssw wg, wg, t1
-subssw wg, wg, t1
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw t1, r, g
-mergebw t2, b, a
-mergewl x, t1, t2
-x4 addb argb, x, 128
-
-
-
-.function cogorc_convert_I420_BGRA
-.dest 4 argb guint8
-.source 1 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 t1
-.temp 2 t2
-.temp 1 t3
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c8 8
-.const 1 c128 128
-
-subb t3, y, c128
-convsbw wy, t3
-loadupib t3, u
-subb t3, t3, c128
-convsbw wu, t3
-loadupib t3, v
-subb t3, t3, c128
-convsbw wv, t3
-
-mullw t1, wy, 42
-shrsw t1, t1, c8
-addssw wy, wy, t1
-
-addssw wr, wy, wv
-mullw t1, wv, 103
-shrsw t1, t1, c8
-subssw wr, wr, t1
-addssw wr, wr, wv
-
-addssw wb, wy, wu
-addssw wb, wb, wu
-mullw t1, wu, 4
-shrsw t1, t1, c8
-addssw wb, wb, t1
-
-mullw t1, wu, 100
-shrsw t1, t1, c8
-subssw wg, wy, t1
-mullw t1, wv, 104
-shrsw t1, t1, c8
-subssw wg, wg, t1
-subssw wg, wg, t1
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw t1, b, g
-mergebw t2, r, 255
-mergewl x, t1, t2
-x4 addb argb, x, c128
-
-
-
-.function cogorc_convert_I420_BGRA_avg
-.dest 4 argb guint8
-.source 1 y guint8
-.source 1 u1 guint8
-.source 1 u2 guint8
-.source 1 v1 guint8
-.source 1 v2 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 1 t3
-.temp 1 t4
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c8 8
-.const 1 c128 128
-
-subb t3, y, c128
-convsbw wy, t3
-loadupib t3, u1
-loadupib t4, u2
-avgub t3, t3, t4
-subb t3, t3, c128
-convsbw wu, t3
-loadupib t3, v1
-loadupib t4, v2
-avgub t3, t3, t4
-subb t3, t3, c128
-convsbw wv, t3
-
-mullw t1, wy, 42
-shrsw t1, t1, c8
-addssw wy, wy, t1
-
-addssw wr, wy, wv
-mullw t1, wv, 103
-shrsw t1, t1, c8
-subssw wr, wr, t1
-addssw wr, wr, wv
-
-addssw wb, wy, wu
-addssw wb, wb, wu
-mullw t1, wu, 4
-shrsw t1, t1, c8
-addssw wb, wb, t1
-
-mullw t1, wu, 100
-shrsw t1, t1, c8
-subssw wg, wy, t1
-mullw t1, wv, 104
-shrsw t1, t1, c8
-subssw wg, wg, t1
-subssw wg, wg, t1
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw t1, b, g
-mergebw t2, r, 255
-mergewl x, t1, t2
-x4 addb argb, x, c128
-
-
-
-.function cogorc_getline_I420
-.dest 4 d guint8
-.source 1 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-.temp 1 tu
-.temp 1 tv
-
-loadupdb tu, u
-loadupdb tv, v
-mergebw uv, tu, tv
-mergebw ay, c255, y
-mergewl d, ay, uv
-
-.function cogorc_getline_YUV9
-.dest 8 d guint8
-.source 2 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 tuv
-.temp 4 ay
-.temp 4 uv
-.temp 1 tu
-.temp 1 tv
-
-loadupdb tu, u
-loadupdb tv, v
-mergebw tuv, tu, tv
-mergewl uv, tuv, tuv
-x2 mergebw ay, c255, y
-x2 mergewl d, ay, uv
-
-.function cogorc_getline_YUY2
-.dest 8 ayuv guint8
-.source 4 yuy2 guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb uv, yy, yuy2
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_getline_UYVY
-.dest 8 ayuv guint8
-.source 4 uyvy guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb yy, uv, uyvy
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_getline_YVYU
-.dest 8 ayuv guint8
-.source 4 uyvy guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb uv, yy, uyvy
-swapw uv, uv
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_getline_Y42B
-.dest 8 ayuv guint8
-.source 2 yy guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-.temp 4 uvuv
-.temp 4 ayay
-
-mergebw uv, u, v
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function cogorc_getline_Y444
-.dest 4 ayuv guint8
-.source 1 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-
-mergebw uv, u, v
-mergebw ay, c255, y
-mergewl ayuv, ay, uv
-
-
-.function cogorc_getline_Y800
-.dest 4 ayuv guint8
-.source 1 y guint8
-.const 1 c255 255
-.const 2 c0x8080 0x8080
-.temp 2 ay
-
-mergebw ay, c255, y
-mergewl ayuv, ay, c0x8080
-
-.function cogorc_getline_Y16
-.dest 4 ayuv guint8
-.source 2 y guint8
-.const 1 c255 255
-.const 2 c0x8080 0x8080
-.temp 2 ay
-.temp 1 yb
-
-convhwb yb, y
-mergebw ay, c255, yb
-mergewl ayuv, ay, c0x8080
-
-.function cogorc_getline_BGRA
-.dest 4 argb guint8
-.source 4 bgra guint8
-
-swapl argb, bgra
-
-
-.function cogorc_getline_ABGR
-.dest 4 argb guint8
-.source 4 abgr guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 gr
-.temp 2 ab
-.temp 2 ar
-.temp 2 gb
-
-splitlw gr, ab, abgr
-splitwb r, g, gr
-splitwb b, a, ab
-mergebw ar, a, r
-mergebw gb, g, b
-mergewl argb, ar, gb
-
-
-.function cogorc_getline_RGBA
-.dest 4 argb guint8
-.source 4 rgba guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 rg
-.temp 2 ba
-.temp 2 ar
-.temp 2 gb
-
-splitlw ba, rg, rgba
-splitwb g, r, rg
-splitwb a, b, ba
-mergebw ar, a, r
-mergebw gb, g, b
-mergewl argb, ar, gb
-
-
-.function cogorc_getline_NV12
-.dest 8 d guint8
-.source 2 y guint8
-.source 2 uv guint8
-.const 1 c255 255
-.temp 4 ay
-.temp 4 uvuv
-
-mergewl uvuv, uv, uv
-x2 mergebw ay, c255, y
-x2 mergewl d, ay, uvuv
-
-
-.function cogorc_getline_NV21
-.dest 8 d guint8
-.source 2 y guint8
-.source 2 vu guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 4 ay
-.temp 4 uvuv
-
-swapw uv, vu
-mergewl uvuv, uv, uv
-x2 mergebw ay, c255, y
-x2 mergewl d, ay, uvuv
-
-.function cogorc_getline_A420
-.dest 4 d guint8
-.source 1 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.source 1 a guint8
-.temp 2 uv
-.temp 2 ay
-.temp 1 tu
-.temp 1 tv
-
-loadupdb tu, u
-loadupdb tv, v
-mergebw uv, tu, tv
-mergebw ay, a, y
-mergewl d, ay, uv
-
-.function cogorc_putline_I420
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 8 ayuv guint8
-.temp 4 ay
-.temp 4 uv
-.temp 2 uu
-.temp 2 vv
-.temp 1 t1
-.temp 1 t2
-
-x2 splitlw uv, ay, ayuv
-x2 select1wb y, ay
-x2 splitwb vv, uu, uv
-splitwb t1, t2, uu
-avgub u, t1, t2
-splitwb t1, t2, vv
-avgub v, t1, t2
-
-
-
-.function cogorc_putline_YUY2
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-x2 mergebw yuy2, yy, uv1
-
-
-.function cogorc_putline_YVYU
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-swapw uv1, uv1
-x2 mergebw yuy2, yy, uv1
-
-
-.function cogorc_putline_UYVY
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-x2 mergebw yuy2, uv1, yy
-
-
-
-.function cogorc_putline_Y42B
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 8 ayuv guint8
-.temp 4 ayay
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-splitwb v, u, uv1
-x2 select1wb y, ayay
-
-
-.function cogorc_putline_Y444
-.dest 1 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 ayuv guint8
-.temp 2 ay
-.temp 2 uv
-
-splitlw uv, ay, ayuv
-splitwb v, u, uv
-select1wb y, ay
-
-
-.function cogorc_putline_Y800
-.dest 1 y guint8
-.source 4 ayuv guint8
-.temp 2 ay
-
-select0lw ay, ayuv
-select1wb y, ay
-
-.function cogorc_putline_Y16
-.dest 2 y guint8
-.source 4 ayuv guint8
-.temp 2 ay
-.temp 1 yb
-
-select0lw ay, ayuv
-select1wb yb, ay
-convubw ay, yb
-shlw y, ay, 8
-
-.function cogorc_putline_BGRA
-.dest 4 bgra guint8
-.source 4 argb guint8
-
-swapl bgra, argb
-
-
-.function cogorc_putline_ABGR
-.dest 4 abgr guint8
-.source 4 argb guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 gr
-.temp 2 ab
-.temp 2 ar
-.temp 2 gb
-
-splitlw gb, ar, argb
-splitwb b, g, gb
-splitwb r, a, ar
-mergebw ab, a, b
-mergebw gr, g, r
-mergewl abgr, ab, gr
-
-
-.function cogorc_putline_RGBA
-.dest 4 rgba guint8
-.source 4 argb guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 rg
-.temp 2 ba
-.temp 2 ar
-.temp 2 gb
-
-splitlw gb, ar, argb
-splitwb b, g, gb
-splitwb r, a, ar
-mergebw ba, b, a
-mergebw rg, r, g
-mergewl rgba, rg, ba
-
-
-.function cogorc_putline_NV12
-.dest 2 y guint8
-.dest 2 uv guint8
-.source 8 ayuv guint8
-.temp 4 ay
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 splitlw uvuv, ay, ayuv
-x2 select1wb y, ay
-splitlw uv1, uv2, uvuv
-x2 avgub uv, uv1, uv2
-
-
-.function cogorc_putline_NV21
-.dest 2 y guint8
-.dest 2 vu guint8
-.source 8 ayuv guint8
-.temp 4 ay
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-.temp 2 uv
-
-x2 splitlw uvuv, ay, ayuv
-x2 select1wb y, ay
-splitlw uv1, uv2, uvuv
-x2 avgub uv, uv1, uv2
-swapw vu, uv
-
-.function cogorc_putline_A420
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.dest 2 a guint8
-.source 8 ayuv guint8
-.temp 4 ay
-.temp 4 uv
-.temp 2 uu
-.temp 2 vv
-.temp 1 t1
-.temp 1 t2
-
-x2 splitlw uv, ay, ayuv
-x2 select1wb y, ay
-x2 select0wb a, ay
-x2 splitwb vv, uu, uv
-splitwb t1, t2, uu
-avgub u, t1, t2
-splitwb t1, t2, vv
-avgub v, t1, t2
diff --git a/gst/dataurisrc/gstdataurisrc.c b/gst/dataurisrc/gstdataurisrc.c
index 4589bccf5..0887dc247 100644
--- a/gst/dataurisrc/gstdataurisrc.c
+++ b/gst/dataurisrc/gstdataurisrc.c
@@ -61,55 +61,32 @@ static void gst_data_uri_src_set_property (GObject * object,
static void gst_data_uri_src_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
-static GstCaps *gst_data_uri_src_get_caps (GstBaseSrc * src);
+static GstCaps *gst_data_uri_src_get_caps (GstBaseSrc * src, GstCaps * filter);
static gboolean gst_data_uri_src_get_size (GstBaseSrc * src, guint64 * size);
static gboolean gst_data_uri_src_is_seekable (GstBaseSrc * src);
static GstFlowReturn gst_data_uri_src_create (GstBaseSrc * src, guint64 offset,
guint size, GstBuffer ** buf);
-static gboolean gst_data_uri_src_check_get_range (GstBaseSrc * src);
static gboolean gst_data_uri_src_start (GstBaseSrc * src);
static void gst_data_uri_src_handler_init (gpointer g_iface,
gpointer iface_data);
-static GstURIType gst_data_uri_src_get_uri_type (void);
-static gchar **gst_data_uri_src_get_protocols (void);
-static const gchar *gst_data_uri_src_get_uri (GstURIHandler * handler);
+static GstURIType gst_data_uri_src_get_uri_type (GType type);
+static const gchar *const *gst_data_uri_src_get_protocols (GType type);
+static gchar *gst_data_uri_src_get_uri (GstURIHandler * handler);
static gboolean gst_data_uri_src_set_uri (GstURIHandler * handler,
- const gchar * uri);
+ const gchar * uri, GError ** error);
-static void
-_do_init (GType gtype)
-{
- static const GInterfaceInfo urihandler_info = {
- gst_data_uri_src_handler_init,
- 0, 0
- };
-
- GST_DEBUG_CATEGORY_INIT (data_uri_src_debug, "dataurisrc", 0,
- "data: URI source");
- g_type_add_interface_static (gtype, GST_TYPE_URI_HANDLER, &urihandler_info);
-}
-GST_BOILERPLATE_FULL (GstDataURISrc, gst_data_uri_src, GstBaseSrc,
- GST_TYPE_BASE_SRC, _do_init);
-
-static void
-gst_data_uri_src_base_init (gpointer klass)
-{
- GstElementClass *element_class = (GstElementClass *) (klass);
-
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_set_details_simple (element_class,
- "data: URI source element", "Source", "Handles data: uris",
- "Philippe Normand <pnormand@igalia.com>, "
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-
-}
+#define gst_data_uri_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstDataURISrc, gst_data_uri_src, GST_TYPE_BASE_SRC,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ gst_data_uri_src_handler_init));
static void
gst_data_uri_src_class_init (GstDataURISrcClass * klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *element_class = (GstElementClass *) klass;
GstBaseSrcClass *basesrc_class = (GstBaseSrcClass *) klass;
gobject_class->finalize = gst_data_uri_src_finalize;
@@ -122,19 +99,26 @@ gst_data_uri_src_class_init (GstDataURISrcClass * klass)
"URI that should be used",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_set_details_simple (element_class,
+ "data: URI source element", "Source", "Handles data: uris",
+ "Philippe Normand <pnormand@igalia.com>, "
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+ GST_DEBUG_CATEGORY_INIT (data_uri_src_debug, "dataurisrc", 0,
+ "data: URI source");
+
basesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_data_uri_src_get_caps);
basesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_data_uri_src_get_size);
basesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_data_uri_src_is_seekable);
basesrc_class->create = GST_DEBUG_FUNCPTR (gst_data_uri_src_create);
- basesrc_class->check_get_range =
- GST_DEBUG_FUNCPTR (gst_data_uri_src_check_get_range);
basesrc_class->start = GST_DEBUG_FUNCPTR (gst_data_uri_src_start);
}
static void
-gst_data_uri_src_init (GstDataURISrc * src, GstDataURISrcClass * g_class)
+gst_data_uri_src_init (GstDataURISrc * src)
{
- gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_BYTES);
}
static void
@@ -161,7 +145,7 @@ gst_data_uri_src_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_URI:
gst_data_uri_src_set_uri (GST_URI_HANDLER (src),
- g_value_get_string (value));
+ g_value_get_string (value), NULL);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -187,16 +171,16 @@ gst_data_uri_src_get_property (GObject * object,
}
static GstCaps *
-gst_data_uri_src_get_caps (GstBaseSrc * basesrc)
+gst_data_uri_src_get_caps (GstBaseSrc * basesrc, GstCaps * filter)
{
GstDataURISrc *src = GST_DATA_URI_SRC (basesrc);
GstCaps *caps;
GST_OBJECT_LOCK (src);
- if (!src->buffer || !GST_BUFFER_CAPS (src->buffer))
- caps = gst_caps_new_empty ();
+ if (gst_pad_has_current_caps (GST_BASE_SRC_PAD (basesrc)))
+ caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (basesrc));
else
- caps = gst_buffer_get_caps (src->buffer);
+ caps = gst_caps_new_any ();
GST_OBJECT_UNLOCK (src);
return caps;
@@ -214,7 +198,7 @@ gst_data_uri_src_get_size (GstBaseSrc * basesrc, guint64 * size)
*size = -1;
} else {
ret = TRUE;
- *size = GST_BUFFER_SIZE (src->buffer);
+ *size = gst_buffer_get_size (src->buffer);
}
GST_OBJECT_UNLOCK (src);
@@ -241,14 +225,13 @@ gst_data_uri_src_create (GstBaseSrc * basesrc, guint64 offset, guint size,
/* This is only correct because GstBaseSrc already clips size for us to be no
* larger than the max. available size if a segment at the end is requested */
- if (offset + size > GST_BUFFER_SIZE (src->buffer)) {
+ if (offset + size > gst_buffer_get_size (src->buffer)) {
ret = GST_FLOW_UNEXPECTED;
} else {
ret = GST_FLOW_OK;
- *buf = gst_buffer_create_sub (src->buffer, offset, size);
- gst_buffer_set_caps (*buf, GST_BUFFER_CAPS (src->buffer));
+ *buf =
+ gst_buffer_copy_region (src->buffer, GST_BUFFER_COPY_ALL, offset, size);
}
-
GST_OBJECT_UNLOCK (src);
return ret;
@@ -263,12 +246,6 @@ no_buffer:
}
static gboolean
-gst_data_uri_src_check_get_range (GstBaseSrc * basesrc)
-{
- return TRUE;
-}
-
-static gboolean
gst_data_uri_src_start (GstBaseSrc * basesrc)
{
GstDataURISrc *src = GST_DATA_URI_SRC (basesrc);
@@ -293,41 +270,32 @@ no_uri:
}
}
-static void
-gst_data_uri_src_handler_init (gpointer g_iface, gpointer iface_data)
-{
- GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
-
- iface->get_type = gst_data_uri_src_get_uri_type;
- iface->get_protocols = gst_data_uri_src_get_protocols;
- iface->get_uri = gst_data_uri_src_get_uri;
- iface->set_uri = gst_data_uri_src_set_uri;
-}
-
static GstURIType
-gst_data_uri_src_get_uri_type (void)
+gst_data_uri_src_get_uri_type (GType type)
{
return GST_URI_SRC;
}
-static gchar **
-gst_data_uri_src_get_protocols (void)
+static const gchar *const *
+gst_data_uri_src_get_protocols (GType type)
{
- static gchar *protocols[] = { (char *) "data", 0 };
+ static const gchar *protocols[] = { "data", 0 };
return protocols;
}
-static const gchar *
+static gchar *
gst_data_uri_src_get_uri (GstURIHandler * handler)
{
GstDataURISrc *src = GST_DATA_URI_SRC (handler);
- return src->uri;
+ /* FIXME: make thread-safe */
+ return g_strdup (src->uri);
}
static gboolean
-gst_data_uri_src_set_uri (GstURIHandler * handler, const gchar * uri)
+gst_data_uri_src_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
GstDataURISrc *src = GST_DATA_URI_SRC (handler);
gboolean ret = FALSE;
@@ -336,12 +304,16 @@ gst_data_uri_src_set_uri (GstURIHandler * handler, const gchar * uri)
const gchar *data_start;
const gchar *orig_uri = uri;
GstCaps *caps;
+ GstBuffer *buffer;
gboolean base64 = FALSE;
gchar *charset = NULL;
+ gpointer bdata;
+ gsize bsize;
GST_OBJECT_LOCK (src);
if (GST_STATE (src) >= GST_STATE_PAUSED)
goto wrong_state;
+ GST_OBJECT_UNLOCK (src);
/* uri must be an URI as defined in RFC 2397
* data:[<mediatype>][;base64],<data>
@@ -391,83 +363,90 @@ gst_data_uri_src_set_uri (GstURIHandler * handler, const gchar * uri)
/* Skip comma */
data_start += 1;
if (base64) {
- gsize bsize;
-
- src->buffer = gst_buffer_new ();
- GST_BUFFER_DATA (src->buffer) =
- (guint8 *) g_base64_decode (data_start, &bsize);
- GST_BUFFER_MALLOCDATA (src->buffer) = GST_BUFFER_DATA (src->buffer);
- GST_BUFFER_SIZE (src->buffer) = bsize;
+ bdata = g_base64_decode (data_start, &bsize);
} else {
- gchar *data;
-
/* URI encoded, i.e. "percent" encoding */
- data = g_uri_unescape_string (data_start, NULL);
- if (data == NULL)
+ bdata = g_uri_unescape_string (data_start, NULL);
+ if (bdata == NULL)
goto invalid_uri_encoded_data;
-
- src->buffer = gst_buffer_new ();
- GST_BUFFER_DATA (src->buffer) = (guint8 *) data;
- GST_BUFFER_MALLOCDATA (src->buffer) = GST_BUFFER_DATA (src->buffer);
- GST_BUFFER_SIZE (src->buffer) = strlen (data) + 1;
+ bsize = strlen (bdata) + 1;
}
-
/* Convert to UTF8 */
if (strcmp ("text/plain", mimetype) == 0 &&
charset && g_ascii_strcasecmp ("US-ASCII", charset) != 0
&& g_ascii_strcasecmp ("UTF-8", charset) != 0) {
gsize read;
gsize written;
- gchar *old_data = (gchar *) GST_BUFFER_DATA (src->buffer);
- gchar *data;
+ gpointer data;
data =
- g_convert_with_fallback (old_data, -1, "UTF-8", charset, (char *) "*",
+ g_convert_with_fallback (bdata, -1, "UTF-8", charset, (char *) "*",
&read, &written, NULL);
- g_free (old_data);
- GST_BUFFER_DATA (src->buffer) = GST_BUFFER_MALLOCDATA (src->buffer) =
- (guint8 *) data;
- GST_BUFFER_SIZE (src->buffer) = written;
+ g_free (bdata);
+
+ bdata = data;
+ bsize = written;
}
+ buffer = gst_buffer_new_wrapped (bdata, bsize);
- caps = gst_type_find_helper_for_buffer (GST_OBJECT (src), src->buffer, NULL);
+ caps = gst_type_find_helper_for_buffer (GST_OBJECT (src), buffer, NULL);
if (!caps)
- caps = gst_caps_new_simple (mimetype, NULL);
- gst_buffer_set_caps (src->buffer, caps);
+ caps = gst_caps_new_empty_simple (mimetype);
+ gst_base_src_set_caps (GST_BASE_SRC_CAST (src), caps);
gst_caps_unref (caps);
+ GST_OBJECT_LOCK (src);
+ gst_buffer_replace (&src->buffer, buffer);
g_free (src->uri);
src->uri = g_strdup (orig_uri);
+ GST_OBJECT_UNLOCK (src);
ret = TRUE;
out:
- GST_OBJECT_UNLOCK (src);
-
g_free (mimetype);
g_free (charset);
return ret;
-invalid_uri:
- {
- GST_WARNING_OBJECT (src, "invalid URI '%s'", uri);
- goto out;
- }
wrong_state:
{
GST_WARNING_OBJECT (src, "Can't set URI in %s state",
gst_element_state_get_name (GST_STATE (src)));
+ GST_OBJECT_UNLOCK (src);
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
+ "Changing the 'uri' property on dataurisrc while it is running "
+ "is not supported");
+ goto out;
+ }
+invalid_uri:
+ {
+ GST_WARNING_OBJECT (src, "invalid URI '%s'", uri);
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Invalid data URI");
goto out;
}
invalid_uri_encoded_data:
{
GST_WARNING_OBJECT (src, "Failed to parse data encoded in URI '%s'", uri);
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Could not parse data encoded in data URI");
goto out;
}
}
+static void
+gst_data_uri_src_handler_init (gpointer g_iface, gpointer iface_data)
+{
+ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+ iface->get_type = gst_data_uri_src_get_uri_type;
+ iface->get_protocols = gst_data_uri_src_get_protocols;
+ iface->get_uri = gst_data_uri_src_get_uri;
+ iface->set_uri = gst_data_uri_src_set_uri;
+}
+
static gboolean
plugin_init (GstPlugin * plugin)
{
diff --git a/gst/dccp/gstdccpclientsink.c b/gst/dccp/gstdccpclientsink.c
index b4ccc87c0..a890dcb71 100644
--- a/gst/dccp/gstdccpclientsink.c
+++ b/gst/dccp/gstdccpclientsink.c
@@ -228,7 +228,8 @@ gst_dccp_client_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class, "DCCP client sink",
"Sink/Network",
diff --git a/gst/dccp/gstdccpclientsrc.c b/gst/dccp/gstdccpclientsrc.c
index f95d9a731..55f9185e9 100644
--- a/gst/dccp/gstdccpclientsrc.c
+++ b/gst/dccp/gstdccpclientsrc.c
@@ -272,7 +272,8 @@ gst_dccp_client_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
gst_element_class_set_details_simple (element_class, "DCCP client source",
"Source/Network",
diff --git a/gst/dccp/gstdccpserversink.c b/gst/dccp/gstdccpserversink.c
index bb0e6f726..089fe3a66 100644
--- a/gst/dccp/gstdccpserversink.c
+++ b/gst/dccp/gstdccpserversink.c
@@ -336,7 +336,8 @@ gst_dccp_server_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class, "DCCP server sink",
"Sink/Network",
diff --git a/gst/dccp/gstdccpserversrc.c b/gst/dccp/gstdccpserversrc.c
index aa9256d47..5dbb63313 100644
--- a/gst/dccp/gstdccpserversrc.c
+++ b/gst/dccp/gstdccpserversrc.c
@@ -262,7 +262,8 @@ gst_dccp_server_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
gst_element_class_set_details_simple (element_class, "DCCP server source",
"Source/Network",
diff --git a/gst/debugutils/fpsdisplaysink.c b/gst/debugutils/fpsdisplaysink.c
index 8fe89155e..489d88183 100644
--- a/gst/debugutils/fpsdisplaysink.c
+++ b/gst/debugutils/fpsdisplaysink.c
@@ -205,8 +205,8 @@ fps_display_sink_class_init (GstFPSDisplaySinkClass * klass)
gstelement_klass->change_state = fps_display_sink_change_state;
- gst_element_class_add_static_pad_template (gstelement_klass,
- &fps_display_sink_template);
+ gst_element_class_add_pad_template (gstelement_klass,
+ gst_static_pad_template_get (&fps_display_sink_template));
gst_element_class_set_details_simple (gstelement_klass,
"Measure and show framerate on videosink", "Sink/Video",
diff --git a/gst/debugutils/gstchecksumsink.c b/gst/debugutils/gstchecksumsink.c
index 5beef5a18..bf9fba6f2 100644
--- a/gst/debugutils/gstchecksumsink.c
+++ b/gst/debugutils/gstchecksumsink.c
@@ -55,10 +55,10 @@ gst_checksum_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_checksum_sink_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_checksum_sink_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_checksum_sink_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_checksum_sink_sink_template));
gst_element_class_set_details_simple (element_class, "Checksum sink",
"Debug/Sink", "Calculates a checksum for buffers",
diff --git a/gst/debugutils/gstchopmydata.c b/gst/debugutils/gstchopmydata.c
index 48da58f5e..16109ad81 100644
--- a/gst/debugutils/gstchopmydata.c
+++ b/gst/debugutils/gstchopmydata.c
@@ -98,10 +98,10 @@ gst_chop_my_data_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_chop_my_data_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_chop_my_data_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_chop_my_data_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_chop_my_data_sink_template));
gst_element_class_set_details_simple (element_class, "FIXME",
"Generic", "FIXME", "David Schleef <ds@schleef.org>");
diff --git a/gst/debugutils/gstcompare.c b/gst/debugutils/gstcompare.c
index b20a8d056..7e4a5c11a 100644
--- a/gst/debugutils/gstcompare.c
+++ b/gst/debugutils/gstcompare.c
@@ -123,10 +123,12 @@ gst_compare_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &check_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&check_sink_factory));
gst_element_class_set_details_simple (element_class, "Compare buffers",
"Filter/Debug", "Compares incoming buffers",
"Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
diff --git a/gst/debugutils/gstdebugspy.c b/gst/debugutils/gstdebugspy.c
index 72387ce41..0c9e3300f 100644
--- a/gst/debugutils/gstdebugspy.c
+++ b/gst/debugutils/gstdebugspy.c
@@ -120,8 +120,10 @@ gst_debug_spy_base_init (gpointer gclass)
"DebugSpy provides information on buffers with bus messages",
"Guillaume Emont <gemont@igalia.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the debugspy's class */
diff --git a/gst/dtmf/gstdtmfdetect.c b/gst/dtmf/gstdtmfdetect.c
index 7d76aa067..0bb924264 100644
--- a/gst/dtmf/gstdtmfdetect.c
+++ b/gst/dtmf/gstdtmfdetect.c
@@ -118,8 +118,10 @@ gst_dtmf_detect_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class, "DTMF detector element",
"Filter/Analyzer/Audio",
diff --git a/gst/dtmf/gstdtmfsrc.c b/gst/dtmf/gstdtmfsrc.c
index e3face849..929147fe0 100644
--- a/gst/dtmf/gstdtmfsrc.c
+++ b/gst/dtmf/gstdtmfsrc.c
@@ -241,8 +241,8 @@ gst_dtmf_src_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (gst_dtmf_src_debug, "dtmfsrc", 0, "dtmfsrc element");
- gst_element_class_add_static_pad_template (element_class,
- &gst_dtmf_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_dtmf_src_template));
gst_element_class_set_details_simple (element_class, "DTMF tone generator",
"Source/Audio",
diff --git a/gst/dtmf/gstrtpdtmfdepay.c b/gst/dtmf/gstrtpdtmfdepay.c
index da1ec2f95..603416dd6 100644
--- a/gst/dtmf/gstrtpdtmfdepay.c
+++ b/gst/dtmf/gstrtpdtmfdepay.c
@@ -216,10 +216,10 @@ gst_rtp_dtmf_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_dtmf_depay_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_dtmf_depay_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_dtmf_depay_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_dtmf_depay_sink_template));
GST_DEBUG_CATEGORY_INIT (gst_rtp_dtmf_depay_debug,
diff --git a/gst/dtmf/gstrtpdtmfsrc.c b/gst/dtmf/gstrtpdtmfsrc.c
index 605aca45e..ee8703563 100644
--- a/gst/dtmf/gstrtpdtmfsrc.c
+++ b/gst/dtmf/gstrtpdtmfsrc.c
@@ -208,8 +208,8 @@ gst_rtp_dtmf_src_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (gst_rtp_dtmf_src_debug,
"rtpdtmfsrc", 0, "rtpdtmfsrc element");
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_dtmf_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_dtmf_src_template));
gst_element_class_set_details_simple (element_class,
"RTP DTMF packet generator", "Source/Network",
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c
index 3c2cab3e4..4e1fb378e 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.c
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c
@@ -27,8 +27,8 @@
* <title>Example launch line</title>
* |[ FIXME
* gst-launch -v filesrc location=/path/to/ts ! mpegtsdemux name=d ! queue ! mp3parse ! mad ! audioconvert ! autoaudiosink \
- * d. ! queue ! mpeg2dec ! ffmpegcolorspace ! r. \
- * d. ! queue ! "subpicture/x-dvb" ! dvbsuboverlay name=r ! ffmpegcolorspace ! autovideosink
+ * d. ! queue ! mpeg2dec ! videoconvert ! r. \
+ * d. ! queue ! "subpicture/x-dvb" ! dvbsuboverlay name=r ! videoconvert ! autovideosink
* ]| This pipeline demuxes a MPEG-TS file with MPEG2 video, MP3 audio and embedded DVB subtitles and renders the subtitles on top of the video.
* </refsect2>
*/
@@ -64,14 +64,14 @@ enum
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420"))
);
static GstStaticPadTemplate video_sink_factory =
GST_STATIC_PAD_TEMPLATE ("video_sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420"))
);
static GstStaticPadTemplate text_sink_factory =
@@ -91,46 +91,30 @@ static void gst_dvbsub_overlay_finalize (GObject * object);
static GstStateChangeReturn gst_dvbsub_overlay_change_state (GstElement *
element, GstStateChange transition);
-GST_BOILERPLATE (GstDVBSubOverlay, gst_dvbsub_overlay, GstElement,
- GST_TYPE_ELEMENT);
+#define gst_dvbsub_overlay_parent_class parent_class
+G_DEFINE_TYPE (GstDVBSubOverlay, gst_dvbsub_overlay, GST_TYPE_ELEMENT);
-static GstCaps *gst_dvbsub_overlay_getcaps (GstPad * pad);
-
-static gboolean gst_dvbsub_overlay_setcaps_video (GstPad * pad, GstCaps * caps);
+static GstCaps *gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter);
static GstFlowReturn gst_dvbsub_overlay_chain_video (GstPad * pad,
- GstBuffer * buf);
+ GstObject * parent, GstBuffer * buf);
static GstFlowReturn gst_dvbsub_overlay_chain_text (GstPad * pad,
- GstBuffer * buf);
+ GstObject * parent, GstBuffer * buf);
-static gboolean gst_dvbsub_overlay_event_video (GstPad * pad, GstEvent * event);
-static gboolean gst_dvbsub_overlay_event_text (GstPad * pad, GstEvent * event);
-static gboolean gst_dvbsub_overlay_event_src (GstPad * pad, GstEvent * event);
+static gboolean gst_dvbsub_overlay_event_video (GstPad * pad,
+ GstObject * parent, GstEvent * event);
+static gboolean gst_dvbsub_overlay_event_text (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_dvbsub_overlay_event_src (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static void new_dvb_subtitles_cb (DvbSub * dvb_sub, DVBSubtitles * subs,
gpointer user_data);
-static GstFlowReturn gst_dvbsub_overlay_bufferalloc_video (GstPad * pad,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buffer);
-
-static gboolean gst_dvbsub_overlay_query_src (GstPad * pad, GstQuery * query);
-
-static void
-gst_dvbsub_overlay_base_init (gpointer gclass)
-{
- GstElementClass *element_class = (GstElementClass *) gclass;
-
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &text_sink_factory);
-
- gst_element_class_set_details_simple (element_class,
- "DVB Subtitles Overlay",
- "Mixer/Video/Overlay/Subtitle",
- "Renders DVB subtitles", "Mart Raudsepp <mart.raudsepp@collabora.co.uk>");
-}
+static gboolean gst_dvbsub_overlay_query_video (GstPad * pad,
+ GstObject * parent, GstQuery * query);
+static gboolean gst_dvbsub_overlay_query_src (GstPad * pad, GstObject * parent,
+ GstQuery * query);
/* initialize the plugin's class */
static void
@@ -155,6 +139,18 @@ gst_dvbsub_overlay_class_init (GstDVBSubOverlayClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_change_state);
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&video_sink_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&text_sink_factory));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "DVB Subtitles Overlay",
+ "Mixer/Video/Overlay/Subtitle",
+ "Renders DVB subtitles", "Mart Raudsepp <mart.raudsepp@collabora.co.uk>");
}
static void
@@ -185,8 +181,7 @@ gst_dvbsub_overlay_flush_subtitles (GstDVBSubOverlay * render)
}
static void
-gst_dvbsub_overlay_init (GstDVBSubOverlay * render,
- GstDVBSubOverlayClass * gclass)
+gst_dvbsub_overlay_init (GstDVBSubOverlay * render)
{
GST_DEBUG_OBJECT (render, "init");
@@ -196,14 +191,6 @@ gst_dvbsub_overlay_init (GstDVBSubOverlay * render,
render->text_sinkpad =
gst_pad_new_from_static_template (&text_sink_factory, "text_sink");
- gst_pad_set_setcaps_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_setcaps_video));
-
- gst_pad_set_getcaps_function (render->srcpad,
- GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_getcaps));
- gst_pad_set_getcaps_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_getcaps));
-
gst_pad_set_chain_function (render->video_sinkpad,
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_chain_video));
gst_pad_set_chain_function (render->text_sinkpad,
@@ -216,9 +203,8 @@ gst_dvbsub_overlay_init (GstDVBSubOverlay * render,
gst_pad_set_event_function (render->srcpad,
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_event_src));
- gst_pad_set_bufferalloc_function (render->video_sinkpad,
- GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_bufferalloc_video));
-
+ gst_pad_set_query_function (render->video_sinkpad,
+ GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_query_video));
gst_pad_set_query_function (render->srcpad,
GST_DEBUG_FUNCPTR (gst_dvbsub_overlay_query_src));
@@ -226,8 +212,7 @@ gst_dvbsub_overlay_init (GstDVBSubOverlay * render,
gst_element_add_pad (GST_ELEMENT (render), render->video_sinkpad);
gst_element_add_pad (GST_ELEMENT (render), render->text_sinkpad);
- render->width = 0;
- render->height = 0;
+ gst_video_info_init (&render->info);
render->current_subtitle = NULL;
render->pending_subtitles = g_queue_new ();
@@ -331,7 +316,7 @@ gst_dvbsub_overlay_change_state (GstElement * element,
gst_dvbsub_overlay_flush_subtitles (render);
gst_segment_init (&render->video_segment, GST_FORMAT_TIME);
gst_segment_init (&render->subtitle_segment, GST_FORMAT_TIME);
- render->format = GST_VIDEO_FORMAT_UNKNOWN;
+ gst_video_info_init (&render->info);
break;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
case GST_STATE_CHANGE_READY_TO_NULL:
@@ -344,21 +329,37 @@ gst_dvbsub_overlay_change_state (GstElement * element,
}
static gboolean
-gst_dvbsub_overlay_query_src (GstPad * pad, GstQuery * query)
+gst_dvbsub_overlay_query_src (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
- GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
+ GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (parent);
gboolean ret;
- ret = gst_pad_peer_query (render->video_sinkpad, query);
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_dvbsub_overlay_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_peer_query (render->video_sinkpad, query);
+ break;
+ }
- gst_object_unref (render);
return ret;
}
static gboolean
-gst_dvbsub_overlay_event_src (GstPad * pad, GstEvent * event)
+gst_dvbsub_overlay_event_src (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
- GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
+ GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (parent);
gboolean ret = FALSE;
switch (GST_EVENT_TYPE (event)) {
@@ -392,13 +393,11 @@ gst_dvbsub_overlay_event_src (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (render);
-
return ret;
}
static GstCaps *
-gst_dvbsub_overlay_getcaps (GstPad * pad)
+gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter)
{
GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
GstPad *otherpad;
@@ -410,7 +409,7 @@ gst_dvbsub_overlay_getcaps (GstPad * pad)
otherpad = render->srcpad;
/* we can do what the peer can */
- caps = gst_pad_peer_get_caps (otherpad);
+ caps = gst_pad_peer_query_caps (otherpad, filter);
if (caps) {
GstCaps *temp;
const GstCaps *templ;
@@ -432,7 +431,8 @@ gst_dvbsub_overlay_getcaps (GstPad * pad)
}
static void
-blit_i420 (GstDVBSubOverlay * overlay, DVBSubtitles * subs, GstBuffer * buffer)
+blit_i420 (GstDVBSubOverlay * overlay, DVBSubtitles * subs,
+ GstVideoFrame * frame)
{
guint counter;
DVBSubtitleRect *sub_region;
@@ -445,28 +445,24 @@ blit_i420 (GstDVBSubOverlay * overlay, DVBSubtitles * subs, GstBuffer * buffer)
guint8 *dst_y, *dst_y2, *dst_u, *dst_v;
gint x, y;
gint w2;
- gint width = overlay->width;
- gint height = overlay->height;
+ gint width;
+ gint height;
gint src_stride;
- gint y_offset, y_stride;
- gint u_offset, u_stride;
- gint v_offset, v_stride;
+ guint8 *y_data, *u_data, *v_data;
+ gint y_stride, u_stride, v_stride;
gint scale = 0;
gint scale_x = 0, scale_y = 0; /* 16.16 fixed point */
- y_offset =
- gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, 0, width,
- height);
- u_offset =
- gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, 1, width,
- height);
- v_offset =
- gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, 2, width,
- height);
+ width = GST_VIDEO_FRAME_WIDTH (frame);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
- y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width);
- u_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width);
- v_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 2, width);
+ y_data = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ u_data = GST_VIDEO_FRAME_COMP_DATA (frame, 1);
+ v_data = GST_VIDEO_FRAME_COMP_DATA (frame, 2);
+
+ y_stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ u_stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 1);
+ v_stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 2);
if (width != subs->display_def.display_width &&
height != subs->display_def.display_height) {
@@ -518,10 +514,10 @@ blit_i420 (GstDVBSubOverlay * overlay, DVBSubtitles * subs, GstBuffer * buffer)
src_stride = sub_region->pict.rowstride;
src = sub_region->pict.data;
- dst_y = buffer->data + y_offset + dy * y_stride + dx;
- dst_y2 = buffer->data + y_offset + (dy + 1) * y_stride + dx;
- dst_u = buffer->data + u_offset + ((dy + 1) / 2) * u_stride + (dx + 1) / 2;
- dst_v = buffer->data + v_offset + ((dy + 1) / 2) * v_stride + (dx + 1) / 2;
+ dst_y = y_data + dy * y_stride + dx;
+ dst_y2 = y_data + (dy + 1) * y_stride + dx;
+ dst_u = u_data + ((dy + 1) / 2) * u_stride + (dx + 1) / 2;
+ dst_v = v_data + ((dy + 1) / 2) * v_stride + (dx + 1) / 2;
sy = 0;
for (y = 0; y < dh - 1; y += 2) {
@@ -676,20 +672,12 @@ gst_dvbsub_overlay_setcaps_video (GstPad * pad, GstCaps * caps)
{
GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
gboolean ret = FALSE;
+ GstVideoInfo info;
- render->width = 0;
- render->height = 0;
-
- if (!gst_video_format_parse_caps (caps, &render->format, &render->width,
- &render->height) ||
- !gst_video_parse_caps_framerate (caps, &render->fps_n, &render->fps_d)) {
- GST_ERROR_OBJECT (render, "Can't parse caps: %" GST_PTR_FORMAT, caps);
- ret = FALSE;
- goto out;
- }
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
- gst_video_parse_caps_pixel_aspect_ratio (caps, &render->par_n,
- &render->par_d);
+ render->info = info;
ret = gst_pad_set_caps (render->srcpad, caps);
if (!ret)
@@ -701,23 +689,37 @@ out:
gst_object_unref (render);
return ret;
+
+ /* ERRORS */
+invalid_caps:
+ {
+ GST_ERROR_OBJECT (render, "Can't parse caps: %" GST_PTR_FORMAT, caps);
+ ret = FALSE;
+ goto out;
+ }
}
static void
gst_dvbsub_overlay_process_text (GstDVBSubOverlay * overlay, GstBuffer * buffer,
guint64 pts)
{
- guint8 *data = (guint8 *) GST_BUFFER_DATA (buffer);
- guint size = GST_BUFFER_SIZE (buffer);
+ guint8 *data;
+ gsize size;
GST_DEBUG_OBJECT (overlay,
"Processing subtitles with fake PTS=%" G_GUINT64_FORMAT
" which is a running time of %" GST_TIME_FORMAT,
pts, GST_TIME_ARGS (pts));
- GST_DEBUG_OBJECT (overlay, "Feeding %u bytes to libdvbsub", size);
+ GST_DEBUG_OBJECT (overlay, "Feeding %" G_GSIZE_FORMAT " bytes to libdvbsub",
+ size);
+
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
g_mutex_lock (overlay->dvbsub_mutex);
dvb_sub_feed_with_pts (overlay->dvb_sub, pts, data, size);
g_mutex_unlock (overlay->dvbsub_mutex);
+
+ gst_buffer_unmap (buffer, data, size);
gst_buffer_unref (buffer);
}
@@ -741,35 +743,15 @@ new_dvb_subtitles_cb (DvbSub * dvb_sub, DVBSubtitles * subs, gpointer user_data)
}
static GstFlowReturn
-gst_dvbsub_overlay_bufferalloc_video (GstPad * pad, guint64 offset, guint size,
- GstCaps * caps, GstBuffer ** buffer)
+gst_dvbsub_overlay_chain_text (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer)
{
- GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
- GstFlowReturn ret = GST_FLOW_WRONG_STATE;
- GstPad *allocpad;
-
- GST_OBJECT_LOCK (render);
- allocpad = render->srcpad ? gst_object_ref (render->srcpad) : NULL;
- GST_OBJECT_UNLOCK (render);
-
- if (allocpad) {
- ret = gst_pad_alloc_buffer (allocpad, offset, size, caps, buffer);
- gst_object_unref (allocpad);
- }
-
- gst_object_unref (render);
-
- return ret;
-}
-
-static GstFlowReturn
-gst_dvbsub_overlay_chain_text (GstPad * pad, GstBuffer * buffer)
-{
- GstDVBSubOverlay *overlay = GST_DVBSUB_OVERLAY (GST_PAD_PARENT (pad));
+ GstDVBSubOverlay *overlay = GST_DVBSUB_OVERLAY (parent);
GstClockTime sub_running_time;
- GST_INFO_OBJECT (overlay, "subpicture/x-dvb buffer with size %u",
- GST_BUFFER_SIZE (buffer));
+ GST_INFO_OBJECT (overlay,
+ "subpicture/x-dvb buffer with size %" G_GSIZE_FORMAT,
+ gst_buffer_get_size (buffer));
GST_LOG_OBJECT (overlay,
"Video segment: %" GST_SEGMENT_FORMAT " --- Subtitle segment: %"
@@ -792,8 +774,7 @@ gst_dvbsub_overlay_chain_text (GstPad * pad, GstBuffer * buffer)
* FIXME: does our waiting + render code work when there are more than one packets before
* FIXME: rendering callback will get called? */
- gst_segment_set_last_stop (&overlay->subtitle_segment, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buffer));
+ overlay->subtitle_segment.position = GST_BUFFER_TIMESTAMP (buffer);
sub_running_time =
gst_segment_to_running_time (&overlay->subtitle_segment, GST_FORMAT_TIME,
@@ -809,16 +790,17 @@ gst_dvbsub_overlay_chain_text (GstPad * pad, GstBuffer * buffer)
}
static GstFlowReturn
-gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
+gst_dvbsub_overlay_chain_video (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer)
{
- GstDVBSubOverlay *overlay = GST_DVBSUB_OVERLAY (GST_PAD_PARENT (pad));
+ GstDVBSubOverlay *overlay = GST_DVBSUB_OVERLAY (parent);
GstFlowReturn ret = GST_FLOW_OK;
gint64 start, stop;
- gint64 cstart, cstop;
+ guint64 cstart, cstop;
gboolean in_seg;
GstClockTime vid_running_time, vid_running_time_end;
- if (overlay->format == GST_VIDEO_FORMAT_UNKNOWN)
+ if (GST_VIDEO_INFO_FORMAT (&overlay->info) == GST_VIDEO_FORMAT_UNKNOWN)
return GST_FLOW_NOT_NEGOTIATED;
if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
@@ -827,10 +809,10 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
start = GST_BUFFER_TIMESTAMP (buffer);
GST_LOG_OBJECT (overlay,
- "Video segment: %" GST_SEGMENT_FORMAT " --- Subtitle last_stop: %"
+ "Video segment: %" GST_SEGMENT_FORMAT " --- Subtitle position: %"
GST_TIME_FORMAT " --- BUFFER: ts=%" GST_TIME_FORMAT,
&overlay->video_segment,
- GST_TIME_ARGS (overlay->subtitle_segment.last_stop),
+ GST_TIME_ARGS (overlay->subtitle_segment.position),
GST_TIME_ARGS (start));
/* ignore buffers that are outside of the current segment */
@@ -848,7 +830,7 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
return GST_FLOW_OK;
}
- buffer = gst_buffer_make_metadata_writable (buffer);
+ buffer = gst_buffer_make_writable (buffer);
GST_BUFFER_TIMESTAMP (buffer) = cstart;
if (GST_BUFFER_DURATION_IS_VALID (buffer))
GST_BUFFER_DURATION (buffer) = cstop - cstart;
@@ -866,8 +848,7 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
GST_DEBUG_OBJECT (overlay, "Video running time: %" GST_TIME_FORMAT,
GST_TIME_ARGS (vid_running_time));
- gst_segment_set_last_stop (&overlay->video_segment, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buffer));
+ overlay->video_segment.position = GST_BUFFER_TIMESTAMP (buffer);
g_mutex_lock (overlay->dvbsub_mutex);
if (!g_queue_is_empty (overlay->pending_subtitles)) {
@@ -891,7 +872,7 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
dvb_subtitles_free (tmp);
tmp = NULL;
} else if (tmp->pts + tmp->page_time_out * GST_SECOND *
- overlay->subtitle_segment.abs_rate >= vid_running_time) {
+ ABS (overlay->subtitle_segment.rate) >= vid_running_time) {
if (candidate)
dvb_subtitles_free (candidate);
candidate = tmp;
@@ -921,7 +902,7 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
&& vid_running_time >
(overlay->current_subtitle->pts +
overlay->current_subtitle->page_time_out * GST_SECOND *
- overlay->subtitle_segment.abs_rate)) {
+ ABS (overlay->subtitle_segment.rate))) {
GST_INFO_OBJECT (overlay,
"Subtitle page not redefined before fallback page_time_out of %u seconds (missed data?) - deleting current page",
overlay->current_subtitle->page_time_out);
@@ -931,8 +912,12 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstBuffer * buffer)
/* Now render it */
if (g_atomic_int_get (&overlay->enable) && overlay->current_subtitle) {
+ GstVideoFrame frame;
+
buffer = gst_buffer_make_writable (buffer);
- blit_i420 (overlay, overlay->current_subtitle, buffer);
+ gst_video_frame_map (&frame, &overlay->info, buffer, GST_MAP_WRITE);
+ blit_i420 (overlay, overlay->current_subtitle, &frame);
+ gst_video_frame_unmap (&frame);
}
g_mutex_unlock (overlay->dvbsub_mutex);
@@ -949,33 +934,64 @@ missing_timestamp:
}
static gboolean
-gst_dvbsub_overlay_event_video (GstPad * pad, GstEvent * event)
+gst_dvbsub_overlay_query_video (GstPad * pad, GstObject * parent,
+ GstQuery * query)
+{
+ gboolean ret;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_dvbsub_overlay_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_dvbsub_overlay_event_video (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
gboolean ret = FALSE;
- GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
+ GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (parent);
GST_DEBUG_OBJECT (pad, "received video event %s",
GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_dvbsub_overlay_setcaps_video (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_SEGMENT:
{
- GstFormat format;
- gdouble rate;
- gint64 start, stop, time;
- gboolean update;
+ GstSegment seg;
GST_DEBUG_OBJECT (render, "received new segment");
- gst_event_parse_new_segment (event, &update, &rate, &format, &start,
- &stop, &time);
+ gst_event_copy_segment (event, &seg);
- if (format == GST_FORMAT_TIME) {
+ if (seg.format == GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (render, "VIDEO SEGMENT now: %" GST_SEGMENT_FORMAT,
&render->video_segment);
- gst_segment_set_newsegment (&render->video_segment, update, rate,
- format, start, stop, time);
+ render->video_segment = seg;
GST_DEBUG_OBJECT (render, "VIDEO SEGMENT after: %" GST_SEGMENT_FORMAT,
&render->video_segment);
@@ -995,38 +1011,32 @@ gst_dvbsub_overlay_event_video (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (render);
-
return ret;
}
static gboolean
-gst_dvbsub_overlay_event_text (GstPad * pad, GstEvent * event)
+gst_dvbsub_overlay_event_text (GstPad * pad, GstObject * parent,
+ GstEvent * event)
{
gboolean ret = FALSE;
- GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
+ GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (parent);
GST_DEBUG_OBJECT (pad, "received text event %s", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- GstFormat format;
- gdouble rate;
- gint64 start, stop, time;
- gboolean update;
+ GstSegment seg;
GST_DEBUG_OBJECT (render, "received new segment");
- gst_event_parse_new_segment (event, &update, &rate, &format, &start,
- &stop, &time);
+ gst_event_copy_segment (event, &seg);
- if (format == GST_FORMAT_TIME) {
+ if (seg.format == GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (render, "SUBTITLE SEGMENT now: %" GST_SEGMENT_FORMAT,
&render->subtitle_segment);
- gst_segment_set_newsegment (&render->subtitle_segment, update, rate,
- format, start, stop, time);
+ render->subtitle_segment = seg;
GST_DEBUG_OBJECT (render,
"SUBTITLE SEGMENT after: %" GST_SEGMENT_FORMAT,
@@ -1063,8 +1073,6 @@ gst_dvbsub_overlay_event_text (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (render);
-
return ret;
}
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.h b/gst/dvbsuboverlay/gstdvbsuboverlay.h
index 012c728eb..e7e227d53 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.h
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.h
@@ -50,10 +50,7 @@ struct _GstDVBSubOverlay
GstSegment video_segment;
GstSegment subtitle_segment;
- GstVideoFormat format;
- gint width, height;
- gint fps_n, fps_d;
- gint par_n, par_d;
+ GstVideoInfo info;
DVBSubtitles *current_subtitle; /* The currently active set of subtitle regions, if any */
GQueue *pending_subtitles; /* A queue of raw subtitle region sets with
diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c
index f57d3c20b..937e27840 100644
--- a/gst/dvdspu/gstdvdspu.c
+++ b/gst/dvdspu/gstdvdspu.c
@@ -55,7 +55,7 @@ static GstStaticPadTemplate video_sink_factory =
GST_STATIC_PAD_TEMPLATE ("video",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw-yuv, " "format = (fourcc) { I420 }, "
+ GST_STATIC_CAPS ("video/x-raw, " "format = (string) { I420 }, "
"width = (int) [ 16, 4096 ], " "height = (int) [ 16, 4096 ]")
/* FIXME: Can support YV12 one day too */
);
@@ -63,7 +63,7 @@ GST_STATIC_PAD_TEMPLATE ("video",
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw-yuv, " "format = (fourcc) { I420 }, "
+ GST_STATIC_CAPS ("video/x-raw, " "format = (string) { I420 }, "
"width = (int) [ 16, 4096 ], " "height = (int) [ 16, 4096 ]")
/* FIXME: Can support YV12 one day too */
);
@@ -82,26 +82,35 @@ static const guint32 default_clut[16] = {
0x808080, 0x808080, 0x808080, 0x808080
};
-GST_BOILERPLATE (GstDVDSpu, gst_dvd_spu, GstElement, GST_TYPE_ELEMENT);
+#define gst_dvd_spu_parent_class parent_class
+G_DEFINE_TYPE (GstDVDSpu, gst_dvd_spu, GST_TYPE_ELEMENT);
static void gst_dvd_spu_dispose (GObject * object);
static void gst_dvd_spu_finalize (GObject * object);
static GstStateChangeReturn gst_dvd_spu_change_state (GstElement * element,
GstStateChange transition);
-static gboolean gst_dvd_spu_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_dvd_spu_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_dvd_spu_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
-static GstCaps *gst_dvd_spu_video_proxy_getcaps (GstPad * pad);
+static GstCaps *gst_dvd_spu_video_proxy_getcaps (GstPad * pad,
+ GstCaps * filter);
static gboolean gst_dvd_spu_video_set_caps (GstPad * pad, GstCaps * caps);
-static GstFlowReturn gst_dvd_spu_video_chain (GstPad * pad, GstBuffer * buf);
-static gboolean gst_dvd_spu_video_event (GstPad * pad, GstEvent * event);
-static GstFlowReturn gst_dvd_spu_buffer_alloc (GstPad * sinkpad, guint64 offset,
- guint size, GstCaps * caps, GstBuffer ** buf);
+static GstFlowReturn gst_dvd_spu_video_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static gboolean gst_dvd_spu_video_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_dvd_spu_video_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static void gst_dvd_spu_redraw_still (GstDVDSpu * dvdspu, gboolean force);
static void gst_dvd_spu_check_still_updates (GstDVDSpu * dvdspu);
-static GstFlowReturn gst_dvd_spu_subpic_chain (GstPad * pad, GstBuffer * buf);
-static gboolean gst_dvd_spu_subpic_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_dvd_spu_subpic_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static gboolean gst_dvd_spu_subpic_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static gboolean gst_dvd_spu_subpic_set_caps (GstPad * pad, GstCaps * caps);
static void gst_dvd_spu_clear (GstDVDSpu * dvdspu);
@@ -114,60 +123,50 @@ dvdspu_handle_vid_buffer (GstDVDSpu * dvdspu, GstBuffer * buf);
static void gst_dvd_spu_handle_dvd_event (GstDVDSpu * dvdspu, GstEvent * event);
static void
-gst_dvd_spu_base_init (gpointer gclass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &subpic_sink_factory);
- gst_element_class_set_details_simple (element_class, "Sub-picture Overlay",
- "Mixer/Video/Overlay/SubPicture/DVD/Bluray",
- "Parses Sub-Picture command streams and renders the SPU overlay "
- "onto the video as it passes through",
- "Jan Schmidt <thaytan@noraisin.net>");
-
- element_class->change_state = gst_dvd_spu_change_state;
-}
-
-static void
gst_dvd_spu_class_init (GstDVDSpuClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
gobject_class->dispose = (GObjectFinalizeFunc) gst_dvd_spu_dispose;
gobject_class->finalize = (GObjectFinalizeFunc) gst_dvd_spu_finalize;
+
+ gstelement_class->change_state = gst_dvd_spu_change_state;
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&video_sink_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&subpic_sink_factory));
+
+ gst_element_class_set_details_simple (gstelement_class, "Sub-picture Overlay",
+ "Mixer/Video/Overlay/SubPicture/DVD/Bluray",
+ "Parses Sub-Picture command streams and renders the SPU overlay "
+ "onto the video as it passes through",
+ "Jan Schmidt <thaytan@noraisin.net>");
}
static void
-gst_dvd_spu_init (GstDVDSpu * dvdspu, GstDVDSpuClass * gclass)
+gst_dvd_spu_init (GstDVDSpu * dvdspu)
{
dvdspu->videosinkpad =
gst_pad_new_from_static_template (&video_sink_factory, "video");
- gst_pad_set_setcaps_function (dvdspu->videosinkpad,
- gst_dvd_spu_video_set_caps);
- gst_pad_set_getcaps_function (dvdspu->videosinkpad,
- gst_dvd_spu_video_proxy_getcaps);
gst_pad_set_chain_function (dvdspu->videosinkpad, gst_dvd_spu_video_chain);
gst_pad_set_event_function (dvdspu->videosinkpad, gst_dvd_spu_video_event);
- gst_pad_set_bufferalloc_function (dvdspu->videosinkpad,
- gst_dvd_spu_buffer_alloc);
+ gst_pad_set_query_function (dvdspu->videosinkpad, gst_dvd_spu_video_query);
dvdspu->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
gst_pad_set_event_function (dvdspu->srcpad, gst_dvd_spu_src_event);
- gst_pad_set_getcaps_function (dvdspu->srcpad,
- gst_dvd_spu_video_proxy_getcaps);
+ gst_pad_set_query_function (dvdspu->srcpad, gst_dvd_spu_src_query);
dvdspu->subpic_sinkpad =
gst_pad_new_from_static_template (&subpic_sink_factory, "subpicture");
gst_pad_set_chain_function (dvdspu->subpic_sinkpad, gst_dvd_spu_subpic_chain);
gst_pad_set_event_function (dvdspu->subpic_sinkpad, gst_dvd_spu_subpic_event);
- gst_pad_set_setcaps_function (dvdspu->subpic_sinkpad,
- gst_dvd_spu_subpic_set_caps);
gst_element_add_pad (GST_ELEMENT (dvdspu), dvdspu->videosinkpad);
gst_element_add_pad (GST_ELEMENT (dvdspu), dvdspu->subpic_sinkpad);
@@ -190,8 +189,8 @@ gst_dvd_spu_clear (GstDVDSpu * dvdspu)
gst_buffer_replace (&dvdspu->ref_frame, NULL);
gst_buffer_replace (&dvdspu->pending_frame, NULL);
- dvdspu->spu_state.fps_n = 25;
- dvdspu->spu_state.fps_d = 1;
+ dvdspu->spu_state.info.fps_n = 25;
+ dvdspu->spu_state.info.fps_d = 1;
gst_segment_init (&dvdspu->video_seg, GST_FORMAT_UNDEFINED);
}
@@ -278,25 +277,10 @@ gst_dvd_spu_flush_spu_info (GstDVDSpu * dvdspu, gboolean keep_events)
}
}
-/* Proxy buffer allocations on the video sink pad downstream */
-static GstFlowReturn
-gst_dvd_spu_buffer_alloc (GstPad * sinkpad, guint64 offset, guint size,
- GstCaps * caps, GstBuffer ** buf)
-{
- GstDVDSpu *dvdspu = GST_DVD_SPU (gst_pad_get_parent (sinkpad));
- GstFlowReturn ret = GST_FLOW_OK;
-
- ret = gst_pad_alloc_buffer (dvdspu->srcpad, offset, size, caps, buf);
-
- gst_object_unref (dvdspu);
-
- return ret;
-}
-
static gboolean
-gst_dvd_spu_src_event (GstPad * pad, GstEvent * event)
+gst_dvd_spu_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstDVDSpu *dvdspu = GST_DVD_SPU (gst_pad_get_parent (pad));
+ GstDVDSpu *dvdspu = GST_DVD_SPU (parent);
GstPad *peer;
gboolean res = TRUE;
@@ -305,8 +289,31 @@ gst_dvd_spu_src_event (GstPad * pad, GstEvent * event)
res = gst_pad_send_event (peer, event);
gst_object_unref (peer);
}
+ return res;
+}
+
+static gboolean
+gst_dvd_spu_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_dvd_spu_video_proxy_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
- gst_object_unref (dvdspu);
return res;
}
@@ -315,39 +322,21 @@ gst_dvd_spu_video_set_caps (GstPad * pad, GstCaps * caps)
{
GstDVDSpu *dvdspu = GST_DVD_SPU (gst_pad_get_parent (pad));
gboolean res = FALSE;
- GstStructure *s;
- gint w, h;
+ GstVideoInfo info;
gint i;
- gint fps_n, fps_d;
SpuState *state;
- s = gst_caps_get_structure (caps, 0);
-
- if (!gst_structure_get_int (s, "width", &w) ||
- !gst_structure_get_int (s, "height", &h) ||
- !gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d)) {
+ if (!gst_video_info_from_caps (&info, caps))
goto done;
- }
DVD_SPU_LOCK (dvdspu);
state = &dvdspu->spu_state;
- state->fps_n = fps_n;
- state->fps_d = fps_d;
-
- state->vid_height = h;
- state->Y_height = GST_ROUND_UP_2 (h);
- state->UV_height = state->Y_height / 2;
-
- if (state->vid_width != w) {
- state->vid_width = w;
- state->Y_stride = GST_ROUND_UP_4 (w);
- state->UV_stride = GST_ROUND_UP_4 (state->Y_stride / 2);
- for (i = 0; i < 3; i++) {
- state->comp_bufs[i] = g_realloc (state->comp_bufs[i],
- sizeof (guint32) * state->UV_stride);
- }
+ state->info = info;
+ for (i = 0; i < 3; i++) {
+ state->comp_bufs[i] = g_realloc (state->comp_bufs[i],
+ sizeof (guint32) * info.width);
}
DVD_SPU_UNLOCK (dvdspu);
@@ -358,7 +347,7 @@ done:
}
static GstCaps *
-gst_dvd_spu_video_proxy_getcaps (GstPad * pad)
+gst_dvd_spu_video_proxy_getcaps (GstPad * pad, GstCaps * filter)
{
GstDVDSpu *dvdspu = GST_DVD_SPU (gst_pad_get_parent (pad));
GstCaps *caps;
@@ -368,7 +357,7 @@ gst_dvd_spu_video_proxy_getcaps (GstPad * pad)
* subpicture sink pad */
otherpad = (pad == dvdspu->srcpad) ? dvdspu->videosinkpad : dvdspu->srcpad;
- caps = gst_pad_peer_get_caps (otherpad);
+ caps = gst_pad_peer_query_caps (otherpad, filter);
if (caps) {
GstCaps *temp;
const GstCaps *templ;
@@ -386,15 +375,22 @@ gst_dvd_spu_video_proxy_getcaps (GstPad * pad)
}
static gboolean
-gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
+gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstDVDSpu *dvdspu = (GstDVDSpu *) (gst_object_get_parent (GST_OBJECT (pad)));
+ GstDVDSpu *dvdspu = (GstDVDSpu *) parent;
SpuState *state = &dvdspu->spu_state;
gboolean res = TRUE;
- g_return_val_if_fail (dvdspu != NULL, FALSE);
-
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ res = gst_dvd_spu_video_set_caps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_CUSTOM_DOWNSTREAM:
case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:
{
@@ -404,7 +400,7 @@ gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
GstBuffer *to_push = NULL;
/* Forward the event before handling */
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
GST_DEBUG_OBJECT (dvdspu,
"Still frame event on video pad: in-still = %d", in_still);
@@ -430,40 +426,33 @@ gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
} else {
GST_DEBUG_OBJECT (dvdspu,
"Custom event %" GST_PTR_FORMAT " on video pad", event);
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
}
break;
}
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- gdouble rate, arate;
- GstFormat format;
- gint64 start, stop, time;
+ GstSegment seg;
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
+ gst_event_copy_segment (event, &seg);
- if (format != GST_FORMAT_TIME)
+ if (seg.format != GST_FORMAT_TIME)
return FALSE;
/* Only print updates if they have an end time (don't print start_time
* updates */
- GST_DEBUG_OBJECT (dvdspu, "video pad NewSegment:"
- " Update %d, rate %g arate %g format %d start %" GST_TIME_FORMAT
- " %" GST_TIME_FORMAT " position %" GST_TIME_FORMAT,
- update, rate, arate, format, GST_TIME_ARGS (start),
- GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
+ GST_DEBUG_OBJECT (dvdspu, "video pad Segment: %" GST_SEGMENT_FORMAT,
+ &seg);
DVD_SPU_LOCK (dvdspu);
- if (update && start > dvdspu->video_seg.last_stop) {
+ if (seg.start > dvdspu->video_seg.position) {
#if 0
g_print ("Segment update for video. Advancing from %" GST_TIME_FORMAT
" to %" GST_TIME_FORMAT "\n",
- GST_TIME_ARGS (dvdspu->video_seg.last_stop), GST_TIME_ARGS (start));
+ GST_TIME_ARGS (dvdspu->video_seg.position), GST_TIME_ARGS (start));
#endif
- while (dvdspu->video_seg.last_stop < start &&
+ while (dvdspu->video_seg.position < seg.start &&
!(state->flags & SPU_STATE_STILL_FRAME)) {
DVD_SPU_UNLOCK (dvdspu);
if (dvdspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) {
@@ -474,19 +463,17 @@ gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
}
}
- gst_segment_set_newsegment_full (&dvdspu->video_seg, update, rate, arate,
- format, start, stop, time);
-
+ dvdspu->video_seg = seg;
DVD_SPU_UNLOCK (dvdspu);
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
break;
}
case GST_EVENT_FLUSH_START:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
goto done;
case GST_EVENT_FLUSH_STOP:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
DVD_SPU_LOCK (dvdspu);
gst_segment_init (&dvdspu->video_seg, GST_FORMAT_UNDEFINED);
@@ -496,12 +483,11 @@ gst_dvd_spu_video_event (GstPad * pad, GstEvent * event)
DVD_SPU_UNLOCK (dvdspu);
goto done;
default:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
break;
}
done:
- gst_object_unref (dvdspu);
return res;
#if 0
error:
@@ -510,10 +496,35 @@ error:
#endif
}
+static gboolean
+gst_dvd_spu_video_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_dvd_spu_video_proxy_getcaps (pad, filter);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
static GstFlowReturn
-gst_dvd_spu_video_chain (GstPad * pad, GstBuffer * buf)
+gst_dvd_spu_video_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstDVDSpu *dvdspu = (GstDVDSpu *) (gst_object_get_parent (GST_OBJECT (pad)));
+ GstDVDSpu *dvdspu = (GstDVDSpu *) parent;
GstFlowReturn ret;
g_return_val_if_fail (dvdspu != NULL, GST_FLOW_ERROR);
@@ -523,8 +534,6 @@ gst_dvd_spu_video_chain (GstPad * pad, GstBuffer * buf)
ret = dvdspu_handle_vid_buffer (dvdspu, buf);
- gst_object_unref (dvdspu);
-
return ret;
}
@@ -538,15 +547,15 @@ dvdspu_handle_vid_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
DVD_SPU_LOCK (dvdspu);
if (buf == NULL) {
- GstClockTime next_ts = dvdspu->video_seg.last_stop;
+ GstClockTime next_ts = dvdspu->video_seg.position;
next_ts += gst_util_uint64_scale_int (GST_SECOND,
- dvdspu->spu_state.fps_d, dvdspu->spu_state.fps_n);
+ dvdspu->spu_state.info.fps_d, dvdspu->spu_state.info.fps_n);
/* NULL buffer was passed - use the reference frame and update the timestamp,
* or else there's nothing to draw, and just return GST_FLOW_OK */
if (dvdspu->ref_frame == NULL) {
- gst_segment_set_last_stop (&dvdspu->video_seg, GST_FORMAT_TIME, next_ts);
+ dvdspu->video_seg.position = next_ts;
goto no_ref_frame;
}
@@ -563,16 +572,15 @@ dvdspu_handle_vid_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
}
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
- gst_segment_set_last_stop (&dvdspu->video_seg, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buf));
+ dvdspu->video_seg.position = GST_BUFFER_TIMESTAMP (buf);
}
new_ts = gst_segment_to_running_time (&dvdspu->video_seg, GST_FORMAT_TIME,
- dvdspu->video_seg.last_stop);
+ dvdspu->video_seg.position);
#if 0
g_print ("TS %" GST_TIME_FORMAT " running: %" GST_TIME_FORMAT "\n",
- GST_TIME_ARGS (dvdspu->video_seg.last_stop), GST_TIME_ARGS (new_ts));
+ GST_TIME_ARGS (dvdspu->video_seg.position), GST_TIME_ARGS (new_ts));
#endif
gst_dvd_spu_advance_spu (dvdspu, new_ts);
@@ -629,16 +637,21 @@ no_ref_frame:
static void
gstspu_render (GstDVDSpu * dvdspu, GstBuffer * buf)
{
+ GstVideoFrame frame;
+
+ gst_video_frame_map (&frame, &dvdspu->spu_state.info, buf, GST_MAP_READWRITE);
+
switch (dvdspu->spu_input_type) {
case SPU_INPUT_TYPE_VOBSUB:
- gstspu_vobsub_render (dvdspu, buf);
+ gstspu_vobsub_render (dvdspu, &frame);
break;
case SPU_INPUT_TYPE_PGS:
- gstspu_pgs_render (dvdspu, buf);
+ gstspu_pgs_render (dvdspu, &frame);
break;
default:
break;
}
+ gst_video_frame_unmap (&frame);
}
/* With SPU LOCK */
@@ -670,7 +683,7 @@ gst_dvd_spu_redraw_still (GstDVDSpu * dvdspu, gboolean force)
} else if (force) {
/* Simply output the reference frame */
GstBuffer *buf = gst_buffer_ref (dvdspu->ref_frame);
- buf = gst_buffer_make_metadata_writable (buf);
+ buf = gst_buffer_make_writable (buf);
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
@@ -693,7 +706,7 @@ gst_dvd_spu_handle_dvd_event (GstDVDSpu * dvdspu, GstEvent * event)
gboolean hl_change = FALSE;
GST_INFO_OBJECT (dvdspu, "DVD event of type %s on subp pad OOB=%d",
- gst_structure_get_string (event->structure, "event"),
+ gst_structure_get_string (gst_event_get_structure (event), "event"),
(GST_EVENT_TYPE (event) == GST_EVENT_CUSTOM_DOWNSTREAM_OOB));
switch (dvdspu->spu_input_type) {
@@ -754,13 +767,13 @@ gst_dvd_spu_advance_spu (GstDVDSpu * dvdspu, GstClockTime new_ts)
vid_run_ts =
gst_segment_to_running_time (&dvdspu->video_seg, GST_FORMAT_TIME,
- dvdspu->video_seg.last_stop);
+ dvdspu->video_seg.position);
GST_LOG_OBJECT (dvdspu,
"Popped new SPU packet with TS %" GST_TIME_FORMAT
- ". Video last_stop=%" GST_TIME_FORMAT " (%" GST_TIME_FORMAT
+ ". Video position=%" GST_TIME_FORMAT " (%" GST_TIME_FORMAT
") type %s",
GST_TIME_ARGS (packet->event_ts), GST_TIME_ARGS (vid_run_ts),
- GST_TIME_ARGS (dvdspu->video_seg.last_stop),
+ GST_TIME_ARGS (dvdspu->video_seg.position),
packet->buf ? "buffer" : "event");
if (packet->buf) {
@@ -795,9 +808,9 @@ gst_dvd_spu_check_still_updates (GstDVDSpu * dvdspu)
if (dvdspu->spu_state.flags & SPU_STATE_STILL_FRAME) {
vid_ts = gst_segment_to_running_time (&dvdspu->video_seg,
- GST_FORMAT_TIME, dvdspu->video_seg.last_stop);
+ GST_FORMAT_TIME, dvdspu->video_seg.position);
sub_ts = gst_segment_to_running_time (&dvdspu->subp_seg,
- GST_FORMAT_TIME, dvdspu->subp_seg.last_stop);
+ GST_FORMAT_TIME, dvdspu->subp_seg.position);
vid_ts = MAX (vid_ts, sub_ts);
@@ -816,8 +829,9 @@ submit_new_spu_packet (GstDVDSpu * dvdspu, GstBuffer * buf)
GstClockTime run_ts = GST_CLOCK_TIME_NONE;
GST_DEBUG_OBJECT (dvdspu,
- "Complete subpicture buffer of %u bytes with TS %" GST_TIME_FORMAT,
- GST_BUFFER_SIZE (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+ "Complete subpicture buffer of %" G_GSIZE_FORMAT " bytes with TS %"
+ GST_TIME_FORMAT, gst_buffer_get_size (buf),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
/* Decide whether to pass this buffer through to the rendering code */
ts = GST_BUFFER_TIMESTAMP (buf);
@@ -864,22 +878,22 @@ submit_new_spu_packet (GstDVDSpu * dvdspu, GstBuffer * buf)
}
static GstFlowReturn
-gst_dvd_spu_subpic_chain (GstPad * pad, GstBuffer * buf)
+gst_dvd_spu_subpic_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstDVDSpu *dvdspu = (GstDVDSpu *) (gst_object_get_parent (GST_OBJECT (pad)));
+ GstDVDSpu *dvdspu = (GstDVDSpu *) parent;
GstFlowReturn ret = GST_FLOW_OK;
+ gsize size;
g_return_val_if_fail (dvdspu != NULL, GST_FLOW_ERROR);
GST_INFO_OBJECT (dvdspu, "Have subpicture buffer with timestamp %"
- GST_TIME_FORMAT " and size %u",
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_SIZE (buf));
+ GST_TIME_FORMAT " and size %" G_GSIZE_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), gst_buffer_get_size (buf));
DVD_SPU_LOCK (dvdspu);
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
- gst_segment_set_last_stop (&dvdspu->subp_seg, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buf));
+ dvdspu->subp_seg.position = GST_BUFFER_TIMESTAMP (buf);
}
if (GST_BUFFER_IS_DISCONT (buf) && dvdspu->partial_spu) {
@@ -904,30 +918,31 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstBuffer * buf)
if (dvdspu->partial_spu == NULL)
goto done;
+ size = gst_buffer_get_size (dvdspu->partial_spu);
+
switch (dvdspu->spu_input_type) {
case SPU_INPUT_TYPE_VOBSUB:
- if (GST_BUFFER_SIZE (dvdspu->partial_spu) > 4) {
+ if (size > 4) {
+ guint8 *header[2];
guint16 packet_size;
- guint8 *data;
- data = GST_BUFFER_DATA (dvdspu->partial_spu);
- packet_size = GST_READ_UINT16_BE (data);
-
- if (packet_size == GST_BUFFER_SIZE (dvdspu->partial_spu)) {
+ gst_buffer_extract (dvdspu->partial_spu, 0, header, 2);
+ packet_size = GST_READ_UINT16_BE (header);
+ if (packet_size == size) {
submit_new_spu_packet (dvdspu, dvdspu->partial_spu);
dvdspu->partial_spu = NULL;
- } else if (packet_size < GST_BUFFER_SIZE (dvdspu->partial_spu)) {
+ } else if (packet_size < size) {
/* Somehow we collected too much - something is wrong. Drop the
* packet entirely and wait for a new one */
- GST_DEBUG_OBJECT (dvdspu, "Discarding invalid SPU buffer of size %u",
- GST_BUFFER_SIZE (dvdspu->partial_spu));
+ GST_DEBUG_OBJECT (dvdspu,
+ "Discarding invalid SPU buffer of size %" G_GSIZE_FORMAT, size);
gst_buffer_unref (dvdspu->partial_spu);
dvdspu->partial_spu = NULL;
} else {
GST_LOG_OBJECT (dvdspu,
- "SPU buffer claims to be of size %u. Collected %u so far.",
- packet_size, GST_BUFFER_SIZE (dvdspu->partial_spu));
+ "SPU buffer claims to be of size %u. Collected %" G_GSIZE_FORMAT
+ " so far.", packet_size, size);
}
}
break;
@@ -936,34 +951,43 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstBuffer * buf)
* we've collected */
guint8 packet_type;
guint16 packet_size;
- guint8 *data = GST_BUFFER_DATA (dvdspu->partial_spu);
- guint8 *end = data + GST_BUFFER_SIZE (dvdspu->partial_spu);
+ guint8 *data, *ptr, *end;
+ gsize size;
+ gboolean invalid = FALSE;
+
+ data = gst_buffer_map (dvdspu->partial_spu, &size, NULL, GST_MAP_READ);
+
+ ptr = data;
+ end = ptr + size;
/* FIXME: There's no need to walk the command set each time. We can set a
* marker and resume where we left off next time */
/* FIXME: Move the packet parsing and sanity checking into the format-specific modules */
- while (data != end) {
- if (data + 3 > end)
+ while (ptr != end) {
+ if (ptr + 3 > end)
break;
- packet_type = *data++;
- packet_size = GST_READ_UINT16_BE (data);
- data += 2;
- if (data + packet_size > end)
+ packet_type = *ptr++;
+ packet_size = GST_READ_UINT16_BE (ptr);
+ ptr += 2;
+ if (ptr + packet_size > end)
break;
- data += packet_size;
+ ptr += packet_size;
/* 0x80 is the END command for PGS packets */
- if (packet_type == 0x80 && data != end) {
+ if (packet_type == 0x80 && ptr != end) {
/* Extra cruft on the end of the packet -> assume invalid */
- gst_buffer_unref (dvdspu->partial_spu);
- dvdspu->partial_spu = NULL;
+ invalid = TRUE;
break;
}
}
+ gst_buffer_unmap (dvdspu->partial_spu, data, size);
- if (dvdspu->partial_spu && data == end) {
+ if (invalid) {
+ gst_buffer_unref (dvdspu->partial_spu);
+ dvdspu->partial_spu = NULL;
+ } else if (ptr == end) {
GST_DEBUG_OBJECT (dvdspu,
- "Have complete PGS packet of size %u. Enqueueing.",
- GST_BUFFER_SIZE (dvdspu->partial_spu));
+ "Have complete PGS packet of size %" G_GSIZE_FORMAT ". Enqueueing.",
+ size);
submit_new_spu_packet (dvdspu, dvdspu->partial_spu);
dvdspu->partial_spu = NULL;
}
@@ -976,26 +1000,37 @@ gst_dvd_spu_subpic_chain (GstPad * pad, GstBuffer * buf)
done:
DVD_SPU_UNLOCK (dvdspu);
- gst_object_unref (dvdspu);
+
return ret;
+
+ /* ERRORS */
caps_not_set:
- GST_ELEMENT_ERROR (dvdspu, RESOURCE, NO_SPACE_LEFT,
- (_("Subpicture format was not configured before data flow")), (NULL));
- ret = GST_FLOW_ERROR;
- goto done;
+ {
+ GST_ELEMENT_ERROR (dvdspu, RESOURCE, NO_SPACE_LEFT,
+ (_("Subpicture format was not configured before data flow")), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
}
static gboolean
-gst_dvd_spu_subpic_event (GstPad * pad, GstEvent * event)
+gst_dvd_spu_subpic_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstDVDSpu *dvdspu = (GstDVDSpu *) (gst_object_get_parent (GST_OBJECT (pad)));
+ GstDVDSpu *dvdspu = (GstDVDSpu *) parent;
gboolean res = TRUE;
- g_return_val_if_fail (dvdspu != NULL, FALSE);
-
/* Some events on the subpicture sink pad just get ignored, like
* FLUSH_START */
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ res = gst_dvd_spu_subpic_set_caps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_CUSTOM_DOWNSTREAM:
case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:
{
@@ -1003,7 +1038,7 @@ gst_dvd_spu_subpic_event (GstPad * pad, GstEvent * event)
gboolean need_push;
if (!gst_structure_has_name (structure, "application/x-gst-dvd")) {
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
break;
}
@@ -1052,29 +1087,20 @@ gst_dvd_spu_subpic_event (GstPad * pad, GstEvent * event)
break;
}
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- gdouble rate;
- GstFormat format;
- gint64 start, stop, time;
- gdouble arate;
+ GstSegment seg;
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
+ gst_event_copy_segment (event, &seg);
/* Only print updates if they have an end time (don't print start_time
* updates */
- GST_DEBUG_OBJECT (dvdspu, "subpic pad NewSegment:"
- " Update %d, rate %g arate %g format %d start %" GST_TIME_FORMAT
- " %" GST_TIME_FORMAT " position %" GST_TIME_FORMAT,
- update, rate, arate, format, GST_TIME_ARGS (start),
- GST_TIME_ARGS (stop), GST_TIME_ARGS (time));
+ GST_DEBUG_OBJECT (dvdspu, "subpic pad Segment: %" GST_SEGMENT_FORMAT,
+ &seg);
DVD_SPU_LOCK (dvdspu);
- gst_segment_set_newsegment_full (&dvdspu->subp_seg, update, rate, arate,
- format, start, stop, time);
+ dvdspu->subp_seg = seg;
GST_LOG_OBJECT (dvdspu, "Subpicture segment now: %" GST_SEGMENT_FORMAT,
&dvdspu->subp_seg);
DVD_SPU_UNLOCK (dvdspu);
@@ -1102,12 +1128,11 @@ gst_dvd_spu_subpic_event (GstPad * pad, GstEvent * event)
goto done;
break;
default:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
break;
}
done:
- gst_object_unref (dvdspu);
return res;
}
@@ -1151,7 +1176,7 @@ gst_dvd_spu_change_state (GstElement * element, GstStateChange transition)
GstDVDSpu *dvdspu = (GstDVDSpu *) element;
GstStateChangeReturn ret;
- ret = parent_class->change_state (element, transition);
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
diff --git a/gst/dvdspu/gstdvdspu.h b/gst/dvdspu/gstdvdspu.h
index 22b48d1da..747b00259 100644
--- a/gst/dvdspu/gstdvdspu.h
+++ b/gst/dvdspu/gstdvdspu.h
@@ -69,10 +69,7 @@ struct SpuState {
GstClockTime next_ts; /* Next event TS in running time */
SpuStateFlags flags;
- gint fps_n, fps_d;
- gint16 vid_width, vid_height;
- gint16 Y_stride, UV_stride;
- gint16 Y_height, UV_height;
+ GstVideoInfo info;
guint32 *comp_bufs[3]; /* Compositing buffers for U+V & A */
guint16 comp_left;
diff --git a/gst/dvdspu/gstspu-common.h b/gst/dvdspu/gstspu-common.h
index 206e88203..ec0b3dfc4 100644
--- a/gst/dvdspu/gstspu-common.h
+++ b/gst/dvdspu/gstspu-common.h
@@ -20,6 +20,7 @@
#define __GSTSPU_COMMON_H__
#include <glib.h>
+#include <gst/video/video.h>
G_BEGIN_DECLS
diff --git a/gst/dvdspu/gstspu-pgs.c b/gst/dvdspu/gstspu-pgs.c
index a244ac993..955cf1a98 100644
--- a/gst/dvdspu/gstspu-pgs.c
+++ b/gst/dvdspu/gstspu-pgs.c
@@ -171,10 +171,11 @@ dump_rle_data (GstDVDSpu * dvdspu, guint8 * data, guint32 len)
static void
pgs_composition_object_render (PgsCompositionObject * obj, SpuState * state,
- GstBuffer * dest_buf)
+ GstVideoFrame * frame)
{
SpuColour *colour;
guint8 *planes[3]; /* YUV frame pointers */
+ gint strides[3];
guint8 *data, *end;
guint16 obj_w;
guint16 obj_h G_GNUC_UNUSED;
@@ -195,27 +196,27 @@ pgs_composition_object_render (PgsCompositionObject * obj, SpuState * state,
* window specified by the object's window_id */
/* Store the start of each plane */
- planes[0] = GST_BUFFER_DATA (dest_buf);
- planes[1] = planes[0] + (state->Y_height * state->Y_stride);
- planes[2] = planes[1] + (state->UV_height * state->UV_stride);
+ planes[0] = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ planes[1] = GST_VIDEO_FRAME_COMP_DATA (frame, 1);
+ planes[2] = GST_VIDEO_FRAME_COMP_DATA (frame, 2);
- /* Sanity check */
- g_return_if_fail (planes[2] + (state->UV_height * state->UV_stride) <=
- GST_BUFFER_DATA (dest_buf) + GST_BUFFER_SIZE (dest_buf));
+ strides[0] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ strides[1] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 1);
+ strides[2] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 2);
- y = MIN (obj->y, state->Y_height);
+ y = MIN (obj->y, state->info.height);
- planes[0] += state->Y_stride * y;
- planes[1] += state->UV_stride * (y / 2);
- planes[2] += state->UV_stride * (y / 2);
+ planes[0] += strides[0] * y;
+ planes[1] += strides[1] * (y / 2);
+ planes[2] += strides[2] * (y / 2);
/* RLE data: */
obj_w = GST_READ_UINT16_BE (data);
obj_h = GST_READ_UINT16_BE (data + 2);
data += 4;
- min_x = MIN (obj->x, state->Y_stride);
- max_x = MIN (obj->x + obj_w, state->Y_stride);
+ min_x = MIN (obj->x, strides[0]);
+ max_x = MIN (obj->x + obj_w, strides[0]);
state->comp_left = x = min_x;
state->comp_right = max_x;
@@ -283,17 +284,17 @@ pgs_composition_object_render (PgsCompositionObject * obj, SpuState * state,
if (!run_len || x > max_x) {
x = min_x;
- planes[0] += state->Y_stride;
+ planes[0] += strides[0];
if (y % 2) {
gstspu_blend_comp_buffers (state, planes);
gstspu_clear_comp_buffers (state);
- planes[1] += state->UV_stride;
- planes[2] += state->UV_stride;
+ planes[1] += strides[1];
+ planes[2] += strides[2];
}
y++;
- if (y >= state->Y_height)
+ if (y >= state->info.height)
return; /* Hit the bottom */
}
}
@@ -678,17 +679,20 @@ parse_pgs_packet (GstDVDSpu * dvdspu, guint8 type, guint8 * payload,
gint
gstspu_exec_pgs_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
{
- guint8 *pos, *end;
+ guint8 *data, *pos, *end;
+ gsize size;
guint8 type;
guint16 packet_len;
- pos = GST_BUFFER_DATA (buf);
- end = pos + GST_BUFFER_SIZE (buf);
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
+ pos = data;
+ end = pos + size;
/* Need at least 3 bytes */
if (pos + 3 > end) {
PGS_DUMP ("Not enough bytes to be a PGS packet\n");
- return -1;
+ goto error;
}
PGS_DUMP ("Begin dumping command buffer of size %u ts %" GST_TIME_FORMAT "\n",
@@ -699,19 +703,27 @@ gstspu_exec_pgs_buffer (GstDVDSpu * dvdspu, GstBuffer * buf)
pos += 2;
if (pos + packet_len > end) {
+ gst_buffer_unmap (buf, data, size);
PGS_DUMP ("Invalid packet length %u (only have %u bytes)\n", packet_len,
end - pos);
- return -1;
+ goto error;
}
if (parse_pgs_packet (dvdspu, type, pos, packet_len))
- return -1;
+ goto error;
pos += packet_len;
} while (pos + 3 <= end);
PGS_DUMP ("End dumping command buffer with %u bytes remaining\n", end - pos);
- return (pos - GST_BUFFER_DATA (buf));
+ return (pos - data);
+
+ /* ERRORS */
+error:
+ {
+ gst_buffer_unmap (buf, data, size);
+ return -1;
+ }
}
void
@@ -746,7 +758,7 @@ gstspu_pgs_execute_event (GstDVDSpu * dvdspu)
}
void
-gstspu_pgs_render (GstDVDSpu * dvdspu, GstBuffer * buf)
+gstspu_pgs_render (GstDVDSpu * dvdspu, GstVideoFrame * frame)
{
SpuState *state = &dvdspu->spu_state;
PgsPresentationSegment *ps = &state->pgs.pres_seg;
@@ -758,7 +770,7 @@ gstspu_pgs_render (GstDVDSpu * dvdspu, GstBuffer * buf)
for (i = 0; i < ps->objects->len; i++) {
PgsCompositionObject *cur =
&g_array_index (ps->objects, PgsCompositionObject, i);
- pgs_composition_object_render (cur, state, buf);
+ pgs_composition_object_render (cur, state, frame);
}
}
diff --git a/gst/dvdspu/gstspu-pgs.h b/gst/dvdspu/gstspu-pgs.h
index 164f4d815..3304677f2 100644
--- a/gst/dvdspu/gstspu-pgs.h
+++ b/gst/dvdspu/gstspu-pgs.h
@@ -99,7 +99,7 @@ struct SpuPgsState {
void gstspu_pgs_handle_new_buf (GstDVDSpu * dvdspu, GstClockTime event_ts, GstBuffer *buf);
gboolean gstspu_pgs_execute_event (GstDVDSpu *dvdspu);
-void gstspu_pgs_render (GstDVDSpu *dvdspu, GstBuffer *buf);
+void gstspu_pgs_render (GstDVDSpu *dvdspu, GstVideoFrame *frame);
gboolean gstspu_pgs_handle_dvd_event (GstDVDSpu *dvdspu, GstEvent *event);
void gstspu_pgs_flush (GstDVDSpu *dvdspu);
diff --git a/gst/dvdspu/gstspu-vobsub-render.c b/gst/dvdspu/gstspu-vobsub-render.c
index 830017d33..1254d0aeb 100644
--- a/gst/dvdspu/gstspu-vobsub-render.c
+++ b/gst/dvdspu/gstspu-vobsub-render.c
@@ -138,7 +138,7 @@ gstspu_vobsub_get_nibble (SpuState * state, guint16 * rle_offset)
if (G_UNLIKELY (*rle_offset >= state->vobsub.max_offset))
return 0; /* Overran the buffer */
- ret = GST_BUFFER_DATA (state->vobsub.pix_buf)[(*rle_offset) / 2];
+ gst_buffer_extract (state->vobsub.pix_buf, (*rle_offset) / 2, &ret, 1);
/* If the offset is even, we shift the answer down 4 bits, otherwise not */
if (*rle_offset & 0x01)
@@ -384,24 +384,29 @@ gstspu_vobsub_clear_comp_buffers (SpuState * state)
}
void
-gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
+gstspu_vobsub_render (GstDVDSpu * dvdspu, GstVideoFrame * frame)
{
SpuState *state = &dvdspu->spu_state;
guint8 *planes[3]; /* YUV frame pointers */
gint y, last_y;
+ gint width, height;
+ gint strides[3];
/* Set up our initial state */
if (G_UNLIKELY (state->vobsub.pix_buf == NULL))
return;
/* Store the start of each plane */
- planes[0] = GST_BUFFER_DATA (buf);
- planes[1] = planes[0] + (state->Y_height * state->Y_stride);
- planes[2] = planes[1] + (state->UV_height * state->UV_stride);
+ planes[0] = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ planes[1] = GST_VIDEO_FRAME_COMP_DATA (frame, 1);
+ planes[2] = GST_VIDEO_FRAME_COMP_DATA (frame, 2);
- /* Sanity check */
- g_return_if_fail (planes[2] + (state->UV_height * state->UV_stride) <=
- GST_BUFFER_DATA (buf) + GST_BUFFER_SIZE (buf));
+ strides[0] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ strides[1] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 1);
+ strides[2] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 2);
+
+ width = GST_VIDEO_FRAME_WIDTH (frame);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
GST_DEBUG_OBJECT (dvdspu,
"Rendering SPU. disp_rect %d,%d to %d,%d. hl_rect %d,%d to %d,%d",
@@ -410,13 +415,12 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
state->vobsub.hl_rect.left, state->vobsub.hl_rect.top,
state->vobsub.hl_rect.right, state->vobsub.hl_rect.bottom);
- GST_DEBUG_OBJECT (dvdspu, "video size %d,%d", state->vid_width,
- state->vid_height);
+ GST_DEBUG_OBJECT (dvdspu, "video size %d,%d", width, height);
/* When reading RLE data, we track the offset in nibbles... */
state->vobsub.cur_offsets[0] = state->vobsub.pix_data[0] * 2;
state->vobsub.cur_offsets[1] = state->vobsub.pix_data[1] * 2;
- state->vobsub.max_offset = GST_BUFFER_SIZE (state->vobsub.pix_buf) * 2;
+ state->vobsub.max_offset = gst_buffer_get_size (state->vobsub.pix_buf) * 2;
/* Update all the palette caches */
gstspu_vobsub_update_palettes (dvdspu, state);
@@ -436,18 +440,18 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
state->vobsub.clip_rect.right = state->vobsub.disp_rect.right;
/* center the image when display rectangle exceeds the video width */
- if (state->vid_width <= state->vobsub.disp_rect.right) {
+ if (width <= state->vobsub.disp_rect.right) {
gint left, disp_width;
disp_width = state->vobsub.disp_rect.right - state->vobsub.disp_rect.left
+ 1;
- left = (state->vid_width - disp_width) / 2;
+ left = (width - disp_width) / 2;
state->vobsub.disp_rect.left = left;
state->vobsub.disp_rect.right = left + disp_width - 1;
/* if it clips to the right, shift it left, but only till zero */
- if (state->vobsub.disp_rect.right >= state->vid_width) {
- gint shift = state->vobsub.disp_rect.right - state->vid_width - 1;
+ if (state->vobsub.disp_rect.right >= width) {
+ gint shift = state->vobsub.disp_rect.right - width - 1;
if (shift > state->vobsub.disp_rect.left)
shift = state->vobsub.disp_rect.left;
state->vobsub.disp_rect.left -= shift;
@@ -459,8 +463,8 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
state->vobsub.clip_rect.right = state->vobsub.disp_rect.right;
/* clip right after the shift */
- if (state->vobsub.clip_rect.right >= state->vid_width)
- state->vobsub.clip_rect.right = state->vid_width - 1;
+ if (state->vobsub.clip_rect.right >= width)
+ state->vobsub.clip_rect.right = width - 1;
GST_DEBUG_OBJECT (dvdspu,
"clipping width to %d,%d", state->vobsub.clip_rect.left,
@@ -472,10 +476,10 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
* is and do something more clever. */
state->vobsub.clip_rect.top = state->vobsub.disp_rect.top;
state->vobsub.clip_rect.bottom = state->vobsub.disp_rect.bottom;
- if (state->vid_height <= state->vobsub.disp_rect.bottom) {
+ if (height <= state->vobsub.disp_rect.bottom) {
/* shift it up, but only till zero */
- gint shift = state->vobsub.disp_rect.bottom - state->vid_height - 1;
+ gint shift = state->vobsub.disp_rect.bottom - height - 1;
if (shift > state->vobsub.disp_rect.top)
shift = state->vobsub.disp_rect.top;
state->vobsub.disp_rect.top -= shift;
@@ -492,8 +496,8 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
state->vobsub.clip_rect.bottom = state->vobsub.disp_rect.bottom;
/* clip right after the shift */
- if (state->vobsub.clip_rect.bottom >= state->vid_height)
- state->vobsub.clip_rect.bottom = state->vid_height - 1;
+ if (state->vobsub.clip_rect.bottom >= height)
+ state->vobsub.clip_rect.bottom = height - 1;
GST_DEBUG_OBJECT (dvdspu,
"clipping height to %d,%d", state->vobsub.clip_rect.top,
@@ -508,9 +512,9 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
last_y = (state->vobsub.disp_rect.bottom - 1) & ~(0x01);
/* Update our plane references to the first line of the disp_rect */
- planes[0] += state->Y_stride * y;
- planes[1] += state->UV_stride * (y / 2);
- planes[2] += state->UV_stride * (y / 2);
+ planes[0] += strides[0] * y;
+ planes[1] += strides[1] * (y / 2);
+ planes[2] += strides[2] * (y / 2);
for (state->vobsub.cur_Y = y; state->vobsub.cur_Y <= last_y;
state->vobsub.cur_Y++) {
@@ -526,7 +530,7 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
gstspu_vobsub_render_line (state, planes, &state->vobsub.cur_offsets[0]);
if (!clip) {
/* Advance the luminance output pointer */
- planes[0] += state->Y_stride;
+ planes[0] += strides[0];
}
state->vobsub.cur_Y++;
@@ -539,9 +543,9 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
gstspu_vobsub_blend_comp_buffers (state, planes);
/* Update all the output pointers */
- planes[0] += state->Y_stride;
- planes[1] += state->UV_stride;
- planes[2] += state->UV_stride;
+ planes[0] += strides[0];
+ planes[1] += strides[1];
+ planes[2] += strides[2];
}
}
if (state->vobsub.cur_Y == state->vobsub.disp_rect.bottom) {
@@ -568,24 +572,22 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
guint8 *cur;
gint16 pos;
- cur = GST_BUFFER_DATA (buf) + state->Y_stride * state->vobsub.disp_rect.top;
+ cur = GST_BUFFER_DATA (buf) + strides[0] * state->vobsub.disp_rect.top;
for (pos = state->vobsub.disp_rect.left + 1;
pos < state->vobsub.disp_rect.right; pos++)
cur[pos] = (cur[pos] / 2) + 0x8;
- cur =
- GST_BUFFER_DATA (buf) +
- state->Y_stride * state->vobsub.disp_rect.bottom;
+ cur = GST_BUFFER_DATA (buf) + strides[0] * state->vobsub.disp_rect.bottom;
for (pos = state->vobsub.disp_rect.left + 1;
pos < state->vobsub.disp_rect.right; pos++)
cur[pos] = (cur[pos] / 2) + 0x8;
- cur = GST_BUFFER_DATA (buf) + state->Y_stride * state->vobsub.disp_rect.top;
+ cur = GST_BUFFER_DATA (buf) + strides[0] * state->vobsub.disp_rect.top;
for (pos = state->vobsub.disp_rect.top;
pos <= state->vobsub.disp_rect.bottom; pos++) {
cur[state->vobsub.disp_rect.left] =
(cur[state->vobsub.disp_rect.left] / 2) + 0x8;
cur[state->vobsub.disp_rect.right] =
(cur[state->vobsub.disp_rect.right] / 2) + 0x8;
- cur += state->Y_stride;
+ cur += strides[0];
}
} while (0);
#endif
@@ -595,17 +597,17 @@ gstspu_vobsub_render (GstDVDSpu * dvdspu, GstBuffer * buf)
guint8 *cur;
gint16 pos;
- cur = GST_BUFFER_DATA (buf) + state->Y_stride * state->hl_rect.top;
+ cur = GST_BUFFER_DATA (buf) + strides[0] * state->hl_rect.top;
for (pos = state->hl_rect.left + 1; pos < state->hl_rect.right; pos++)
cur[pos] = (cur[pos] / 2) + 0x8;
- cur = GST_BUFFER_DATA (buf) + state->Y_stride * state->hl_rect.bottom;
+ cur = GST_BUFFER_DATA (buf) + strides[0] * state->hl_rect.bottom;
for (pos = state->hl_rect.left + 1; pos < state->hl_rect.right; pos++)
cur[pos] = (cur[pos] / 2) + 0x8;
- cur = GST_BUFFER_DATA (buf) + state->Y_stride * state->hl_rect.top;
+ cur = GST_BUFFER_DATA (buf) + strides[0] * state->hl_rect.top;
for (pos = state->hl_rect.top; pos <= state->hl_rect.bottom; pos++) {
cur[state->hl_rect.left] = (cur[state->hl_rect.left] / 2) + 0x8;
cur[state->hl_rect.right] = (cur[state->hl_rect.right] / 2) + 0x8;
- cur += state->Y_stride;
+ cur += strides[0];
}
}
#endif
diff --git a/gst/dvdspu/gstspu-vobsub.c b/gst/dvdspu/gstspu-vobsub.c
index 0a2380c9e..b1b76bb2e 100644
--- a/gst/dvdspu/gstspu-vobsub.c
+++ b/gst/dvdspu/gstspu-vobsub.c
@@ -323,13 +323,14 @@ gstspu_vobsub_handle_new_buf (GstDVDSpu * dvdspu, GstClockTime event_ts,
GstBuffer * buf)
{
guint8 *start, *end;
+ gsize size;
SpuState *state = &dvdspu->spu_state;
#if DUMP_DCSQ
gst_dvd_spu_dump_dcsq (dvdspu, event_ts, buf);
#endif
- if (G_UNLIKELY (GST_BUFFER_SIZE (buf) < 4))
+ if (G_UNLIKELY (gst_buffer_get_size (buf) < 4))
goto invalid;
if (state->vobsub.buf != NULL) {
@@ -339,8 +340,8 @@ gstspu_vobsub_handle_new_buf (GstDVDSpu * dvdspu, GstClockTime event_ts,
state->vobsub.buf = buf;
state->vobsub.base_ts = event_ts;
- start = GST_BUFFER_DATA (state->vobsub.buf);
- end = start + GST_BUFFER_SIZE (state->vobsub.buf);
+ start = gst_buffer_map (state->vobsub.buf, &size, NULL, GST_MAP_READ);
+ end = start + size;
/* Configure the first command block in this buffer as our initial blk */
state->vobsub.cur_cmd_blk = GST_READ_UINT16_BE (start + 2);
@@ -351,6 +352,7 @@ gstspu_vobsub_handle_new_buf (GstDVDSpu * dvdspu, GstClockTime event_ts,
g_free (state->vobsub.line_ctrl_i);
state->vobsub.line_ctrl_i = NULL;
}
+ gst_buffer_unmap (state->vobsub.buf, start, size);
return;
invalid:
@@ -363,6 +365,7 @@ gstspu_vobsub_execute_event (GstDVDSpu * dvdspu)
{
guint8 *start, *cmd_blk, *end;
guint16 next_blk;
+ gsize size;
SpuState *state = &dvdspu->spu_state;
if (state->vobsub.buf == NULL)
@@ -372,12 +375,13 @@ gstspu_vobsub_execute_event (GstDVDSpu * dvdspu)
" @ offset %u", GST_TIME_ARGS (state->next_ts),
state->vobsub.cur_cmd_blk);
- start = GST_BUFFER_DATA (state->vobsub.buf);
- end = start + GST_BUFFER_SIZE (state->vobsub.buf);
+ start = gst_buffer_map (state->vobsub.buf, &size, NULL, GST_MAP_READ);
+ end = start + size;
cmd_blk = start + state->vobsub.cur_cmd_blk;
if (G_UNLIKELY (cmd_blk + 5 >= end)) {
+ gst_buffer_unmap (state->vobsub.buf, start, size);
/* Invalid. Finish the buffer and loop again */
gst_dvd_spu_finish_spu_buf (dvdspu);
return FALSE;
@@ -392,9 +396,11 @@ gstspu_vobsub_execute_event (GstDVDSpu * dvdspu)
} else {
/* Next Block points to the current block, so we're finished with this
* SPU buffer */
+ gst_buffer_unmap (state->vobsub.buf, start, size);
gst_dvd_spu_finish_spu_buf (dvdspu);
return FALSE;
}
+ gst_buffer_unmap (state->vobsub.buf, start, size);
return TRUE;
}
diff --git a/gst/dvdspu/gstspu-vobsub.h b/gst/dvdspu/gstspu-vobsub.h
index 9b4196bc7..1a0588cd1 100644
--- a/gst/dvdspu/gstspu-vobsub.h
+++ b/gst/dvdspu/gstspu-vobsub.h
@@ -103,7 +103,7 @@ struct SpuVobsubState {
void gstspu_vobsub_handle_new_buf (GstDVDSpu * dvdspu, GstClockTime event_ts, GstBuffer *buf);
gboolean gstspu_vobsub_execute_event (GstDVDSpu *dvdspu);
-void gstspu_vobsub_render (GstDVDSpu *dvdspu, GstBuffer *buf);
+void gstspu_vobsub_render (GstDVDSpu *dvdspu, GstVideoFrame *frame);
gboolean gstspu_vobsub_handle_dvd_event (GstDVDSpu *dvdspu, GstEvent *event);
void gstspu_vobsub_flush (GstDVDSpu *dvdspu);
diff --git a/gst/faceoverlay/gstfaceoverlay.c b/gst/faceoverlay/gstfaceoverlay.c
index 209f656b4..feb07b5bd 100644
--- a/gst/faceoverlay/gstfaceoverlay.c
+++ b/gst/faceoverlay/gstfaceoverlay.c
@@ -333,8 +333,10 @@ gst_face_overlay_base_init (gpointer gclass)
"Overlays SVG graphics over a detected face in a video stream",
"Laura Lucas Alday <lauralucas@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the faceoverlay's class */
diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c
index 4c7e241e8..6423bf5b9 100644
--- a/gst/festival/gstfestival.c
+++ b/gst/festival/gstfestival.c
@@ -184,10 +184,10 @@ gst_festival_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
/* register pads */
- gst_element_class_add_static_pad_template (element_class,
- &sink_template_factory);
- gst_element_class_add_static_pad_template (element_class,
- &src_template_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template_factory));
gst_element_class_set_details_simple (element_class,
"Festival Text-to-Speech synthesizer", "Filter/Effect/Audio",
diff --git a/gst/fieldanalysis/gstfieldanalysis.c b/gst/fieldanalysis/gstfieldanalysis.c
index 404fcfad5..bc6e4c561 100644
--- a/gst/fieldanalysis/gstfieldanalysis.c
+++ b/gst/fieldanalysis/gstfieldanalysis.c
@@ -136,8 +136,10 @@ gst_field_analysis_base_init (gpointer gclass)
"Analyse fields from video frames to identify if they are progressive/telecined/interlaced",
"Robert Swain <robert.swain@collabora.co.uk>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
typedef enum
@@ -1599,7 +1601,7 @@ gst_field_analysis_process_buffer (GstFieldAnalysis * filter,
&& telecine_matches & FIELD_ANALYSIS_BOTTOM_TOP)) {
/* held is opposite to matched => need both field from prev */
/* if t_b, hold bottom from prev and top from current, else vice-versa */
- res1->holding = 1 + ! !(telecine_matches & FIELD_ANALYSIS_TOP_BOTTOM);
+ res1->holding = 1 + !!(telecine_matches & FIELD_ANALYSIS_TOP_BOTTOM);
res0->holding = 1 + !(telecine_matches & FIELD_ANALYSIS_TOP_BOTTOM);
/* push prev TCM */
outbuf =
diff --git a/gst/freeze/gstfreeze.c b/gst/freeze/gstfreeze.c
index c7884f8f8..0d63eb70a 100644
--- a/gst/freeze/gstfreeze.c
+++ b/gst/freeze/gstfreeze.c
@@ -89,10 +89,10 @@ gst_freeze_base_init (gpointer klass)
"Gergely Nagy <gergely.nagy@neteyes.hu>,"
" Renato Filho <renato.filho@indt.org.br>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_freeze_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_freeze_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_freeze_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_freeze_src_template));
}
diff --git a/gst/frei0r/Makefile.am b/gst/frei0r/Makefile.am
index 5c876e5e9..3a1ebbd24 100644
--- a/gst/frei0r/Makefile.am
+++ b/gst/frei0r/Makefile.am
@@ -6,8 +6,8 @@ libgstfrei0r_la_SOURCES = \
gstfrei0rsrc.c \
gstfrei0rmixer.c
-libgstfrei0r_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-libgstfrei0r_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) \
+libgstfrei0r_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstfrei0r_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) \
-lgstvideo-@GST_MAJORMINOR@
libgstfrei0r_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstfrei0r_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/frei0r/gstfrei0r.c b/gst/frei0r/gstfrei0r.c
index a6763cd01..5958a2d4d 100644
--- a/gst/frei0r/gstfrei0r.c
+++ b/gst/frei0r/gstfrei0r.c
@@ -26,7 +26,6 @@
#include "gstfrei0rsrc.h"
#include "gstfrei0rmixer.h"
-#include <gst/controller/gstcontroller.h>
#include <string.h>
GST_DEBUG_CATEGORY (frei0r_debug);
@@ -669,8 +668,6 @@ plugin_init (GstPlugin * plugin)
GST_DEBUG_CATEGORY_INIT (frei0r_debug, "frei0r", 0, "frei0r");
- gst_controller_init (NULL, NULL);
-
gst_plugin_add_dependency_simple (plugin,
"FREI0R_PATH:HOME/.frei0r-1/lib",
"/usr/lib/frei0r-1:/usr/local/lib/frei0r-1:"
diff --git a/gst/frei0r/gstfrei0rfilter.c b/gst/frei0r/gstfrei0rfilter.c
index 15aded1c8..b148131e6 100644
--- a/gst/frei0r/gstfrei0rfilter.c
+++ b/gst/frei0r/gstfrei0rfilter.c
@@ -81,7 +81,7 @@ gst_frei0r_filter_before_transform (GstBaseTransform * trans,
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (timestamp))
- gst_object_sync_values (G_OBJECT (self), timestamp);
+ gst_object_sync_values (GST_OBJECT (self), timestamp);
}
static GstFlowReturn
@@ -206,11 +206,9 @@ gst_frei0r_filter_class_init (GstFrei0rFilterClass * klass,
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
gst_caps_ref (caps));
gst_element_class_add_pad_template (gstelement_class, templ);
- gst_object_unref (templ);
templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
gst_element_class_add_pad_template (gstelement_class, templ);
- gst_object_unref (templ);
gsttrans_class->set_caps = GST_DEBUG_FUNCPTR (gst_frei0r_filter_set_caps);
gsttrans_class->stop = GST_DEBUG_FUNCPTR (gst_frei0r_filter_stop);
diff --git a/gst/frei0r/gstfrei0rmixer.c b/gst/frei0r/gstfrei0rmixer.c
index 3b0bf2e27..fd8ff7e60 100644
--- a/gst/frei0r/gstfrei0rmixer.c
+++ b/gst/frei0r/gstfrei0rmixer.c
@@ -598,7 +598,7 @@ gst_frei0r_mixer_collected (GstCollectPads2 * pads, GstFrei0rMixer * self)
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (timestamp))
- gst_object_sync_values (G_OBJECT (self), timestamp);
+ gst_object_sync_values (GST_OBJECT (self), timestamp);
gst_buffer_copy_metadata (outbuf, inbuf0,
GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS);
diff --git a/gst/frei0r/gstfrei0rsrc.c b/gst/frei0r/gstfrei0rsrc.c
index cfbd42f34..b3a8347c3 100644
--- a/gst/frei0r/gstfrei0rsrc.c
+++ b/gst/frei0r/gstfrei0rsrc.c
@@ -122,7 +122,7 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf)
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (timestamp))
- gst_object_sync_values (G_OBJECT (self), timestamp);
+ gst_object_sync_values (GST_OBJECT (self), timestamp);
time = ((gdouble) GST_BUFFER_TIMESTAMP (outbuf)) / GST_SECOND;
@@ -366,7 +366,6 @@ gst_frei0r_src_class_init (GstFrei0rSrcClass * klass,
templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps);
gst_element_class_add_pad_template (gstelement_class, templ);
- gst_object_unref (templ);
gstbasesrc_class->set_caps = gst_frei0r_src_set_caps;
gstbasesrc_class->get_caps = gst_frei0r_src_get_caps;
diff --git a/gst/gaudieffects/Makefile.am b/gst/gaudieffects/Makefile.am
index 54e747722..9537e7af6 100644
--- a/gst/gaudieffects/Makefile.am
+++ b/gst/gaudieffects/Makefile.am
@@ -2,8 +2,8 @@ plugin_LTLIBRARIES = libgstgaudieffects.la
libgstgaudieffects_la_SOURCES = gstburn.c gstchromium.c gstdilate.c \
gstdodge.c gstexclusion.c gstgaussblur.c gstsolarize.c gstplugin.c
-libgstgaudieffects_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS)
-libgstgaudieffects_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_MAJORMINOR@ $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(LIBM)
+libgstgaudieffects_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstgaudieffects_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_MAJORMINOR@ $(GST_LIBS) $(LIBM)
libgstgaudieffects_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstgaudieffects_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/gaudieffects/gstburn.c b/gst/gaudieffects/gstburn.c
index 9bd3bce1a..2aedfffb3 100644
--- a/gst/gaudieffects/gstburn.c
+++ b/gst/gaudieffects/gstburn.c
@@ -138,8 +138,10 @@ gst_burn_base_init (gpointer gclass)
"Burn adjusts the colors in the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* Initialize the burn's class. */
@@ -263,7 +265,7 @@ gst_burn_transform (GstBaseTransform * btrans,
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (filter), stream_time);
+ gst_object_sync_values (GST_OBJECT (filter), stream_time);
GST_OBJECT_LOCK (filter);
adjustment = filter->adjustment;
diff --git a/gst/gaudieffects/gstchromium.c b/gst/gaudieffects/gstchromium.c
index fc91dbaa6..ea8e01a9d 100644
--- a/gst/gaudieffects/gstchromium.c
+++ b/gst/gaudieffects/gstchromium.c
@@ -154,8 +154,10 @@ gst_chromium_base_init (gpointer gclass)
"Chromium breaks the colors of the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* Initialize the chromium's class. */
@@ -292,7 +294,7 @@ gst_chromium_transform (GstBaseTransform * btrans,
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (filter), stream_time);
+ gst_object_sync_values (GST_OBJECT (filter), stream_time);
GST_OBJECT_LOCK (filter);
edge_a = filter->edge_a;
diff --git a/gst/gaudieffects/gstdilate.c b/gst/gaudieffects/gstdilate.c
index 72e6eb083..321709979 100644
--- a/gst/gaudieffects/gstdilate.c
+++ b/gst/gaudieffects/gstdilate.c
@@ -139,8 +139,10 @@ gst_dilate_base_init (gpointer gclass)
"Dilate copies the brightest pixel around.",
"Luis de Bethencourt <luis@debethencourt.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* Initialize the dilate's class. */
@@ -264,7 +266,7 @@ gst_dilate_transform (GstBaseTransform * btrans,
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (filter), stream_time);
+ gst_object_sync_values (GST_OBJECT (filter), stream_time);
GST_OBJECT_LOCK (filter);
erode = filter->erode;
diff --git a/gst/gaudieffects/gstdodge.c b/gst/gaudieffects/gstdodge.c
index 64cfd0149..ff61aa7e5 100644
--- a/gst/gaudieffects/gstdodge.c
+++ b/gst/gaudieffects/gstdodge.c
@@ -135,8 +135,10 @@ gst_dodge_base_init (gpointer gclass)
"Dodge saturates the colors in the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* Initialize the dodge's class. */
diff --git a/gst/gaudieffects/gstexclusion.c b/gst/gaudieffects/gstexclusion.c
index 4d5fc7add..bfdebdfe2 100644
--- a/gst/gaudieffects/gstexclusion.c
+++ b/gst/gaudieffects/gstexclusion.c
@@ -140,8 +140,10 @@ gst_exclusion_base_init (gpointer gclass)
"Exclusion exclodes the colors in the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* Initialize the exclusion's class. */
@@ -261,7 +263,7 @@ gst_exclusion_transform (GstBaseTransform * btrans,
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (filter), stream_time);
+ gst_object_sync_values (GST_OBJECT (filter), stream_time);
GST_OBJECT_LOCK (filter);
factor = filter->factor;
diff --git a/gst/gaudieffects/gstgaussblur.c b/gst/gaudieffects/gstgaussblur.c
index 2409f7552..861bbf9dd 100644
--- a/gst/gaudieffects/gstgaussblur.c
+++ b/gst/gaudieffects/gstgaussblur.c
@@ -71,8 +71,10 @@ gauss_blur_base_init (gpointer gclass)
"Perform Gaussian blur/sharpen on a video",
"Jan Schmidt <thaytan@noraisin.net>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
static void
@@ -167,7 +169,7 @@ gauss_blur_process_frame (GstBaseTransform * btrans,
stream_time =
gst_segment_to_stream_time (&btrans->segment, GST_FORMAT_TIME, timestamp);
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (gb), stream_time);
+ gst_object_sync_values (GST_OBJECT (gb), stream_time);
GST_OBJECT_LOCK (gb);
sigma = gb->sigma;
diff --git a/gst/gaudieffects/gstplugin.c b/gst/gaudieffects/gstplugin.c
index 143efb310..536bcb7e0 100644
--- a/gst/gaudieffects/gstplugin.c
+++ b/gst/gaudieffects/gstplugin.c
@@ -48,7 +48,6 @@
#endif
#include <gst/gst.h>
-#include <gst/controller/gstcontroller.h>
#include "gstplugin.h"
@@ -66,8 +65,6 @@ plugin_init (GstPlugin * plugin)
{
gboolean ret = TRUE;
- gst_controller_init (NULL, NULL);
-
ret &= gst_burn_plugin_init (plugin);
ret &= gst_chromium_plugin_init (plugin);
ret &= gst_dilate_plugin_init (plugin);
diff --git a/gst/gaudieffects/gstsolarize.c b/gst/gaudieffects/gstsolarize.c
index 0c961374f..e5023d22b 100644
--- a/gst/gaudieffects/gstsolarize.c
+++ b/gst/gaudieffects/gstsolarize.c
@@ -144,8 +144,10 @@ gst_solarize_base_init (gpointer gclass)
"Solarize tunable inverse in the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* Initialize the solarize's class. */
@@ -290,7 +292,7 @@ gst_solarize_transform (GstBaseTransform * btrans,
GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (filter), stream_time);
+ gst_object_sync_values (GST_OBJECT (filter), stream_time);
GST_OBJECT_LOCK (filter);
threshold = filter->threshold;
diff --git a/gst/geometrictransform/Makefile.am b/gst/geometrictransform/Makefile.am
index e304ed0b0..907204463 100644
--- a/gst/geometrictransform/Makefile.am
+++ b/gst/geometrictransform/Makefile.am
@@ -21,12 +21,10 @@ libgstgeometrictransform_la_SOURCES = plugin.c \
gstfisheye.c
libgstgeometrictransform_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_CONTROLLER_CFLAGS)
+ $(GST_PLUGINS_BASE_CFLAGS)
libgstgeometrictransform_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-@GST_MAJORMINOR@ \
-lgstinterfaces-@GST_MAJORMINOR@ \
- $(GST_CONTROLLER_LIBS) \
$(GST_BASE_LIBS) \
$(GST_LIBS) $(LIBM)
libgstgeometrictransform_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/gst/geometrictransform/gstgeometrictransform.c b/gst/geometrictransform/gstgeometrictransform.c
index 8e78de7ab..11e45fb50 100644
--- a/gst/geometrictransform/gstgeometrictransform.c
+++ b/gst/geometrictransform/gstgeometrictransform.c
@@ -246,7 +246,7 @@ gst_geometric_transform_before_transform (GstBaseTransform * trans,
GST_DEBUG_OBJECT (gt, "sync to %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp));
if (GST_CLOCK_TIME_IS_VALID (stream_time))
- gst_object_sync_values (G_OBJECT (gt), stream_time);
+ gst_object_sync_values (GST_OBJECT (gt), stream_time);
}
static GstFlowReturn
@@ -357,10 +357,10 @@ gst_geometric_transform_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_geometric_transform_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_geometric_transform_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_geometric_transform_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_geometric_transform_src_template));
}
static void
diff --git a/gst/h264parse/gsth264parse.c b/gst/h264parse/gsth264parse.c
index 8ae60755e..90a537bb7 100644
--- a/gst/h264parse/gsth264parse.c
+++ b/gst/h264parse/gsth264parse.c
@@ -895,10 +895,10 @@ gst_h264_parse_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (gstelement_class,
- &srctemplate);
- gst_element_class_add_static_pad_template (gstelement_class,
- &sinktemplate);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (gstelement_class, "H264Parse",
"Codec/Parser/Video",
"Parses raw h264 stream",
diff --git a/gst/hdvparse/gsthdvparse.c b/gst/hdvparse/gsthdvparse.c
index 28e62092e..9a610f7cb 100644
--- a/gst/hdvparse/gsthdvparse.c
+++ b/gst/hdvparse/gsthdvparse.c
@@ -116,9 +116,10 @@ gst_hdvparse_base_init (gpointer klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "HDVParser",
"Data/Parser",
"HDV private stream Parser", "Edward Hervey <bilboed@bilboed.com>");
diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c
index 92e5f6828..504df27fc 100644
--- a/gst/hls/gsthlsdemux.c
+++ b/gst/hls/gsthlsdemux.c
@@ -46,7 +46,7 @@
#include <gst/base/gsttypefindhelper.h>
#include "gsthlsdemux.h"
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src%d",
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src_%u",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS_ANY);
@@ -132,9 +132,11 @@ gst_hls_demux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class,
"HLS Demuxer",
diff --git a/gst/id3tag/gstid3mux.c b/gst/id3tag/gstid3mux.c
index 1ed7e5c9c..f2330d2b1 100644
--- a/gst/id3tag/gstid3mux.c
+++ b/gst/id3tag/gstid3mux.c
@@ -98,10 +98,11 @@ gst_id3_mux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"ID3 v1 and v2 Muxer", "Formatter/Metadata",
diff --git a/gst/id3tag/id3tag.c b/gst/id3tag/id3tag.c
index 3a0e4d48d..fc69a49c4 100644
--- a/gst/id3tag/id3tag.c
+++ b/gst/id3tag/id3tag.c
@@ -483,7 +483,7 @@ add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
GstBuffer *buf;
val = gst_tag_list_get_value_index (list, tag, i);
- buf = (GstBuffer *) gst_value_get_mini_object (val);
+ buf = gst_value_get_buffer (val);
if (buf && GST_BUFFER_CAPS (buf)) {
GstStructure *s;
@@ -693,7 +693,7 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
GST_DEBUG ("image %u/%u", n + 1, num_tags);
val = gst_tag_list_get_value_index (list, tag, n);
- image = (GstBuffer *) gst_value_get_mini_object (val);
+ image = gst_value_get_buffer (val);
if (GST_IS_BUFFER (image) && GST_BUFFER_SIZE (image) > 0 &&
GST_BUFFER_CAPS (image) != NULL &&
diff --git a/gst/inter/gstinteraudiosink.c b/gst/inter/gstinteraudiosink.c
index 3f65d32b7..d5eb98b0f 100644
--- a/gst/inter/gstinteraudiosink.c
+++ b/gst/inter/gstinteraudiosink.c
@@ -109,8 +109,8 @@ gst_inter_audio_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_inter_audio_sink_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_inter_audio_sink_sink_template));
gst_element_class_set_details_simple (element_class, "FIXME Long name",
"Generic", "FIXME Description", "FIXME <fixme@example.com>");
diff --git a/gst/inter/gstinteraudiosrc.c b/gst/inter/gstinteraudiosrc.c
index 4a959f90f..df7c16f70 100644
--- a/gst/inter/gstinteraudiosrc.c
+++ b/gst/inter/gstinteraudiosrc.c
@@ -111,8 +111,8 @@ gst_inter_audio_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_inter_audio_src_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_inter_audio_src_src_template));
gst_element_class_set_details_simple (element_class, "FIXME Long name",
"Generic", "FIXME Description", "FIXME <fixme@example.com>");
diff --git a/gst/inter/gstintervideosink.c b/gst/inter/gstintervideosink.c
index cb0eea66a..940d7b27e 100644
--- a/gst/inter/gstintervideosink.c
+++ b/gst/inter/gstintervideosink.c
@@ -103,8 +103,8 @@ gst_inter_video_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_inter_video_sink_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_inter_video_sink_sink_template));
gst_element_class_set_details_simple (element_class, "FIXME Long name",
"Generic", "FIXME Description", "FIXME <fixme@example.com>");
diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c
index 3a805c0c8..04d965530 100644
--- a/gst/inter/gstintervideosrc.c
+++ b/gst/inter/gstintervideosrc.c
@@ -107,8 +107,8 @@ gst_inter_video_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_inter_video_src_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_inter_video_src_src_template));
gst_element_class_set_details_simple (element_class, "FIXME Long name",
"Generic", "FIXME Description", "FIXME <fixme@example.com>");
diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c
index 0e86f8570..c6181ecad 100644
--- a/gst/interlace/gstinterlace.c
+++ b/gst/interlace/gstinterlace.c
@@ -226,10 +226,10 @@ gst_interlace_base_init (gpointer g_class)
"Creates an interlaced video from progressive frames",
"David Schleef <ds@schleef.org>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_interlace_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_interlace_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_interlace_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_interlace_src_template));
}
static void
diff --git a/gst/ivfparse/gstivfparse.c b/gst/ivfparse/gstivfparse.c
index 0ebbe0717..ed79ab723 100644
--- a/gst/ivfparse/gstivfparse.c
+++ b/gst/ivfparse/gstivfparse.c
@@ -84,8 +84,10 @@ gst_ivf_parse_base_init (gpointer gclass)
"Codec/Demuxer",
"Demuxes a IVF stream", "Philip Jägenstedt <philipj@opera.com>");
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
}
/* initialize the ivfparse's class */
diff --git a/gst/jp2kdecimator/gstjp2kdecimator.c b/gst/jp2kdecimator/gstjp2kdecimator.c
index f72b6a22f..98b50bb25 100644
--- a/gst/jp2kdecimator/gstjp2kdecimator.c
+++ b/gst/jp2kdecimator/gstjp2kdecimator.c
@@ -100,10 +100,10 @@ gst_jp2k_decimator_base_init (gpointer g_class)
"Removes information from JPEG2000 streams without recompression",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_static_pad_template (gstelement_class,
- &sink_pad_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &src_pad_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_pad_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_pad_template));
}
static void
diff --git a/gst/jp2kdecimator/jp2kcodestream.c b/gst/jp2kdecimator/jp2kcodestream.c
index 6fb28788e..cbff65414 100644
--- a/gst/jp2kdecimator/jp2kcodestream.c
+++ b/gst/jp2kdecimator/jp2kcodestream.c
@@ -413,8 +413,8 @@ init_packet_iterator (GstJP2kDecimator * self, PacketIterator * it,
it->n_layers = (tile->cod) ? tile->cod->n_layers : header->cod.n_layers;
it->n_resolutions =
1 +
- ((tile->cod) ? tile->cod->n_decompositions : header->
- cod.n_decompositions);
+ ((tile->cod) ? tile->cod->n_decompositions : header->cod.
+ n_decompositions);
it->n_components = header->siz.n_components;
it->tx0 = tile->tx0;
@@ -457,8 +457,8 @@ init_packet_iterator (GstJP2kDecimator * self, PacketIterator * it,
}
order =
- (tile->cod) ? tile->cod->progression_order : header->
- cod.progression_order;
+ (tile->cod) ? tile->cod->progression_order : header->cod.
+ progression_order;
if (order == PROGRESSION_ORDER_LRCP) {
it->next = packet_iterator_next_lrcp;
} else if (order == PROGRESSION_ORDER_RLCP) {
@@ -574,8 +574,8 @@ parse_cod (GstJP2kDecimator * self, GstByteReader * reader,
}
Scod = gst_byte_reader_get_uint8_unchecked (reader);
- cod->sop = ! !(Scod & 0x02);
- cod->eph = ! !(Scod & 0x04);
+ cod->sop = !!(Scod & 0x02);
+ cod->eph = !!(Scod & 0x04);
/* SGcod */
cod->progression_order = gst_byte_reader_get_uint8_unchecked (reader);
@@ -642,8 +642,8 @@ write_cod (GstJP2kDecimator * self, GstByteWriter * writer,
/* Scod */
tmp =
- (cod->PPx ? 0x01 : 0x00) | (cod->
- sop ? 0x02 : 0x00) | (cod->eph ? 0x04 : 0x00);
+ (cod->PPx ? 0x01 : 0x00) | (cod->sop ? 0x02 : 0x00) | (cod->
+ eph ? 0x04 : 0x00);
gst_byte_writer_put_uint8_unchecked (writer, tmp);
/* SGcod */
diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c
index 56e6ff71a..b9552b18a 100644
--- a/gst/jpegformat/gstjifmux.c
+++ b/gst/jpegformat/gstjifmux.c
@@ -114,39 +114,10 @@ static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstBuffer * buffer);
static GstStateChangeReturn gst_jif_mux_change_state (GstElement * element,
GstStateChange transition);
-
-static void
-gst_jif_type_init (GType type)
-{
- static const GInterfaceInfo tag_setter_info = { NULL, NULL, NULL };
- static const GInterfaceInfo tag_xmp_writer_info = { NULL, NULL, NULL };
-
- g_type_add_interface_static (type, GST_TYPE_TAG_SETTER, &tag_setter_info);
- g_type_add_interface_static (type, GST_TYPE_TAG_XMP_WRITER,
- &tag_xmp_writer_info);
-
- GST_DEBUG_CATEGORY_INIT (jif_mux_debug, "jifmux", 0,
- "JPEG interchange format muxer");
-}
-
-GST_BOILERPLATE_FULL (GstJifMux, gst_jif_mux, GstElement, GST_TYPE_ELEMENT,
- gst_jif_type_init);
-
-static void
-gst_jif_mux_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_jif_mux_src_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_jif_mux_sink_pad_template);
- gst_element_class_set_details_simple (element_class,
- "JPEG stream muxer",
- "Video/Formatter",
- "Remuxes JPEG images with markers and tags",
- "Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>");
-}
+#define gst_jif_mux_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstJifMux, gst_jif_mux, GST_TYPE_ELEMENT,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL);
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_XMP_WRITER, NULL));
static void
gst_jif_mux_class_init (GstJifMuxClass * klass)
@@ -159,13 +130,27 @@ gst_jif_mux_class_init (GstJifMuxClass * klass)
g_type_class_add_private (gobject_class, sizeof (GstJifMuxPrivate));
+ gobject_class->finalize = gst_jif_mux_finalize;
+
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_jif_mux_change_state);
- gobject_class->finalize = gst_jif_mux_finalize;
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_jif_mux_src_pad_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_jif_mux_sink_pad_template));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "JPEG stream muxer",
+ "Video/Formatter",
+ "Remuxes JPEG images with markers and tags",
+ "Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>");
+
+ GST_DEBUG_CATEGORY_INIT (jif_mux_debug, "jifmux", 0,
+ "JPEG interchange format muxer");
}
static void
-gst_jif_mux_init (GstJifMux * self, GstJifMuxClass * g_class)
+gst_jif_mux_init (GstJifMux * self)
{
GstPad *sinkpad;
@@ -176,8 +161,6 @@ gst_jif_mux_init (GstJifMux * self, GstJifMuxClass * g_class)
sinkpad = gst_pad_new_from_static_template (&gst_jif_mux_sink_pad_template,
"sink");
gst_pad_set_chain_function (sinkpad, GST_DEBUG_FUNCPTR (gst_jif_mux_chain));
- gst_pad_set_setcaps_function (sinkpad,
- GST_DEBUG_FUNCPTR (gst_jif_mux_sink_setcaps));
gst_pad_set_event_function (sinkpad,
GST_DEBUG_FUNCPTR (gst_jif_mux_sink_event));
gst_element_add_pad (GST_ELEMENT (self), sinkpad);
@@ -219,6 +202,15 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
gboolean ret;
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = gst_jif_mux_sink_setcaps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_TAG:{
GstTagList *list;
GstTagSetter *setter = GST_TAG_SETTER (self);
@@ -227,12 +219,14 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
gst_event_parse_tag (event, &list);
gst_tag_setter_merge_tags (setter, list, mode);
+
+ ret = gst_pad_event_default (pad, event);
break;
}
default:
+ ret = gst_pad_event_default (pad, event);
break;
}
- ret = gst_pad_event_default (pad, event);
return ret;
}
@@ -276,13 +270,18 @@ gst_jif_mux_new_marker (guint8 marker, guint16 size, const guint8 * data,
static gboolean
gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
{
- GstByteReader reader = GST_BYTE_READER_INIT_FROM_BUFFER (buf);
+ GstByteReader reader;
GstJifMuxMarker *m;
guint8 marker = 0;
guint16 size = 0;
const guint8 *data = NULL;
+ guint8 *bdata;
+ gsize bsize;
+
+ bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+ gst_byte_reader_init (&reader, bdata, bsize);
- GST_LOG_OBJECT (self, "Received buffer of size: %u", GST_BUFFER_SIZE (buf));
+ GST_LOG_OBJECT (self, "Received buffer of size: %u", bsize);
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
@@ -330,21 +329,23 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
if (marker == SOS) {
gint eoi_pos = -1;
gint i;
+ guint8 *mdata;
+ gsize msize;
/* search the last 5 bytes for the EOI marker */
- g_assert (GST_BUFFER_SIZE (buf) >= 5);
+ mdata = gst_buffer_map (buf, &msize, NULL, GST_MAP_READ);
+ g_assert (msize >= 5);
for (i = 5; i >= 2; i--) {
- if (GST_BUFFER_DATA (buf)[GST_BUFFER_SIZE (buf) - i] == 0xFF &&
- GST_BUFFER_DATA (buf)[GST_BUFFER_SIZE (buf) - i + 1] == EOI) {
- eoi_pos = GST_BUFFER_SIZE (buf) - i;
+ if (mdata[msize - i] == 0xFF && mdata[msize - i + 1] == EOI) {
+ eoi_pos = msize - i;
break;
}
}
-
if (eoi_pos == -1) {
GST_WARNING_OBJECT (self, "Couldn't find an EOI marker");
- eoi_pos = GST_BUFFER_SIZE (buf);
+ eoi_pos = msize;
}
+ gst_buffer_unmap (buf, mdata, msize);
/* remaining size except EOI is scan data */
self->priv->scan_size = eoi_pos - gst_byte_reader_get_pos (&reader);
@@ -359,17 +360,23 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
goto error;
}
GST_INFO_OBJECT (self, "done parsing at 0x%x / 0x%x",
- gst_byte_reader_get_pos (&reader), GST_BUFFER_SIZE (buf));
+ gst_byte_reader_get_pos (&reader), bsize);
done:
self->priv->markers = g_list_reverse (self->priv->markers);
+ gst_buffer_unmap (buf, bdata, bsize);
+
return TRUE;
+ /* ERRORS */
error:
- GST_WARNING_OBJECT (self,
- "Error parsing image header (need more that %u bytes available)",
- gst_byte_reader_get_remaining (&reader));
- return FALSE;
+ {
+ GST_WARNING_OBJECT (self,
+ "Error parsing image header (need more that %u bytes available)",
+ gst_byte_reader_get_remaining (&reader));
+ gst_buffer_unmap (buf, bdata, bsize);
+ return FALSE;
+ }
}
static gboolean
@@ -531,25 +538,25 @@ gst_jif_mux_mangle_markers (GstJifMux * self)
/* Add EXIF */
{
GstBuffer *exif_data;
+ gsize exif_size;
guint8 *data;
GstJifMuxMarker *m;
GList *pos;
/* insert into self->markers list */
exif_data = gst_tag_list_to_exif_buffer_with_tiff_header (tags);
- if (exif_data &&
- GST_BUFFER_SIZE (exif_data) + 8 >= G_GUINT64_CONSTANT (65536)) {
+ exif_size = exif_data ? gst_buffer_get_size (exif_data) : 0;
+
+ if (exif_data && exif_size + 8 >= G_GUINT64_CONSTANT (65536)) {
GST_WARNING_OBJECT (self, "Exif tags data size exceed maximum size");
gst_buffer_unref (exif_data);
exif_data = NULL;
}
if (exif_data) {
- data = g_malloc0 (GST_BUFFER_SIZE (exif_data) + 6);
+ data = g_malloc0 (exif_size + 6);
memcpy (data, "Exif", 4);
- memcpy (data + 6, GST_BUFFER_DATA (exif_data),
- GST_BUFFER_SIZE (exif_data));
- m = gst_jif_mux_new_marker (APP1, GST_BUFFER_SIZE (exif_data) + 6, data,
- TRUE);
+ gst_buffer_extract (exif_data, 0, data + 6, exif_size);
+ m = gst_jif_mux_new_marker (APP1, exif_size + 6, data, TRUE);
gst_buffer_unref (exif_data);
if (app1_exif) {
@@ -578,13 +585,14 @@ gst_jif_mux_mangle_markers (GstJifMux * self)
gst_tag_xmp_writer_tag_list_to_xmp_buffer (GST_TAG_XMP_WRITER (self),
tags, FALSE);
if (xmp_data) {
- guint8 *data, *xmp = GST_BUFFER_DATA (xmp_data);
- guint size = GST_BUFFER_SIZE (xmp_data);
+ guint8 *data;
+ gsize size;
GList *pos;
+ size = gst_buffer_get_size (xmp_data);
data = g_malloc (size + 29);
memcpy (data, "http://ns.adobe.com/xap/1.0/\0", 29);
- memcpy (&data[29], xmp, size);
+ gst_buffer_extract (xmp_data, 0, &data[29], size);
m = gst_jif_mux_new_marker (APP1, size + 29, data, TRUE);
/*
@@ -640,11 +648,12 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
{
GstBuffer *buf;
GstByteWriter *writer;
- GstFlowReturn fret;
GstJifMuxMarker *m;
GList *node;
guint size = self->priv->scan_size;
gboolean writer_status = TRUE;
+ guint8 *bdata;
+ gsize bsize;
/* iterate list and collect size */
for (node = self->priv->markers; node; node = g_list_next (node)) {
@@ -658,21 +667,19 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
size += 2;
}
GST_INFO_OBJECT (self, "old size: %u, new size: %u",
- GST_BUFFER_SIZE (old_buf), size);
+ gst_buffer_get_size (old_buf), size);
/* allocate new buffer */
- fret = gst_pad_alloc_buffer_and_set_caps (self->priv->srcpad,
- GST_BUFFER_OFFSET (old_buf), size, GST_PAD_CAPS (self->priv->srcpad),
- &buf);
- if (fret != GST_FLOW_OK)
- goto no_buffer;
+ buf = gst_buffer_new_allocate (NULL, size, 0);
/* copy buffer metadata */
- gst_buffer_copy_metadata (buf, old_buf,
- GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS);
+ gst_buffer_copy_into (buf, old_buf,
+ GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
/* memcopy markers */
- writer = gst_byte_writer_new_with_buffer (buf, TRUE);
+ bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_WRITE);
+ writer = gst_byte_writer_new_with_data (bdata, bsize, TRUE);
+
for (node = self->priv->markers; node && writer_status;
node = g_list_next (node)) {
m = (GstJifMuxMarker *) node->data;
@@ -694,6 +701,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
self->priv->scan_size);
}
}
+ gst_buffer_unmap (buf, bdata, bsize);
gst_byte_writer_free (writer);
if (!writer_status) {
@@ -704,11 +712,6 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
*new_buf = buf;
return GST_FLOW_OK;
-
-no_buffer:
- GST_WARNING_OBJECT (self, "failed to allocate output buffer, flow_ret = %s",
- gst_flow_get_name (fret));
- return fret;
}
static GstFlowReturn
@@ -717,15 +720,11 @@ gst_jif_mux_chain (GstPad * pad, GstBuffer * buf)
GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad));
GstFlowReturn fret = GST_FLOW_OK;
- if (GST_BUFFER_CAPS (buf) == NULL) {
- GST_WARNING_OBJECT (self, "Rejecting buffer without caps");
- gst_buffer_unref (buf);
- return GST_FLOW_NOT_NEGOTIATED;
- }
-
+#if 0
GST_MEMDUMP ("jpeg beg", GST_BUFFER_DATA (buf), 64);
GST_MEMDUMP ("jpeg end", GST_BUFFER_DATA (buf) + GST_BUFFER_SIZE (buf) - 64,
64);
+#endif
/* we should have received a whole picture from SOI to EOI
* build a list of markers */
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index 1d4eaf9a2..fd977dc79 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -59,7 +59,7 @@ GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("image/jpeg, "
- "format = (fourcc) { I420, Y41B, UYVY, YV12 }, "
+ "format = (string) { I420, Y41B, UYVY, YV12 }, "
"width = (int) [ 0, MAX ],"
"height = (int) [ 0, MAX ], "
"interlaced = (boolean) { true, false }, "
@@ -99,8 +99,8 @@ struct _GstJpegParsePrivate
/* TRUE if the image is interlaced */
gboolean interlaced;
- /* fourcc color space */
- guint32 fourcc;
+ /* format color space */
+ const gchar *format;
/* TRUE if the src caps sets a specific framerate */
gboolean has_fps;
@@ -124,31 +124,12 @@ static void gst_jpeg_parse_dispose (GObject * object);
static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buffer);
static gboolean gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps);
static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event);
-static GstCaps *gst_jpeg_parse_src_getcaps (GstPad * pad);
+static GstCaps *gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter);
static GstStateChangeReturn gst_jpeg_parse_change_state (GstElement * element,
GstStateChange transition);
-#define _do_init(bla) \
- GST_DEBUG_CATEGORY_INIT (jpeg_parse_debug, "jpegparse", 0, "JPEG parser");
-
-GST_BOILERPLATE_FULL (GstJpegParse, gst_jpeg_parse, GstElement,
- GST_TYPE_ELEMENT, _do_init);
-
-static void
-gst_jpeg_parse_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_jpeg_parse_src_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_jpeg_parse_sink_pad_template);
- gst_element_class_set_details_simple (element_class,
- "JPEG stream parser",
- "Video/Parser",
- "Parse JPEG images into single-frame buffers",
- "Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>");
-}
+#define gst_jpeg_parse_parent_class parent_class
+G_DEFINE_TYPE (GstJpegParse, gst_jpeg_parse, GST_TYPE_ELEMENT);
static void
gst_jpeg_parse_class_init (GstJpegParseClass * klass)
@@ -164,10 +145,23 @@ gst_jpeg_parse_class_init (GstJpegParseClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_jpeg_parse_change_state);
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_jpeg_parse_src_pad_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_jpeg_parse_sink_pad_template));
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "JPEG stream parser",
+ "Video/Parser",
+ "Parse JPEG images into single-frame buffers",
+ "Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>");
+
+ GST_DEBUG_CATEGORY_INIT (jpeg_parse_debug, "jpegparse", 0, "JPEG parser");
}
static void
-gst_jpeg_parse_init (GstJpegParse * parse, GstJpegParseClass * g_class)
+gst_jpeg_parse_init (GstJpegParse * parse)
{
GstPad *sinkpad;
@@ -181,8 +175,6 @@ gst_jpeg_parse_init (GstJpegParse * parse, GstJpegParseClass * g_class)
GST_DEBUG_FUNCPTR (gst_jpeg_parse_chain));
gst_pad_set_event_function (sinkpad,
GST_DEBUG_FUNCPTR (gst_jpeg_parse_sink_event));
- gst_pad_set_setcaps_function (sinkpad,
- GST_DEBUG_FUNCPTR (gst_jpeg_parse_sink_setcaps));
gst_element_add_pad (GST_ELEMENT (parse), sinkpad);
parse->priv->srcpad =
@@ -234,12 +226,11 @@ gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps)
}
static GstCaps *
-gst_jpeg_parse_src_getcaps (GstPad * pad)
+gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter)
{
GstCaps *result;
- if ((result = GST_PAD_CAPS (pad))) {
- result = gst_caps_ref (result);
+ if ((result = gst_pad_get_current_caps (pad))) {
GST_DEBUG_OBJECT (pad, "using pad caps %" GST_PTR_FORMAT, result);
} else {
result = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad)));
@@ -487,21 +478,21 @@ gst_jpeg_parse_sof (GstJpegParse * parse, GstByteReader * reader)
}
if (numcomps == 1) {
- /* gray image - no fourcc */
- parse->priv->fourcc = 0;
+ /* gray image - no format */
+ parse->priv->format = "";
} else if (numcomps == 3) {
temp = (blockWidth[0] * blockHeight[0]) / (blockWidth[1] * blockHeight[1]);
if (temp == 4 && blockHeight[0] == 2)
- parse->priv->fourcc = GST_MAKE_FOURCC ('I', '4', '2', '0');
+ parse->priv->format = "I420";
else if (temp == 4 && blockHeight[0] == 4)
- parse->priv->fourcc = GST_MAKE_FOURCC ('Y', '4', '1', 'B');
+ parse->priv->format = "Y41B";
else if (temp == 2)
- parse->priv->fourcc = GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y');
+ parse->priv->format = "UYVY";
else if (temp == 1)
- parse->priv->fourcc = GST_MAKE_FOURCC ('Y', 'V', '1', '2');
+ parse->priv->format = "YV12";
else
- parse->priv->fourcc = 0;
+ parse->priv->format = "";
} else {
return FALSE;
}
@@ -517,7 +508,8 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse,
{
guint16 size = 0;
guint pos = gst_byte_reader_get_pos (reader);
- guint8 *data = GST_BUFFER_DATA (buffer);
+ guint8 *data;
+ gsize bsize;
if (!gst_byte_reader_peek_uint16_be (reader, &size))
return FALSE;
@@ -526,9 +518,9 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse,
GST_LOG_OBJECT (parse, "unhandled marker %x removing %u bytes", marker, size);
- memmove (&data[pos], &data[pos + size],
- GST_BUFFER_SIZE (buffer) - (pos + size));
- GST_BUFFER_SIZE (buffer) -= size;
+ data = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_READWRITE);
+ memmove (&data[pos], &data[pos + size], bsize - (pos + size));
+ gst_buffer_unmap (buffer, data, bsize - size);
if (!gst_byte_reader_set_pos (reader, pos - size))
return FALSE;
@@ -579,14 +571,12 @@ get_tag_list (GstJpegParse * parse)
static inline void
extract_and_queue_tags (GstJpegParse * parse, guint size, guint8 * data,
- GstTagList * (*tag_func) (const GstBuffer * buff))
+ GstTagList * (*tag_func) (GstBuffer * buff))
{
GstTagList *tags;
GstBuffer *buf;
- buf = gst_buffer_new ();
- GST_BUFFER_DATA (buf) = data;
- GST_BUFFER_SIZE (buf) = size;
+ buf = gst_buffer_new_wrapped_full (data, NULL, 0, size);
tags = tag_func (buf);
gst_buffer_unref (buf);
@@ -702,9 +692,14 @@ gst_jpeg_parse_com (GstJpegParse * parse, GstByteReader * reader)
static gboolean
gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
{
- GstByteReader reader = GST_BYTE_READER_INIT_FROM_BUFFER (buffer);
+ GstByteReader reader;
guint8 marker = 0;
gboolean foundSOF = FALSE;
+ guint8 *data;
+ gsize size;
+
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+ gst_byte_reader_init (&reader, data, size);
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
@@ -720,7 +715,7 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
switch (marker) {
case SOS: /* start of scan (begins compressed data) */
- return foundSOF;
+ goto done;
case SOI:
break;
@@ -751,12 +746,12 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
parse->priv->interlaced = TRUE;
/* fall through */
case SOF0:
- foundSOF = TRUE;
/* parse Start Of Frame */
if (!gst_jpeg_parse_sof (parse, &reader))
goto error;
- return TRUE;
+ foundSOF = TRUE;
+ goto done;
default:
if (marker == JPG || (marker >= JPG0 && marker <= JPG13)) {
@@ -766,25 +761,35 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
} else if (marker >= APP0 && marker <= APP15) {
if (!gst_jpeg_parse_skip_marker (parse, &reader, marker))
goto error;
- } else {
- GST_WARNING_OBJECT (parse, "unhandled marker %x, leaving", marker);
- /* Not SOF or SOI. Must not be a JPEG file (or file pointer
- * is placed wrong). In either case, it's an error. */
- return FALSE;
- }
+ } else
+ goto unhandled;
}
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
}
+done:
+ gst_buffer_unmap (buffer, data, size);
return foundSOF;
+ /* ERRORS */
error:
- GST_WARNING_OBJECT (parse,
- "Error parsing image header (need more than %u bytes available)",
- gst_byte_reader_get_remaining (&reader));
- return FALSE;
+ {
+ GST_WARNING_OBJECT (parse,
+ "Error parsing image header (need more than %u bytes available)",
+ gst_byte_reader_get_remaining (&reader));
+ gst_buffer_unmap (buffer, data, size);
+ return FALSE;
+ }
+unhandled:
+ {
+ GST_WARNING_OBJECT (parse, "unhandled marker %x, leaving", marker);
+ /* Not SOF or SOI. Must not be a JPEG file (or file pointer
+ * is placed wrong). In either case, it's an error. */
+ gst_buffer_unmap (buffer, data, size);
+ return FALSE;
+ }
}
static gboolean
@@ -801,7 +806,7 @@ gst_jpeg_parse_set_new_caps (GstJpegParse * parse, gboolean header_ok)
if (header_ok == TRUE) {
gst_caps_set_simple (caps,
- "format", GST_TYPE_FOURCC, parse->priv->fourcc,
+ "format", G_TYPE_STRING, parse->priv->format,
"interlaced", G_TYPE_BOOLEAN, parse->priv->interlaced,
"width", G_TYPE_INT, parse->priv->width,
"height", G_TYPE_INT, parse->priv->height, NULL);
@@ -896,8 +901,6 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len)
GST_BUFFER_DURATION (outbuf) = parse->priv->duration;
- gst_buffer_set_caps (outbuf, GST_PAD_CAPS (parse->priv->srcpad));
-
GST_LOG_OBJECT (parse, "pushing buffer (ts=%" GST_TIME_FORMAT ", len=%u)",
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), len);
@@ -957,6 +960,15 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
GST_DEBUG_OBJECT (parse, "event : %s", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ res = gst_jpeg_parse_sink_setcaps (pad, caps);
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_FLUSH_STOP:
parse->priv->next_ts = GST_CLOCK_TIME_NONE;
parse->priv->last_offset = 0;
@@ -972,7 +984,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
res = gst_pad_push_event (parse->priv->srcpad, event);
break;
}
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
/* Discard any data in the adapter. There should have been an EOS before
* to flush it. */
gst_adapter_clear (parse->priv->adapter);
diff --git a/gst/legacyresample/gstlegacyresample.c b/gst/legacyresample/gstlegacyresample.c
index 46bb0bf59..95c924eae 100644
--- a/gst/legacyresample/gstlegacyresample.c
+++ b/gst/legacyresample/gstlegacyresample.c
@@ -135,10 +135,10 @@ gst_legacyresample_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_legacyresample_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_legacyresample_sink_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_legacyresample_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_legacyresample_sink_template));
gst_element_class_set_details_simple (gstelement_class, "Audio scaler",
"Filter/Converter/Audio",
diff --git a/gst/librfb/gstrfbsrc.c b/gst/librfb/gstrfbsrc.c
index 879892b01..c6e5a13bb 100644
--- a/gst/librfb/gstrfbsrc.c
+++ b/gst/librfb/gstrfbsrc.c
@@ -89,8 +89,8 @@ gst_rfb_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rfb_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rfb_src_template));
gst_element_class_set_details_simple (element_class, "Rfb source",
"Source/Video",
diff --git a/gst/liveadder/liveadder.c b/gst/liveadder/liveadder.c
index 205bd020d..ec232a709 100644
--- a/gst/liveadder/liveadder.c
+++ b/gst/liveadder/liveadder.c
@@ -54,7 +54,7 @@ GST_DEBUG_CATEGORY_STATIC (live_adder_debug);
#define GST_CAT_DEFAULT (live_adder_debug)
static GstStaticPadTemplate gst_live_adder_sink_template =
- GST_STATIC_PAD_TEMPLATE ("sink%d",
+ GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; "
@@ -158,10 +158,10 @@ gst_live_adder_base_init (gpointer klass)
{
GstElementClass *gstelement_class = (GstElementClass *) klass;
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_live_adder_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_live_adder_sink_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_live_adder_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_live_adder_sink_template));
gst_element_class_set_details_simple (gstelement_class, "Live Adder element",
"Generic/Audio",
"Mixes live/discontinuous audio streams",
@@ -1384,7 +1384,7 @@ gst_live_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
padcount = g_atomic_int_exchange_and_add (&adder->padcount, 1);
#endif
- name = g_strdup_printf ("sink%d", padcount);
+ name = g_strdup_printf ("sink_%u", padcount);
newpad = gst_pad_new_from_template (templ, name);
GST_DEBUG_OBJECT (adder, "request new pad %s", name);
g_free (name);
diff --git a/gst/mixmatrix/mixmatrix.c b/gst/mixmatrix/mixmatrix.c
index fd3ad29e3..5c1d26e63 100644
--- a/gst/mixmatrix/mixmatrix.c
+++ b/gst/mixmatrix/mixmatrix.c
@@ -85,14 +85,14 @@ enum
};
static GstStaticPadTemplate mixmatrix_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink%d",
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS (GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_CAPS)
);
static GstStaticPadTemplate mixmatrix_src_template =
-GST_STATIC_PAD_TEMPLATE ("src%d",
+GST_STATIC_PAD_TEMPLATE ("src_%u",
GST_PAD_SRC,
GST_PAD_REQUEST,
GST_STATIC_CAPS (GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_CAPS)
@@ -148,10 +148,10 @@ gst_mixmatrix_base_init (GstMixMatrixClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &mixmatrix_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &mixmatrix_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mixmatrix_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mixmatrix_src_template));
gst_element_class_set_details_simple (element_class, "Mixing Matrix",
"Filter/Editor/Audio",
"Mix N audio channels together into M channels",
@@ -370,7 +370,7 @@ gst_mixmatrix_request_new_pad (GstElement * element, GstPadTemplate * templ,
mix = GST_MIXMATRIX (element);
/* figure out if it's a sink pad */
- if (sscanf (name, "sink%d", &padnum)) {
+ if (sscanf (name, "sink_%u", &padnum)) {
/* check to see if it already exists */
if (padnum < mix->sinkpadalloc && mix->sinkpads[padnum])
return mix->sinkpads[padnum];
@@ -393,7 +393,7 @@ gst_mixmatrix_request_new_pad (GstElement * element, GstPadTemplate * templ,
mix->sinkpads[padnum] = pad;
}
/* or it's a src pad */
- else if (sscanf (name, "src%d", &padnum)) {
+ else if (sscanf (name, "src_%u", &padnum)) {
/* check to see if it already exists */
if (padnum < mix->srcpadalloc && mix->srcpads[padnum])
return mix->srcpads[padnum];
diff --git a/gst/mpeg1sys/gstmpeg1systemencode.c b/gst/mpeg1sys/gstmpeg1systemencode.c
index cc7dc7fd5..282009005 100644
--- a/gst/mpeg1sys/gstmpeg1systemencode.c
+++ b/gst/mpeg1sys/gstmpeg1systemencode.c
@@ -47,7 +47,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS ("video/mpeg, " "systemstream = (boolean) TRUE")
);
static GstStaticPadTemplate video_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("video_%d",
+GST_STATIC_PAD_TEMPLATE ("video_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpeg, "
@@ -55,7 +55,7 @@ GST_STATIC_PAD_TEMPLATE ("video_%d",
);
static GstStaticPadTemplate audio_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("audio_%d",
+GST_STATIC_PAD_TEMPLATE ("audio_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("audio/mpeg, "
@@ -110,11 +110,12 @@ gst_system_encode_base_init (GstMPEG1SystemEncodeClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &audio_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_factory));
gst_element_class_set_details_simple (element_class, "MPEG-1 muxer",
"Codec/Muxer",
"Multiplexes MPEG-1 Streams", "Wim Taymans <wim.taymans@chello.be>");
diff --git a/gst/mpegdemux/mpegtsparse.c b/gst/mpegdemux/mpegtsparse.c
index 164321ec4..d77fd23ad 100644
--- a/gst/mpegdemux/mpegtsparse.c
+++ b/gst/mpegdemux/mpegtsparse.c
@@ -93,13 +93,13 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
);
static GstStaticPadTemplate src_template =
-GST_STATIC_PAD_TEMPLATE ("src%d", GST_PAD_SRC,
+GST_STATIC_PAD_TEMPLATE ("src_%u", GST_PAD_SRC,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
static GstStaticPadTemplate program_template =
-GST_STATIC_PAD_TEMPLATE ("program_%d", GST_PAD_SRC,
+GST_STATIC_PAD_TEMPLATE ("program_%u", GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
@@ -222,11 +222,12 @@ mpegts_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &program_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&program_template));
gst_element_class_set_details_simple (element_class,
"MPEG transport stream parser", "Codec/Parser",
@@ -403,7 +404,7 @@ mpegts_parse_activate_program (MpegTSParse * parse,
MpegTSParsePad *tspad;
gchar *pad_name;
- pad_name = g_strdup_printf ("program_%d", program->program_number);
+ pad_name = g_strdup_printf ("program_%u", program->program_number);
tspad = mpegts_parse_create_tspad (parse, pad_name);
tspad->program_number = program->program_number;
@@ -668,7 +669,7 @@ mpegts_parse_request_new_pad (GstElement * element, GstPadTemplate * template,
parse = GST_MPEGTS_PARSE (element);
GST_OBJECT_LOCK (element);
- name = g_strdup_printf ("src%d", parse->req_pads++);
+ name = g_strdup_printf ("src_%u", parse->req_pads++);
GST_OBJECT_UNLOCK (element);
pad = mpegts_parse_create_tspad (parse, name)->pad;
diff --git a/gst/mpegpsmux/mpegpsmux.c b/gst/mpegpsmux/mpegpsmux.c
index 218f4fb0e..3fff4be51 100644
--- a/gst/mpegpsmux/mpegpsmux.c
+++ b/gst/mpegpsmux/mpegpsmux.c
@@ -60,7 +60,7 @@ enum
#define DEFAULT_AGGREGATE_GOPS FALSE
static GstStaticPadTemplate mpegpsmux_sink_factory =
- GST_STATIC_PAD_TEMPLATE ("sink_%d",
+ GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpeg, "
@@ -112,10 +112,10 @@ mpegpsmux_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &mpegpsmux_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &mpegpsmux_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mpegpsmux_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mpegpsmux_src_factory));
gst_element_class_set_details_simple (element_class,
"MPEG Program Stream Muxer", "Codec/Muxer",
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index d8c7073e5..886d6da3e 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -77,22 +77,35 @@ static void mpegts_base_dispose (GObject * object);
static void mpegts_base_finalize (GObject * object);
static void mpegts_base_free_program (MpegTSBaseProgram * program);
static void mpegts_base_free_stream (MpegTSBaseStream * ptream);
-static gboolean mpegts_base_sink_activate (GstPad * pad);
-static gboolean mpegts_base_sink_activate_pull (GstPad * pad, gboolean active);
-static gboolean mpegts_base_sink_activate_push (GstPad * pad, gboolean active);
-static GstFlowReturn mpegts_base_chain (GstPad * pad, GstBuffer * buf);
-static gboolean mpegts_base_sink_event (GstPad * pad, GstEvent * event);
+static gboolean mpegts_base_sink_activate (GstPad * pad, GstObject * parent);
+static gboolean mpegts_base_sink_activate_mode (GstPad * pad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+static GstFlowReturn mpegts_base_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static gboolean mpegts_base_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static GstStateChangeReturn mpegts_base_change_state (GstElement * element,
GstStateChange transition);
-static void _extra_init (GType type);
+
static void mpegts_base_get_tags_from_sdt (MpegTSBase * base,
GstStructure * sdt_info);
static void mpegts_base_get_tags_from_eit (MpegTSBase * base,
GstStructure * eit_info);
-GST_BOILERPLATE_FULL (MpegTSBase, mpegts_base, GstElement, GST_TYPE_ELEMENT,
- _extra_init);
+static void
+_extra_init (void)
+{
+ QUARK_PROGRAMS = g_quark_from_string ("programs");
+ QUARK_PROGRAM_NUMBER = g_quark_from_string ("program-number");
+ QUARK_PID = g_quark_from_string ("pid");
+ QUARK_PCR_PID = g_quark_from_string ("pcr-pid");
+ QUARK_STREAMS = g_quark_from_string ("streams");
+ QUARK_STREAM_TYPE = g_quark_from_string ("stream-type");
+}
+#define mpegts_base_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (MpegTSBase, mpegts_base, GST_TYPE_ELEMENT,
+ _extra_init ());
static const guint32 crc_tab[256] = {
0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
@@ -154,26 +167,6 @@ mpegts_base_calc_crc32 (guint8 * data, guint datalen)
}
static void
-_extra_init (GType type)
-{
- QUARK_PROGRAMS = g_quark_from_string ("programs");
- QUARK_PROGRAM_NUMBER = g_quark_from_string ("program-number");
- QUARK_PID = g_quark_from_string ("pid");
- QUARK_PCR_PID = g_quark_from_string ("pcr-pid");
- QUARK_STREAMS = g_quark_from_string ("streams");
- QUARK_STREAM_TYPE = g_quark_from_string ("stream-type");
-}
-
-static void
-mpegts_base_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
-}
-
-static void
mpegts_base_class_init (MpegTSBaseClass * klass)
{
GObjectClass *gobject_class;
@@ -181,13 +174,14 @@ mpegts_base_class_init (MpegTSBaseClass * klass)
element_class = GST_ELEMENT_CLASS (klass);
element_class->change_state = mpegts_base_change_state;
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->set_property = mpegts_base_set_property;
gobject_class->get_property = mpegts_base_get_property;
gobject_class->dispose = mpegts_base_dispose;
gobject_class->finalize = mpegts_base_finalize;
-
}
static void
@@ -227,14 +221,12 @@ mpegts_base_reset (MpegTSBase * base)
}
static void
-mpegts_base_init (MpegTSBase * base, MpegTSBaseClass * klass)
+mpegts_base_init (MpegTSBase * base)
{
base->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
gst_pad_set_activate_function (base->sinkpad, mpegts_base_sink_activate);
- gst_pad_set_activatepull_function (base->sinkpad,
- mpegts_base_sink_activate_pull);
- gst_pad_set_activatepush_function (base->sinkpad,
- mpegts_base_sink_activate_push);
+ gst_pad_set_activatemode_function (base->sinkpad,
+ mpegts_base_sink_activate_mode);
gst_pad_set_chain_function (base->sinkpad, mpegts_base_chain);
gst_pad_set_event_function (base->sinkpad, mpegts_base_sink_event);
gst_element_add_pad (GST_ELEMENT (base), base->sinkpad);
@@ -485,21 +477,30 @@ mpegts_base_free_program (MpegTSBaseProgram * program)
/* FIXME : This is being called by tsdemux::find_timestamps()
* We need to avoid re-entrant code like that */
+static gboolean
+mpegts_base_stop_program (MpegTSBase * base, MpegTSBaseProgram * program)
+{
+ MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
+
+ GST_DEBUG_OBJECT (base, "program_number : %d", program->program_number);
+
+ if (klass->program_stopped)
+ klass->program_stopped (base, program);
+
+ return TRUE;
+}
+
void
mpegts_base_remove_program (MpegTSBase * base, gint program_number)
{
MpegTSBaseProgram *program;
- MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
- GST_DEBUG_OBJECT (base, "program_number : %d", program_number);
+ program =
+ (MpegTSBaseProgram *) g_hash_table_lookup (base->programs,
+ GINT_TO_POINTER (program_number));
+ if (program)
+ mpegts_base_stop_program (base, program);
- if (klass->program_stopped) {
- program =
- (MpegTSBaseProgram *) g_hash_table_lookup (base->programs,
- GINT_TO_POINTER (program_number));
- if (program)
- klass->program_stopped (base, program);
- }
g_hash_table_remove (base->programs, GINT_TO_POINTER (program_number));
}
@@ -956,11 +957,16 @@ mpegts_base_handle_psi (MpegTSBase * base, MpegTSPacketizerSection * section)
/* table ids 0x70 - 0x73 do not have a crc */
if (G_LIKELY (section->table_id < 0x70 || section->table_id > 0x73)) {
- if (G_UNLIKELY (mpegts_base_calc_crc32 (GST_BUFFER_DATA (section->buffer),
- GST_BUFFER_SIZE (section->buffer)) != 0)) {
+ gpointer data;
+ gsize size;
+
+ data = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
+ if (G_UNLIKELY (mpegts_base_calc_crc32 (data, size) != 0)) {
+ gst_buffer_unmap (section->buffer, data, size);
GST_WARNING_OBJECT (base, "bad crc in psi pid 0x%x", section->pid);
return FALSE;
}
+ gst_buffer_unmap (section->buffer, data, size);
}
switch (section->table_id) {
@@ -1092,7 +1098,7 @@ mpegts_base_get_tags_from_sdt (MpegTSBase * base, GstStructure * sdt_info)
program = mpegts_base_get_program (base, program_number);
if (program && !program->tags) {
- program->tags = gst_tag_list_new_full (GST_TAG_ARTIST,
+ program->tags = gst_tag_list_new (GST_TAG_ARTIST,
gst_structure_get_string (service, "name"), NULL);
}
}
@@ -1133,27 +1139,33 @@ mpegts_base_get_tags_from_eit (MpegTSBase * base, GstStructure * eit_info)
gst_structure_get_uint (event, "duration", &duration);
program->event_id = event_id;
- program->tags = gst_tag_list_new_full (GST_TAG_TITLE,
+ program->tags = gst_tag_list_new (GST_TAG_TITLE,
title, GST_TAG_DURATION, duration * GST_SECOND, NULL);
}
}
}
}
-static void
+static gboolean
remove_each_program (gpointer key, MpegTSBaseProgram * program,
MpegTSBase * base)
{
/* First deactivate it */
mpegts_base_deactivate_program (base, program);
- /* Then remove it */
- mpegts_base_remove_program (base, program->program_number);
+
+ /* Then stop it */
+ mpegts_base_stop_program (base, program);
+
+ /* And tell _foreach_remove() to remove it */
+ return TRUE;
}
static gboolean
gst_mpegts_base_handle_eos (MpegTSBase * base)
{
- g_hash_table_foreach (base->programs, (GHFunc) remove_each_program, base);
+ g_hash_table_foreach_remove (base->programs, (GHRFunc) remove_each_program,
+ base);
+
/* finally remove */
return TRUE;
}
@@ -1171,39 +1183,28 @@ mpegts_base_flush (MpegTSBase * base)
}
static gboolean
-mpegts_base_sink_event (GstPad * pad, GstEvent * event)
+mpegts_base_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = TRUE;
- MpegTSBase *base = GST_MPEGTS_BASE (gst_object_get_parent (GST_OBJECT (pad)));
+ MpegTSBase *base = GST_MPEGTS_BASE (parent);
GST_WARNING_OBJECT (base, "Got event %s",
gst_event_type_get_name (GST_EVENT_TYPE (event)));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- gdouble rate, applied_rate;
- GstFormat format;
- gint64 start, stop, position;
-
- gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate,
- &format, &start, &stop, &position);
- GST_DEBUG_OBJECT (base,
- "Segment update:%d, rate:%f, applied_rate:%f, format:%s", update,
- rate, applied_rate, gst_format_get_name (format));
- GST_DEBUG_OBJECT (base,
- " start:%" G_GINT64_FORMAT ", stop:%" G_GINT64_FORMAT
- ", position:%" G_GINT64_FORMAT, start, stop, position);
- gst_segment_set_newsegment_full (&base->segment, update, rate,
- applied_rate, format, start, stop, position);
+ gst_event_copy_segment (event, &base->segment);
+
gst_event_unref (event);
+
base->in_gap = GST_CLOCK_TIME_NONE;
base->first_buf_ts = GST_CLOCK_TIME_NONE;
}
break;
case GST_EVENT_EOS:
res = gst_mpegts_base_handle_eos (base);
+ gst_event_unref (event);
break;
case GST_EVENT_FLUSH_START:
mpegts_packetizer_flush (base->packetizer);
@@ -1220,8 +1221,6 @@ mpegts_base_sink_event (GstPad * pad, GstEvent * event)
res = GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, event);
gst_event_unref (event);
}
-
- gst_object_unref (base);
return res;
}
@@ -1241,7 +1240,7 @@ mpegts_base_push (MpegTSBase * base, MpegTSPacketizerPacket * packet,
}
static GstFlowReturn
-mpegts_base_chain (GstPad * pad, GstBuffer * buf)
+mpegts_base_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
GstFlowReturn res = GST_FLOW_OK;
MpegTSBase *base;
@@ -1250,7 +1249,7 @@ mpegts_base_chain (GstPad * pad, GstBuffer * buf)
MpegTSPacketizer2 *packetizer;
MpegTSPacketizerPacket packet;
- base = GST_MPEGTS_BASE (gst_object_get_parent (GST_OBJECT (pad)));
+ base = GST_MPEGTS_BASE (parent);
packetizer = base->packetizer;
if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (base->first_buf_ts)) &&
@@ -1261,17 +1260,26 @@ mpegts_base_chain (GstPad * pad, GstBuffer * buf)
}
mpegts_packetizer_push (base->packetizer, buf);
- while (((pret =
- mpegts_packetizer_next_packet (base->packetizer,
- &packet)) != PACKET_NEED_MORE) && res == GST_FLOW_OK) {
+
+ while (res == GST_FLOW_OK) {
+ pret = mpegts_packetizer_next_packet (base->packetizer, &packet);
+
+ /* If we don't have enough data, return */
+ if (G_UNLIKELY (pret == PACKET_NEED_MORE))
+ break;
+
+ /* bad header, skip the packet */
if (G_UNLIKELY (pret == PACKET_BAD))
- /* bad header, skip the packet */
goto next;
+ GST_DEBUG ("Got packet (buffer:%p)", packet.buffer);
+
/* base PSI data */
if (packet.payload != NULL && mpegts_base_is_psi (base, &packet)) {
MpegTSPacketizerSection section;
+
based = mpegts_packetizer_push_section (packetizer, &packet, &section);
+
if (G_UNLIKELY (!based))
/* bad section data */
goto next;
@@ -1279,26 +1287,28 @@ mpegts_base_chain (GstPad * pad, GstBuffer * buf)
if (G_LIKELY (section.complete)) {
/* section complete */
based = mpegts_base_handle_psi (base, &section);
+
+ GST_DEBUG ("Unreffing section buffer %p", section.buffer);
gst_buffer_unref (section.buffer);
if (G_UNLIKELY (!based))
/* bad PSI table */
goto next;
}
+
/* we need to push section packet downstream */
res = mpegts_base_push (base, &packet, &section);
-
} else if (MPEGTS_BIT_IS_SET (base->is_pes, packet.pid)) {
/* push the packet downstream */
res = mpegts_base_push (base, &packet, NULL);
- } else
+ } else {
gst_buffer_unref (packet.buffer);
+ }
next:
mpegts_packetizer_clear_packet (base->packetizer, &packet);
}
- gst_object_unref (base);
return res;
}
@@ -1349,6 +1359,7 @@ mpegts_base_scan (MpegTSBase * base)
ret = GST_FLOW_ERROR;
beach:
+ GST_DEBUG ("Returning %s", gst_flow_get_name (ret));
mpegts_packetizer_clear (base->packetizer);
return ret;
@@ -1359,6 +1370,7 @@ static void
mpegts_base_loop (MpegTSBase * base)
{
GstFlowReturn ret = GST_FLOW_ERROR;
+
switch (base->mode) {
case BASE_MODE_SCANNING:
/* Find first sync point */
@@ -1382,8 +1394,8 @@ mpegts_base_loop (MpegTSBase * base)
100 * base->packetsize, &buf);
if (G_UNLIKELY (ret != GST_FLOW_OK))
goto error;
- base->seek_offset += GST_BUFFER_SIZE (buf);
- ret = mpegts_base_chain (base->sinkpad, buf);
+ base->seek_offset += gst_buffer_get_size (buf);
+ ret = mpegts_base_chain (base->sinkpad, GST_OBJECT_CAST (base), buf);
if (G_UNLIKELY (ret != GST_FLOW_OK))
goto error;
}
@@ -1398,6 +1410,7 @@ mpegts_base_loop (MpegTSBase * base)
error:
{
const gchar *reason = gst_flow_get_name (ret);
+
GST_DEBUG_OBJECT (base, "Pausing task, reason %s", reason);
if (ret == GST_FLOW_UNEXPECTED)
GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, gst_event_new_eos ());
@@ -1477,7 +1490,7 @@ mpegts_base_handle_seek_event (MpegTSBase * base, GstPad * pad,
if (flush) {
/* send a FLUSH_STOP for the sinkpad, since we need data for seeking */
GST_DEBUG_OBJECT (base, "sending flush stop");
- gst_pad_push_event (base->sinkpad, gst_event_new_flush_stop ());
+ gst_pad_push_event (base->sinkpad, gst_event_new_flush_stop (TRUE));
}
if (flags & (GST_SEEK_FLAG_SEGMENT | GST_SEEK_FLAG_SKIP)) {
@@ -1505,7 +1518,7 @@ mpegts_base_handle_seek_event (MpegTSBase * base, GstPad * pad,
GST_DEBUG_OBJECT (base, "sending flush stop");
//gst_pad_push_event (base->sinkpad, gst_event_new_flush_stop ());
GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base,
- gst_event_new_flush_stop ());
+ gst_event_new_flush_stop (TRUE));
}
//else
done:
@@ -1517,36 +1530,60 @@ push_mode:
static gboolean
-mpegts_base_sink_activate (GstPad * pad)
+mpegts_base_sink_activate (GstPad * sinkpad, GstObject * parent)
{
- if (gst_pad_check_pull_range (pad)) {
- GST_DEBUG_OBJECT (pad, "activating pull");
- return gst_pad_activate_pull (pad, TRUE);
- } else {
- GST_DEBUG_OBJECT (pad, "activating push");
- return gst_pad_activate_push (pad, TRUE);
+ GstQuery *query;
+ gboolean pull_mode;
+
+ query = gst_query_new_scheduling ();
+
+ if (!gst_pad_peer_query (sinkpad, query)) {
+ gst_query_unref (query);
+ goto activate_push;
}
-}
-static gboolean
-mpegts_base_sink_activate_pull (GstPad * pad, gboolean active)
-{
- MpegTSBase *base = GST_MPEGTS_BASE (GST_OBJECT_PARENT (pad));
- if (active) {
- base->mode = BASE_MODE_SCANNING;
- return gst_pad_start_task (pad, (GstTaskFunction) mpegts_base_loop, base);
- } else
- return gst_pad_stop_task (pad);
+ pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+ gst_query_unref (query);
+
+ if (!pull_mode)
+ goto activate_push;
+
+ GST_DEBUG_OBJECT (sinkpad, "activating pull");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+ {
+ GST_DEBUG_OBJECT (sinkpad, "activating push");
+ return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+ }
}
static gboolean
-mpegts_base_sink_activate_push (GstPad * pad, gboolean active)
+mpegts_base_sink_activate_mode (GstPad * pad, GstObject * parent,
+ GstPadMode mode, gboolean active)
{
- MpegTSBase *base = GST_MPEGTS_BASE (GST_OBJECT_PARENT (pad));
- base->mode = BASE_MODE_PUSHING;
- return TRUE;
-}
+ gboolean res;
+ MpegTSBase *base = GST_MPEGTS_BASE (parent);
+ switch (mode) {
+ case GST_PAD_MODE_PUSH:
+ base->mode = BASE_MODE_PUSHING;
+ res = TRUE;
+ break;
+ case GST_PAD_MODE_PULL:
+ if (active) {
+ base->mode = BASE_MODE_SCANNING;
+ res =
+ gst_pad_start_task (pad, (GstTaskFunction) mpegts_base_loop, base);
+ } else
+ res = gst_pad_stop_task (pad);
+ break;
+ default:
+ res = FALSE;
+ break;
+ }
+ return res;
+}
static GstStateChangeReturn
mpegts_base_change_state (GstElement * element, GstStateChange transition)
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index 25d75cfa8..afd47aa8e 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -287,6 +287,8 @@ mpegts_packetizer_parse_packet (MpegTSPacketizer2 * packetizer,
packet->data = data;
+ gst_buffer_unmap (packet->buffer, packet->bufdata, packet->bufsize);
+
if (packet->adaptation_field_control & 0x02)
if (!mpegts_packetizer_parse_adaptation_field_control (packetizer, packet))
return FALSE;
@@ -304,15 +306,17 @@ mpegts_packetizer_parse_section_header (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerStream * stream, MpegTSPacketizerSection * section)
{
guint8 tmp;
- guint8 *data, *crc_data;
+ guint8 *bufdata, *data, *crc_data;
+ gsize size;
MpegTSPacketizerStreamSubtable *subtable;
GSList *subtable_list = NULL;
section->complete = TRUE;
+
/* get the section buffer, pass the ownership to the caller */
section->buffer = gst_adapter_take_buffer (stream->section_adapter,
3 + stream->section_length);
- data = GST_BUFFER_DATA (section->buffer);
+ bufdata = data = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
GST_BUFFER_OFFSET (section->buffer) = stream->offset;
section->table_id = *data++;
@@ -348,8 +352,7 @@ mpegts_packetizer_parse_section_header (MpegTSPacketizer2 * packetizer,
goto not_applicable;
/* CRC is at the end of the section */
- crc_data =
- GST_BUFFER_DATA (section->buffer) + GST_BUFFER_SIZE (section->buffer) - 4;
+ crc_data = bufdata + size - 4;
section->crc = GST_READ_UINT32_BE (crc_data);
if (section->version_number == subtable->version_number &&
@@ -360,6 +363,8 @@ mpegts_packetizer_parse_section_header (MpegTSPacketizer2 * packetizer,
subtable->crc = section->crc;
stream->section_table_id = section->table_id;
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
return TRUE;
not_applicable:
@@ -368,6 +373,7 @@ not_applicable:
section->pid, section->table_id, section->subtable_extension,
section->current_next_indicator, section->version_number, section->crc);
section->complete = FALSE;
+ gst_buffer_unmap (section->buffer, bufdata, size);
gst_buffer_unref (section->buffer);
return TRUE;
}
@@ -421,7 +427,8 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerSection * section)
{
GstStructure *pat_info = NULL;
- guint8 *data, *end;
+ guint8 *bufdata, *data, *end;
+ gsize size;
guint transport_stream_id;
guint8 tmp;
guint program_number;
@@ -431,7 +438,7 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer,
GstStructure *entry = NULL;
gchar *struct_name;
- data = GST_BUFFER_DATA (section->buffer);
+ bufdata = data = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
section->table_id = *data++;
section->section_length = GST_READ_UINT16_BE (data) & 0x0FFF;
@@ -447,11 +454,13 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer,
/* skip section_number and last_section_number */
data += 2;
- pat_info = gst_structure_id_new (QUARK_PAT,
+ pat_info = gst_structure_new_id (QUARK_PAT,
QUARK_TRANSPORT_STREAM_ID, G_TYPE_UINT, transport_stream_id, NULL);
g_value_init (&entries, GST_TYPE_LIST);
+
/* stop at the CRC */
- end = GST_BUFFER_DATA (section->buffer) + GST_BUFFER_SIZE (section->buffer);
+ end = bufdata + size;
+
while (data < end - 4) {
program_number = GST_READ_UINT16_BE (data);
data += 2;
@@ -460,7 +469,7 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer,
data += 2;
struct_name = g_strdup_printf ("program-%d", program_number);
- entry = gst_structure_new (struct_name, NULL);
+ entry = gst_structure_new_empty (struct_name);
g_free (struct_name);
gst_structure_id_set (entry, QUARK_PROGRAM_NUMBER, G_TYPE_UINT,
program_number, QUARK_PID, G_TYPE_UINT, pmt_pid, NULL);
@@ -474,6 +483,8 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer,
gst_structure_id_set_value (pat_info, QUARK_PROGRAMS, &entries);
g_value_unset (&entries);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
if (data != end - 4) {
/* FIXME: check the CRC before parsing the packet */
GST_ERROR ("at the end of PAT data != end - 4");
@@ -490,7 +501,8 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerSection * section)
{
GstStructure *pmt = NULL;
- guint8 *data, *end;
+ guint8 *bufdata, *data, *end;
+ gsize size;
guint16 program_number;
guint8 tmp;
guint pcr_pid;
@@ -504,15 +516,16 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
GstStructure *stream_info = NULL;
gchar *struct_name;
+ data = bufdata = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
+
/* fixed header + CRC == 16 */
- if (GST_BUFFER_SIZE (section->buffer) < 16) {
+ if (size < 16) {
GST_WARNING ("PID %d invalid PMT size %d",
section->pid, section->section_length);
goto error;
}
- data = GST_BUFFER_DATA (section->buffer);
- end = data + GST_BUFFER_SIZE (section->buffer);
+ end = data + size;
section->table_id = *data++;
section->section_length = GST_READ_UINT16_BE (data) & 0x0FFF;
@@ -534,7 +547,7 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
program_info_length = GST_READ_UINT16_BE (data) & 0x0FFF;
data += 2;
- pmt = gst_structure_id_new (QUARK_PMT,
+ pmt = gst_structure_new_id (QUARK_PMT,
QUARK_PROGRAM_NUMBER, G_TYPE_UINT, program_number,
QUARK_PCR_PID, G_TYPE_UINT, pcr_pid,
QUARK_VERSION_NUMBER, G_TYPE_UINT, section->version_number, NULL);
@@ -580,7 +593,7 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
}
struct_name = g_strdup_printf ("pid-%d", pid);
- stream_info = gst_structure_new (struct_name, NULL);
+ stream_info = gst_structure_new_empty (struct_name);
g_free (struct_name);
gst_structure_id_set (stream_info,
QUARK_PID, G_TYPE_UINT, pid, QUARK_STREAM_TYPE, G_TYPE_UINT,
@@ -682,6 +695,8 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
gst_structure_id_set_value (pmt, QUARK_STREAMS, &programs);
g_value_unset (&programs);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
g_assert (data == end - 4);
return pmt;
@@ -689,6 +704,7 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
error:
if (pmt)
gst_structure_free (pmt);
+ gst_buffer_unmap (section->buffer, bufdata, size);
return NULL;
}
@@ -698,7 +714,8 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerSection * section)
{
GstStructure *nit = NULL, *transport = NULL, *delivery_structure = NULL;
- guint8 *data, *end, *entry_begin;
+ guint8 *bufdata, *data, *end, *entry_begin;
+ gsize size;
guint16 network_id, transport_stream_id, original_network_id;
guint tmp;
guint16 descriptors_loop_length, transport_stream_loop_length;
@@ -707,15 +724,17 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
GValueArray *descriptors = NULL;
GST_DEBUG ("NIT");
+
+ data = bufdata = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
+
/* fixed header + CRC == 16 */
- if (GST_BUFFER_SIZE (section->buffer) < 23) {
+ if (size < 23) {
GST_WARNING ("PID %d invalid NIT size %d",
section->pid, section->section_length);
goto error;
}
- data = GST_BUFFER_DATA (section->buffer);
- end = data + GST_BUFFER_SIZE (section->buffer);
+ end = data + size;
section->table_id = *data++;
section->section_length = GST_READ_UINT16_BE (data) & 0x0FFF;
@@ -740,7 +759,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
descriptors_loop_length = GST_READ_UINT16_BE (data) & 0x0FFF;
data += 2;
- nit = gst_structure_id_new (QUARK_NIT,
+ nit = gst_structure_new_id (QUARK_NIT,
QUARK_NETWORK_ID, G_TYPE_UINT, network_id,
QUARK_VERSION_NUMBER, G_TYPE_UINT, section->version_number,
QUARK_CURRENT_NEXT_INDICATOR, G_TYPE_UINT,
@@ -818,7 +837,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
data += 2;
transport_name = g_strdup_printf ("transport-%d", transport_stream_id);
- transport = gst_structure_new (transport_name, NULL);
+ transport = gst_structure_new_empty (transport_name);
g_free (transport_name);
gst_structure_id_set (transport,
QUARK_TRANSPORT_STREAM_ID, G_TYPE_UINT, transport_stream_id,
@@ -1303,15 +1322,16 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
}
if (data != end - 4) {
- GST_WARNING ("PID %d invalid NIT parsed %d length %d",
- section->pid, (gint) (data - GST_BUFFER_DATA (section->buffer)),
- GST_BUFFER_SIZE (section->buffer));
+ GST_WARNING ("PID %d invalid NIT parsed %d length %" G_GSIZE_FORMAT,
+ section->pid, (gint) (data - bufdata), size);
goto error;
}
gst_structure_id_set_value (nit, QUARK_TRANSPORTS, &transports);
g_value_unset (&transports);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
GST_DEBUG ("NIT %" GST_PTR_FORMAT, nit);
return nit;
@@ -1320,6 +1340,8 @@ error:
if (nit)
gst_structure_free (nit);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
if (GST_VALUE_HOLDS_LIST (&transports))
g_value_unset (&transports);
@@ -1331,7 +1353,8 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerSection * section)
{
GstStructure *sdt = NULL, *service = NULL;
- guint8 *data, *end, *entry_begin;
+ guint8 *data, *bufdata, *end, *entry_begin;
+ gsize size;
guint16 transport_stream_id, original_network_id, service_id;
guint tmp;
guint sdt_info_length;
@@ -1343,15 +1366,17 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
GValue service_value = { 0 };
GST_DEBUG ("SDT");
+
+ data = bufdata = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
+
/* fixed header + CRC == 16 */
- if (GST_BUFFER_SIZE (section->buffer) < 14) {
+ if (size < 14) {
GST_WARNING ("PID %d invalid SDT size %d",
section->pid, section->section_length);
goto error;
}
- data = GST_BUFFER_DATA (section->buffer);
- end = data + GST_BUFFER_SIZE (section->buffer);
+ end = data + size;
section->table_id = *data++;
section->section_length = GST_READ_UINT16_BE (data) & 0x0FFF;
@@ -1379,7 +1404,7 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
/* skip reserved byte */
data += 1;
- sdt = gst_structure_id_new (QUARK_SDT,
+ sdt = gst_structure_new_id (QUARK_SDT,
QUARK_TRANSPORT_STREAM_ID, G_TYPE_UINT, transport_stream_id,
QUARK_VERSION_NUMBER, G_TYPE_UINT, section->version_number,
QUARK_CURRENT_NEXT_INDICATOR, G_TYPE_UINT,
@@ -1418,7 +1443,7 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
/* TODO send tag event down relevant pad for channel name and provider */
service_name = g_strdup_printf ("service-%d", service_id);
- service = gst_structure_new (service_name, NULL);
+ service = gst_structure_new_empty (service_name);
g_free (service_name);
if (descriptors_loop_length) {
@@ -1508,21 +1533,24 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
}
if (data != end - 4) {
- GST_WARNING ("PID %d invalid SDT parsed %d length %d",
- section->pid, (gint) (data - GST_BUFFER_DATA (section->buffer)),
- GST_BUFFER_SIZE (section->buffer));
+ GST_WARNING ("PID %d invalid SDT parsed %d length %" G_GSIZE_FORMAT,
+ section->pid, (gint) (data - bufdata), size);
goto error;
}
gst_structure_id_set_value (sdt, QUARK_SERVICES, &services);
g_value_unset (&services);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
return sdt;
error:
if (sdt)
gst_structure_free (sdt);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
if (GST_VALUE_HOLDS_LIST (&services))
g_value_unset (&services);
@@ -1541,7 +1569,8 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
guint16 mjd;
guint year, month, day, hour, minute, second;
guint duration;
- guint8 *data, *end, *duration_ptr, *utc_ptr;
+ guint8 *data, *bufdata, *end, *duration_ptr, *utc_ptr;
+ gsize size;
guint16 descriptors_loop_length;
GValue events = { 0 };
GValue event_value = { 0 };
@@ -1549,15 +1578,16 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
gchar *event_name;
guint tmp;
+ data = bufdata = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
+
/* fixed header + CRC == 16 */
- if (GST_BUFFER_SIZE (section->buffer) < 18) {
+ if (size < 18) {
GST_WARNING ("PID %d invalid EIT size %d",
section->pid, section->section_length);
goto error;
}
- data = GST_BUFFER_DATA (section->buffer);
- end = data + GST_BUFFER_SIZE (section->buffer);
+ end = data + size;
section->table_id = *data++;
section->section_length = GST_READ_UINT16_BE (data) & 0x0FFF;
@@ -1588,7 +1618,7 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
last_table_id = *data;
data += 1;
- eit = gst_structure_id_new (QUARK_EIT,
+ eit = gst_structure_new_id (QUARK_EIT,
QUARK_VERSION_NUMBER, G_TYPE_UINT, section->version_number,
QUARK_CURRENT_NEXT_INDICATOR, G_TYPE_UINT,
section->current_next_indicator, QUARK_SERVICE_ID, G_TYPE_UINT,
@@ -1967,15 +1997,16 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
}
if (data != end - 4) {
- GST_WARNING ("PID %d invalid EIT parsed %d length %d",
- section->pid, (gint) (data - GST_BUFFER_DATA (section->buffer)),
- GST_BUFFER_SIZE (section->buffer));
+ GST_WARNING ("PID %d invalid EIT parsed %d length %" G_GSIZE_FORMAT,
+ section->pid, (gint) (data - bufdata), size);
goto error;
}
gst_structure_id_set_value (eit, QUARK_EVENTS, &events);
g_value_unset (&events);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
GST_DEBUG ("EIT %" GST_PTR_FORMAT, eit);
return eit;
@@ -1984,6 +2015,8 @@ error:
if (eit)
gst_structure_free (eit);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
if (GST_VALUE_HOLDS_LIST (&events))
g_value_unset (&events);
@@ -1997,18 +2030,21 @@ mpegts_packetizer_parse_tdt (MpegTSPacketizer2 * packetizer,
GstStructure *tdt = NULL;
guint16 mjd;
guint year, month, day, hour, minute, second;
- guint8 *data, *end, *utc_ptr;
+ guint8 *data, *bufdata, *end, *utc_ptr;
+ gsize size;
GST_DEBUG ("TDT");
+
+ data = bufdata = gst_buffer_map (section->buffer, &size, 0, GST_MAP_READ);
+
/* length always 8 */
- if (G_UNLIKELY (GST_BUFFER_SIZE (section->buffer) != 8)) {
+ if (G_UNLIKELY (size != 8)) {
GST_WARNING ("PID %d invalid TDT size %d",
section->pid, section->section_length);
goto error;
}
- data = GST_BUFFER_DATA (section->buffer);
- end = data + GST_BUFFER_SIZE (section->buffer);
+ end = data + size;
section->table_id = *data++;
section->section_length = GST_READ_UINT16_BE (data) & 0x0FFF;
@@ -2049,12 +2085,16 @@ mpegts_packetizer_parse_tdt (MpegTSPacketizer2 * packetizer,
"hour", G_TYPE_UINT, hour,
"minute", G_TYPE_UINT, minute, "second", G_TYPE_UINT, second, NULL);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
return tdt;
error:
if (tdt)
gst_structure_free (tdt);
+ gst_buffer_unmap (section->buffer, bufdata, size);
+
return NULL;
}
@@ -2132,8 +2172,8 @@ mpegts_packetizer_push (MpegTSPacketizer2 * packetizer, GstBuffer * buffer)
packetizer->offset = GST_BUFFER_OFFSET (buffer);
}
- GST_DEBUG ("Pushing %u byte from offset %" G_GUINT64_FORMAT,
- GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
+ GST_DEBUG ("Pushing %" G_GSIZE_FORMAT " byte from offset %" G_GUINT64_FORMAT,
+ gst_buffer_get_size (buffer), GST_BUFFER_OFFSET (buffer));
gst_adapter_push (packetizer->adapter, buffer);
}
@@ -2227,77 +2267,87 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
packet->buffer = NULL;
+ /* Resync if needed */
if (G_UNLIKELY (!packetizer->know_packet_size)) {
if (!mpegts_try_discover_packet_size (packetizer))
return PACKET_NEED_MORE;
}
while ((avail = packetizer->adapter->size) >= packetizer->packet_size) {
+ guint i;
+ GstBuffer *tmpbuf;
+ guint8 *bufdata;
+
packet->buffer = gst_adapter_take_buffer (packetizer->adapter,
packetizer->packet_size);
+
+ bufdata = packet->bufdata = packet->data_start =
+ gst_buffer_map (packet->buffer, &packet->bufsize, 0, GST_MAP_READ);
+
/* M2TS packets don't start with the sync byte, all other variants do */
- if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE) {
- packet->data_start = GST_BUFFER_DATA (packet->buffer) + 4;
- } else {
- packet->data_start = GST_BUFFER_DATA (packet->buffer);
- }
+ if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE)
+ packet->data_start += 4;
+
/* ALL mpeg-ts variants contain 188 bytes of data. Those with bigger packet
* sizes contain either extra data (timesync, FEC, ..) either before or after
* the data */
packet->data_end = packet->data_start + 188;
GST_BUFFER_OFFSET (packet->buffer) = packet->offset = packetizer->offset;
GST_DEBUG ("offset %" G_GUINT64_FORMAT, packet->offset);
+
packetizer->offset += packetizer->packet_size;
- GST_MEMDUMP ("buffer", GST_BUFFER_DATA (packet->buffer), 16);
+ GST_MEMDUMP ("buffer", bufdata, 16);
GST_MEMDUMP ("data_start", packet->data_start, 16);
/* Check sync byte */
- if (G_UNLIKELY (packet->data_start[0] != 0x47)) {
- guint i;
- GstBuffer *tmpbuf;
-
- GST_LOG ("Lost sync %d", packetizer->packet_size);
- /* Find the 0x47 in the buffer */
- for (i = 0; i < packetizer->packet_size; i++)
- if (GST_BUFFER_DATA (packet->buffer)[i] == 0x47)
- break;
- if (G_UNLIKELY (i == packetizer->packet_size)) {
- GST_ERROR ("REALLY lost the sync");
- gst_buffer_unref (packet->buffer);
- goto done;
- }
+ if (G_LIKELY (packet->data_start[0] == 0x47))
+ goto got_valid_packet;
- if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE) {
- if (i >= 4)
- i -= 4;
- else
- i += 188;
- }
+ GST_LOG ("Lost sync %d", packetizer->packet_size);
+
+ /* Find the 0x47 in the buffer */
+ for (i = 0; i < packetizer->packet_size; i++)
+ if (bufdata[i] == 0x47)
+ break;
- /* Pop out the remaining data... */
- GST_BUFFER_DATA (packet->buffer) += i;
- GST_BUFFER_SIZE (packet->buffer) -= i;
- GST_BUFFER_OFFSET (packet->buffer) += i;
- tmpbuf =
- gst_adapter_take_buffer (packetizer->adapter,
- packetizer->adapter->size);
- /* ... and push everything back in */
- gst_adapter_push (packetizer->adapter, packet->buffer);
- gst_adapter_push (packetizer->adapter, tmpbuf);
- continue;
+ if (G_UNLIKELY (i == packetizer->packet_size)) {
+ GST_ERROR ("REALLY lost the sync");
+ gst_buffer_unmap (packet->buffer, bufdata, packet->bufsize);
+ gst_buffer_unref (packet->buffer);
+ goto done;
}
- return mpegts_packetizer_parse_packet (packetizer, packet);
+ if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE) {
+ if (i >= 4)
+ i -= 4;
+ else
+ i += 188;
+ }
+
+ /* Pop out the remaining data... */
+ gst_buffer_resize (packet->buffer, i, packet->bufsize - i);
+ GST_BUFFER_OFFSET (packet->buffer) += i;
+ tmpbuf =
+ gst_adapter_take_buffer (packetizer->adapter,
+ packetizer->adapter->size);
+ /* ... and push everything back in */
+ gst_adapter_push (packetizer->adapter, packet->buffer);
+ gst_adapter_push (packetizer->adapter, tmpbuf);
}
done:
return PACKET_NEED_MORE;
+
+got_valid_packet:
+ return mpegts_packetizer_parse_packet (packetizer, packet);
}
void
mpegts_packetizer_clear_packet (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerPacket * packet)
{
+ GST_DEBUG ("packet:%p, buffer:%p", packet, packet->buffer);
+
memset (packet, 0, sizeof (MpegTSPacketizerPacket));
}
@@ -2332,8 +2382,9 @@ mpegts_packetizer_push_section (MpegTSPacketizer2 * packetizer,
if (packet->pid == 0x14) {
table_id = data[0];
section->section_length = GST_READ_UINT24_BE (data) & 0x000FFF;
- section->buffer = gst_buffer_create_sub (packet->buffer,
- data - GST_BUFFER_DATA (packet->buffer), section->section_length + 3);
+ section->buffer =
+ gst_buffer_copy_region (packet->buffer, GST_BUFFER_COPY_ALL,
+ data - packet->bufdata, section->section_length + 3);
section->table_id = table_id;
section->complete = TRUE;
res = TRUE;
@@ -2344,8 +2395,8 @@ mpegts_packetizer_push_section (MpegTSPacketizer2 * packetizer,
/* create a sub buffer from the start of the section (table_id and
* section_length included) to the end */
- sub_buf = gst_buffer_create_sub (packet->buffer,
- data - GST_BUFFER_DATA (packet->buffer), packet->data_end - data);
+ sub_buf = gst_buffer_copy_region (packet->buffer, GST_BUFFER_COPY_ALL,
+ data - packet->bufdata, packet->data_end - data);
stream = packetizer->streams[packet->pid];
@@ -2370,10 +2421,11 @@ mpegts_packetizer_push_section (MpegTSPacketizer2 * packetizer,
if (stream->continuity_counter != CONTINUITY_UNSET) {
GST_DEBUG
("PID %d table_id %d sub_table_extension %d payload_unit_start_indicator set but section "
- "not complete (last_continuity: %d continuity: %d sec len %d buffer %d avail %d",
- packet->pid, table_id, subtable_extension, stream->continuity_counter,
- packet->continuity_counter, section_length, GST_BUFFER_SIZE (sub_buf),
- stream->section_adapter->size);
+ "not complete (last_continuity: %d continuity: %d sec len %d buffer %"
+ G_GSIZE_FORMAT " avail %" G_GSIZE_FORMAT, packet->pid, table_id,
+ subtable_extension, stream->continuity_counter,
+ packet->continuity_counter, section_length,
+ gst_buffer_get_size (sub_buf), stream->section_adapter->size);
mpegts_packetizer_clear_section (packetizer, stream);
} else {
GST_DEBUG
diff --git a/gst/mpegtsdemux/mpegtspacketizer.h b/gst/mpegtsdemux/mpegtspacketizer.h
index 832862577..d70a10104 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.h
+++ b/gst/mpegtsdemux/mpegtspacketizer.h
@@ -94,9 +94,13 @@ typedef struct
guint8 continuity_counter;
guint8 *payload;
- guint8 *data_start;
+ /* temporary copies of gst_buffer_map */
+ guint8 *bufdata;
+ gsize bufsize;
+
+ guint8 *data_start; /* Location of 0x47 marker byte */
guint8 *data_end;
- guint8 *data;
+ guint8 *data; /* Location of post-TS-header data */
guint8 afc_flags;
guint64 pcr;
@@ -144,7 +148,7 @@ gboolean mpegts_packetizer_has_packets (MpegTSPacketizer2 *packetizer);
MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerPacket *packet);
void mpegts_packetizer_clear_packet (MpegTSPacketizer2 *packetizer,
- MpegTSPacketizerPacket *packet);
+ MpegTSPacketizerPacket *packet);
void mpegts_packetizer_remove_stream(MpegTSPacketizer2 *packetizer,
gint16 pid);
diff --git a/gst/mpegtsdemux/mpegtsparse.c b/gst/mpegtsdemux/mpegtsparse.c
index 26dde896a..1c3f625b1 100644
--- a/gst/mpegtsdemux/mpegtsparse.c
+++ b/gst/mpegtsdemux/mpegtsparse.c
@@ -70,13 +70,13 @@ struct _MpegTSParsePad
};
static GstStaticPadTemplate src_template =
-GST_STATIC_PAD_TEMPLATE ("src%d", GST_PAD_SRC,
+GST_STATIC_PAD_TEMPLATE ("src_%u", GST_PAD_SRC,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
static GstStaticPadTemplate program_template =
-GST_STATIC_PAD_TEMPLATE ("program_%d", GST_PAD_SRC,
+GST_STATIC_PAD_TEMPLATE ("program_%u", GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
@@ -113,28 +113,14 @@ static void mpegts_parse_reset_selected_programs (MpegTSParse2 * parse,
static void mpegts_parse_pad_removed (GstElement * element, GstPad * pad);
static GstPad *mpegts_parse_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * name);
+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
static void mpegts_parse_release_pad (GstElement * element, GstPad * pad);
-static gboolean mpegts_parse_src_pad_query (GstPad * pad, GstQuery * query);
+static gboolean mpegts_parse_src_pad_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean push_event (MpegTSBase * base, GstEvent * event);
-GST_BOILERPLATE (MpegTSParse2, mpegts_parse, MpegTSBase, GST_TYPE_MPEGTS_BASE);
-
-static void
-mpegts_parse_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &program_template);
-
- gst_element_class_set_details_simple (element_class,
- "MPEG transport stream parser", "Codec/Parser",
- "Parses MPEG2 transport streams",
- "Alessandro Decina <alessandro@nnva.org>, "
- "Zaheer Abbas Merali <zaheerabbas at merali dot org>");
-}
+#define mpegts_parse_parent_class parent_class
+G_DEFINE_TYPE (MpegTSParse2, mpegts_parse, GST_TYPE_MPEGTS_BASE);
static void
mpegts_parse_class_init (MpegTSParse2Class * klass)
@@ -148,6 +134,17 @@ mpegts_parse_class_init (MpegTSParse2Class * klass)
element_class->request_new_pad = mpegts_parse_request_new_pad;
element_class->release_pad = mpegts_parse_release_pad;
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&program_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "MPEG transport stream parser", "Codec/Parser",
+ "Parses MPEG2 transport streams",
+ "Alessandro Decina <alessandro@nnva.org>, "
+ "Zaheer Abbas Merali <zaheerabbas at merali dot org>");
+
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->set_property = mpegts_parse_set_property;
gobject_class->get_property = mpegts_parse_get_property;
@@ -167,7 +164,7 @@ mpegts_parse_class_init (MpegTSParse2Class * klass)
}
static void
-mpegts_parse_init (MpegTSParse2 * parse, MpegTSParse2Class * klass)
+mpegts_parse_init (MpegTSParse2 * parse)
{
parse->need_sync_program_pads = FALSE;
parse->program_numbers = g_strdup ("");
@@ -225,7 +222,7 @@ mpegts_parse_activate_program (MpegTSParse2 * parse,
gchar *pad_name;
pad_name =
- g_strdup_printf ("program_%d",
+ g_strdup_printf ("program_%u",
((MpegTSBaseProgram *) program)->program_number);
tspad = mpegts_parse_create_tspad (parse, pad_name);
@@ -428,7 +425,7 @@ mpegts_parse_pad_removed (GstElement * element, GstPad * pad)
static GstPad *
mpegts_parse_request_new_pad (GstElement * element, GstPadTemplate * template,
- const gchar * unused)
+ const gchar * unused, const GstCaps * caps)
{
MpegTSParse2 *parse;
gchar *name;
@@ -440,7 +437,7 @@ mpegts_parse_request_new_pad (GstElement * element, GstPadTemplate * template,
parse = GST_MPEGTS_PARSE (element);
GST_OBJECT_LOCK (element);
- name = g_strdup_printf ("src%d", parse->req_pads++);
+ name = g_strdup_printf ("src_%u", parse->req_pads++);
GST_OBJECT_UNLOCK (element);
pad = mpegts_parse_create_tspad (parse, name)->pad;
@@ -510,8 +507,7 @@ mpegts_parse_tspad_push (MpegTSParse2 * parse, MpegTSParsePad * tspad,
MpegTSBaseProgram *bp = (MpegTSBaseProgram *) tspad->program;
pad_pids = bp->streams;
if (bp->tags) {
- gst_element_found_tags_for_pad (GST_ELEMENT_CAST (parse), tspad->pad,
- bp->tags);
+ gst_pad_push_event (tspad->pad, gst_event_new_tag (bp->tags));
bp->tags = NULL;
}
} else {
@@ -563,9 +559,15 @@ mpegts_parse_push (MpegTSBase * base, MpegTSPacketizerPacket * packet,
mpegts_parse_sync_program_pads (parse);
pid = packet->pid;
+
+#if 0
buffer = gst_buffer_make_metadata_writable (packet->buffer);
+
/* we have the same caps on all the src pads */
gst_buffer_set_caps (buffer, base->packetizer->caps);
+#else
+ buffer = packet->buffer;
+#endif
GST_OBJECT_LOCK (parse);
/* clear tspad->pushed on pads */
@@ -673,9 +675,9 @@ mpegts_parse_program_stopped (MpegTSBase * base, MpegTSBaseProgram * program)
}
static gboolean
-mpegts_parse_src_pad_query (GstPad * pad, GstQuery * query)
+mpegts_parse_src_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- MpegTSParse2 *parse = GST_MPEGTS_PARSE (gst_pad_get_parent (pad));
+ MpegTSParse2 *parse = GST_MPEGTS_PARSE (parent);
gboolean res;
switch (GST_QUERY_TYPE (query)) {
@@ -698,9 +700,8 @@ mpegts_parse_src_pad_query (GstPad * pad, GstQuery * query)
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
}
- gst_object_unref (parse);
return res;
}
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index 118ffb598..174e81348 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -112,8 +112,6 @@ struct _TSDemuxStream
guint8 nbpending;
/* Current data to be pushed out */
- GstBufferList *current;
- GstBufferListIterator *currentit;
GList *currentlist;
/* Current PTS for this stream */
@@ -130,7 +128,7 @@ struct _TSDemuxStream
"video/x-dirac;" \
"video/x-wmv," \
"wmvversion = (int) 3, " \
- "format = (fourcc) WVC1" \
+ "format = (string) WVC1" \
)
#define AUDIO_CAPS \
@@ -185,8 +183,8 @@ enum
};
/* Pad functions */
-static const GstQueryType *gst_ts_demux_srcpad_query_types (GstPad * pad);
-static gboolean gst_ts_demux_srcpad_query (GstPad * pad, GstQuery * query);
+static gboolean gst_ts_demux_srcpad_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
/* mpegtsbase methods */
@@ -221,13 +219,9 @@ static GstFlowReturn
gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream);
static gboolean push_event (MpegTSBase * base, GstEvent * event);
-static void _extra_init (GType type);
-
-GST_BOILERPLATE_FULL (GstTSDemux, gst_ts_demux, MpegTSBase,
- GST_TYPE_MPEGTS_BASE, _extra_init);
static void
-_extra_init (GType type)
+_extra_init (void)
{
QUARK_TSDEMUX = g_quark_from_string ("tsdemux");
QUARK_PID = g_quark_from_string ("pid");
@@ -238,32 +232,15 @@ _extra_init (GType type)
QUARK_OFFSET = g_quark_from_string ("offset");
}
-static void
-gst_ts_demux_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class,
- &video_template);
- gst_element_class_add_static_pad_template (element_class,
- &audio_template);
- gst_element_class_add_static_pad_template (element_class,
- &subpicture_template);
- gst_element_class_add_static_pad_template (element_class,
- &private_template);
-
- gst_element_class_set_details_simple (element_class,
- "MPEG transport stream demuxer",
- "Codec/Demuxer",
- "Demuxes MPEG2 transport streams",
- "Zaheer Abbas Merali <zaheerabbas at merali dot org>\n"
- "Edward Hervey <edward.hervey@collabora.co.uk>");
-}
+#define gst_ts_demux_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTSDemux, gst_ts_demux, GST_TYPE_MPEGTS_BASE,
+ _extra_init ());
static void
gst_ts_demux_class_init (GstTSDemuxClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *element_class;
MpegTSBaseClass *ts_class;
gobject_class = G_OBJECT_CLASS (klass);
@@ -281,6 +258,22 @@ gst_ts_demux_class_init (GstTSDemuxClass * klass)
"Emit messages for every pcr/opcr/pts/dts", FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ element_class = GST_ELEMENT_CLASS (klass);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&subpicture_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&private_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "MPEG transport stream demuxer",
+ "Codec/Demuxer",
+ "Demuxes MPEG2 transport streams",
+ "Zaheer Abbas Merali <zaheerabbas at merali dot org>\n"
+ "Edward Hervey <edward.hervey@collabora.co.uk>");
ts_class = GST_MPEGTS_BASE_CLASS (klass);
ts_class->reset = GST_DEBUG_FUNCPTR (gst_ts_demux_reset);
@@ -295,7 +288,7 @@ gst_ts_demux_class_init (GstTSDemuxClass * klass)
}
static void
-gst_ts_demux_init (GstTSDemux * demux, GstTSDemuxClass * klass)
+gst_ts_demux_init (GstTSDemux * demux)
{
demux->need_newsegment = TRUE;
demux->program_number = -1;
@@ -379,27 +372,15 @@ gst_ts_demux_get_property (GObject * object, guint prop_id,
}
}
-static const GstQueryType *
-gst_ts_demux_srcpad_query_types (GstPad * pad)
-{
- static const GstQueryType query_types[] = {
- GST_QUERY_DURATION,
- GST_QUERY_SEEKING,
- 0
- };
-
- return query_types;
-}
-
static gboolean
-gst_ts_demux_srcpad_query (GstPad * pad, GstQuery * query)
+gst_ts_demux_srcpad_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res = TRUE;
GstFormat format;
GstTSDemux *demux;
MpegTSBase *base;
- demux = GST_TS_DEMUX (gst_pad_get_parent (pad));
+ demux = GST_TS_DEMUX (parent);
base = GST_MPEGTS_BASE (demux);
switch (GST_QUERY_TYPE (query)) {
@@ -436,10 +417,9 @@ gst_ts_demux_srcpad_query (GstPad * pad, GstQuery * query)
}
break;
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
}
- gst_object_unref (demux);
return res;
}
@@ -619,8 +599,7 @@ gst_ts_demux_perform_seek (MpegTSBase * base, GstSegment * segment, guint16 pid)
max_loop_cnt = (segment->flags & GST_SEEK_FLAG_ACCURATE) ? 25 : 10;
seektime =
- MAX (0,
- segment->last_stop - SEEK_TIMESTAMP_OFFSET) + demux->first_pcr.gsttime;
+ MAX (0, segment->stop - SEEK_TIMESTAMP_OFFSET) + demux->first_pcr.gsttime;
seekpcroffset.gsttime = seektime;
GST_DEBUG ("seeking to %" GST_TIME_FORMAT, GST_TIME_ARGS (seektime));
@@ -793,7 +772,9 @@ gst_ts_demux_perform_seek (MpegTSBase * base, GstSegment * segment, guint16 pid)
seektime -= demux->first_pcr.gsttime;
+#if 0
segment->last_stop = seektime;
+#endif
segment->time = seektime;
/* we stop at the end */
@@ -842,24 +823,21 @@ gst_ts_demux_do_seek (MpegTSBase * base, GstEvent * event, guint16 pid)
/* copy segment, we need this because we still need the old
* segment when we close the current segment. */
memcpy (&seeksegment, &demux->segment, sizeof (GstSegment));
+
/* configure the segment with the seek variables */
GST_DEBUG_OBJECT (demux, "configuring seek");
GST_DEBUG ("seeksegment: start: %" GST_TIME_FORMAT " stop: %"
- GST_TIME_FORMAT " time: %" GST_TIME_FORMAT " accum: %" GST_TIME_FORMAT
- " last_stop: %" GST_TIME_FORMAT " duration: %" GST_TIME_FORMAT,
+ GST_TIME_FORMAT " time: %" GST_TIME_FORMAT
+ " duration: %" GST_TIME_FORMAT,
GST_TIME_ARGS (seeksegment.start), GST_TIME_ARGS (seeksegment.stop),
- GST_TIME_ARGS (seeksegment.time), GST_TIME_ARGS (seeksegment.accum),
- GST_TIME_ARGS (seeksegment.last_stop),
- GST_TIME_ARGS (seeksegment.duration));
- gst_segment_set_seek (&seeksegment, rate, format, flags, start_type, start,
+ GST_TIME_ARGS (seeksegment.time), GST_TIME_ARGS (seeksegment.duration));
+ gst_segment_do_seek (&seeksegment, rate, format, flags, start_type, start,
stop_type, stop, &update);
GST_DEBUG ("seeksegment: start: %" GST_TIME_FORMAT " stop: %"
- GST_TIME_FORMAT " time: %" GST_TIME_FORMAT " accum: %" GST_TIME_FORMAT
- " last_stop: %" GST_TIME_FORMAT " duration: %" GST_TIME_FORMAT,
+ GST_TIME_FORMAT " time: %" GST_TIME_FORMAT
+ " duration: %" GST_TIME_FORMAT,
GST_TIME_ARGS (seeksegment.start), GST_TIME_ARGS (seeksegment.stop),
- GST_TIME_ARGS (seeksegment.time), GST_TIME_ARGS (seeksegment.accum),
- GST_TIME_ARGS (seeksegment.last_stop),
- GST_TIME_ARGS (seeksegment.duration));
+ GST_TIME_ARGS (seeksegment.time), GST_TIME_ARGS (seeksegment.duration));
res = gst_ts_demux_perform_seek (base, &seeksegment, pid);
if (G_UNLIKELY (res != GST_FLOW_OK)) {
@@ -873,7 +851,7 @@ gst_ts_demux_do_seek (MpegTSBase * base, GstEvent * event, guint16 pid)
if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
gst_element_post_message (GST_ELEMENT_CAST (demux),
gst_message_new_segment_start (GST_OBJECT_CAST (demux),
- demux->segment.format, demux->segment.last_stop));
+ demux->segment.format, demux->segment.stop));
}
done:
@@ -881,10 +859,10 @@ done:
}
static gboolean
-gst_ts_demux_srcpad_event (GstPad * pad, GstEvent * event)
+gst_ts_demux_srcpad_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = TRUE;
- GstTSDemux *demux = GST_TS_DEMUX (gst_pad_get_parent (pad));
+ GstTSDemux *demux = GST_TS_DEMUX (parent);
GST_DEBUG_OBJECT (pad, "Got event %s",
gst_event_type_get_name (GST_EVENT_TYPE (event)));
@@ -897,10 +875,9 @@ gst_ts_demux_srcpad_event (GstPad * pad, GstEvent * event)
gst_event_unref (event);
break;
default:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
}
- gst_object_unref (demux);
return res;
}
@@ -921,6 +898,8 @@ push_event (MpegTSBase * base, GstEvent * event)
}
}
+ gst_event_unref (event);
+
return TRUE;
}
@@ -1000,7 +979,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
GST_LOG ("ac3 audio");
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-ac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-ac3");
g_free (desc);
break;
}
@@ -1011,7 +990,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
GST_LOG ("ac3 audio");
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-eac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-eac3");
g_free (desc);
break;
}
@@ -1022,7 +1001,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
GST_LOG ("teletext");
template = gst_static_pad_template_get (&private_template);
name = g_strdup_printf ("private_%04x", bstream->pid);
- caps = gst_caps_new_simple ("private/teletext", NULL);
+ caps = gst_caps_new_empty_simple ("private/teletext");
g_free (desc);
break;
}
@@ -1033,7 +1012,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
GST_LOG ("subtitling");
template = gst_static_pad_template_get (&private_template);
name = g_strdup_printf ("private_%04x", bstream->pid);
- caps = gst_caps_new_simple ("subpicture/x-dvb", NULL);
+ caps = gst_caps_new_empty_simple ("subpicture/x-dvb");
g_free (desc);
}
/* hack for itv hd (sid 10510, video pid 3401 */
@@ -1097,7 +1076,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
/* dirac in hex */
template = gst_static_pad_template_get (&video_template);
name = g_strdup_printf ("video_%04x", bstream->pid);
- caps = gst_caps_new_simple ("video/x-dirac", NULL);
+ caps = gst_caps_new_empty_simple ("video/x-dirac");
}
}
g_free (desc);
@@ -1117,8 +1096,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
name = g_strdup_printf ("video_%04x", bstream->pid);
caps = gst_caps_new_simple ("video/x-wmv",
"wmvversion", G_TYPE_INT, 3,
- "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('W', 'V', 'C', '1'),
- NULL);
+ "format", G_TYPE_STRING, "WVC1", NULL);
}
}
g_free (desc);
@@ -1133,7 +1111,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
if (DESC_REGISTRATION_format_identifier (desc) == DRF_ID_HDMV) {
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-eac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-eac3");
}
g_free (desc);
}
@@ -1147,7 +1125,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
if (desc) {
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-eac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-eac3");
g_free (desc);
break;
}
@@ -1164,57 +1142,61 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
g_free (desc);
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-ac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-ac3");
break;
}
case ST_BD_AUDIO_EAC3:
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-eac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-eac3");
break;
case ST_PS_AUDIO_DTS:
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-dts", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-dts");
break;
case ST_PS_AUDIO_LPCM:
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-lpcm", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-lpcm");
break;
case ST_BD_AUDIO_LPCM:
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
- caps = gst_caps_new_simple ("audio/x-private-ts-lpcm", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-private-ts-lpcm");
break;
case ST_PS_DVD_SUBPICTURE:
template = gst_static_pad_template_get (&subpicture_template);
name = g_strdup_printf ("subpicture_%04x", bstream->pid);
- caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
+ caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture");
break;
case ST_BD_PGS_SUBPICTURE:
template = gst_static_pad_template_get (&subpicture_template);
name = g_strdup_printf ("subpicture_%04x", bstream->pid);
- caps = gst_caps_new_simple ("subpicture/x-pgs", NULL);
+ caps = gst_caps_new_empty_simple ("subpicture/x-pgs");
break;
default:
GST_WARNING ("Non-media stream (stream_type:0x%x). Not creating pad",
bstream->stream_type);
break;
}
+
if (template && name && caps) {
GST_LOG ("stream:%p creating pad with name %s and caps %s", stream, name,
gst_caps_to_string (caps));
pad = gst_pad_new_from_template (template, name);
gst_pad_use_fixed_caps (pad);
gst_pad_set_caps (pad, caps);
- gst_pad_set_query_type_function (pad, gst_ts_demux_srcpad_query_types);
gst_pad_set_query_function (pad, gst_ts_demux_srcpad_query);
gst_pad_set_event_function (pad, gst_ts_demux_srcpad_event);
- gst_caps_unref (caps);
}
- g_free (name);
+ if (name)
+ g_free (name);
+ if (template)
+ gst_object_unref (template);
+ if (caps)
+ gst_caps_unref (caps);
return pad;
}
@@ -1293,8 +1275,6 @@ gst_ts_demux_stream_flush (TSDemuxStream * stream)
gst_buffer_unref (stream->pendingbuffers[i]);
memset (stream->pendingbuffers, 0, TS_MAX_PENDING_BUFFERS);
stream->nbpending = 0;
-
- stream->current = NULL;
}
static void
@@ -1379,6 +1359,7 @@ process_section (MpegTSBase * base)
next:
mpegts_packetizer_clear_packet (base->packetizer, &packet);
}
+
return done;
}
@@ -1557,7 +1538,6 @@ find_timestamps (MpegTSBase * base, guint64 initoff, guint64 * offset)
GstFlowReturn ret = GST_FLOW_OK;
GstBuffer *buf;
gboolean done = FALSE;
- GstFormat format = GST_FORMAT_BYTES;
gint64 total_bytes;
guint64 scan_offset;
guint i = 0;
@@ -1604,8 +1584,8 @@ find_timestamps (MpegTSBase * base, guint64 initoff, guint64 * offset)
demux->program = NULL;
/* Find end position */
- if (G_UNLIKELY (!gst_pad_query_peer_duration (base->sinkpad, &format,
- &total_bytes) || format != GST_FORMAT_BYTES)) {
+ if (G_UNLIKELY (!gst_pad_peer_query_duration (base->sinkpad, GST_FORMAT_BYTES,
+ &total_bytes))) {
GST_WARNING_OBJECT (base, "Couldn't get upstream size in bytes");
ret = GST_FLOW_ERROR;
mpegts_packetizer_clear (base->packetizer);
@@ -1645,9 +1625,8 @@ find_timestamps (MpegTSBase * base, guint64 initoff, guint64 * offset)
verify_timestamps (base, &initial, &final);
- gst_segment_set_duration (&demux->segment, GST_FORMAT_TIME,
- demux->last_pcr.gsttime - demux->first_pcr.gsttime);
- demux->duration = demux->last_pcr.gsttime - demux->first_pcr.gsttime;
+ demux->duration = demux->segment.duration =
+ demux->last_pcr.gsttime - demux->first_pcr.gsttime;
GST_DEBUG ("Done, duration:%" GST_TIME_FORMAT,
GST_TIME_ARGS (demux->duration));
@@ -1703,7 +1682,9 @@ process_pcr (MpegTSBase * base, guint64 initoff, TSPcrOffset * pcroffset,
pcrpattern = 0x47000020 | ((program->pcr_pid & 0x1fff) << 8);
for (i = 0; (i < 20) && (nbpcr < numpcr); i++) {
- guint offset, size;
+ guint offset;
+ gsize size, bufsize;
+ gpointer data;
ret =
gst_pad_pull_range (base->sinkpad,
@@ -1712,17 +1693,21 @@ process_pcr (MpegTSBase * base, guint64 initoff, TSPcrOffset * pcroffset,
if (G_UNLIKELY (ret != GST_FLOW_OK))
goto beach;
- gst_byte_reader_init_from_buffer (&br, buf);
+ data = gst_buffer_map (buf, &bufsize, 0, GST_MAP_READ);
+ size = bufsize;
+
+ gst_byte_reader_init (&br, data, size);
offset = 0;
- size = GST_BUFFER_SIZE (buf);
resync:
offset = gst_byte_reader_masked_scan_uint32 (&br, 0xff000000, 0x47000000,
0, base->packetsize);
- if (offset == -1)
+ if (offset == -1) {
+ gst_buffer_unmap (buf, data, bufsize);
continue;
+ }
while ((nbpcr < numpcr) && (size >= base->packetsize)) {
@@ -1771,6 +1756,7 @@ process_pcr (MpegTSBase * base, guint64 initoff, TSPcrOffset * pcroffset,
size -= base->packetsize;
offset += base->packetsize;
}
+ gst_buffer_unmap (buf, data, bufsize);
}
beach:
@@ -1827,7 +1813,7 @@ gst_ts_demux_record_pcr (GstTSDemux * demux, TSDemuxStream * stream,
if (G_UNLIKELY (demux->emit_statistics)) {
GstStructure *st;
- st = gst_structure_id_empty_new (QUARK_TSDEMUX);
+ st = gst_structure_new_id_empty (QUARK_TSDEMUX);
gst_structure_id_set (st,
QUARK_PID, G_TYPE_UINT, bs->pid,
QUARK_OFFSET, G_TYPE_UINT64, offset, QUARK_PCR, G_TYPE_UINT64, pcr,
@@ -1849,7 +1835,7 @@ gst_ts_demux_record_opcr (GstTSDemux * demux, TSDemuxStream * stream,
if (G_UNLIKELY (demux->emit_statistics)) {
GstStructure *st;
- st = gst_structure_id_empty_new (QUARK_TSDEMUX);
+ st = gst_structure_new_id_empty (QUARK_TSDEMUX);
gst_structure_id_set (st,
QUARK_PID, G_TYPE_UINT, bs->pid,
QUARK_OFFSET, G_TYPE_UINT64, offset,
@@ -1871,7 +1857,7 @@ gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream,
if (G_UNLIKELY (demux->emit_statistics)) {
GstStructure *st;
- st = gst_structure_id_empty_new (QUARK_TSDEMUX);
+ st = gst_structure_new_id_empty (QUARK_TSDEMUX);
gst_structure_id_set (st,
QUARK_PID, G_TYPE_UINT, bs->pid,
QUARK_OFFSET, G_TYPE_UINT64, offset, QUARK_PTS, G_TYPE_UINT64, pts,
@@ -1893,7 +1879,7 @@ gst_ts_demux_record_dts (GstTSDemux * demux, TSDemuxStream * stream,
if (G_UNLIKELY (demux->emit_statistics)) {
GstStructure *st;
- st = gst_structure_id_empty_new (QUARK_TSDEMUX);
+ st = gst_structure_new_id_empty (QUARK_TSDEMUX);
gst_structure_id_set (st,
QUARK_PID, G_TYPE_UINT, bs->pid,
QUARK_OFFSET, G_TYPE_UINT64, offset, QUARK_DTS, G_TYPE_UINT64, dts,
@@ -1934,21 +1920,22 @@ gst_ts_demux_parse_pes_header (GstTSDemux * demux, TSDemuxStream * stream)
{
MpegTSBase *base = (MpegTSBase *) demux;
PESHeader header;
+ GstBuffer *buf = stream->pendingbuffers[0];
GstFlowReturn res = GST_FLOW_OK;
gint offset = 0;
guint8 *data;
- guint32 length;
+ gsize length;
guint64 bufferoffset;
GstClockTime time;
PESParsingResult parseres;
- data = GST_BUFFER_DATA (stream->pendingbuffers[0]);
- length = GST_BUFFER_SIZE (stream->pendingbuffers[0]);
- bufferoffset = GST_BUFFER_OFFSET (stream->pendingbuffers[0]);
+ data = gst_buffer_map (buf, &length, 0, GST_MAP_READ);
+ bufferoffset = GST_BUFFER_OFFSET (buf);
GST_MEMDUMP ("Header buffer", data, MIN (length, 32));
parseres = mpegts_parse_pes_header (data, length, &header, &offset);
+
if (G_UNLIKELY (parseres == PES_PARSING_NEED_MORE))
goto discont;
if (G_UNLIKELY (parseres == PES_PARSING_BAD)) {
@@ -2012,30 +1999,25 @@ gst_ts_demux_parse_pes_header (GstTSDemux * demux, TSDemuxStream * stream)
if (!GST_CLOCK_TIME_IS_VALID (base->in_gap))
base->in_gap = 0;
- GST_BUFFER_TIMESTAMP (stream->pendingbuffers[0]) = time + base->in_gap;
+ GST_BUFFER_TIMESTAMP (buf) = time + base->in_gap;
}
if (header.DTS != -1)
gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset);
+ gst_buffer_unmap (buf, data, length);
+
/* Remove PES headers */
GST_DEBUG ("Moving data forward by %d bytes", header.header_size);
- GST_BUFFER_DATA (stream->pendingbuffers[0]) += header.header_size;
- GST_BUFFER_SIZE (stream->pendingbuffers[0]) -= header.header_size;
+ gst_buffer_resize (buf, header.header_size, length - header.header_size);
/* FIXME : responsible for switching to PENDING_PACKET_BUFFER and
* creating the bufferlist */
if (1) {
/* Append to the buffer list */
- if (G_UNLIKELY (stream->current == NULL)) {
+ if (G_UNLIKELY (stream->currentlist == NULL)) {
guint8 i;
- /* Create a new bufferlist */
- stream->current = gst_buffer_list_new ();
- stream->currentit = gst_buffer_list_iterate (stream->current);
- stream->currentlist = NULL;
- gst_buffer_list_iterator_add_group (stream->currentit);
-
/* Push pending buffers into the list */
for (i = stream->nbpending; i; i--)
stream->currentlist =
@@ -2062,14 +2044,21 @@ gst_ts_demux_queue_data (GstTSDemux * demux, TSDemuxStream * stream,
MpegTSPacketizerPacket * packet)
{
GstBuffer *buf;
+ guint8 *data;
+ gsize size;
GST_DEBUG ("state:%d", stream->state);
buf = packet->buffer;
- /* HACK : Instead of creating a new buffer, we just modify the data/size
- * of the buffer to point to the payload */
- GST_BUFFER_DATA (buf) = packet->payload;
- GST_BUFFER_SIZE (buf) = packet->data_end - packet->payload;
+ data = gst_buffer_map (buf, &size, 0, GST_MAP_READ);
+
+ GST_DEBUG ("Resizing buffer to %d (size:%d) (Was %" G_GSIZE_FORMAT
+ " bytes long)", (int) (packet->payload - data),
+ (int) (packet->data_end - packet->payload), size);
+ gst_buffer_unmap (buf, data, size);
+
+ gst_buffer_resize (buf, packet->payload - data,
+ packet->data_end - packet->payload);
if (stream->state == PENDING_PACKET_EMPTY) {
if (G_UNLIKELY (!packet->payload_unit_start_indicator)) {
@@ -2078,10 +2067,6 @@ gst_ts_demux_queue_data (GstTSDemux * demux, TSDemuxStream * stream,
} else {
GST_LOG ("EMPTY=>HEADER");
stream->state = PENDING_PACKET_HEADER;
- if (stream->pad) {
- GST_DEBUG ("Setting pad caps on buffer %p", buf);
- gst_buffer_set_caps (buf, GST_PAD_CAPS (stream->pad));
- }
}
}
@@ -2174,9 +2159,8 @@ calculate_and_push_newsegment (GstTSDemux * demux, TSDemuxStream * stream)
GST_DEBUG ("new segment: start: %" GST_TIME_FORMAT " stop: %"
GST_TIME_FORMAT " time: %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
GST_TIME_ARGS (stop), GST_TIME_ARGS (position));
- newsegmentevent =
- gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, start, stop,
- position);
+
+ newsegmentevent = gst_event_new_segment (&demux->segment);
push_event ((MpegTSBase *) demux, newsegmentevent);
@@ -2187,13 +2171,15 @@ static GstFlowReturn
gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
{
GstFlowReturn res = GST_FLOW_OK;
+ GList *tmp;
MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
+ GstBuffer *buf;
GST_DEBUG ("stream:%p, pid:0x%04x stream_type:%d state:%d pad:%s:%s",
stream, bs->pid, bs->stream_type, stream->state,
GST_DEBUG_PAD_NAME (stream->pad));
- if (G_UNLIKELY (stream->current == NULL)) {
+ if (G_UNLIKELY (stream->currentlist == NULL)) {
GST_LOG ("stream->current == NULL");
goto beach;
}
@@ -2209,8 +2195,7 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
if (G_UNLIKELY (stream->pad == NULL)) {
g_list_foreach (stream->currentlist, (GFunc) gst_buffer_unref, NULL);
g_list_free (stream->currentlist);
- gst_buffer_list_iterator_free (stream->currentit);
- gst_buffer_list_unref (stream->current);
+ stream->currentlist = NULL;
goto beach;
}
@@ -2219,16 +2204,19 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
/* We have a confirmed buffer, let's push it out */
GST_LOG ("Putting pending data into GstBufferList");
+
stream->currentlist = g_list_reverse (stream->currentlist);
- gst_buffer_list_iterator_add_list (stream->currentit, stream->currentlist);
- gst_buffer_list_iterator_free (stream->currentit);
+ buf = (GstBuffer *) stream->currentlist->data;
+
+ for (tmp = stream->currentlist->next; tmp; tmp = tmp->next) {
+ buf = gst_buffer_join (buf, (GstBuffer *) tmp->data);
+ }
GST_DEBUG_OBJECT (stream->pad,
- "Pushing buffer list with timestamp: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (gst_buffer_list_get
- (stream->current, 0, 0))));
+ "Pushing buffer with timestamp: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
- res = gst_pad_push_list (stream->pad, stream->current);
+ res = gst_pad_push (stream->pad, buf);
GST_DEBUG_OBJECT (stream->pad, "Returned %s", gst_flow_get_name (res));
res = tsdemux_combine_flows (demux, stream, res);
GST_DEBUG_OBJECT (stream->pad, "combined %s", gst_flow_get_name (res));
@@ -2239,7 +2227,9 @@ beach:
stream->state = PENDING_PACKET_EMPTY;
memset (stream->pendingbuffers, 0, TS_MAX_PENDING_BUFFERS);
stream->nbpending = 0;
- stream->current = NULL;
+ if (stream->currentlist)
+ g_list_free (stream->currentlist);
+ stream->currentlist = NULL;
return res;
}
@@ -2250,8 +2240,10 @@ gst_ts_demux_handle_packet (GstTSDemux * demux, TSDemuxStream * stream,
{
GstFlowReturn res = GST_FLOW_OK;
+#if 0
GST_DEBUG ("buffer:%p, data:%p", GST_BUFFER_DATA (packet->buffer),
packet->data);
+#endif
GST_LOG ("pid 0x%04x pusi:%d, afc:%d, cont:%d, payload:%p",
packet->pid,
packet->payload_unit_start_indicator,
@@ -2259,8 +2251,8 @@ gst_ts_demux_handle_packet (GstTSDemux * demux, TSDemuxStream * stream,
packet->continuity_counter, packet->payload);
if (section) {
- GST_DEBUG ("section complete:%d, buffer size %d",
- section->complete, GST_BUFFER_SIZE (section->buffer));
+ GST_DEBUG ("section complete:%d, buffer size %" G_GSIZE_FORMAT,
+ section->complete, gst_buffer_get_size (section->buffer));
gst_buffer_unref (packet->buffer);
return res;
}
@@ -2303,6 +2295,8 @@ gst_ts_demux_push (MpegTSBase * base, MpegTSPacketizerPacket * packet,
TSDemuxStream *stream = NULL;
GstFlowReturn res = GST_FLOW_OK;
+ GST_DEBUG ("packet->buffer %p", packet->buffer);
+
if (G_LIKELY (demux->program)) {
stream = (TSDemuxStream *) demux->program->streams[packet->pid];
diff --git a/gst/mpegtsdemux/tsdemux.h b/gst/mpegtsdemux/tsdemux.h
index 395cf3e13..c74d4970d 100644
--- a/gst/mpegtsdemux/tsdemux.h
+++ b/gst/mpegtsdemux/tsdemux.h
@@ -70,6 +70,7 @@ struct _GstTSDemux
MpegTSBaseProgram *program; /* Current program */
guint current_program_number;
gboolean need_newsegment;
+
/* Downstream segment */
GstSegment segment;
GstClockTime duration; /* Total duration */
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index f4b375ea9..3e3b3f9e1 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -108,7 +108,7 @@ enum
};
static GstStaticPadTemplate mpegtsmux_sink_factory =
- GST_STATIC_PAD_TEMPLATE ("sink_%d",
+ GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpeg, "
@@ -164,10 +164,10 @@ mpegtsmux_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &mpegtsmux_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &mpegtsmux_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mpegtsmux_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mpegtsmux_src_factory));
gst_element_class_set_details_simple (element_class,
"MPEG Transport Stream Muxer", "Codec/Muxer",
diff --git a/gst/mpegvideoparse/mpegvideoparse.c b/gst/mpegvideoparse/mpegvideoparse.c
index c91ed072b..52a34c10f 100644
--- a/gst/mpegvideoparse/mpegvideoparse.c
+++ b/gst/mpegvideoparse/mpegvideoparse.c
@@ -127,9 +127,10 @@ gst_mpegvideoparse_base_init (MpegVideoParseClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class,
"MPEG video elementary stream parser",
diff --git a/gst/mve/gstmvedemux.c b/gst/mve/gstmvedemux.c
index 8a0cc5ce8..a101a9059 100644
--- a/gst/mve/gstmvedemux.c
+++ b/gst/mve/gstmvedemux.c
@@ -1090,12 +1090,12 @@ gst_mve_demux_base_init (GstMveDemuxClass * klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &vidsrc_template);
- gst_element_class_add_static_pad_template (element_class,
- &audsrc_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vidsrc_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audsrc_template));
gst_element_class_set_details_simple (element_class, "MVE Demuxer",
"Codec/Demuxer",
"Demultiplex an Interplay movie (MVE) stream into audio and video",
diff --git a/gst/mve/gstmvemux.c b/gst/mve/gstmvemux.c
index 87165f46f..e6c2fcb6c 100644
--- a/gst/mve/gstmvemux.c
+++ b/gst/mve/gstmvemux.c
@@ -1349,11 +1349,12 @@ gst_mve_mux_base_init (GstMveMuxClass * klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &audio_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &video_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_sink_factory));
gst_element_class_set_details_simple (element_class, "MVE Multiplexer",
"Codec/Muxer",
diff --git a/gst/mxf/mxfaes-bwf.c b/gst/mxf/mxfaes-bwf.c
index d8862d75b..b9217ba6e 100644
--- a/gst/mxf/mxfaes-bwf.c
+++ b/gst/mxf/mxfaes-bwf.c
@@ -540,7 +540,7 @@ G_DEFINE_TYPE (MXFMetadataAES3AudioEssenceDescriptor,
MXF_TYPE_METADATA_WAVE_AUDIO_ESSENCE_DESCRIPTOR);
static void
-mxf_metadata_aes3_audio_essence_descriptor_finalize (GstMiniObject * object)
+mxf_metadata_aes3_audio_essence_descriptor_finalize (GObject * object)
{
MXFMetadataAES3AudioEssenceDescriptor *self =
MXF_METADATA_AES3_AUDIO_ESSENCE_DESCRIPTOR (object);
@@ -554,7 +554,7 @@ mxf_metadata_aes3_audio_essence_descriptor_finalize (GstMiniObject * object)
g_free (self->fixed_user_data);
self->fixed_user_data = NULL;
- GST_MINI_OBJECT_CLASS
+ G_OBJECT_CLASS
(mxf_metadata_aes3_audio_essence_descriptor_parent_class)->finalize
(object);
}
@@ -1058,11 +1058,10 @@ static void
(MXFMetadataAES3AudioEssenceDescriptorClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize =
- mxf_metadata_aes3_audio_essence_descriptor_finalize;
+ object_class->finalize = mxf_metadata_aes3_audio_essence_descriptor_finalize;
metadata_base_class->handle_tag =
mxf_metadata_aes3_audio_essence_descriptor_handle_tag;
metadata_base_class->name_quark = MXF_QUARK (AES3_AUDIO_ESSENCE_DESCRIPTOR);
@@ -1353,24 +1352,24 @@ mxf_aes_bwf_create_caps (MXFMetadataTimelineTrack * track, GstTagList ** tags,
if (!track->parent.descriptor[i])
continue;
- if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
- parent.descriptor[i])
+ if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
+ descriptor[i])
&& (track->parent.descriptor[i]->essence_container.u[14] == 0x01
|| track->parent.descriptor[i]->essence_container.u[14] == 0x02
|| track->parent.descriptor[i]->essence_container.u[14] == 0x08)) {
- s = (MXFMetadataGenericSoundEssenceDescriptor *) track->
- parent.descriptor[i];
+ s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent.
+ descriptor[i];
bwf = TRUE;
break;
} else
- if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
- parent.descriptor[i])
+ if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
+ descriptor[i])
&& (track->parent.descriptor[i]->essence_container.u[14] == 0x03
|| track->parent.descriptor[i]->essence_container.u[14] == 0x04
|| track->parent.descriptor[i]->essence_container.u[14] == 0x09)) {
- s = (MXFMetadataGenericSoundEssenceDescriptor *) track->
- parent.descriptor[i];
+ s = (MXFMetadataGenericSoundEssenceDescriptor *) track->parent.
+ descriptor[i];
bwf = FALSE;
break;
}
@@ -1461,7 +1460,7 @@ mxf_bwf_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
}
ret = (MXFMetadataWaveAudioEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_WAVE_AUDIO_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_WAVE_AUDIO_ESSENCE_DESCRIPTOR, NULL);
memcpy (&ret->parent.parent.essence_container, &bwf_essence_container_ul, 16);
if (endianness == G_LITTLE_ENDIAN)
@@ -1477,7 +1476,7 @@ mxf_bwf_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!mxf_metadata_generic_sound_essence_descriptor_from_caps (&ret->parent,
caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
diff --git a/gst/mxf/mxfalaw.c b/gst/mxf/mxfalaw.c
index a71162841..49b37237b 100644
--- a/gst/mxf/mxfalaw.c
+++ b/gst/mxf/mxfalaw.c
@@ -210,14 +210,14 @@ mxf_alaw_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
}
ret = (MXFMetadataGenericSoundEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR, NULL);
memcpy (&ret->parent.essence_container, &alaw_essence_container_ul, 16);
memcpy (&ret->sound_essence_compression, &mxf_sound_essence_compression_alaw,
16);
if (!mxf_metadata_generic_sound_essence_descriptor_from_caps (ret, caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index 13ab13b60..496ee38f7 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -611,11 +611,11 @@ gst_mxf_demux_choose_package (GstMXFDemux * demux)
for (i = 0; i < demux->preface->content_storage->n_packages; i++) {
if (demux->preface->content_storage->packages[i] &&
- MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->content_storage->
- packages[i])) {
+ MXF_IS_METADATA_MATERIAL_PACKAGE (demux->preface->
+ content_storage->packages[i])) {
ret =
- MXF_METADATA_GENERIC_PACKAGE (demux->preface->content_storage->
- packages[i]);
+ MXF_METADATA_GENERIC_PACKAGE (demux->preface->
+ content_storage->packages[i]);
break;
}
}
@@ -775,8 +775,8 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
essence_container);
if (track->parent.type == MXF_METADATA_TRACK_PICTURE_ESSENCE) {
- if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->parent.
- descriptor[0]))
+ if (MXF_IS_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[0]))
mxf_ul_to_string (&MXF_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR
(track->parent.descriptor[0])->picture_essence_coding,
essence_compression);
@@ -785,8 +785,8 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
g_strdup_printf ("video/x-mxf-%s-%s", essence_container,
essence_compression);
} else if (track->parent.type == MXF_METADATA_TRACK_SOUND_ESSENCE) {
- if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->parent.
- descriptor[0]))
+ if (MXF_IS_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[0]))
mxf_ul_to_string (&MXF_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR
(track->parent.descriptor[0])->sound_essence_compression,
essence_compression);
@@ -795,8 +795,8 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
g_strdup_printf ("audio/x-mxf-%s-%s", essence_container,
essence_compression);
} else if (track->parent.type == MXF_METADATA_TRACK_DATA_ESSENCE) {
- if (MXF_IS_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR (track->parent.
- descriptor[0]))
+ if (MXF_IS_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR (track->
+ parent.descriptor[0]))
mxf_ul_to_string (&MXF_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR
(track->parent.descriptor[0])->data_essence_coding,
essence_compression);
@@ -1261,7 +1261,7 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key,
mxf_uuid_to_string (&MXF_METADATA_BASE (metadata)->instance_uid, str),
g_type_name (G_TYPE_FROM_INSTANCE (old)),
g_type_name (G_TYPE_FROM_INSTANCE (metadata)));
- gst_mini_object_unref (GST_MINI_OBJECT (metadata));
+ g_object_unref (metadata);
return GST_FLOW_ERROR;
} else if (old
&& MXF_METADATA_BASE (old)->offset >=
@@ -1273,7 +1273,7 @@ gst_mxf_demux_handle_metadata (GstMXFDemux * demux, const MXFUL * key,
GST_DEBUG_OBJECT (demux,
"Metadata with instance uid %s already exists and is newer",
mxf_uuid_to_string (&MXF_METADATA_BASE (metadata)->instance_uid, str));
- gst_mini_object_unref (GST_MINI_OBJECT (metadata));
+ g_object_unref (metadata);
return GST_FLOW_OK;
}
@@ -1351,7 +1351,7 @@ gst_mxf_demux_handle_descriptive_metadata (GstMXFDemux * demux,
mxf_uuid_to_string (&MXF_METADATA_BASE (m)->instance_uid, str),
g_type_name (G_TYPE_FROM_INSTANCE (old)),
g_type_name (G_TYPE_FROM_INSTANCE (m)));
- gst_mini_object_unref (GST_MINI_OBJECT (m));
+ g_object_unref (m);
return GST_FLOW_ERROR;
} else if (old
&& MXF_METADATA_BASE (old)->offset >= MXF_METADATA_BASE (m)->offset) {
@@ -1362,7 +1362,7 @@ gst_mxf_demux_handle_descriptive_metadata (GstMXFDemux * demux,
GST_DEBUG_OBJECT (demux,
"Metadata with instance uid %s already exists and is newer",
mxf_uuid_to_string (&MXF_METADATA_BASE (m)->instance_uid, str));
- gst_mini_object_unref (GST_MINI_OBJECT (m));
+ g_object_unref (m);
return GST_FLOW_OK;
}
@@ -1421,8 +1421,8 @@ gst_mxf_demux_pad_set_component (GstMXFDemux * demux, GstMXFDemuxPad * pad,
pad->current_component_index);
pad->current_component =
- MXF_METADATA_SOURCE_CLIP (sequence->structural_components[pad->
- current_component_index]);
+ MXF_METADATA_SOURCE_CLIP (sequence->
+ structural_components[pad->current_component_index]);
if (pad->current_component == NULL) {
GST_ERROR_OBJECT (demux, "No such structural component");
return GST_FLOW_ERROR;
@@ -1430,8 +1430,8 @@ gst_mxf_demux_pad_set_component (GstMXFDemux * demux, GstMXFDemuxPad * pad,
if (!pad->current_component->source_package
|| !pad->current_component->source_package->top_level
- || !MXF_METADATA_GENERIC_PACKAGE (pad->current_component->
- source_package)->tracks) {
+ || !MXF_METADATA_GENERIC_PACKAGE (pad->
+ current_component->source_package)->tracks) {
GST_ERROR_OBJECT (demux, "Invalid component");
return GST_FLOW_ERROR;
}
@@ -2998,8 +2998,8 @@ gst_mxf_demux_pad_set_last_stop (GstMXFDemux * demux, GstMXFDemuxPad * p,
for (i = 0; i < p->material_track->parent.sequence->n_structural_components;
i++) {
clip =
- MXF_METADATA_SOURCE_CLIP (p->material_track->parent.sequence->
- structural_components[i]);
+ MXF_METADATA_SOURCE_CLIP (p->material_track->parent.
+ sequence->structural_components[i]);
if (clip->parent.duration <= 0)
break;
@@ -3077,8 +3077,8 @@ gst_mxf_demux_seek_push (GstMXFDemux * demux, GstEvent * event)
if (format != GST_FORMAT_TIME)
goto wrong_format;
- flush = ! !(flags & GST_SEEK_FLAG_FLUSH);
- keyframe = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
+ flush = !!(flags & GST_SEEK_FLAG_FLUSH);
+ keyframe = !!(flags & GST_SEEK_FLAG_KEY_UNIT);
/* Work on a copy until we are sure the seek succeeded. */
memcpy (&seeksegment, &demux->segment, sizeof (GstSegment));
@@ -3210,8 +3210,8 @@ gst_mxf_demux_seek_pull (GstMXFDemux * demux, GstEvent * event)
if (rate <= 0.0)
goto wrong_rate;
- flush = ! !(flags & GST_SEEK_FLAG_FLUSH);
- keyframe = ! !(flags & GST_SEEK_FLAG_KEY_UNIT);
+ flush = !!(flags & GST_SEEK_FLAG_FLUSH);
+ keyframe = !!(flags & GST_SEEK_FLAG_KEY_UNIT);
if (flush) {
GstEvent *e;
@@ -3962,10 +3962,10 @@ gst_mxf_demux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &mxf_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &mxf_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mxf_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&mxf_src_template));
gst_element_class_set_details_simple (element_class, "MXF Demuxer",
"Codec/Demuxer",
"Demux MXF files", "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/gst/mxf/mxfdms1.c b/gst/mxf/mxfdms1.c
index 7de27b7d2..c69e0e75e 100644
--- a/gst/mxf/mxfdms1.c
+++ b/gst/mxf/mxfdms1.c
@@ -167,14 +167,14 @@ G_DEFINE_ABSTRACT_TYPE (MXFDMS1Thesaurus, mxf_dms1_thesaurus,
MXF_TYPE_DMS1_TEXT_LANGUAGE);
static void
-mxf_dms1_thesaurus_finalize (GstMiniObject * object)
+mxf_dms1_thesaurus_finalize (GObject * object)
{
MXFDMS1Thesaurus *self = MXF_DMS1_THESAURUS (object);
g_free (self->thesaurus_name);
self->thesaurus_name = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_thesaurus_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_thesaurus_parent_class)->finalize (object);
}
static gboolean
@@ -215,10 +215,10 @@ mxf_dms1_thesaurus_init (MXFDMS1Thesaurus * self)
static void
mxf_dms1_thesaurus_class_init (MXFDMS1ThesaurusClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
- miniobject_class->finalize = mxf_dms1_thesaurus_finalize;
+ object_class->finalize = mxf_dms1_thesaurus_finalize;
metadatabase_class->handle_tag = mxf_dms1_thesaurus_handle_tag;
}
@@ -233,7 +233,7 @@ G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MXFDMS1Framework, mxf_dms1_framework,
mxf_dms1_framework_interface_init));
static void
-mxf_dms1_framework_finalize (GstMiniObject * object)
+mxf_dms1_framework_finalize (GObject * object)
{
MXFDMS1Framework *self = MXF_DMS1_FRAMEWORK (object);
@@ -270,7 +270,7 @@ mxf_dms1_framework_finalize (GstMiniObject * object)
g_free (self->location_sets);
self->location_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_framework_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_framework_parent_class)->finalize (object);
}
static gboolean
@@ -545,10 +545,10 @@ mxf_dms1_framework_init (MXFDMS1Framework * self)
static void
mxf_dms1_framework_class_init (MXFDMS1FrameworkClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
- miniobject_class->finalize = mxf_dms1_framework_finalize;
+ object_class->finalize = mxf_dms1_framework_finalize;
metadatabase_class->handle_tag = mxf_dms1_framework_handle_tag;
metadatabase_class->resolve = mxf_dms1_framework_resolve;
}
@@ -557,7 +557,7 @@ G_DEFINE_ABSTRACT_TYPE (MXFDMS1ProductionClipFramework,
mxf_dms1_production_clip_framework, MXF_TYPE_DMS1_FRAMEWORK);
static void
-mxf_dms1_production_clip_framework_finalize (GstMiniObject * object)
+mxf_dms1_production_clip_framework_finalize (GObject * object)
{
MXFDMS1ProductionClipFramework *self =
MXF_DMS1_PRODUCTION_CLIP_FRAMEWORK (object);
@@ -574,7 +574,7 @@ mxf_dms1_production_clip_framework_finalize (GstMiniObject * object)
g_free (self->contract_sets);
self->contract_sets = NULL;
- GST_MINI_OBJECT_CLASS
+ G_OBJECT_CLASS
(mxf_dms1_production_clip_framework_parent_class)->finalize (object);
}
@@ -737,10 +737,10 @@ static void
mxf_dms1_production_clip_framework_class_init
(MXFDMS1ProductionClipFrameworkClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
- miniobject_class->finalize = mxf_dms1_production_clip_framework_finalize;
+ object_class->finalize = mxf_dms1_production_clip_framework_finalize;
metadatabase_class->handle_tag =
mxf_dms1_production_clip_framework_handle_tag;
metadatabase_class->resolve = mxf_dms1_production_clip_framework_resolve;
@@ -750,7 +750,7 @@ G_DEFINE_TYPE (MXFDMS1ProductionFramework, mxf_dms1_production_framework,
MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK);
static void
-mxf_dms1_production_framework_finalize (GstMiniObject * object)
+mxf_dms1_production_framework_finalize (GObject * object)
{
MXFDMS1ProductionFramework *self = MXF_DMS1_PRODUCTION_FRAMEWORK (object);
@@ -793,7 +793,7 @@ mxf_dms1_production_framework_finalize (GstMiniObject * object)
g_free (self->setting_period_sets);
self->setting_period_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_production_framework_parent_class)->finalize
+ G_OBJECT_CLASS (mxf_dms1_production_framework_parent_class)->finalize
(object);
}
@@ -1055,11 +1055,11 @@ static void
mxf_dms1_production_framework_class_init (MXFDMS1ProductionFrameworkClass *
klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_production_framework_finalize;
+ object_class->finalize = mxf_dms1_production_framework_finalize;
metadatabase_class->handle_tag = mxf_dms1_production_framework_handle_tag;
metadatabase_class->resolve = mxf_dms1_production_framework_resolve;
@@ -1070,7 +1070,7 @@ G_DEFINE_TYPE (MXFDMS1ClipFramework, mxf_dms1_clip_framework,
MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK);
static void
-mxf_dms1_clip_framework_finalize (GstMiniObject * object)
+mxf_dms1_clip_framework_finalize (GObject * object)
{
MXFDMS1ClipFramework *self = MXF_DMS1_CLIP_FRAMEWORK (object);
@@ -1098,8 +1098,7 @@ mxf_dms1_clip_framework_finalize (GstMiniObject * object)
g_free (self->device_parameters_sets);
self->device_parameters_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_clip_framework_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_clip_framework_parent_class)->finalize (object);
}
static gboolean
@@ -1329,11 +1328,11 @@ mxf_dms1_clip_framework_init (MXFDMS1ClipFramework * self)
static void
mxf_dms1_clip_framework_class_init (MXFDMS1ClipFrameworkClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_clip_framework_finalize;
+ object_class->finalize = mxf_dms1_clip_framework_finalize;
metadatabase_class->handle_tag = mxf_dms1_clip_framework_handle_tag;
metadatabase_class->resolve = mxf_dms1_clip_framework_resolve;
dm_class->type = 0x010200;
@@ -1343,7 +1342,7 @@ G_DEFINE_TYPE (MXFDMS1SceneFramework, mxf_dms1_scene_framework,
MXF_TYPE_DMS1_FRAMEWORK);
static void
-mxf_dms1_scene_framework_finalize (GstMiniObject * object)
+mxf_dms1_scene_framework_finalize (GObject * object)
{
MXFDMS1SceneFramework *self = MXF_DMS1_SCENE_FRAMEWORK (object);
@@ -1359,8 +1358,7 @@ mxf_dms1_scene_framework_finalize (GstMiniObject * object)
g_free (self->shot_scene_sets);
self->shot_scene_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_scene_framework_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_scene_framework_parent_class)->finalize (object);
}
static gboolean
@@ -1492,11 +1490,11 @@ mxf_dms1_scene_framework_init (MXFDMS1SceneFramework * self)
static void
mxf_dms1_scene_framework_class_init (MXFDMS1SceneFrameworkClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_scene_framework_finalize;
+ object_class->finalize = mxf_dms1_scene_framework_finalize;
metadatabase_class->handle_tag = mxf_dms1_scene_framework_handle_tag;
metadatabase_class->resolve = mxf_dms1_scene_framework_resolve;
dm_class->type = 0x010300;
@@ -1505,7 +1503,7 @@ mxf_dms1_scene_framework_class_init (MXFDMS1SceneFrameworkClass * klass)
G_DEFINE_TYPE (MXFDMS1Titles, mxf_dms1_titles, MXF_TYPE_DMS1_TEXT_LANGUAGE);
static void
-mxf_dms1_titles_finalize (GstMiniObject * object)
+mxf_dms1_titles_finalize (GObject * object)
{
MXFDMS1Titles *self = MXF_DMS1_TITLES (object);
@@ -1524,7 +1522,7 @@ mxf_dms1_titles_finalize (GstMiniObject * object)
g_free (self->version_title);
self->version_title = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_titles_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_titles_parent_class)->finalize (object);
}
static gboolean
@@ -1592,11 +1590,11 @@ mxf_dms1_titles_init (MXFDMS1Titles * self)
static void
mxf_dms1_titles_class_init (MXFDMS1TitlesClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_titles_finalize;
+ object_class->finalize = mxf_dms1_titles_finalize;
metadatabase_class->handle_tag = mxf_dms1_titles_handle_tag;
dm_class->type = 0x100100;
}
@@ -1605,7 +1603,7 @@ G_DEFINE_TYPE (MXFDMS1Identification, mxf_dms1_identification,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_identification_finalize (GstMiniObject * object)
+mxf_dms1_identification_finalize (GObject * object)
{
MXFDMS1Identification *self = MXF_DMS1_IDENTIFICATION (object);
@@ -1615,8 +1613,7 @@ mxf_dms1_identification_finalize (GstMiniObject * object)
g_free (self->identification_issuing_authority);
self->identification_issuing_authority = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_identification_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_identification_parent_class)->finalize (object);
}
static gboolean
@@ -1700,11 +1697,11 @@ mxf_dms1_identification_init (MXFDMS1Identification * self)
static void
mxf_dms1_identification_class_init (MXFDMS1IdentificationClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_identification_finalize;
+ object_class->finalize = mxf_dms1_identification_finalize;
metadatabase_class->handle_tag = mxf_dms1_identification_handle_tag;
dm_class->type = 0x110100;
}
@@ -1713,7 +1710,7 @@ G_DEFINE_TYPE (MXFDMS1GroupRelationship, mxf_dms1_group_relationship,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_group_relationship_finalize (GstMiniObject * object)
+mxf_dms1_group_relationship_finalize (GObject * object)
{
MXFDMS1GroupRelationship *self = MXF_DMS1_GROUP_RELATIONSHIP (object);
@@ -1726,8 +1723,7 @@ mxf_dms1_group_relationship_finalize (GstMiniObject * object)
g_free (self->group_synopsis);
self->group_synopsis = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_group_relationship_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_group_relationship_parent_class)->finalize (object);
}
static gboolean
@@ -1834,11 +1830,11 @@ mxf_dms1_group_relationship_init (MXFDMS1GroupRelationship * self)
static void
mxf_dms1_group_relationship_class_init (MXFDMS1GroupRelationshipClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_group_relationship_finalize;
+ object_class->finalize = mxf_dms1_group_relationship_finalize;
metadatabase_class->handle_tag = mxf_dms1_group_relationship_handle_tag;
dm_class->type = 0x120100;
}
@@ -1846,7 +1842,7 @@ mxf_dms1_group_relationship_class_init (MXFDMS1GroupRelationshipClass * klass)
G_DEFINE_TYPE (MXFDMS1Branding, mxf_dms1_branding, MXF_TYPE_DMS1_TEXT_LANGUAGE);
static void
-mxf_dms1_branding_finalize (GstMiniObject * object)
+mxf_dms1_branding_finalize (GObject * object)
{
MXFDMS1Branding *self = MXF_DMS1_BRANDING (object);
@@ -1856,7 +1852,7 @@ mxf_dms1_branding_finalize (GstMiniObject * object)
g_free (self->brand_original_title);
self->brand_original_title = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_branding_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_branding_parent_class)->finalize (object);
}
static gboolean
@@ -1906,11 +1902,11 @@ mxf_dms1_branding_init (MXFDMS1Branding * self)
static void
mxf_dms1_branding_class_init (MXFDMS1BrandingClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_branding_finalize;
+ object_class->finalize = mxf_dms1_branding_finalize;
metadatabase_class->handle_tag = mxf_dms1_branding_handle_tag;
dm_class->type = 0x130100;
}
@@ -1918,7 +1914,7 @@ mxf_dms1_branding_class_init (MXFDMS1BrandingClass * klass)
G_DEFINE_TYPE (MXFDMS1Event, mxf_dms1_event, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_event_finalize (GstMiniObject * object)
+mxf_dms1_event_finalize (GObject * object)
{
MXFDMS1Event *self = MXF_DMS1_EVENT (object);
@@ -1937,7 +1933,7 @@ mxf_dms1_event_finalize (GstMiniObject * object)
g_free (self->annotation_sets);
self->annotation_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_event_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_event_parent_class)->finalize (object);
}
static gboolean
@@ -2083,11 +2079,11 @@ mxf_dms1_event_init (MXFDMS1Event * self)
static void
mxf_dms1_event_class_init (MXFDMS1EventClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_event_finalize;
+ object_class->finalize = mxf_dms1_event_finalize;
metadatabase_class->handle_tag = mxf_dms1_event_handle_tag;
metadatabase_class->resolve = mxf_dms1_event_resolve;
dm_class->type = 0x140100;
@@ -2096,7 +2092,7 @@ mxf_dms1_event_class_init (MXFDMS1EventClass * klass)
G_DEFINE_TYPE (MXFDMS1Publication, mxf_dms1_publication, MXF_TYPE_DMS1);
static void
-mxf_dms1_publication_finalize (GstMiniObject * object)
+mxf_dms1_publication_finalize (GObject * object)
{
MXFDMS1Publication *self = MXF_DMS1_PUBLICATION (object);
@@ -2112,7 +2108,7 @@ mxf_dms1_publication_finalize (GstMiniObject * object)
g_free (self->publication_region);
self->publication_region = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_publication_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_publication_parent_class)->finalize (object);
}
static gboolean
@@ -2179,11 +2175,11 @@ mxf_dms1_publication_init (MXFDMS1Publication * self)
static void
mxf_dms1_publication_class_init (MXFDMS1PublicationClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_publication_finalize;
+ object_class->finalize = mxf_dms1_publication_finalize;
metadatabase_class->handle_tag = mxf_dms1_publication_handle_tag;
dm_class->type = 0x140200;
}
@@ -2191,7 +2187,7 @@ mxf_dms1_publication_class_init (MXFDMS1PublicationClass * klass)
G_DEFINE_TYPE (MXFDMS1Award, mxf_dms1_award, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_award_finalize (GstMiniObject * object)
+mxf_dms1_award_finalize (GObject * object)
{
MXFDMS1Award *self = MXF_DMS1_AWARD (object);
@@ -2213,7 +2209,7 @@ mxf_dms1_award_finalize (GstMiniObject * object)
g_free (self->participant_sets);
self->participant_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_award_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_award_parent_class)->finalize (object);
}
static gboolean
@@ -2339,11 +2335,11 @@ mxf_dms1_award_init (MXFDMS1Award * self)
static void
mxf_dms1_award_class_init (MXFDMS1AwardClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_award_finalize;
+ object_class->finalize = mxf_dms1_award_finalize;
metadatabase_class->handle_tag = mxf_dms1_award_handle_tag;
metadatabase_class->resolve = mxf_dms1_award_resolve;
dm_class->type = 0x150100;
@@ -2353,14 +2349,14 @@ G_DEFINE_TYPE (MXFDMS1CaptionsDescription, mxf_dms1_captions_description,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_captions_description_finalize (GstMiniObject * object)
+mxf_dms1_captions_description_finalize (GObject * object)
{
MXFDMS1CaptionsDescription *self = MXF_DMS1_CAPTIONS_DESCRIPTION (object);
g_free (self->caption_kind);
self->caption_kind = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_captions_description_parent_class)->finalize
+ G_OBJECT_CLASS (mxf_dms1_captions_description_parent_class)->finalize
(object);
}
@@ -2422,11 +2418,11 @@ static void
mxf_dms1_captions_description_class_init (MXFDMS1CaptionsDescriptionClass *
klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_captions_description_finalize;
+ object_class->finalize = mxf_dms1_captions_description_finalize;
metadatabase_class->handle_tag = mxf_dms1_captions_description_handle_tag;
dm_class->type = 0x160100;
}
@@ -2434,7 +2430,7 @@ mxf_dms1_captions_description_class_init (MXFDMS1CaptionsDescriptionClass *
G_DEFINE_TYPE (MXFDMS1Annotation, mxf_dms1_annotation, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_annotation_finalize (GstMiniObject * object)
+mxf_dms1_annotation_finalize (GObject * object)
{
MXFDMS1Annotation *self = MXF_DMS1_ANNOTATION (object);
@@ -2465,7 +2461,7 @@ mxf_dms1_annotation_finalize (GstMiniObject * object)
g_free (self->participant_sets);
self->participant_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_annotation_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_annotation_parent_class)->finalize (object);
}
static gboolean
@@ -2652,11 +2648,11 @@ mxf_dms1_annotation_init (MXFDMS1Annotation * self)
static void
mxf_dms1_annotation_class_init (MXFDMS1AnnotationClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_annotation_finalize;
+ object_class->finalize = mxf_dms1_annotation_finalize;
metadatabase_class->handle_tag = mxf_dms1_annotation_handle_tag;
metadatabase_class->resolve = mxf_dms1_annotation_resolve;
dm_class->type = 0x170100;
@@ -2666,7 +2662,7 @@ G_DEFINE_TYPE (MXFDMS1SettingPeriod, mxf_dms1_setting_period,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_setting_period_finalize (GstMiniObject * object)
+mxf_dms1_setting_period_finalize (GObject * object)
{
MXFDMS1SettingPeriod *self = MXF_DMS1_SETTING_PERIOD (object);
@@ -2676,8 +2672,7 @@ mxf_dms1_setting_period_finalize (GstMiniObject * object)
g_free (self->setting_period_description);
self->setting_period_description = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_setting_period_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_setting_period_parent_class)->finalize (object);
}
static gboolean
@@ -2748,11 +2743,11 @@ mxf_dms1_setting_period_init (MXFDMS1SettingPeriod * self)
static void
mxf_dms1_setting_period_class_init (MXFDMS1SettingPeriodClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_setting_period_finalize;
+ object_class->finalize = mxf_dms1_setting_period_finalize;
metadatabase_class->handle_tag = mxf_dms1_setting_period_handle_tag;
dm_class->type = 0x170200;
}
@@ -2760,7 +2755,7 @@ mxf_dms1_setting_period_class_init (MXFDMS1SettingPeriodClass * klass)
G_DEFINE_TYPE (MXFDMS1Scripting, mxf_dms1_scripting, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_scripting_finalize (GstMiniObject * object)
+mxf_dms1_scripting_finalize (GObject * object)
{
MXFDMS1Scripting *self = MXF_DMS1_SCRIPTING (object);
@@ -2773,7 +2768,7 @@ mxf_dms1_scripting_finalize (GstMiniObject * object)
g_free (self->scripting_locators);
self->scripting_locators = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_scripting_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_scripting_parent_class)->finalize (object);
}
static gboolean
@@ -2851,11 +2846,11 @@ mxf_dms1_scripting_init (MXFDMS1Scripting * self)
static void
mxf_dms1_scripting_class_init (MXFDMS1ScriptingClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_scripting_finalize;
+ object_class->finalize = mxf_dms1_scripting_finalize;
metadatabase_class->handle_tag = mxf_dms1_scripting_handle_tag;
dm_class->type = 0x170300;
}
@@ -2864,7 +2859,7 @@ G_DEFINE_TYPE (MXFDMS1Classification, mxf_dms1_classification,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_classification_finalize (GstMiniObject * object)
+mxf_dms1_classification_finalize (GObject * object)
{
MXFDMS1Classification *self = MXF_DMS1_CLASSIFICATION (object);
@@ -2874,8 +2869,7 @@ mxf_dms1_classification_finalize (GstMiniObject * object)
g_free (self->name_value_sets);
self->name_value_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_classification_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_classification_parent_class)->finalize (object);
}
static gboolean
@@ -2974,11 +2968,11 @@ mxf_dms1_classification_init (MXFDMS1Classification * self)
static void
mxf_dms1_classification_class_init (MXFDMS1ClassificationClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_classification_finalize;
+ object_class->finalize = mxf_dms1_classification_finalize;
metadatabase_class->handle_tag = mxf_dms1_classification_handle_tag;
metadatabase_class->resolve = mxf_dms1_classification_resolve;
dm_class->type = 0x170400;
@@ -2987,7 +2981,7 @@ mxf_dms1_classification_class_init (MXFDMS1ClassificationClass * klass)
G_DEFINE_TYPE (MXFDMS1Shot, mxf_dms1_shot, MXF_TYPE_DMS1_TEXT_LANGUAGE);
static void
-mxf_dms1_shot_finalize (GstMiniObject * object)
+mxf_dms1_shot_finalize (GObject * object)
{
MXFDMS1Shot *self = MXF_DMS1_SHOT (object);
@@ -3009,7 +3003,7 @@ mxf_dms1_shot_finalize (GstMiniObject * object)
g_free (self->key_point_sets);
self->key_point_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_shot_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_shot_parent_class)->finalize (object);
}
static gboolean
@@ -3182,11 +3176,11 @@ mxf_dms1_shot_init (MXFDMS1Shot * self)
static void
mxf_dms1_shot_class_init (MXFDMS1ShotClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_shot_finalize;
+ object_class->finalize = mxf_dms1_shot_finalize;
metadatabase_class->handle_tag = mxf_dms1_shot_handle_tag;
metadatabase_class->resolve = mxf_dms1_shot_resolve;
dm_class->type = 0x170500;
@@ -3195,7 +3189,7 @@ mxf_dms1_shot_class_init (MXFDMS1ShotClass * klass)
G_DEFINE_TYPE (MXFDMS1KeyPoint, mxf_dms1_key_point, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_key_point_finalize (GstMiniObject * object)
+mxf_dms1_key_point_finalize (GObject * object)
{
MXFDMS1KeyPoint *self = MXF_DMS1_KEY_POINT (object);
@@ -3205,7 +3199,7 @@ mxf_dms1_key_point_finalize (GstMiniObject * object)
g_free (self->keypoint_value);
self->keypoint_value = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_key_point_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_key_point_parent_class)->finalize (object);
}
static gboolean
@@ -3271,11 +3265,11 @@ mxf_dms1_key_point_init (MXFDMS1KeyPoint * self)
static void
mxf_dms1_key_point_class_init (MXFDMS1KeyPointClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_key_point_finalize;
+ object_class->finalize = mxf_dms1_key_point_finalize;
metadatabase_class->handle_tag = mxf_dms1_key_point_handle_tag;
dm_class->type = 0x170600;
}
@@ -3284,7 +3278,7 @@ G_DEFINE_TYPE (MXFDMS1Participant, mxf_dms1_participant,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_participant_finalize (GstMiniObject * object)
+mxf_dms1_participant_finalize (GObject * object)
{
MXFDMS1Participant *self = MXF_DMS1_PARTICIPANT (object);
@@ -3309,7 +3303,7 @@ mxf_dms1_participant_finalize (GstMiniObject * object)
g_free (self->organisation_sets);
self->organisation_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_participant_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_participant_parent_class)->finalize (object);
}
static gboolean
@@ -3471,11 +3465,11 @@ mxf_dms1_participant_init (MXFDMS1Participant * self)
static void
mxf_dms1_participant_class_init (MXFDMS1ParticipantClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_participant_finalize;
+ object_class->finalize = mxf_dms1_participant_finalize;
metadatabase_class->handle_tag = mxf_dms1_participant_handle_tag;
metadatabase_class->resolve = mxf_dms1_participant_resolve;
dm_class->type = 0x180100;
@@ -3485,7 +3479,7 @@ G_DEFINE_ABSTRACT_TYPE (MXFDMS1Contact, mxf_dms1_contact,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_contact_finalize (GstMiniObject * object)
+mxf_dms1_contact_finalize (GObject * object)
{
MXFDMS1Contact *self = MXF_DMS1_CONTACT (object);
@@ -3501,7 +3495,7 @@ mxf_dms1_contact_finalize (GstMiniObject * object)
g_free (self->address_sets);
self->address_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_contact_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_contact_parent_class)->finalize (object);
}
static gboolean
@@ -3627,10 +3621,10 @@ mxf_dms1_contact_init (MXFDMS1Contact * self)
static void
mxf_dms1_contact_class_init (MXFDMS1ContactClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
- miniobject_class->finalize = mxf_dms1_contact_finalize;
+ object_class->finalize = mxf_dms1_contact_finalize;
metadatabase_class->handle_tag = mxf_dms1_contact_handle_tag;
metadatabase_class->resolve = mxf_dms1_contact_resolve;
}
@@ -3638,7 +3632,7 @@ mxf_dms1_contact_class_init (MXFDMS1ContactClass * klass)
G_DEFINE_TYPE (MXFDMS1Person, mxf_dms1_person, MXF_TYPE_DMS1_CONTACT);
static void
-mxf_dms1_person_finalize (GstMiniObject * object)
+mxf_dms1_person_finalize (GObject * object)
{
MXFDMS1Person *self = MXF_DMS1_PERSON (object);
@@ -3684,7 +3678,7 @@ mxf_dms1_person_finalize (GstMiniObject * object)
g_free (self->organisation_sets);
self->organisation_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_person_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_person_parent_class)->finalize (object);
}
static gboolean
@@ -3858,11 +3852,11 @@ mxf_dms1_person_init (MXFDMS1Person * self)
static void
mxf_dms1_person_class_init (MXFDMS1PersonClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_person_finalize;
+ object_class->finalize = mxf_dms1_person_finalize;
metadatabase_class->handle_tag = mxf_dms1_person_handle_tag;
metadatabase_class->resolve = mxf_dms1_person_resolve;
dm_class->type = 0x1a0200;
@@ -3872,7 +3866,7 @@ G_DEFINE_TYPE (MXFDMS1Organisation, mxf_dms1_organisation,
MXF_TYPE_DMS1_CONTACT);
static void
-mxf_dms1_organisation_finalize (GstMiniObject * object)
+mxf_dms1_organisation_finalize (GObject * object)
{
MXFDMS1Organisation *self = MXF_DMS1_ORGANISATION (object);
@@ -3888,7 +3882,7 @@ mxf_dms1_organisation_finalize (GstMiniObject * object)
g_free (self->contact_department);
self->contact_department = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_organisation_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_organisation_parent_class)->finalize (object);
}
static gboolean
@@ -3954,11 +3948,11 @@ mxf_dms1_organisation_init (MXFDMS1Organisation * self)
static void
mxf_dms1_organisation_class_init (MXFDMS1OrganisationClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_organisation_finalize;
+ object_class->finalize = mxf_dms1_organisation_finalize;
metadatabase_class->handle_tag = mxf_dms1_organisation_handle_tag;
dm_class->type = 0x1a0300;
}
@@ -3966,7 +3960,7 @@ mxf_dms1_organisation_class_init (MXFDMS1OrganisationClass * klass)
G_DEFINE_TYPE (MXFDMS1Location, mxf_dms1_location, MXF_TYPE_DMS1_CONTACT);
static void
-mxf_dms1_location_finalize (GstMiniObject * object)
+mxf_dms1_location_finalize (GObject * object)
{
MXFDMS1Location *self = MXF_DMS1_LOCATION (object);
@@ -3976,7 +3970,7 @@ mxf_dms1_location_finalize (GstMiniObject * object)
g_free (self->location_description);
self->location_description = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_location_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_location_parent_class)->finalize (object);
}
static gboolean
@@ -4025,11 +4019,11 @@ mxf_dms1_location_init (MXFDMS1Location * self)
static void
mxf_dms1_location_class_init (MXFDMS1LocationClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_location_finalize;
+ object_class->finalize = mxf_dms1_location_finalize;
metadatabase_class->handle_tag = mxf_dms1_location_handle_tag;
dm_class->type = 0x1a0400;
}
@@ -4037,7 +4031,7 @@ mxf_dms1_location_class_init (MXFDMS1LocationClass * klass)
G_DEFINE_TYPE (MXFDMS1Address, mxf_dms1_address, MXF_TYPE_DMS1);
static void
-mxf_dms1_address_finalize (GstMiniObject * object)
+mxf_dms1_address_finalize (GObject * object)
{
MXFDMS1Address *self = MXF_DMS1_ADDRESS (object);
@@ -4086,7 +4080,7 @@ mxf_dms1_address_finalize (GstMiniObject * object)
g_free (self->name_value_sets);
self->name_value_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_address_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_address_parent_class)->finalize (object);
}
static gboolean
@@ -4303,11 +4297,11 @@ mxf_dms1_address_init (MXFDMS1Address * self)
static void
mxf_dms1_address_class_init (MXFDMS1AddressClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_address_finalize;
+ object_class->finalize = mxf_dms1_address_finalize;
metadatabase_class->handle_tag = mxf_dms1_address_handle_tag;
metadatabase_class->resolve = mxf_dms1_address_resolve;
dm_class->type = 0x1b0100;
@@ -4316,7 +4310,7 @@ mxf_dms1_address_class_init (MXFDMS1AddressClass * klass)
G_DEFINE_TYPE (MXFDMS1Communications, mxf_dms1_communications, MXF_TYPE_DMS1);
static void
-mxf_dms1_communications_finalize (GstMiniObject * object)
+mxf_dms1_communications_finalize (GObject * object)
{
MXFDMS1Communications *self = MXF_DMS1_COMMUNICATIONS (object);
@@ -4326,8 +4320,7 @@ mxf_dms1_communications_finalize (GstMiniObject * object)
g_free (self->web_page);
self->web_page = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_communications_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_communications_parent_class)->finalize (object);
}
static gboolean
@@ -4424,11 +4417,11 @@ mxf_dms1_communications_init (MXFDMS1Communications * self)
static void
mxf_dms1_communications_class_init (MXFDMS1CommunicationsClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_communications_finalize;
+ object_class->finalize = mxf_dms1_communications_finalize;
metadatabase_class->handle_tag = mxf_dms1_communications_handle_tag;
dm_class->type = 0x1b0200;
}
@@ -4436,7 +4429,7 @@ mxf_dms1_communications_class_init (MXFDMS1CommunicationsClass * klass)
G_DEFINE_TYPE (MXFDMS1Contract, mxf_dms1_contract, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_contract_finalize (GstMiniObject * object)
+mxf_dms1_contract_finalize (GObject * object)
{
MXFDMS1Contract *self = MXF_DMS1_CONTRACT (object);
@@ -4452,7 +4445,7 @@ mxf_dms1_contract_finalize (GstMiniObject * object)
g_free (self->participant_sets);
self->participant_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_contract_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_contract_parent_class)->finalize (object);
}
static gboolean
@@ -4579,11 +4572,11 @@ mxf_dms1_contract_init (MXFDMS1Contract * self)
static void
mxf_dms1_contract_class_init (MXFDMS1ContractClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_contract_finalize;
+ object_class->finalize = mxf_dms1_contract_finalize;
metadatabase_class->handle_tag = mxf_dms1_contract_handle_tag;
metadatabase_class->resolve = mxf_dms1_contract_resolve;
dm_class->type = 0x1c0100;
@@ -4592,7 +4585,7 @@ mxf_dms1_contract_class_init (MXFDMS1ContractClass * klass)
G_DEFINE_TYPE (MXFDMS1Rights, mxf_dms1_rights, MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_rights_finalize (GstMiniObject * object)
+mxf_dms1_rights_finalize (GObject * object)
{
MXFDMS1Rights *self = MXF_DMS1_RIGHTS (object);
@@ -4620,7 +4613,7 @@ mxf_dms1_rights_finalize (GstMiniObject * object)
g_free (self->intellectual_property_right);
self->intellectual_property_right = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_rights_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_rights_parent_class)->finalize (object);
}
static gboolean
@@ -4755,11 +4748,11 @@ mxf_dms1_rights_init (MXFDMS1Rights * self)
static void
mxf_dms1_rights_class_init (MXFDMS1RightsClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_rights_finalize;
+ object_class->finalize = mxf_dms1_rights_finalize;
metadatabase_class->handle_tag = mxf_dms1_rights_handle_tag;
dm_class->type = 0x1c0200;
}
@@ -4767,15 +4760,14 @@ mxf_dms1_rights_class_init (MXFDMS1RightsClass * klass)
G_DEFINE_TYPE (MXFDMS1PictureFormat, mxf_dms1_picture_format, MXF_TYPE_DMS1);
static void
-mxf_dms1_picture_format_finalize (GstMiniObject * object)
+mxf_dms1_picture_format_finalize (GObject * object)
{
MXFDMS1PictureFormat *self = MXF_DMS1_PICTURE_FORMAT (object);
g_free (self->colour_descriptor);
self->colour_descriptor = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_picture_format_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_picture_format_parent_class)->finalize (object);
}
static gboolean
@@ -4846,11 +4838,11 @@ mxf_dms1_picture_format_init (MXFDMS1PictureFormat * self)
static void
mxf_dms1_picture_format_class_init (MXFDMS1PictureFormatClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_picture_format_finalize;
+ object_class->finalize = mxf_dms1_picture_format_finalize;
metadatabase_class->handle_tag = mxf_dms1_picture_format_handle_tag;
dm_class->type = 0x1d0100;
}
@@ -4859,7 +4851,7 @@ G_DEFINE_TYPE (MXFDMS1DeviceParameters, mxf_dms1_device_parameters,
MXF_TYPE_DMS1_THESAURUS);
static void
-mxf_dms1_device_parameters_finalize (GstMiniObject * object)
+mxf_dms1_device_parameters_finalize (GObject * object)
{
MXFDMS1DeviceParameters *self = MXF_DMS1_DEVICE_PARAMETERS (object);
@@ -4884,8 +4876,7 @@ mxf_dms1_device_parameters_finalize (GstMiniObject * object)
g_free (self->name_value_sets);
self->name_value_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_device_parameters_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_device_parameters_parent_class)->finalize (object);
}
static gboolean
@@ -5050,11 +5041,11 @@ mxf_dms1_device_parameters_init (MXFDMS1DeviceParameters * self)
static void
mxf_dms1_device_parameters_class_init (MXFDMS1DeviceParametersClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_device_parameters_finalize;
+ object_class->finalize = mxf_dms1_device_parameters_finalize;
metadatabase_class->handle_tag = mxf_dms1_device_parameters_handle_tag;
metadatabase_class->resolve = mxf_dms1_device_parameters_resolve;
dm_class->type = 0x1e0100;
@@ -5063,7 +5054,7 @@ mxf_dms1_device_parameters_class_init (MXFDMS1DeviceParametersClass * klass)
G_DEFINE_TYPE (MXFDMS1NameValue, mxf_dms1_name_value, MXF_TYPE_DMS1);
static void
-mxf_dms1_name_value_finalize (GstMiniObject * object)
+mxf_dms1_name_value_finalize (GObject * object)
{
MXFDMS1NameValue *self = MXF_DMS1_NAME_VALUE (object);
@@ -5073,7 +5064,7 @@ mxf_dms1_name_value_finalize (GstMiniObject * object)
g_free (self->item_value);
self->item_value = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_name_value_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_name_value_parent_class)->finalize (object);
}
static gboolean
@@ -5142,11 +5133,11 @@ mxf_dms1_name_value_init (MXFDMS1NameValue * self)
static void
mxf_dms1_name_value_class_init (MXFDMS1NameValueClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_name_value_finalize;
+ object_class->finalize = mxf_dms1_name_value_finalize;
metadatabase_class->handle_tag = mxf_dms1_name_value_handle_tag;
dm_class->type = 0x1f0100;
}
@@ -5154,7 +5145,7 @@ mxf_dms1_name_value_class_init (MXFDMS1NameValueClass * klass)
G_DEFINE_TYPE (MXFDMS1Processing, mxf_dms1_processing, MXF_TYPE_DMS1);
static void
-mxf_dms1_processing_finalize (GstMiniObject * object)
+mxf_dms1_processing_finalize (GObject * object)
{
MXFDMS1Processing *self = MXF_DMS1_PROCESSING (object);
@@ -5164,7 +5155,7 @@ mxf_dms1_processing_finalize (GstMiniObject * object)
g_free (self->graphic_usage_type);
self->graphic_usage_type = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_processing_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_processing_parent_class)->finalize (object);
}
static gboolean
@@ -5271,11 +5262,11 @@ mxf_dms1_processing_init (MXFDMS1Processing * self)
static void
mxf_dms1_processing_class_init (MXFDMS1ProcessingClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_processing_finalize;
+ object_class->finalize = mxf_dms1_processing_finalize;
metadatabase_class->handle_tag = mxf_dms1_processing_handle_tag;
dm_class->type = 0x200100;
}
@@ -5283,14 +5274,14 @@ mxf_dms1_processing_class_init (MXFDMS1ProcessingClass * klass)
G_DEFINE_TYPE (MXFDMS1Project, mxf_dms1_project, MXF_TYPE_DMS1);
static void
-mxf_dms1_project_finalize (GstMiniObject * object)
+mxf_dms1_project_finalize (GObject * object)
{
MXFDMS1Project *self = MXF_DMS1_PROJECT (object);
g_free (self->project_name_or_title);
self->project_name_or_title = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_project_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_project_parent_class)->finalize (object);
}
static gboolean
@@ -5348,11 +5339,11 @@ mxf_dms1_project_init (MXFDMS1Project * self)
static void
mxf_dms1_project_class_init (MXFDMS1ProjectClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_project_finalize;
+ object_class->finalize = mxf_dms1_project_finalize;
metadatabase_class->handle_tag = mxf_dms1_project_handle_tag;
dm_class->type = 0x200200;
}
@@ -5360,7 +5351,7 @@ mxf_dms1_project_class_init (MXFDMS1ProjectClass * klass)
G_DEFINE_TYPE (MXFDMS1ContactsList, mxf_dms1_contacts_list, MXF_TYPE_DMS1);
static void
-mxf_dms1_contacts_list_finalize (GstMiniObject * object)
+mxf_dms1_contacts_list_finalize (GObject * object)
{
MXFDMS1ContactsList *self = MXF_DMS1_CONTACTS_LIST (object);
@@ -5382,8 +5373,7 @@ mxf_dms1_contacts_list_finalize (GstMiniObject * object)
g_free (self->location_sets);
self->location_sets = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_contacts_list_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_dms1_contacts_list_parent_class)->finalize (object);
}
static gboolean
@@ -5532,11 +5522,11 @@ mxf_dms1_contacts_list_init (MXFDMS1ContactsList * self)
static void
mxf_dms1_contacts_list_class_init (MXFDMS1ContactsListClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_contacts_list_finalize;
+ object_class->finalize = mxf_dms1_contacts_list_finalize;
metadatabase_class->handle_tag = mxf_dms1_contacts_list_handle_tag;
metadatabase_class->resolve = mxf_dms1_contacts_list_resolve;
dm_class->type = 0x190100;
@@ -5546,7 +5536,7 @@ G_DEFINE_TYPE (MXFDMS1CueWords, mxf_dms1_cue_words,
MXF_TYPE_DMS1_TEXT_LANGUAGE);
static void
-mxf_dms1_cue_words_finalize (GstMiniObject * object)
+mxf_dms1_cue_words_finalize (GObject * object)
{
MXFDMS1CueWords *self = MXF_DMS1_CUE_WORDS (object);
@@ -5556,7 +5546,7 @@ mxf_dms1_cue_words_finalize (GstMiniObject * object)
g_free (self->out_cue_words);
self->out_cue_words = NULL;
- GST_MINI_OBJECT_CLASS (mxf_dms1_cue_words_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_dms1_cue_words_parent_class)->finalize (object);
}
static gboolean
@@ -5604,11 +5594,11 @@ mxf_dms1_cue_words_init (MXFDMS1CueWords * self)
static void
mxf_dms1_cue_words_class_init (MXFDMS1CueWordsClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
- miniobject_class->finalize = mxf_dms1_cue_words_finalize;
+ object_class->finalize = mxf_dms1_cue_words_finalize;
metadatabase_class->handle_tag = mxf_dms1_cue_words_handle_tag;
dm_class->type = 0x170800;
}
diff --git a/gst/mxf/mxfdv-dif.c b/gst/mxf/mxfdv-dif.c
index a239958d5..cf56c7fcc 100644
--- a/gst/mxf/mxfdv-dif.c
+++ b/gst/mxf/mxfdv-dif.c
@@ -175,14 +175,14 @@ mxf_dv_dif_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
MXFMetadataCDCIPictureEssenceDescriptor *ret;
ret = (MXFMetadataCDCIPictureEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR, NULL);
memcpy (&ret->parent.parent.essence_container, &dv_dif_essence_container_ul,
16);
if (!mxf_metadata_generic_picture_essence_descriptor_from_caps (&ret->parent,
caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
*handler = mxf_dv_dif_write_func;
diff --git a/gst/mxf/mxfjpeg2000.c b/gst/mxf/mxfjpeg2000.c
index e9e947b3e..5ef7b843d 100644
--- a/gst/mxf/mxfjpeg2000.c
+++ b/gst/mxf/mxfjpeg2000.c
@@ -239,7 +239,7 @@ mxf_jpeg2000_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
}
ret = (MXFMetadataRGBAPictureEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR, NULL);
memcpy (&ret->parent.parent.essence_container, &jpeg2000_essence_container_ul,
16);
@@ -270,7 +270,7 @@ mxf_jpeg2000_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!mxf_metadata_generic_picture_essence_descriptor_from_caps (&ret->parent,
caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
diff --git a/gst/mxf/mxfmetadata.c b/gst/mxf/mxfmetadata.c
index ca05ad7ba..cf3ccb655 100644
--- a/gst/mxf/mxfmetadata.c
+++ b/gst/mxf/mxfmetadata.c
@@ -31,11 +31,10 @@
GST_DEBUG_CATEGORY_EXTERN (mxf_debug);
#define GST_CAT_DEFAULT mxf_debug
-G_DEFINE_ABSTRACT_TYPE (MXFMetadataBase, mxf_metadata_base,
- GST_TYPE_MINI_OBJECT);
+G_DEFINE_ABSTRACT_TYPE (MXFMetadataBase, mxf_metadata_base, G_TYPE_OBJECT);
static void
-mxf_metadata_base_finalize (GstMiniObject * object)
+mxf_metadata_base_finalize (GObject * object)
{
MXFMetadataBase *self = MXF_METADATA_BASE (object);
@@ -44,7 +43,7 @@ mxf_metadata_base_finalize (GstMiniObject * object)
self->other_tags = NULL;
}
- GST_MINI_OBJECT_CLASS (mxf_metadata_base_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_metadata_base_parent_class)->finalize (object);
}
static gboolean
@@ -131,9 +130,9 @@ mxf_metadata_base_init (MXFMetadataBase * self)
static void
mxf_metadata_base_class_init (MXFMetadataBaseClass * klass)
{
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
- miniobject_class->finalize = mxf_metadata_base_finalize;
+ object_class->finalize = mxf_metadata_base_finalize;
klass->handle_tag = mxf_metadata_base_handle_tag;
klass->resolve = mxf_metadata_base_resolve_default;
klass->to_structure = mxf_metadata_base_to_structure_default;
@@ -490,7 +489,7 @@ mxf_metadata_new (guint16 type, MXFPrimerPack * primer, guint64 offset,
ret = (MXFMetadata *) g_type_create_instance (t);
if (!mxf_metadata_base_parse (MXF_METADATA_BASE (ret), primer, data, size)) {
GST_ERROR ("Parsing metadata failed");
- gst_mini_object_unref ((GstMiniObject *) ret);
+ g_object_unref (ret);
return NULL;
}
@@ -501,7 +500,7 @@ mxf_metadata_new (guint16 type, MXFPrimerPack * primer, guint64 offset,
G_DEFINE_TYPE (MXFMetadataPreface, mxf_metadata_preface, MXF_TYPE_METADATA);
static void
-mxf_metadata_preface_finalize (GstMiniObject * object)
+mxf_metadata_preface_finalize (GObject * object)
{
MXFMetadataPreface *self = MXF_METADATA_PREFACE (object);
@@ -517,7 +516,7 @@ mxf_metadata_preface_finalize (GstMiniObject * object)
g_free (self->dm_schemes);
self->dm_schemes = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_preface_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_metadata_preface_parent_class)->finalize (object);
}
static gboolean
@@ -947,10 +946,10 @@ static void
mxf_metadata_preface_class_init (MXFMetadataPrefaceClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_preface_finalize;
+ object_class->finalize = mxf_metadata_preface_finalize;
metadata_base_class->handle_tag = mxf_metadata_preface_handle_tag;
metadata_base_class->resolve = mxf_metadata_preface_resolve;
metadata_base_class->to_structure = mxf_metadata_preface_to_structure;
@@ -963,7 +962,7 @@ G_DEFINE_TYPE (MXFMetadataIdentification, mxf_metadata_identification,
MXF_TYPE_METADATA);
static void
-mxf_metadata_identification_finalize (GstMiniObject * object)
+mxf_metadata_identification_finalize (GObject * object)
{
MXFMetadataIdentification *self = MXF_METADATA_IDENTIFICATION (object);
@@ -979,8 +978,7 @@ mxf_metadata_identification_finalize (GstMiniObject * object)
g_free (self->platform);
self->platform = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_identification_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_identification_parent_class)->finalize (object);
}
static gboolean
@@ -1237,10 +1235,10 @@ static void
mxf_metadata_identification_class_init (MXFMetadataIdentificationClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_identification_finalize;
+ object_class->finalize = mxf_metadata_identification_finalize;
metadata_base_class->handle_tag = mxf_metadata_identification_handle_tag;
metadata_base_class->name_quark = MXF_QUARK (IDENTIFICATION);
metadata_base_class->to_structure = mxf_metadata_identification_to_structure;
@@ -1252,7 +1250,7 @@ G_DEFINE_TYPE (MXFMetadataContentStorage, mxf_metadata_content_storage,
MXF_TYPE_METADATA);
static void
-mxf_metadata_content_storage_finalize (GstMiniObject * object)
+mxf_metadata_content_storage_finalize (GObject * object)
{
MXFMetadataContentStorage *self = MXF_METADATA_CONTENT_STORAGE (object);
@@ -1265,8 +1263,7 @@ mxf_metadata_content_storage_finalize (GstMiniObject * object)
g_free (self->essence_container_data_uids);
self->essence_container_data_uids = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_content_storage_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_content_storage_parent_class)->finalize (object);
}
static gboolean
@@ -1532,10 +1529,10 @@ static void
mxf_metadata_content_storage_class_init (MXFMetadataContentStorageClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_content_storage_finalize;
+ object_class->finalize = mxf_metadata_content_storage_finalize;
metadata_base_class->handle_tag = mxf_metadata_content_storage_handle_tag;
metadata_base_class->resolve = mxf_metadata_content_storage_resolve;
metadata_base_class->name_quark = MXF_QUARK (CONTENT_STORAGE);
@@ -1729,7 +1726,7 @@ G_DEFINE_ABSTRACT_TYPE (MXFMetadataGenericPackage, mxf_metadata_generic_package,
MXF_TYPE_METADATA);
static void
-mxf_metadata_generic_package_finalize (GstMiniObject * object)
+mxf_metadata_generic_package_finalize (GObject * object)
{
MXFMetadataGenericPackage *self = MXF_METADATA_GENERIC_PACKAGE (object);
@@ -1741,8 +1738,7 @@ mxf_metadata_generic_package_finalize (GstMiniObject * object)
g_free (self->tracks);
self->tracks = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_generic_package_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_generic_package_parent_class)->finalize (object);
}
static gboolean
@@ -2001,9 +1997,9 @@ static void
mxf_metadata_generic_package_class_init (MXFMetadataGenericPackageClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
- miniobject_class->finalize = mxf_metadata_generic_package_finalize;
+ object_class->finalize = mxf_metadata_generic_package_finalize;
metadata_base_class->handle_tag = mxf_metadata_generic_package_handle_tag;
metadata_base_class->resolve = mxf_metadata_generic_package_resolve;
metadata_base_class->to_structure = mxf_metadata_generic_package_to_structure;
@@ -2070,8 +2066,8 @@ mxf_metadata_material_package_resolve (MXFMetadataBase * m,
MXFMetadataTimelineTrack *tmp;
if (!sc->source_package->parent.tracks[k] ||
- !MXF_IS_METADATA_TIMELINE_TRACK (sc->source_package->parent.
- tracks[k]))
+ !MXF_IS_METADATA_TIMELINE_TRACK (sc->source_package->
+ parent.tracks[k]))
continue;
tmp =
@@ -2324,7 +2320,7 @@ G_DEFINE_ABSTRACT_TYPE (MXFMetadataTrack, mxf_metadata_track,
MXF_TYPE_METADATA);
static void
-mxf_metadata_track_finalize (GstMiniObject * object)
+mxf_metadata_track_finalize (GObject * object)
{
MXFMetadataTrack *self = MXF_METADATA_TRACK (object);
@@ -2333,7 +2329,7 @@ mxf_metadata_track_finalize (GstMiniObject * object)
g_free (self->descriptor);
self->descriptor = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_track_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_metadata_track_parent_class)->finalize (object);
}
static gboolean
@@ -2515,9 +2511,9 @@ static void
mxf_metadata_track_class_init (MXFMetadataTrackClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
- miniobject_class->finalize = mxf_metadata_track_finalize;
+ object_class->finalize = mxf_metadata_track_finalize;
metadata_base_class->handle_tag = mxf_metadata_track_handle_tag;
metadata_base_class->resolve = mxf_metadata_track_resolve;
metadata_base_class->to_structure = mxf_metadata_track_to_structure;
@@ -2805,7 +2801,7 @@ mxf_metadata_static_track_class_init (MXFMetadataStaticTrackClass * klass)
G_DEFINE_TYPE (MXFMetadataSequence, mxf_metadata_sequence, MXF_TYPE_METADATA);
static void
-mxf_metadata_sequence_finalize (GstMiniObject * object)
+mxf_metadata_sequence_finalize (GObject * object)
{
MXFMetadataSequence *self = MXF_METADATA_SEQUENCE (object);
@@ -2814,7 +2810,7 @@ mxf_metadata_sequence_finalize (GstMiniObject * object)
g_free (self->structural_components);
self->structural_components = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_sequence_parent_class)->finalize (object);
+ G_OBJECT_CLASS (mxf_metadata_sequence_parent_class)->finalize (object);
}
static gboolean
@@ -3022,10 +3018,10 @@ static void
mxf_metadata_sequence_class_init (MXFMetadataSequenceClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_sequence_finalize;
+ object_class->finalize = mxf_metadata_sequence_finalize;
metadata_base_class->handle_tag = mxf_metadata_sequence_handle_tag;
metadata_base_class->resolve = mxf_metadata_sequence_resolve;
metadata_base_class->name_quark = MXF_QUARK (SEQUENCE);
@@ -3434,15 +3430,14 @@ G_DEFINE_TYPE (MXFMetadataDMSourceClip, mxf_metadata_dm_source_clip,
MXF_TYPE_METADATA_SOURCE_CLIP);
static void
-mxf_metadata_dm_source_clip_finalize (GstMiniObject * object)
+mxf_metadata_dm_source_clip_finalize (GObject * object)
{
MXFMetadataDMSourceClip *self = MXF_METADATA_DM_SOURCE_CLIP (object);
g_free (self->track_ids);
self->track_ids = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_dm_source_clip_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_dm_source_clip_parent_class)->finalize (object);
}
static gboolean
@@ -3577,10 +3572,10 @@ static void
mxf_metadata_dm_source_clip_class_init (MXFMetadataDMSourceClipClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_dm_source_clip_finalize;
+ object_class->finalize = mxf_metadata_dm_source_clip_finalize;
metadata_base_class->handle_tag = mxf_metadata_dm_source_clip_handle_tag;
metadata_base_class->name_quark = MXF_QUARK (DM_SOURCE_CLIP);
metadata_base_class->to_structure = mxf_metadata_dm_source_clip_to_structure;
@@ -3592,7 +3587,7 @@ G_DEFINE_TYPE (MXFMetadataDMSegment, mxf_metadata_dm_segment,
MXF_TYPE_METADATA_STRUCTURAL_COMPONENT);
static void
-mxf_metadata_dm_segment_finalize (GstMiniObject * object)
+mxf_metadata_dm_segment_finalize (GObject * object)
{
MXFMetadataDMSegment *self = MXF_METADATA_DM_SEGMENT (object);
@@ -3602,8 +3597,7 @@ mxf_metadata_dm_segment_finalize (GstMiniObject * object)
g_free (self->event_comment);
self->event_comment = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_dm_segment_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_dm_segment_parent_class)->finalize (object);
}
static gboolean
@@ -3830,10 +3824,10 @@ static void
mxf_metadata_dm_segment_class_init (MXFMetadataDMSegmentClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_dm_segment_finalize;
+ object_class->finalize = mxf_metadata_dm_segment_finalize;
metadata_base_class->handle_tag = mxf_metadata_dm_segment_handle_tag;
metadata_base_class->resolve = mxf_metadata_dm_segment_resolve;
metadata_base_class->name_quark = MXF_QUARK (DM_SEGMENT);
@@ -3846,7 +3840,7 @@ G_DEFINE_ABSTRACT_TYPE (MXFMetadataGenericDescriptor,
mxf_metadata_generic_descriptor, MXF_TYPE_METADATA);
static void
-mxf_metadata_generic_descriptor_finalize (GstMiniObject * object)
+mxf_metadata_generic_descriptor_finalize (GObject * object)
{
MXFMetadataGenericDescriptor *self = MXF_METADATA_GENERIC_DESCRIPTOR (object);
@@ -3856,7 +3850,7 @@ mxf_metadata_generic_descriptor_finalize (GstMiniObject * object)
g_free (self->locators);
self->locators = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_generic_descriptor_parent_class)->finalize
+ G_OBJECT_CLASS (mxf_metadata_generic_descriptor_parent_class)->finalize
(object);
}
@@ -4029,9 +4023,9 @@ mxf_metadata_generic_descriptor_class_init (MXFMetadataGenericDescriptorClass *
klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
- miniobject_class->finalize = mxf_metadata_generic_descriptor_finalize;
+ object_class->finalize = mxf_metadata_generic_descriptor_finalize;
metadata_base_class->handle_tag = mxf_metadata_generic_descriptor_handle_tag;
metadata_base_class->resolve = mxf_metadata_generic_descriptor_resolve;
metadata_base_class->to_structure =
@@ -4401,8 +4395,8 @@ mxf_metadata_generic_picture_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
- (mxf_metadata_generic_picture_essence_descriptor_parent_class)->handle_tag
- (metadata, primer, tag, tag_data, tag_size);
+ (mxf_metadata_generic_picture_essence_descriptor_parent_class)->
+ handle_tag (metadata, primer, tag, tag_data, tag_size);
break;
}
@@ -4423,8 +4417,8 @@ mxf_metadata_generic_picture_essence_descriptor_to_structure (MXFMetadataBase *
{
GstStructure *ret =
MXF_METADATA_BASE_CLASS
- (mxf_metadata_generic_picture_essence_descriptor_parent_class)->to_structure
- (m);
+ (mxf_metadata_generic_picture_essence_descriptor_parent_class)->
+ to_structure (m);
MXFMetadataGenericPictureEssenceDescriptor *self =
MXF_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR (m);
gchar str[48];
@@ -5018,8 +5012,8 @@ mxf_metadata_generic_sound_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
- (mxf_metadata_generic_sound_essence_descriptor_parent_class)->handle_tag
- (metadata, primer, tag, tag_data, tag_size);
+ (mxf_metadata_generic_sound_essence_descriptor_parent_class)->
+ handle_tag (metadata, primer, tag, tag_data, tag_size);
break;
}
@@ -5339,8 +5333,8 @@ mxf_metadata_cdci_picture_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
- (mxf_metadata_cdci_picture_essence_descriptor_parent_class)->handle_tag
- (metadata, primer, tag, tag_data, tag_size);
+ (mxf_metadata_cdci_picture_essence_descriptor_parent_class)->
+ handle_tag (metadata, primer, tag, tag_data, tag_size);
break;
}
@@ -5561,7 +5555,7 @@ G_DEFINE_TYPE (MXFMetadataRGBAPictureEssenceDescriptor,
MXF_TYPE_METADATA_GENERIC_PICTURE_ESSENCE_DESCRIPTOR);
static void
-mxf_metadata_rgba_picture_essence_descriptor_finalize (GstMiniObject * object)
+mxf_metadata_rgba_picture_essence_descriptor_finalize (GObject * object)
{
MXFMetadataRGBAPictureEssenceDescriptor *self =
MXF_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR (object);
@@ -5569,7 +5563,7 @@ mxf_metadata_rgba_picture_essence_descriptor_finalize (GstMiniObject * object)
g_free (self->pixel_layout);
self->pixel_layout = NULL;
- GST_MINI_OBJECT_CLASS
+ G_OBJECT_CLASS
(mxf_metadata_rgba_picture_essence_descriptor_parent_class)->finalize
(object);
}
@@ -5649,8 +5643,8 @@ mxf_metadata_rgba_picture_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
- (mxf_metadata_rgba_picture_essence_descriptor_parent_class)->handle_tag
- (metadata, primer, tag, tag_data, tag_size);
+ (mxf_metadata_rgba_picture_essence_descriptor_parent_class)->
+ handle_tag (metadata, primer, tag, tag_data, tag_size);
break;
}
@@ -5804,10 +5798,10 @@ static void
(MXFMetadataRGBAPictureEssenceDescriptorClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize =
+ object_class->finalize =
mxf_metadata_rgba_picture_essence_descriptor_finalize;
metadata_base_class->handle_tag =
mxf_metadata_rgba_picture_essence_descriptor_handle_tag;
@@ -5846,8 +5840,8 @@ mxf_metadata_generic_data_essence_descriptor_handle_tag (MXFMetadataBase *
default:
ret =
MXF_METADATA_BASE_CLASS
- (mxf_metadata_generic_data_essence_descriptor_parent_class)->handle_tag
- (metadata, primer, tag, tag_data, tag_size);
+ (mxf_metadata_generic_data_essence_descriptor_parent_class)->
+ handle_tag (metadata, primer, tag, tag_data, tag_size);
break;
}
@@ -5936,7 +5930,7 @@ G_DEFINE_TYPE (MXFMetadataMultipleDescriptor, mxf_metadata_multiple_descriptor,
MXF_TYPE_METADATA_FILE_DESCRIPTOR);
static void
-mxf_metadata_multiple_descriptor_finalize (GstMiniObject * object)
+mxf_metadata_multiple_descriptor_finalize (GObject * object)
{
MXFMetadataMultipleDescriptor *self =
MXF_METADATA_MULTIPLE_DESCRIPTOR (object);
@@ -5946,7 +5940,7 @@ mxf_metadata_multiple_descriptor_finalize (GstMiniObject * object)
g_free (self->sub_descriptors);
self->sub_descriptors = NULL;
- GST_MINI_OBJECT_CLASS
+ G_OBJECT_CLASS
(mxf_metadata_multiple_descriptor_parent_class)->finalize (object);
}
@@ -6119,10 +6113,10 @@ mxf_metadata_multiple_descriptor_class_init (MXFMetadataMultipleDescriptorClass
* klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_multiple_descriptor_finalize;
+ object_class->finalize = mxf_metadata_multiple_descriptor_finalize;
metadata_base_class->handle_tag = mxf_metadata_multiple_descriptor_handle_tag;
metadata_base_class->resolve = mxf_metadata_multiple_descriptor_resolve;
metadata_base_class->name_quark = MXF_QUARK (MULTIPLE_DESCRIPTOR);
@@ -6149,15 +6143,14 @@ G_DEFINE_TYPE (MXFMetadataTextLocator, mxf_metadata_text_locator,
MXF_TYPE_METADATA_LOCATOR);
static void
-mxf_metadata_text_locator_finalize (GstMiniObject * object)
+mxf_metadata_text_locator_finalize (GObject * object)
{
MXFMetadataTextLocator *self = MXF_METADATA_TEXT_LOCATOR (object);
g_free (self->locator_name);
self->locator_name = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_text_locator_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_text_locator_parent_class)->finalize (object);
}
static gboolean
@@ -6229,10 +6222,10 @@ static void
mxf_metadata_text_locator_class_init (MXFMetadataTextLocatorClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_text_locator_finalize;
+ object_class->finalize = mxf_metadata_text_locator_finalize;
metadata_base_class->handle_tag = mxf_metadata_text_locator_handle_tag;
metadata_base_class->name_quark = MXF_QUARK (TEXT_LOCATOR);
metadata_base_class->to_structure = mxf_metadata_text_locator_to_structure;
@@ -6244,15 +6237,14 @@ G_DEFINE_TYPE (MXFMetadataNetworkLocator, mxf_metadata_network_locator,
MXF_TYPE_METADATA_LOCATOR);
static void
-mxf_metadata_network_locator_finalize (GstMiniObject * object)
+mxf_metadata_network_locator_finalize (GObject * object)
{
MXFMetadataNetworkLocator *self = MXF_METADATA_NETWORK_LOCATOR (object);
g_free (self->url_string);
self->url_string = NULL;
- GST_MINI_OBJECT_CLASS (mxf_metadata_network_locator_parent_class)->finalize
- (object);
+ G_OBJECT_CLASS (mxf_metadata_network_locator_parent_class)->finalize (object);
}
static gboolean
@@ -6323,10 +6315,10 @@ static void
mxf_metadata_network_locator_class_init (MXFMetadataNetworkLocatorClass * klass)
{
MXFMetadataBaseClass *metadata_base_class = (MXFMetadataBaseClass *) klass;
- GstMiniObjectClass *miniobject_class = (GstMiniObjectClass *) klass;
+ GObjectClass *object_class = (GObjectClass *) klass;
MXFMetadataClass *metadata_class = (MXFMetadataClass *) klass;
- miniobject_class->finalize = mxf_metadata_network_locator_finalize;
+ object_class->finalize = mxf_metadata_network_locator_finalize;
metadata_base_class->handle_tag = mxf_metadata_network_locator_handle_tag;
metadata_base_class->name_quark = MXF_QUARK (NETWORK_LOCATOR);
metadata_base_class->to_structure = mxf_metadata_network_locator_to_structure;
@@ -6429,7 +6421,7 @@ mxf_descriptive_metadata_new (guint8 scheme, guint32 type,
ret = (MXFDescriptiveMetadata *) g_type_create_instance (t);
if (!mxf_metadata_base_parse (MXF_METADATA_BASE (ret), primer, data, size)) {
GST_ERROR ("Parsing metadata failed");
- gst_mini_object_unref ((GstMiniObject *) ret);
+ g_object_unref (ret);
return NULL;
}
@@ -6471,5 +6463,5 @@ mxf_metadata_hash_table_new (void)
{
return g_hash_table_new_full ((GHashFunc) mxf_uuid_hash,
(GEqualFunc) mxf_uuid_is_equal, (GDestroyNotify) NULL,
- (GDestroyNotify) gst_mini_object_unref);
+ (GDestroyNotify) g_object_unref);
}
diff --git a/gst/mxf/mxfmetadata.h b/gst/mxf/mxfmetadata.h
index b5e45b12b..2f32d98e0 100644
--- a/gst/mxf/mxfmetadata.h
+++ b/gst/mxf/mxfmetadata.h
@@ -368,7 +368,7 @@ typedef enum {
} MXFMetadataBaseResolveState;
struct _MXFMetadataBase {
- GstMiniObject parent;
+ GObject parent;
MXFUUID instance_uid;
MXFUUID generation_uid;
@@ -381,7 +381,7 @@ struct _MXFMetadataBase {
};
struct _MXFMetadataBaseClass {
- GstMiniObjectClass parent;
+ GObjectClass parent;
gboolean (*handle_tag) (MXFMetadataBase *self, MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint tag_size);
gboolean (*resolve) (MXFMetadataBase *self, GHashTable *metadata);
@@ -739,7 +739,7 @@ struct _MXFDescriptiveMetadata {
};
struct _MXFDescriptiveMetadataClass {
- MXFMetadataBase parent;
+ MXFMetadataBaseClass parent;
guint8 scheme;
guint32 type;
diff --git a/gst/mxf/mxfmpeg.c b/gst/mxf/mxfmpeg.c
index 08b1a27b8..f1b74f964 100644
--- a/gst/mxf/mxfmpeg.c
+++ b/gst/mxf/mxfmpeg.c
@@ -894,7 +894,7 @@ mxf_mpeg_audio_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
*mapping_data = md;
ret = (MXFMetadataGenericSoundEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_GENERIC_SOUND_ESSENCE_DESCRIPTOR, NULL);
s = gst_caps_get_structure (caps, 0);
if (strcmp (gst_structure_get_name (s), "audio/mpeg") == 0) {
@@ -902,7 +902,7 @@ mxf_mpeg_audio_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!gst_structure_get_int (s, "mpegversion", &mpegversion)) {
GST_ERROR ("Invalid caps %" GST_PTR_FORMAT, caps);
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
@@ -946,7 +946,7 @@ mxf_mpeg_audio_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!gst_structure_get_int (s, "rate", &rate)) {
GST_ERROR ("Invalid rate");
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
md->rate = rate;
@@ -954,7 +954,7 @@ mxf_mpeg_audio_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
memcpy (&ret->parent.essence_container, &mpeg_essence_container_ul, 16);
if (!mxf_metadata_generic_sound_essence_descriptor_from_caps (ret, caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
@@ -1154,7 +1154,7 @@ mxf_mpeg_video_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
GstStructure *s;
ret = (MXFMetadataMPEGVideoDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_MPEG_VIDEO_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_MPEG_VIDEO_DESCRIPTOR, NULL);
s = gst_caps_get_structure (caps, 0);
@@ -1167,7 +1167,7 @@ mxf_mpeg_video_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!gst_structure_get_int (s, "mpegversion", &mpegversion)) {
GST_ERROR ("Invalid caps %" GST_PTR_FORMAT, caps);
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
@@ -1214,7 +1214,7 @@ mxf_mpeg_video_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!mxf_metadata_generic_picture_essence_descriptor_from_caps (&ret->
parent.parent, caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c
index a74387974..87f5dd569 100644
--- a/gst/mxf/mxfmux.c
+++ b/gst/mxf/mxfmux.c
@@ -65,7 +65,7 @@ static void gst_mxf_mux_set_property (GObject * object,
static void gst_mxf_mux_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
-static GstFlowReturn gst_mxf_mux_collected (GstCollectPads2 * pads,
+static GstFlowReturn gst_mxf_mux_collected (GstCollectPads * pads,
gpointer user_data);
static gboolean gst_mxf_mux_handle_src_event (GstPad * pad, GstEvent * event);
@@ -97,12 +97,13 @@ gst_mxf_mux_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
const GstPadTemplate **p;
- gst_element_class_add_static_pad_template (element_class, &src_templ);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_templ));
p = mxf_essence_element_writer_get_pad_templates ();
while (p && *p) {
gst_element_class_add_pad_template (element_class,
- (GstPadTemplate *) (GST_OBJECT (*p)));
+ (GstPadTemplate *) gst_object_ref (GST_OBJECT (*p)));
p++;
}
@@ -476,7 +477,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
/* Preface */
mux->preface =
- (MXFMetadataPreface *) gst_mini_object_new (MXF_TYPE_METADATA_PREFACE);
+ (MXFMetadataPreface *) g_object_new (MXF_TYPE_METADATA_PREFACE, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (mux->preface)->instance_uid,
mux->metadata);
g_hash_table_insert (mux->metadata,
@@ -532,7 +533,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
mux->preface->identifications = g_new0 (MXFMetadataIdentification *, 1);
identification = mux->preface->identifications[0] =
(MXFMetadataIdentification *)
- gst_mini_object_new (MXF_TYPE_METADATA_IDENTIFICATION);
+ g_object_new (MXF_TYPE_METADATA_IDENTIFICATION, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (identification)->instance_uid,
mux->metadata);
@@ -591,7 +592,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
guint i;
cstorage = mux->preface->content_storage = (MXFMetadataContentStorage *)
- gst_mini_object_new (MXF_TYPE_METADATA_CONTENT_STORAGE);
+ g_object_new (MXF_TYPE_METADATA_CONTENT_STORAGE, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (cstorage)->instance_uid, mux->metadata);
g_hash_table_insert (mux->metadata,
&MXF_METADATA_BASE (cstorage)->instance_uid, cstorage);
@@ -605,7 +606,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
MXFMetadataSourcePackage *p;
cstorage->packages[1] = (MXFMetadataGenericPackage *)
- gst_mini_object_new (MXF_TYPE_METADATA_SOURCE_PACKAGE);
+ g_object_new (MXF_TYPE_METADATA_SOURCE_PACKAGE, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (cstorage->packages[1])->instance_uid,
mux->metadata);
g_hash_table_insert (mux->metadata,
@@ -629,7 +630,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
MXFMetadataMultipleDescriptor *d;
p->descriptor = (MXFMetadataGenericDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_MULTIPLE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_MULTIPLE_DESCRIPTOR, NULL);
d = (MXFMetadataMultipleDescriptor *) p->descriptor;
d->n_sub_descriptors = p->parent.n_tracks;
d->sub_descriptors =
@@ -653,7 +654,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
MXFMetadataSourceClip *clip;
p->parent.tracks[n] = (MXFMetadataTrack *)
- gst_mini_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK);
+ g_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK, NULL);
track = (MXFMetadataTimelineTrack *) p->parent.tracks[n];
mxf_uuid_init (&MXF_METADATA_BASE (track)->instance_uid,
mux->metadata);
@@ -671,7 +672,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
cpad->collect.buffer, p, track, &track->edit_rate);
sequence = track->parent.sequence = (MXFMetadataSequence *)
- gst_mini_object_new (MXF_TYPE_METADATA_SEQUENCE);
+ g_object_new (MXF_TYPE_METADATA_SEQUENCE, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (sequence)->instance_uid,
mux->metadata);
g_hash_table_insert (mux->metadata,
@@ -686,7 +687,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
g_new0 (MXFMetadataStructuralComponent *, 1);
clip = (MXFMetadataSourceClip *)
- gst_mini_object_new (MXF_TYPE_METADATA_SOURCE_CLIP);
+ g_object_new (MXF_TYPE_METADATA_SOURCE_CLIP, NULL);
sequence->structural_components[0] =
(MXFMetadataStructuralComponent *) clip;
mxf_uuid_init (&MXF_METADATA_BASE (clip)->instance_uid,
@@ -722,7 +723,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
gdouble min_edit_rate_d = G_MAXDOUBLE;
cstorage->packages[0] = (MXFMetadataGenericPackage *)
- gst_mini_object_new (MXF_TYPE_METADATA_MATERIAL_PACKAGE);
+ g_object_new (MXF_TYPE_METADATA_MATERIAL_PACKAGE, NULL);
memcpy (&MXF_METADATA_BASE (cstorage->packages[0])->instance_uid,
&mux->preface->primary_package_uid, 16);
g_hash_table_insert (mux->metadata,
@@ -761,7 +762,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
1]);
p->tracks[n] = (MXFMetadataTrack *)
- gst_mini_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK);
+ g_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK, NULL);
track = (MXFMetadataTimelineTrack *) p->tracks[n];
mxf_uuid_init (&MXF_METADATA_BASE (track)->instance_uid,
mux->metadata);
@@ -796,7 +797,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
}
sequence = track->parent.sequence = (MXFMetadataSequence *)
- gst_mini_object_new (MXF_TYPE_METADATA_SEQUENCE);
+ g_object_new (MXF_TYPE_METADATA_SEQUENCE, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (sequence)->instance_uid,
mux->metadata);
g_hash_table_insert (mux->metadata,
@@ -810,7 +811,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
g_new0 (MXFMetadataStructuralComponent *, 1);
clip = (MXFMetadataSourceClip *)
- gst_mini_object_new (MXF_TYPE_METADATA_SOURCE_CLIP);
+ g_object_new (MXF_TYPE_METADATA_SOURCE_CLIP, NULL);
sequence->structural_components[0] =
(MXFMetadataStructuralComponent *) clip;
mxf_uuid_init (&MXF_METADATA_BASE (clip)->instance_uid,
@@ -838,7 +839,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
MXFMetadataTimecodeComponent *component;
p->tracks[n] = (MXFMetadataTrack *)
- gst_mini_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK);
+ g_object_new (MXF_TYPE_METADATA_TIMELINE_TRACK, NULL);
track = (MXFMetadataTimelineTrack *) p->tracks[n];
mxf_uuid_init (&MXF_METADATA_BASE (track)->instance_uid,
mux->metadata);
@@ -853,7 +854,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
memcpy (&track->edit_rate, &min_edit_rate, sizeof (MXFFraction));
sequence = track->parent.sequence = (MXFMetadataSequence *)
- gst_mini_object_new (MXF_TYPE_METADATA_SEQUENCE);
+ g_object_new (MXF_TYPE_METADATA_SEQUENCE, NULL);
mxf_uuid_init (&MXF_METADATA_BASE (sequence)->instance_uid,
mux->metadata);
g_hash_table_insert (mux->metadata,
@@ -869,7 +870,7 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
g_new0 (MXFMetadataStructuralComponent *, 1);
component = (MXFMetadataTimecodeComponent *)
- gst_mini_object_new (MXF_TYPE_METADATA_TIMECODE_COMPONENT);
+ g_object_new (MXF_TYPE_METADATA_TIMECODE_COMPONENT, NULL);
sequence->structural_components[0] =
(MXFMetadataStructuralComponent *) component;
mxf_uuid_init (&MXF_METADATA_BASE (component)->instance_uid,
@@ -927,9 +928,9 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
cstorage->essence_container_data =
g_new0 (MXFMetadataEssenceContainerData *, 1);
cstorage->essence_container_data[0] = (MXFMetadataEssenceContainerData *)
- gst_mini_object_new (MXF_TYPE_METADATA_ESSENCE_CONTAINER_DATA);
- mxf_uuid_init (&MXF_METADATA_BASE (cstorage->
- essence_container_data[0])->instance_uid, mux->metadata);
+ g_object_new (MXF_TYPE_METADATA_ESSENCE_CONTAINER_DATA, NULL);
+ mxf_uuid_init (&MXF_METADATA_BASE (cstorage->essence_container_data[0])->
+ instance_uid, mux->metadata);
g_hash_table_insert (mux->metadata,
&MXF_METADATA_BASE (cstorage->essence_container_data[0])->instance_uid,
cstorage->essence_container_data[0]);
diff --git a/gst/mxf/mxfup.c b/gst/mxf/mxfup.c
index 7d0172584..cbe7af9c1 100644
--- a/gst/mxf/mxfup.c
+++ b/gst/mxf/mxfup.c
@@ -404,7 +404,7 @@ mxf_up_get_rgba_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
*mapping_data = md;
ret = (MXFMetadataRGBAPictureEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_RGBA_PICTURE_ESSENCE_DESCRIPTOR, NULL);
for (i = 0; i < G_N_ELEMENTS (_rgba_mapping_table); i++) {
tmp = gst_caps_from_string (_rgba_mapping_table[i].caps);
@@ -426,7 +426,7 @@ mxf_up_get_rgba_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (md->fourcc == 0) {
GST_ERROR ("Invalid caps %" GST_PTR_FORMAT, caps);
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
@@ -435,7 +435,7 @@ mxf_up_get_rgba_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!mxf_metadata_generic_picture_essence_descriptor_from_caps (&ret->parent,
caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
@@ -459,7 +459,7 @@ mxf_up_get_cdci_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
*mapping_data = md;
ret = (MXFMetadataCDCIPictureEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR, NULL);
for (i = 0; i < G_N_ELEMENTS (_cdci_mapping_table); i++) {
tmp = gst_caps_from_string (_cdci_mapping_table[i].caps);
@@ -481,7 +481,7 @@ mxf_up_get_cdci_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (md->fourcc == 0) {
GST_ERROR ("Invalid caps %" GST_PTR_FORMAT, caps);
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
@@ -489,7 +489,7 @@ mxf_up_get_cdci_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
if (!mxf_metadata_generic_picture_essence_descriptor_from_caps (&ret->parent,
caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
diff --git a/gst/mxf/mxfvc3.c b/gst/mxf/mxfvc3.c
index e4136d17c..b8cb6ecde 100644
--- a/gst/mxf/mxfvc3.c
+++ b/gst/mxf/mxfvc3.c
@@ -185,13 +185,13 @@ mxf_vc3_get_descriptor (GstPadTemplate * tmpl, GstCaps * caps,
}
ret = (MXFMetadataCDCIPictureEssenceDescriptor *)
- gst_mini_object_new (MXF_TYPE_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR);
+ g_object_new (MXF_TYPE_METADATA_CDCI_PICTURE_ESSENCE_DESCRIPTOR, NULL);
memcpy (&ret->parent.parent.essence_container, &vc3_essence_container_ul, 16);
if (!mxf_metadata_generic_picture_essence_descriptor_from_caps (&ret->parent,
caps)) {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (ret));
+ g_object_unref (ret);
return NULL;
}
diff --git a/gst/nsf/gstnsf.c b/gst/nsf/gstnsf.c
index d92897167..63ab00141 100644
--- a/gst/nsf/gstnsf.c
+++ b/gst/nsf/gstnsf.c
@@ -141,8 +141,10 @@ gst_nsfdec_base_init (gpointer g_class)
"Using nosefart to decode NSF audio tunes",
"Johan Dahlin <johan@gnome.org>");
- gst_element_class_add_static_pad_template (element_class, &src_templ);
- gst_element_class_add_static_pad_template (element_class, &sink_templ);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_templ));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_templ));
}
static void
diff --git a/gst/nuvdemux/gstnuvdemux.c b/gst/nuvdemux/gstnuvdemux.c
index 86418f069..3401c8157 100644
--- a/gst/nuvdemux/gstnuvdemux.c
+++ b/gst/nuvdemux/gstnuvdemux.c
@@ -124,14 +124,14 @@ gst_nuv_demux_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &audio_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_src_template));
- gst_element_class_add_static_pad_template (element_class,
- &video_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_src_template));
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "Nuv demuxer",
"Codec/Demuxer",
"Demultiplex a MythTV NuppleVideo .nuv file into audio and video",
diff --git a/gst/overlay/gstoverlay.c b/gst/overlay/gstoverlay.c
index d802491c9..c900a6bd9 100644
--- a/gst/overlay/gstoverlay.c
+++ b/gst/overlay/gstoverlay.c
@@ -110,14 +110,14 @@ gst_overlay_base_init (GstOverlayClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &overlay_sink1_factory);
- gst_element_class_add_static_pad_template (element_class,
- &overlay_sink2_factory);
- gst_element_class_add_static_pad_template (element_class,
- &overlay_sink3_factory);
- gst_element_class_add_static_pad_template (element_class,
- &overlay_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&overlay_sink1_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&overlay_sink2_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&overlay_sink3_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&overlay_src_factory));
gst_element_class_set_details_simple (element_class, "Video overlay",
"Filter/Editor/Video",
"Overlay multiple video streams", "David Schleef <ds@schleef.org>");
diff --git a/gst/patchdetect/gstpatchdetect.c b/gst/patchdetect/gstpatchdetect.c
index 8926a5987..af4d88319 100644
--- a/gst/patchdetect/gstpatchdetect.c
+++ b/gst/patchdetect/gstpatchdetect.c
@@ -109,10 +109,10 @@ gst_patchdetect_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_patchdetect_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_patchdetect_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_patchdetect_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_patchdetect_src_template));
gst_element_class_set_details_simple (element_class, "Color Patch Detector",
"Video/Analysis", "Detects color patches from a color calibration chart",
diff --git a/gst/pcapparse/gstirtspparse.c b/gst/pcapparse/gstirtspparse.c
index 0beed3603..26317e622 100644
--- a/gst/pcapparse/gstirtspparse.c
+++ b/gst/pcapparse/gstirtspparse.c
@@ -88,9 +88,10 @@ gst_irtsp_parse_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "IRTSPParse",
"Raw/Parser",
diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c
index ae7fd5f24..16eb58c5a 100644
--- a/gst/pcapparse/gstpcapparse.c
+++ b/gst/pcapparse/gstpcapparse.c
@@ -99,9 +99,10 @@ gst_pcap_parse_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "PCapParse",
"Raw/Parser",
diff --git a/gst/pnm/gstpnmdec.c b/gst/pnm/gstpnmdec.c
index aef4526ac..394e86d12 100644
--- a/gst/pnm/gstpnmdec.c
+++ b/gst/pnm/gstpnmdec.c
@@ -308,10 +308,10 @@ gst_pnmdec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_pnmdec_sink_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_pnmdec_src_pad_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_pnmdec_sink_pad_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_pnmdec_src_pad_template));
gst_element_class_set_details_simple (element_class, "PNM image decoder",
"Codec/Decoder/Image",
"Decodes images in portable pixmap/graymap/bitmap/anymamp (PNM) format",
diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c
index 7036cbdbf..53bd4a3ff 100644
--- a/gst/pnm/gstpnmenc.c
+++ b/gst/pnm/gstpnmenc.c
@@ -231,10 +231,10 @@ gst_pnmenc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &sink_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &src_pad_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_pad_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_pad_template));
gst_element_class_set_details_simple (element_class, "PNM image encoder",
"Codec/Encoder/Image",
"Encodes images into portable pixmap or graymap (PNM) format",
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c
index cf0f5d009..59a3093f8 100644
--- a/gst/rawparse/gstrawparse.c
+++ b/gst/rawparse/gstrawparse.c
@@ -75,8 +75,8 @@ gst_raw_parse_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (gst_raw_parse_debug, "rawparse", 0,
"rawparse element");
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_raw_parse_sink_pad_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_raw_parse_sink_pad_template));
}
static void
@@ -154,17 +154,14 @@ gst_raw_parse_class_set_src_pad_template (GstRawParseClass * klass,
const GstCaps * allowed_caps)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- GstPadTemplate *pad_template;
g_return_if_fail (GST_IS_RAW_PARSE_CLASS (klass));
g_return_if_fail (allowed_caps != NULL);
g_return_if_fail (GST_IS_CAPS (allowed_caps));
- pad_template =
+ gst_element_class_add_pad_template (element_class,
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_copy (allowed_caps));
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
+ gst_caps_copy (allowed_caps)));
}
void
@@ -439,10 +436,10 @@ static gboolean
gst_raw_parse_sink_activate (GstPad * sinkpad)
{
if (gst_pad_check_pull_range (sinkpad)) {
- GST_RAW_PARSE (GST_PAD_PARENT (sinkpad))->mode = GST_ACTIVATE_PULL;
+ GST_RAW_PARSE (GST_PAD_PARENT (sinkpad))->mode = GST_PAD_ACTIVATE_PULL;
return gst_pad_activate_pull (sinkpad, TRUE);
} else {
- GST_RAW_PARSE (GST_PAD_PARENT (sinkpad))->mode = GST_ACTIVATE_PUSH;
+ GST_RAW_PARSE (GST_PAD_PARENT (sinkpad))->mode = GST_PAD_ACTIVATE_PUSH;
return gst_pad_activate_push (sinkpad, TRUE);
}
}
@@ -890,7 +887,7 @@ gst_raw_parse_src_event (GstPad * pad, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
- if (rp->mode == GST_ACTIVATE_PUSH)
+ if (rp->mode == GST_PAD_ACTIVATE_PUSH)
ret = gst_raw_parse_handle_seek_push (rp, event);
else
ret = gst_raw_parse_handle_seek_pull (rp, event);
@@ -999,7 +996,7 @@ gst_raw_parse_src_query (GstPad * pad, GstQuery * query)
if (fmt != GST_FORMAT_TIME && fmt != GST_FORMAT_DEFAULT
&& fmt != GST_FORMAT_BYTES) {
gst_query_set_seeking (query, fmt, FALSE, -1, -1);
- } else if (rp->mode == GST_ACTIVATE_PUSH) {
+ } else if (rp->mode == GST_PAD_ACTIVATE_PUSH) {
GstQuery *peerquery = gst_query_new_seeking (GST_FORMAT_BYTES);
gboolean seekable;
diff --git a/gst/rawparse/gstrawparse.h b/gst/rawparse/gstrawparse.h
index 0a2c01b33..53862b02b 100644
--- a/gst/rawparse/gstrawparse.h
+++ b/gst/rawparse/gstrawparse.h
@@ -52,7 +52,7 @@ struct _GstRawParse
GstPad *sinkpad;
GstPad *srcpad;
- GstActivateMode mode;
+ GstPadActivateMode mode;
GstAdapter *adapter;
gint framesize;
diff --git a/gst/real/gstrealaudiodec.c b/gst/real/gstrealaudiodec.c
index b6f620133..f5aa972a0 100644
--- a/gst/real/gstrealaudiodec.c
+++ b/gst/real/gstrealaudiodec.c
@@ -560,8 +560,8 @@ gst_real_audio_dec_base_init (gpointer g_class)
{
GstElementClass *ec = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (ec, &snk_t);
- gst_element_class_add_static_pad_template (ec, &src_t);
+ gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&snk_t));
+ gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&src_t));
gst_element_class_set_details_simple (ec, "RealAudio decoder",
"Codec/Decoder/Audio", "Decoder for RealAudio streams",
"Lutz Mueller <lutz@topfrose.de>");
diff --git a/gst/real/gstrealvideodec.c b/gst/real/gstrealvideodec.c
index 142b1ce6d..23bef182c 100644
--- a/gst/real/gstrealvideodec.c
+++ b/gst/real/gstrealvideodec.c
@@ -627,8 +627,8 @@ gst_real_video_dec_base_init (gpointer g_class)
{
GstElementClass *ec = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (ec, &snk_t);
- gst_element_class_add_static_pad_template (ec, &src_t);
+ gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&snk_t));
+ gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&src_t));
gst_element_class_set_details_simple (ec, "RealVideo decoder",
"Codec/Decoder/Video", "Decoder for RealVideo streams",
"Lutz Mueller <lutz@topfrose.de>");
diff --git a/gst/removesilence/gstremovesilence.c b/gst/removesilence/gstremovesilence.c
index 9f5f69902..edb9af3ab 100644
--- a/gst/removesilence/gstremovesilence.c
+++ b/gst/removesilence/gstremovesilence.c
@@ -109,9 +109,10 @@ gst_remove_silence_base_init (gpointer gclass)
"Tiago Katcipis <tiagokatcipis@gmail.com>\n \
Paulo Pizarro <paulo.pizarro@gmail.com>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
/* initialize the removesilence's class */
diff --git a/gst/rtpmux/gstrtpdtmfmux.c b/gst/rtpmux/gstrtpdtmfmux.c
index 23de0a229..5e6d04145 100644
--- a/gst/rtpmux/gstrtpdtmfmux.c
+++ b/gst/rtpmux/gstrtpdtmfmux.c
@@ -31,8 +31,8 @@
*
* The RTP "DTMF" Muxer muxes multiple RTP streams into a valid RTP
* stream. It does exactly what it's parent (#rtpmux) does, except
- * that it prevent buffers coming over a regular sink_%%d pad from going through
- * for the duration of buffers that came in a priority_sink_%%d pad.
+ * that it prevent buffers coming over a regular sink_%%u pad from going through
+ * for the duration of buffers that came in a priority_sink_%%u pad.
*
* This is especially useful if a discontinuous source like dtmfsrc or
* rtpdtmfsrc are connected to the priority sink pads. This way, the generated
@@ -52,7 +52,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_rtp_dtmf_mux_debug);
#define GST_CAT_DEFAULT gst_rtp_dtmf_mux_debug
static GstStaticPadTemplate priority_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("priority_sink_%d",
+GST_STATIC_PAD_TEMPLATE ("priority_sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("application/x-rtp"));
@@ -79,8 +79,8 @@ gst_rtp_dtmf_mux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &priority_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&priority_sink_factory));
gst_element_class_set_details_simple (element_class, "RTP muxer",
"Codec/Muxer",
@@ -168,7 +168,7 @@ gst_rtp_dtmf_mux_request_new_pad (GstElement * element, GstPadTemplate * templ,
padpriv = gst_pad_get_element_private (pad);
if (gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (element),
- "priority_sink_%d") == gst_pad_get_pad_template (pad))
+ "priority_sink_%u") == gst_pad_get_pad_template (pad))
padpriv->priority = TRUE;
GST_OBJECT_UNLOCK (element);
}
diff --git a/gst/rtpmux/gstrtpmux.c b/gst/rtpmux/gstrtpmux.c
index 97cb3f878..6bc9a4dc7 100644
--- a/gst/rtpmux/gstrtpmux.c
+++ b/gst/rtpmux/gstrtpmux.c
@@ -82,7 +82,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS ("application/x-rtp")
);
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%d",
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("application/x-rtp")
@@ -107,7 +107,7 @@ static void gst_rtp_mux_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void gst_rtp_mux_dispose (GObject * object);
-static gboolean gst_rtp_mux_src_event_real (GstRTPMux *rtp_mux,
+static gboolean gst_rtp_mux_src_event_real (GstRTPMux * rtp_mux,
GstEvent * event);
GST_BOILERPLATE (GstRTPMux, gst_rtp_mux, GstElement, GST_TYPE_ELEMENT);
@@ -117,8 +117,10 @@ gst_rtp_mux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "RTP muxer",
"Codec/Muxer",
@@ -202,7 +204,7 @@ gst_rtp_mux_src_event (GstPad * pad, GstEvent * event)
}
static gboolean
-gst_rtp_mux_src_event_real (GstRTPMux *rtp_mux, GstEvent * event)
+gst_rtp_mux_src_event_real (GstRTPMux * rtp_mux, GstEvent * event)
{
GstIterator *iter;
GstPad *sinkpad;
diff --git a/gst/rtpvp8/gstrtpvp8.c b/gst/rtpvp8/gstrtpvp8.c
index baafd1fd3..e27db1879 100644
--- a/gst/rtpvp8/gstrtpvp8.c
+++ b/gst/rtpvp8/gstrtpvp8.c
@@ -6,7 +6,7 @@
#include "gstrtpvp8depay.h"
static gboolean
-plugin_init (GstPlugin *plugin)
+plugin_init (GstPlugin * plugin)
{
gst_rtp_vp8_depay_plugin_init (plugin);
gst_rtp_vp8_pay_plugin_init (plugin);
diff --git a/gst/rtpvp8/gstrtpvp8depay.c b/gst/rtpvp8/gstrtpvp8depay.c
index 74d13b5ae..81fa5cc94 100644
--- a/gst/rtpvp8/gstrtpvp8depay.c
+++ b/gst/rtpvp8/gstrtpvp8depay.c
@@ -66,10 +66,10 @@ gst_rtp_vp8_depay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_vp8_depay_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_vp8_depay_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_vp8_depay_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_vp8_depay_src_template));
gst_element_class_set_details_simple (element_class, "RTP VP8 depayloader",
"Codec/Depayloader/Network/RTP",
diff --git a/gst/rtpvp8/gstrtpvp8pay.c b/gst/rtpvp8/gstrtpvp8pay.c
index 82dceeb12..fc4844b22 100644
--- a/gst/rtpvp8/gstrtpvp8pay.c
+++ b/gst/rtpvp8/gstrtpvp8pay.c
@@ -74,10 +74,10 @@ gst_rtp_vp8_pay_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_vp8_pay_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_rtp_vp8_pay_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_vp8_pay_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_rtp_vp8_pay_src_template));
gst_element_class_set_details_simple (element_class, "RTP VP8 payloader",
"Codec/Payloader/Network/RTP",
diff --git a/gst/scaletempo/gstscaletempo.c b/gst/scaletempo/gstscaletempo.c
index 9edc03edb..a057321f4 100644
--- a/gst/scaletempo/gstscaletempo.c
+++ b/gst/scaletempo/gstscaletempo.c
@@ -682,9 +682,10 @@ gst_scaletempo_base_init (gpointer klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "Scaletempo",
"Filter/Effect/Rate",
"Sync audio tempo with playback rate",
diff --git a/gst/sdi/gstsdidemux.c b/gst/sdi/gstsdidemux.c
index 968525aec..36b54f0ea 100644
--- a/gst/sdi/gstsdidemux.c
+++ b/gst/sdi/gstsdidemux.c
@@ -105,10 +105,10 @@ gst_sdi_demux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_sdi_demux_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_sdi_demux_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_sdi_demux_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_sdi_demux_sink_template));
gst_element_class_set_details_simple (element_class,
"SDI Demuxer",
diff --git a/gst/sdi/gstsdimux.c b/gst/sdi/gstsdimux.c
index 02532273a..d7d490bd3 100644
--- a/gst/sdi/gstsdimux.c
+++ b/gst/sdi/gstsdimux.c
@@ -108,10 +108,10 @@ gst_sdi_mux_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_sdi_mux_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_sdi_mux_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_sdi_mux_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_sdi_mux_sink_template));
gst_element_class_set_details_simple (element_class, "SDI Muxer",
"Muxer",
diff --git a/gst/sdp/gstsdpdemux.c b/gst/sdp/gstsdpdemux.c
index 9254dbcf1..f757241dd 100644
--- a/gst/sdp/gstsdpdemux.c
+++ b/gst/sdp/gstsdpdemux.c
@@ -20,7 +20,7 @@
* SECTION:element-sdpdemux
*
* sdpdemux currently understands SDP as the input format of the session description.
- * For each stream listed in the SDP a new rtp_stream%d pad will be created
+ * For each stream listed in the SDP a new stream_%u pad will be created
* with caps derived from the SDP media description. This is a caps of mime type
* "application/x-rtp" that can be connected to any available RTP depayloader
* element.
@@ -89,7 +89,7 @@ static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/sdp"));
-static GstStaticPadTemplate rtptemplate = GST_STATIC_PAD_TEMPLATE ("stream%d",
+static GstStaticPadTemplate rtptemplate = GST_STATIC_PAD_TEMPLATE ("stream_%u",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS ("application/x-rtp"));
@@ -132,34 +132,15 @@ static void gst_sdp_demux_handle_message (GstBin * bin, GstMessage * message);
static void gst_sdp_demux_stream_push_event (GstSDPDemux * demux,
GstSDPStream * stream, GstEvent * event);
-static gboolean gst_sdp_demux_sink_event (GstPad * pad, GstEvent * event);
-static GstFlowReturn gst_sdp_demux_sink_chain (GstPad * pad,
+static gboolean gst_sdp_demux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_sdp_demux_sink_chain (GstPad * pad, GstObject * parent,
GstBuffer * buffer);
/*static guint gst_sdp_demux_signals[LAST_SIGNAL] = { 0 }; */
-static void
-_do_init (GType sdp_demux_type)
-{
- GST_DEBUG_CATEGORY_INIT (sdpdemux_debug, "sdpdemux", 0, "SDP demux");
-}
-
-GST_BOILERPLATE_FULL (GstSDPDemux, gst_sdp_demux, GstBin, GST_TYPE_BIN,
- _do_init);
-
-static void
-gst_sdp_demux_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
- gst_element_class_add_static_pad_template (element_class, &rtptemplate);
-
- gst_element_class_set_details_simple (element_class, "SDP session setup",
- "Codec/Demuxer/Network/RTP",
- "Receive data over the network via SDP",
- "Wim Taymans <wim.taymans@gmail.com>");
-}
+#define gst_sdp_demux_parent_class parent_class
+G_DEFINE_TYPE (GstSDPDemux, gst_sdp_demux, GST_TYPE_BIN);
static void
gst_sdp_demux_class_init (GstSDPDemuxClass * klass)
@@ -200,13 +181,25 @@ gst_sdp_demux_class_init (GstSDPDemuxClass * klass)
DEFAULT_REDIRECT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sinktemplate));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&rtptemplate));
+
+ gst_element_class_set_details_simple (gstelement_class, "SDP session setup",
+ "Codec/Demuxer/Network/RTP",
+ "Receive data over the network via SDP",
+ "Wim Taymans <wim.taymans@gmail.com>");
+
gstelement_class->change_state = gst_sdp_demux_change_state;
gstbin_class->handle_message = gst_sdp_demux_handle_message;
+
+ GST_DEBUG_CATEGORY_INIT (sdpdemux_debug, "sdpdemux", 0, "SDP demux");
}
static void
-gst_sdp_demux_init (GstSDPDemux * demux, GstSDPDemuxClass * g_class)
+gst_sdp_demux_init (GstSDPDemux * demux)
{
demux->sinkpad = gst_pad_new_from_static_template (&sinktemplate, "sink");
gst_pad_set_event_function (demux->sinkpad,
@@ -395,12 +388,12 @@ is_multicast_address (const gchar * host_name)
for (ai = res; !ret && ai; ai = ai->ai_next) {
if (ai->ai_family == AF_INET)
ret =
- IN_MULTICAST (ntohl (((struct sockaddr_in *) ai->ai_addr)->
- sin_addr.s_addr));
+ IN_MULTICAST (ntohl (((struct sockaddr_in *) ai->ai_addr)->sin_addr.
+ s_addr));
else
ret =
- IN6_IS_ADDR_MULTICAST (&((struct sockaddr_in6 *) ai->
- ai_addr)->sin6_addr);
+ IN6_IS_ADDR_MULTICAST (&((struct sockaddr_in6 *) ai->ai_addr)->
+ sin6_addr);
}
freeaddrinfo (res);
@@ -763,7 +756,7 @@ new_session_pad (GstElement * session, GstPad * pad, GstSDPDemux * demux)
GST_SDP_STREAM_LOCK (demux);
/* find stream */
name = gst_object_get_name (GST_OBJECT_CAST (pad));
- if (sscanf (name, "recv_rtp_src_%d_%d_%d", &id, &ssrc, &pt) != 3)
+ if (sscanf (name, "recv_rtp_src_%u_%u_%u", &id, &ssrc, &pt) != 3)
goto unknown_stream;
GST_DEBUG_OBJECT (demux, "stream: %u, SSRC %d, PT %d", id, ssrc, pt);
@@ -944,7 +937,7 @@ gst_sdp_demux_configure_manager (GstSDPDemux * demux, char *rtsp_sdp)
g_signal_connect (demux->session, "no-more-pads",
(GCallback) rtsp_session_no_more_pads, demux);
} else {
- if (!(demux->session = gst_element_factory_make ("gstrtpbin", NULL)))
+ if (!(demux->session = gst_element_factory_make ("rtpbin", NULL)))
goto manager_failed;
/* connect to signals if we did not already do so */
@@ -1025,7 +1018,7 @@ gst_sdp_demux_stream_configure_udp (GstSDPDemux * demux, GstSDPStream * stream)
/* get output pad of the UDP source. */
pad = gst_element_get_static_pad (stream->udpsrc[0], "src");
- name = g_strdup_printf ("recv_rtp_sink_%d", stream->id);
+ name = g_strdup_printf ("recv_rtp_sink_%u", stream->id);
stream->channelpad[0] = gst_element_get_request_pad (demux->session, name);
g_free (name);
@@ -1054,7 +1047,7 @@ gst_sdp_demux_stream_configure_udp (GstSDPDemux * demux, GstSDPStream * stream)
GST_DEBUG_OBJECT (demux, "connecting RTCP source to manager");
- name = g_strdup_printf ("recv_rtcp_sink_%d", stream->id);
+ name = g_strdup_printf ("recv_rtcp_sink_%u", stream->id);
stream->channelpad[1] = gst_element_get_request_pad (demux->session, name);
g_free (name);
@@ -1128,7 +1121,7 @@ gst_sdp_demux_stream_configure_udp_sink (GstSDPDemux * demux,
gst_bin_add (GST_BIN_CAST (demux), stream->udpsink);
/* get session RTCP pad */
- name = g_strdup_printf ("send_rtcp_src_%d", stream->id);
+ name = g_strdup_printf ("send_rtcp_src_%u", stream->id);
pad = gst_element_get_request_pad (demux->session, name);
g_free (name);
@@ -1479,12 +1472,12 @@ start_session_failure:
}
static gboolean
-gst_sdp_demux_sink_event (GstPad * pad, GstEvent * event)
+gst_sdp_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
GstSDPDemux *demux;
gboolean res = TRUE;
- demux = GST_SDP_DEMUX (gst_pad_get_parent (pad));
+ demux = GST_SDP_DEMUX (parent);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
@@ -1496,24 +1489,21 @@ gst_sdp_demux_sink_event (GstPad * pad, GstEvent * event)
gst_event_unref (event);
break;
}
- gst_object_unref (demux);
return res;
}
static GstFlowReturn
-gst_sdp_demux_sink_chain (GstPad * pad, GstBuffer * buffer)
+gst_sdp_demux_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
GstSDPDemux *demux;
- demux = GST_SDP_DEMUX (gst_pad_get_parent (pad));
+ demux = GST_SDP_DEMUX (parent);
/* push the SDP message in an adapter, we start doing something with it when
* we receive EOS */
gst_adapter_push (demux->adapter, buffer);
- gst_object_unref (demux);
-
return GST_FLOW_OK;
}
diff --git a/gst/segmentclip/gstaudiosegmentclip.c b/gst/segmentclip/gstaudiosegmentclip.c
index a3fc81107..93602c5d2 100644
--- a/gst/segmentclip/gstaudiosegmentclip.c
+++ b/gst/segmentclip/gstaudiosegmentclip.c
@@ -59,10 +59,10 @@ gst_audio_segment_clip_base_init (gpointer g_class)
"Clips audio buffers to the configured segment",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &src_pad_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_pad_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_pad_template));
}
static void
diff --git a/gst/segmentclip/gstvideosegmentclip.c b/gst/segmentclip/gstvideosegmentclip.c
index f160e728a..16a948e7f 100644
--- a/gst/segmentclip/gstvideosegmentclip.c
+++ b/gst/segmentclip/gstvideosegmentclip.c
@@ -64,10 +64,10 @@ gst_video_segment_clip_base_init (gpointer g_class)
"Clips video buffers to the configured segment",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_pad_template);
- gst_element_class_add_static_pad_template (element_class,
- &src_pad_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_pad_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_pad_template));
}
static void
diff --git a/gst/siren/gstsirendec.c b/gst/siren/gstsirendec.c
index 6325c9670..2e517199f 100644
--- a/gst/siren/gstsirendec.c
+++ b/gst/siren/gstsirendec.c
@@ -92,8 +92,10 @@ gst_siren_dec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class, "Siren Decoder element",
"Codec/Decoder/Audio ",
diff --git a/gst/siren/gstsirenenc.c b/gst/siren/gstsirenenc.c
index b201e18b2..561d2689d 100644
--- a/gst/siren/gstsirenenc.c
+++ b/gst/siren/gstsirenenc.c
@@ -95,8 +95,10 @@ gst_siren_enc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class, "Siren Encoder element",
"Codec/Encoder/Audio ",
diff --git a/gst/smooth/gstsmooth.c b/gst/smooth/gstsmooth.c
index 5a254adc2..2ac87d6fc 100644
--- a/gst/smooth/gstsmooth.c
+++ b/gst/smooth/gstsmooth.c
@@ -74,10 +74,10 @@ gst_smooth_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_smooth_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_smooth_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_smooth_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_smooth_src_template));
gst_element_class_set_details_simple (element_class, "Smooth effect",
"Filter/Effect/Video",
"Apply a smooth filter to an image",
diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c
index 5a029fb76..82c816a63 100644
--- a/gst/speed/gstspeed.c
+++ b/gst/speed/gstspeed.c
@@ -461,10 +461,10 @@ speed_base_init (gpointer g_class)
"Andy Wingo <apwingo@eos.ncsu.edu>, "
"Tim-Philipp Müller <tim@centricular.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_speed_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_speed_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_speed_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_speed_sink_template));
}
static void
diff --git a/gst/stereo/Makefile.am b/gst/stereo/Makefile.am
index ee5b5dca4..2efe4a6a4 100644
--- a/gst/stereo/Makefile.am
+++ b/gst/stereo/Makefile.am
@@ -2,8 +2,8 @@
plugin_LTLIBRARIES = libgststereo.la
libgststereo_la_SOURCES = gststereo.c
-libgststereo_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS)
-libgststereo_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GST_CONTROLLER_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR)
+libgststereo_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS)
+libgststereo_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR)
libgststereo_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgststereo_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/stereo/gststereo.c b/gst/stereo/gststereo.c
index db054c4f3..8b45e583c 100644
--- a/gst/stereo/gststereo.c
+++ b/gst/stereo/gststereo.c
@@ -145,7 +145,7 @@ gst_stereo_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
return GST_FLOW_OK;
if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (outbuf)))
- gst_object_sync_values (G_OBJECT (stereo), GST_BUFFER_TIMESTAMP (outbuf));
+ gst_object_sync_values (GST_OBJECT (stereo), GST_BUFFER_TIMESTAMP (outbuf));
if (stereo->active) {
for (i = 0; i < samples / 2; i += 2) {
diff --git a/gst/subenc/Makefile.am b/gst/subenc/Makefile.am
index f5095c238..b9e20dfe8 100644
--- a/gst/subenc/Makefile.am
+++ b/gst/subenc/Makefile.am
@@ -4,8 +4,8 @@ libgstsubenc_la_SOURCES = \
gstsrtenc.c \
gstsubenc.c \
gstwebvttenc.c
-libgstsubenc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(GST_CONTROLLER_CFLAGS)
-libgstsubenc_la_LIBADD = $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS)
+libgstsubenc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstsubenc_la_LIBADD = $(GST_BASE_LIBS)
libgstsubenc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstsubenc_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/subenc/gstsrtenc.c b/gst/subenc/gstsrtenc.c
index a06bce1c5..a7c6ded65 100644
--- a/gst/subenc/gstsrtenc.c
+++ b/gst/subenc/gstsrtenc.c
@@ -100,7 +100,7 @@ gst_srt_enc_chain (GstPad * pad, GstBuffer * buf)
gchar *string;
srtenc = GST_SRT_ENC (gst_pad_get_parent_element (pad));
- gst_object_sync_values (G_OBJECT (srtenc), GST_BUFFER_TIMESTAMP (buf));
+ gst_object_sync_values (GST_OBJECT (srtenc), GST_BUFFER_TIMESTAMP (buf));
timing = gst_srt_enc_timeconvertion (srtenc, buf);
string = g_strdup_printf ("%d\n%s", srtenc->counter++, timing);
g_free (timing);
@@ -123,9 +123,10 @@ gst_srt_enc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"Srt encoder", "Codec/Encoder/Subtitle",
diff --git a/gst/subenc/gstwebvttenc.c b/gst/subenc/gstwebvttenc.c
index 9da281dc4..a38aebd12 100644
--- a/gst/subenc/gstwebvttenc.c
+++ b/gst/subenc/gstwebvttenc.c
@@ -127,7 +127,7 @@ gst_webvtt_enc_chain (GstPad * pad, GstBuffer * buf)
webvttenc->pushed_header = TRUE;
}
- gst_object_sync_values (G_OBJECT (webvttenc), GST_BUFFER_TIMESTAMP (buf));
+ gst_object_sync_values (GST_OBJECT (webvttenc), GST_BUFFER_TIMESTAMP (buf));
timing = gst_webvtt_enc_timeconvertion (webvttenc, buf);
new_buffer =
@@ -157,9 +157,10 @@ gst_webvtt_enc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"WebVTT encoder", "Codec/Encoder/Subtitle",
diff --git a/gst/tta/gstttadec.c b/gst/tta/gstttadec.c
index 7eabe7a15..da7693f04 100644
--- a/gst/tta/gstttadec.c
+++ b/gst/tta/gstttadec.c
@@ -171,8 +171,10 @@ gst_tta_dec_base_init (GstTtaDecClass * klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "TTA audio decoder",
"Codec/Decoder/Audio",
"Decode TTA audio data", "Arwed v. Merkatz <v.merkatz@gmx.net>");
diff --git a/gst/tta/gstttaparse.c b/gst/tta/gstttaparse.c
index 52cd8e474..069408ab6 100644
--- a/gst/tta/gstttaparse.c
+++ b/gst/tta/gstttaparse.c
@@ -88,8 +88,10 @@ gst_tta_parse_base_init (GstTtaParseClass * klass)
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_factory));
gst_element_class_set_details_simple (element_class, "TTA file parser",
"Codec/Demuxer/Audio",
"Parses TTA files", "Arwed v. Merkatz <v.merkatz@gmx.net>");
diff --git a/gst/vbidec/gstvbidec.c b/gst/vbidec/gstvbidec.c
index 30991fe75..0122934a9 100644
--- a/gst/vbidec/gstvbidec.c
+++ b/gst/vbidec/gstvbidec.c
@@ -166,10 +166,10 @@ gst_vbidec_base_init (gpointer g_class)
"Decodes closed captions and XDS data from VBI data",
"David I. Lehn <dlehn@users.sourceforge.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_vbidec_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_vbidec_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_vbidec_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_vbidec_sink_template));
}
static void
diff --git a/gst/videodrop/gstvideodrop.c b/gst/videodrop/gstvideodrop.c
index 75a3145bd..2ee693af4 100644
--- a/gst/videodrop/gstvideodrop.c
+++ b/gst/videodrop/gstvideodrop.c
@@ -106,10 +106,10 @@ gst_videodrop_base_init (gpointer g_class)
"Re-FPS'es video by dropping frames",
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_videodrop_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_videodrop_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_videodrop_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_videodrop_src_template));
}
static void
diff --git a/gst/videofilters/gstvideofilter2.c b/gst/videofilters/gstvideofilter2.c
index 4ea308aa4..adcdbd23a 100644
--- a/gst/videofilters/gstvideofilter2.c
+++ b/gst/videofilters/gstvideofilter2.c
@@ -79,22 +79,17 @@ gst_video_filter2_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
int i;
GstCaps *caps = NULL;
- GstPadTemplate *pad_template;
caps = gst_caps_new_empty ();
for (i = GST_VIDEO_FORMAT_I420; i <= GST_VIDEO_FORMAT_I420; i++) {
gst_caps_append (caps, gst_video_format_new_template_caps (i));
}
- pad_template =
+ gst_element_class_add_pad_template (element_class,
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_ref (caps));
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
- pad_template =
- gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
+ gst_caps_ref (caps)));
+ gst_element_class_add_pad_template (element_class,
+ gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps));
}
static void
diff --git a/gst/videomaxrate/videomaxrate.c b/gst/videomaxrate/videomaxrate.c
index 396a200ed..0d7bb4f07 100644
--- a/gst/videomaxrate/videomaxrate.c
+++ b/gst/videomaxrate/videomaxrate.c
@@ -98,10 +98,10 @@ gst_video_max_rate_base_init (gpointer gclass)
"Filter/Effect/Video",
"Drops extra frames", "Justin Karneges <justin@affinix.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_max_rate_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_max_rate_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_max_rate_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_max_rate_src_template));
}
static void
diff --git a/gst/videomeasure/gstvideomeasure_collector.c b/gst/videomeasure/gstvideomeasure_collector.c
index 0c1f15ec3..7619967fc 100644
--- a/gst/videomeasure/gstvideomeasure_collector.c
+++ b/gst/videomeasure/gstvideomeasure_collector.c
@@ -323,10 +323,10 @@ gst_measure_collector_base_init (gpointer g_class)
"Collect measurements from a measuring element",
"Руслан Ижбулатов <lrn _at_ gmail _dot_ com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_measure_collector_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_measure_collector_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_measure_collector_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_measure_collector_src_template));
}
static void
diff --git a/gst/videomeasure/gstvideomeasure_ssim.c b/gst/videomeasure/gstvideomeasure_ssim.c
index 2a2e493ef..3a354bd67 100644
--- a/gst/videomeasure/gstvideomeasure_ssim.c
+++ b/gst/videomeasure/gstvideomeasure_ssim.c
@@ -78,7 +78,7 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
"depth = (int) 8 "
static GstStaticPadTemplate gst_ssim_src_template =
-GST_STATIC_PAD_TEMPLATE ("src%d",
+GST_STATIC_PAD_TEMPLATE ("src_%u",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS (SRC_CAPS)
@@ -92,7 +92,7 @@ GST_STATIC_PAD_TEMPLATE ("original",
);
static GstStaticPadTemplate gst_ssim_sink_modified_template =
-GST_STATIC_PAD_TEMPLATE ("modified%d",
+GST_STATIC_PAD_TEMPLATE ("modified_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS (SINK_CAPS)
@@ -1095,12 +1095,12 @@ gst_ssim_class_init (GstSSimClass * klass)
"(only when using Gaussian window).",
G_MINFLOAT, 10, 1.5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_ssim_src_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_ssim_sink_original_template);
- gst_element_class_add_static_pad_template (gstelement_class,
- &gst_ssim_sink_modified_template);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_ssim_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_ssim_sink_original_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_ssim_sink_modified_template));
gst_element_class_set_details_simple (gstelement_class, "SSim",
"Filter/Analyzer/Video",
"Calculate Y-SSIM for n+2 YUV video streams",
@@ -1125,7 +1125,7 @@ gst_ssim_request_new_pad (GstElement * element, GstPadTemplate * templ,
GstPad *newsrc;
gint padcount;
GstPadTemplate *template;
- gint num = -1;
+ guint num = -1;
if (templ->direction != GST_PAD_SINK)
goto not_sink;
@@ -1145,9 +1145,9 @@ gst_ssim_request_new_pad (GstElement * element, GstPadTemplate * templ,
newpad = gst_pad_new_from_template (templ, "original");
GST_DEBUG_OBJECT (ssim, "request new sink pad original");
ssim->orig = newpad;
- } else if (strncmp (padname, "modified", 8) == 0) {
- const gchar *numstr = &padname[8];
- num = strtol (numstr, NULL, 10);
+ } else if (strncmp (padname, "modified_", 9) == 0) {
+ const gchar *numstr = &padname[9];
+ num = strtoul (numstr, NULL, 10);
if (errno == EINVAL || errno == ERANGE)
goto bad_name;
newpad = gst_pad_new_from_template (templ, padname);
@@ -1181,11 +1181,11 @@ gst_ssim_request_new_pad (GstElement * element, GstPadTemplate * templ,
padcount = g_atomic_int_exchange_and_add (&ssim->padcount, 1);
#endif
- if (num >= 0) {
+ if (num != -1) {
GstSSimOutputContext *c;
template = gst_static_pad_template_get (&gst_ssim_src_template);
- name = g_strdup_printf ("src%d", num);
+ name = g_strdup_printf ("src_%u", num);
newsrc = gst_pad_new_from_template (template, name);
GST_DEBUG_OBJECT (ssim, "creating src pad %s", name);
g_free (name);
diff --git a/gst/videoparsers/gstdiracparse.c b/gst/videoparsers/gstdiracparse.c
index aee281ffe..c6fa69204 100644
--- a/gst/videoparsers/gstdiracparse.c
+++ b/gst/videoparsers/gstdiracparse.c
@@ -54,7 +54,8 @@ static gboolean gst_dirac_parse_start (GstBaseParse * parse);
static gboolean gst_dirac_parse_stop (GstBaseParse * parse);
static gboolean gst_dirac_parse_set_sink_caps (GstBaseParse * parse,
GstCaps * caps);
-static GstCaps *gst_dirac_parse_get_sink_caps (GstBaseParse * parse);
+static GstCaps *gst_dirac_parse_get_sink_caps (GstBaseParse * parse,
+ GstCaps * filter);
static gboolean gst_dirac_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * framesize, gint * skipsize);
static GstFlowReturn gst_dirac_parse_parse_frame (GstBaseParse * parse,
@@ -96,34 +97,30 @@ GST_STATIC_PAD_TEMPLATE ("src",
/* class initialization */
-GST_BOILERPLATE (GstDiracParse, gst_dirac_parse, GstBaseParse,
- GST_TYPE_BASE_PARSE);
-
-static void
-gst_dirac_parse_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_dirac_parse_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_dirac_parse_sink_template);
-
- gst_element_class_set_details_simple (element_class, "Dirac parser",
- "Codec/Parser/Video", "Parses Dirac streams",
- "David Schleef <ds@schleef.org>");
-}
+#define parent_class gst_dirac_parse_parent_class
+G_DEFINE_TYPE (GstDiracParse, gst_dirac_parse, GST_TYPE_BASE_PARSE);
static void
gst_dirac_parse_class_init (GstDiracParseClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
GstBaseParseClass *base_parse_class = GST_BASE_PARSE_CLASS (klass);
gobject_class->set_property = gst_dirac_parse_set_property;
gobject_class->get_property = gst_dirac_parse_get_property;
gobject_class->dispose = gst_dirac_parse_dispose;
gobject_class->finalize = gst_dirac_parse_finalize;
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_dirac_parse_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_dirac_parse_sink_template));
+
+ gst_element_class_set_details_simple (element_class, "Dirac parser",
+ "Codec/Parser/Video", "Parses Dirac streams",
+ "David Schleef <ds@schleef.org>");
+
base_parse_class->start = GST_DEBUG_FUNCPTR (gst_dirac_parse_start);
base_parse_class->stop = GST_DEBUG_FUNCPTR (gst_dirac_parse_stop);
base_parse_class->set_sink_caps =
@@ -143,11 +140,9 @@ gst_dirac_parse_class_init (GstDiracParseClass * klass)
}
static void
-gst_dirac_parse_init (GstDiracParse * diracparse,
- GstDiracParseClass * diracparse_class)
+gst_dirac_parse_init (GstDiracParse * diracparse)
{
gst_base_parse_set_min_frame_size (GST_BASE_PARSE (diracparse), 13);
-
}
void
@@ -222,37 +217,38 @@ static gboolean
gst_dirac_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * framesize, gint * skipsize)
{
- GstByteReader reader = GST_BYTE_READER_INIT_FROM_BUFFER (frame->buffer);
int off;
guint32 next_header;
guint8 *data;
- int size;
+ gsize size;
gboolean have_picture = FALSE;
int offset;
- data = GST_BUFFER_DATA (frame->buffer);
- size = GST_BUFFER_SIZE (frame->buffer);
+ data = gst_buffer_map (frame->buffer, &size, NULL, GST_MAP_READ);
if (G_UNLIKELY (size < 13))
- return FALSE;
+ goto out;
- GST_DEBUG ("%d: %02x %02x %02x %02x", size, data[0], data[1], data[2],
- data[3]);
+ GST_DEBUG ("%" G_GSIZE_FORMAT ": %02x %02x %02x %02x", size, data[0], data[1],
+ data[2], data[3]);
if (GST_READ_UINT32_BE (data) != 0x42424344) {
+ GstByteReader reader;
+
+ gst_byte_reader_init (&reader, data, size);
off = gst_byte_reader_masked_scan_uint32 (&reader, 0xffffffff,
- 0x42424344, 0, GST_BUFFER_SIZE (frame->buffer));
+ 0x42424344, 0, size);
if (off < 0) {
- *skipsize = GST_BUFFER_SIZE (frame->buffer) - 3;
- return FALSE;
+ *skipsize = size - 3;
+ goto out;
}
GST_LOG_OBJECT (parse, "possible sync at buffer offset %d", off);
GST_DEBUG ("skipping %d", off);
*skipsize = off;
- return FALSE;
+ goto out;
}
/* have sync, parse chunks */
@@ -263,7 +259,7 @@ gst_dirac_parse_check_valid_frame (GstBaseParse * parse,
if (offset + 13 >= size) {
*framesize = offset + 13;
- return FALSE;
+ goto out;
}
GST_DEBUG ("chunk type %02x", data[offset + 4]);
@@ -271,7 +267,7 @@ gst_dirac_parse_check_valid_frame (GstBaseParse * parse,
if (GST_READ_UINT32_BE (data + offset) != 0x42424344) {
GST_DEBUG ("bad header");
*skipsize = 3;
- return FALSE;
+ goto out;
}
next_header = GST_READ_UINT32_BE (data + offset + 5);
@@ -286,14 +282,20 @@ gst_dirac_parse_check_valid_frame (GstBaseParse * parse,
offset += next_header;
if (offset >= size) {
*framesize = offset;
- return FALSE;
+ goto out;
}
}
+ gst_buffer_unmap (frame->buffer, data, size);
+
*framesize = offset;
GST_DEBUG ("framesize %d", *framesize);
return TRUE;
+
+out:
+ gst_buffer_unmap (frame->buffer, data, size);
+ return FALSE;
}
static GstFlowReturn
@@ -301,14 +303,13 @@ gst_dirac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
{
GstDiracParse *diracparse = GST_DIRAC_PARSE (parse);
guint8 *data;
- int size;
+ gsize size;
/* Called when processing incoming buffers. Function should parse
a checked frame. */
/* MUST implement */
- data = GST_BUFFER_DATA (frame->buffer);
- size = GST_BUFFER_SIZE (frame->buffer);
+ data = gst_buffer_map (frame->buffer, &size, NULL, GST_MAP_READ);
//GST_ERROR("got here %d", size);
@@ -342,8 +343,7 @@ gst_dirac_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
}
- gst_buffer_set_caps (frame->buffer,
- GST_PAD_CAPS (GST_BASE_PARSE_SRC_PAD (parse)));
+ gst_buffer_unmap (frame->buffer, data, size);
gst_base_parse_set_min_frame_size (parse, 13);
@@ -383,7 +383,7 @@ gst_dirac_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
}
static GstCaps *
-gst_dirac_parse_get_sink_caps (GstBaseParse * parse)
+gst_dirac_parse_get_sink_caps (GstBaseParse * parse, GstCaps * filter)
{
GstCaps *peercaps;
GstCaps *res;
diff --git a/gst/videoparsers/gsth263parse.c b/gst/videoparsers/gsth263parse.c
index 85028c28d..dba1f89f5 100644
--- a/gst/videoparsers/gsth263parse.c
+++ b/gst/videoparsers/gsth263parse.c
@@ -48,7 +48,7 @@ GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK,
GST_STATIC_CAPS ("video/x-h263, variant = (string) itu")
);
-GST_BOILERPLATE (GstH263Parse, gst_h263_parse, GstElement, GST_TYPE_BASE_PARSE);
+G_DEFINE_TYPE (GstH263Parse, gst_h263_parse, GST_TYPE_BASE_PARSE);
static gboolean gst_h263_parse_start (GstBaseParse * parse);
static gboolean gst_h263_parse_stop (GstBaseParse * parse);
@@ -58,31 +58,27 @@ static gboolean gst_h263_parse_check_valid_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, guint * framesize, gint * skipsize);
static GstFlowReturn gst_h263_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
-static GstCaps *gst_h263_parse_get_sink_caps (GstBaseParse * parse);
+static GstCaps *gst_h263_parse_get_sink_caps (GstBaseParse * parse,
+ GstCaps * filter);
static void
-gst_h263_parse_base_init (gpointer g_class)
+gst_h263_parse_class_init (GstH263ParseClass * klass)
{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+ GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (h263_parse_debug, "h263parse", 0, "h263 parser");
- gst_element_class_add_static_pad_template (gstelement_class,
- &srctemplate);
- gst_element_class_add_static_pad_template (gstelement_class,
- &sinktemplate);
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (gstelement_class, "H.263 parser",
"Codec/Parser/Video",
"Parses H.263 streams",
"Arun Raghavan <arun.raghavan@collabora.co.uk>,"
"Edward Hervey <edward.hervey@collabora.co.uk>");
- GST_DEBUG_CATEGORY_INIT (h263_parse_debug, "h263parse", 0, "h263 parser");
-}
-
-static void
-gst_h263_parse_class_init (GstH263ParseClass * klass)
-{
- GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
-
/* Override BaseParse vfuncs */
parse_class->start = GST_DEBUG_FUNCPTR (gst_h263_parse_start);
parse_class->stop = GST_DEBUG_FUNCPTR (gst_h263_parse_stop);
@@ -94,7 +90,7 @@ gst_h263_parse_class_init (GstH263ParseClass * klass)
}
static void
-gst_h263_parse_init (GstH263Parse * h263parse, GstH263ParseClass * g_class)
+gst_h263_parse_init (GstH263Parse * h263parse)
{
}
@@ -155,10 +151,13 @@ gst_h263_parse_sink_event (GstBaseParse * parse, GstEvent * event)
static guint
find_psc (GstBuffer * buffer, guint skip)
{
+ guint8 *buf_data;
+ gsize buf_size;
GstByteReader br;
guint psc_pos = -1, psc;
- gst_byte_reader_init_from_buffer (&br, buffer);
+ buf_data = gst_buffer_map (buffer, &buf_size, NULL, GST_MAP_READ);
+ gst_byte_reader_init (&br, buf_data, buf_size);
if (!gst_byte_reader_set_pos (&br, skip))
goto out;
@@ -176,6 +175,7 @@ find_psc (GstBuffer * buffer, guint skip)
}
out:
+ gst_buffer_unmap (buffer, buf_data, buf_size);
return psc_pos;
}
@@ -189,16 +189,16 @@ gst_h263_parse_set_src_caps (GstH263Parse * h263parse,
g_assert (h263parse->state == PASSTHROUGH || h263parse->state == GOT_HEADER);
- caps = GST_PAD_CAPS (GST_BASE_PARSE_SINK_PAD (h263parse));
+ caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (h263parse));
if (caps) {
- caps = gst_caps_copy (caps);
+ caps = gst_caps_make_writable (caps);
} else {
caps = gst_caps_new_simple ("video/x-h263",
"variant", G_TYPE_STRING, "itu", NULL);
}
gst_caps_set_simple (caps, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
- sink_caps = GST_PAD_CAPS (GST_BASE_PARSE_SINK_PAD (h263parse));
+ sink_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (h263parse));
if (sink_caps && (st = gst_caps_get_structure (sink_caps, 0)) &&
gst_structure_get_fraction (st, "framerate", &fr_num, &fr_denom)) {
/* Got it in caps - nothing more to do */
@@ -255,19 +255,21 @@ gst_h263_parse_check_valid_frame (GstBaseParse * parse,
GstH263Parse *h263parse;
GstBuffer *buffer;
guint psc_pos, next_psc_pos;
+ gsize size;
h263parse = GST_H263_PARSE (parse);
buffer = frame->buffer;
+ size = gst_buffer_get_size (buffer);
- if (GST_BUFFER_SIZE (buffer) < 3)
+ if (size < 3)
return FALSE;
psc_pos = find_psc (buffer, 0);
if (psc_pos == -1) {
/* PSC not found, need more data */
- if (GST_BUFFER_SIZE (buffer) > 3)
- psc_pos = GST_BUFFER_SIZE (buffer) - 3;
+ if (size > 3)
+ psc_pos = size - 3;
else
psc_pos = 0;
goto more;
@@ -280,7 +282,7 @@ gst_h263_parse_check_valid_frame (GstBaseParse * parse,
if (next_psc_pos == -1) {
if (GST_BASE_PARSE_DRAINING (parse))
/* FLUSH/EOS, it's okay if we can't find the next frame */
- next_psc_pos = GST_BUFFER_SIZE (buffer);
+ next_psc_pos = size;
else
goto more;
}
@@ -349,9 +351,6 @@ gst_h263_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
/* h263parse->state is now GOT_HEADER */
- gst_buffer_set_caps (buffer,
- GST_PAD_CAPS (GST_BASE_PARSE_SRC_PAD (GST_BASE_PARSE (h263parse))));
-
if (gst_h263_parse_is_delta_unit (&params))
GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
else
@@ -363,7 +362,7 @@ out:
}
static GstCaps *
-gst_h263_parse_get_sink_caps (GstBaseParse * parse)
+gst_h263_parse_get_sink_caps (GstBaseParse * parse, GstCaps * filter)
{
GstCaps *peercaps;
GstCaps *res;
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 840cfb2d0..90916a21e 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -72,8 +72,8 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
"stream-format=(string) { avc, byte-stream }, "
"alignment=(string) { au, nal }"));
-GST_BOILERPLATE (GstH264Parse, gst_h264_parse, GstBaseParse,
- GST_TYPE_BASE_PARSE);
+#define parent_class gst_h264_parse_parent_class
+G_DEFINE_TYPE (GstH264Parse, gst_h264_parse, GST_TYPE_BASE_PARSE);
static void gst_h264_parse_finalize (GObject * object);
@@ -92,33 +92,22 @@ static void gst_h264_parse_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static gboolean gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps);
-static GstCaps *gst_h264_parse_get_caps (GstBaseParse * parse);
-static GstFlowReturn gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer);
+static GstCaps *gst_h264_parse_get_caps (GstBaseParse * parse,
+ GstCaps * filter);
+static GstFlowReturn gst_h264_parse_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
static gboolean gst_h264_parse_event (GstBaseParse * parse, GstEvent * event);
static gboolean gst_h264_parse_src_event (GstBaseParse * parse,
GstEvent * event);
static void
-gst_h264_parse_base_init (gpointer g_class)
-{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (gstelement_class, &srctemplate);
- gst_element_class_add_static_pad_template (gstelement_class, &sinktemplate);
-
- gst_element_class_set_details_simple (gstelement_class, "H.264 parser",
- "Codec/Parser/Converter/Video",
- "Parses H.264 streams",
- "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
-
- GST_DEBUG_CATEGORY_INIT (h264_parse_debug, "h264parse", 0, "h264 parser");
-}
-
-static void
gst_h264_parse_class_init (GstH264ParseClass * klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (h264_parse_debug, "h264parse", 0, "h264 parser");
gobject_class->finalize = gst_h264_parse_finalize;
gobject_class->set_property = gst_h264_parse_set_property;
@@ -144,10 +133,20 @@ gst_h264_parse_class_init (GstH264ParseClass * klass)
parse_class->get_sink_caps = GST_DEBUG_FUNCPTR (gst_h264_parse_get_caps);
parse_class->event = GST_DEBUG_FUNCPTR (gst_h264_parse_event);
parse_class->src_event = GST_DEBUG_FUNCPTR (gst_h264_parse_src_event);
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&srctemplate));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sinktemplate));
+
+ gst_element_class_set_details_simple (gstelement_class, "H.264 parser",
+ "Codec/Parser/Converter/Video",
+ "Parses H.264 streams",
+ "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
}
static void
-gst_h264_parse_init (GstH264Parse * h264parse, GstH264ParseClass * g_class)
+gst_h264_parse_init (GstH264Parse * h264parse)
{
h264parse->frame_out = gst_adapter_new ();
@@ -354,22 +353,23 @@ gst_h264_parse_wrap_nal (GstH264Parse * h264parse, guint format, guint8 * data,
{
GstBuffer *buf;
guint nl = h264parse->nal_length_size;
+ guint32 tmp;
GST_DEBUG_OBJECT (h264parse, "nal length %d", size);
- buf = gst_buffer_new_and_alloc (size + nl + 4);
+ buf = gst_buffer_new_allocate (NULL, nl + size, 0);
if (format == GST_H264_PARSE_FORMAT_AVC) {
- GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), size << (32 - 8 * nl));
+ tmp = GUINT32_TO_BE (size << (32 - 8 * nl));
} else {
/* HACK: nl should always be 4 here, otherwise this won't work.
* There are legit cases where nl in avc stream is 2, but byte-stream
* SC is still always 4 bytes. */
nl = 4;
- GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), 1);
+ tmp = GUINT32_TO_BE (1);
}
- GST_BUFFER_SIZE (buf) = size + nl;
- memcpy (GST_BUFFER_DATA (buf) + nl, data, size);
+ gst_buffer_fill (buf, 0, &tmp, sizeof (guint32));
+ gst_buffer_fill (buf, nl, data, size);
return buf;
}
@@ -397,8 +397,8 @@ gst_h264_parser_store_nal (GstH264Parse * h264parse, guint id,
return;
}
- buf = gst_buffer_new_and_alloc (size);
- memcpy (GST_BUFFER_DATA (buf), nalu->data + nalu->offset, size);
+ buf = gst_buffer_new_allocate (NULL, size, 0);
+ gst_buffer_fill (buf, 0, nalu->data + nalu->offset, size);
if (store[id])
gst_buffer_unref (store[id]);
@@ -614,14 +614,19 @@ gst_h264_parse_check_valid_frame (GstBaseParse * parse,
GstH264Parse *h264parse = GST_H264_PARSE (parse);
GstBuffer *buffer = frame->buffer;
guint8 *data;
- guint size, current_off = 0;
+ gsize size;
+ guint current_off = 0;
gboolean drain;
GstH264NalParser *nalparser = h264parse->nalparser;
GstH264NalUnit nalu = h264parse->nalu;
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
/* expect at least 3 bytes startcode == sc, and 2 bytes NALU payload */
- if (G_UNLIKELY (GST_BUFFER_SIZE (buffer) < 5))
+ if (G_UNLIKELY (size < 5)) {
+ gst_buffer_unmap (buffer, data, size);
return FALSE;
+ }
/* need to configure aggregation */
if (G_UNLIKELY (h264parse->format == GST_H264_PARSE_FORMAT_NONE))
@@ -636,9 +641,6 @@ gst_h264_parse_check_valid_frame (GstBaseParse * parse,
GST_LOG_OBJECT (h264parse, "resuming frame parsing");
}
- data = GST_BUFFER_DATA (buffer);
- size = GST_BUFFER_SIZE (buffer);
-
drain = FALSE;
current_off = h264parse->current_off;
@@ -679,7 +681,7 @@ gst_h264_parse_check_valid_frame (GstBaseParse * parse,
}
break;
case GST_H264_PARSER_BROKEN_LINK:
- return FALSE;
+ goto out;
case GST_H264_PARSER_ERROR:
current_off = size - 3;
goto parsing_error;
@@ -714,8 +716,8 @@ gst_h264_parse_check_valid_frame (GstBaseParse * parse,
if (GST_BASE_PARSE_DRAINING (parse)) {
drain = TRUE;
- GST_DEBUG_OBJECT (h264parse, "draining NAL %u %u %u", size,
- h264parse->nalu.offset, h264parse->nalu.size);
+ GST_DEBUG_OBJECT (h264parse, "draining NAL %" G_GSIZE_FORMAT " %u %u",
+ size, h264parse->nalu.offset, h264parse->nalu.size);
/* Can't parse the nalu */
if (size - h264parse->nalu.offset < 2) {
*skipsize = nalu.offset;
@@ -751,6 +753,7 @@ end:
*framesize = nalu.offset + nalu.size - h264parse->nalu.sc_offset;
h264parse->current_off = current_off;
+ gst_buffer_unmap (buffer, data, size);
return TRUE;
parsing_error:
@@ -773,11 +776,14 @@ more:
/* Restart parsing from here next time */
h264parse->current_off = current_off;
+ /* Fall-through. */
+out:
+ gst_buffer_unmap (buffer, data, size);
return FALSE;
invalid:
gst_h264_parse_reset_frame (h264parse);
- return FALSE;
+ goto out;
}
/* byte together avc codec data based on collected pps and sps so far */
@@ -788,20 +794,23 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
gint i, sps_size = 0, pps_size = 0, num_sps = 0, num_pps = 0;
guint8 profile_idc = 0, profile_comp = 0, level_idc = 0;
gboolean found = FALSE;
- guint8 *data;
+ guint8 *buf_data, *data;
/* only nal payload in stored nals */
for (i = 0; i < GST_H264_MAX_SPS_COUNT; i++) {
if ((nal = h264parse->sps_nals[i])) {
+ gsize size = gst_buffer_get_size (nal);
num_sps++;
/* size bytes also count */
- sps_size += GST_BUFFER_SIZE (nal) + 2;
- if (GST_BUFFER_SIZE (nal) >= 4) {
+ sps_size += size + 2;
+ if (size >= 4) {
+ guint8 tmp[3];
found = TRUE;
- profile_idc = (GST_BUFFER_DATA (nal))[1];
- profile_comp = (GST_BUFFER_DATA (nal))[2];
- level_idc = (GST_BUFFER_DATA (nal))[3];
+ gst_buffer_extract (nal, 1, tmp, 3);
+ profile_idc = tmp[0];
+ profile_comp = tmp[1];
+ level_idc = tmp[2];
}
}
}
@@ -809,7 +818,7 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
if ((nal = h264parse->pps_nals[i])) {
num_pps++;
/* size bytes also count */
- pps_size += GST_BUFFER_SIZE (nal) + 2;
+ pps_size += gst_buffer_get_size (nal) + 2;
}
}
@@ -819,8 +828,9 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
if (!found || !num_pps)
return NULL;
- buf = gst_buffer_new_and_alloc (5 + 1 + sps_size + 1 + pps_size);
- data = GST_BUFFER_DATA (buf);
+ buf = gst_buffer_new_allocate (NULL, 5 + 1 + sps_size + 1 + pps_size, 0);
+ buf_data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+ data = buf_data;
data[0] = 1; /* AVC Decoder Configuration Record ver. 1 */
data[1] = profile_idc; /* profile_idc */
@@ -832,9 +842,10 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
data += 6;
for (i = 0; i < GST_H264_MAX_SPS_COUNT; i++) {
if ((nal = h264parse->sps_nals[i])) {
- GST_WRITE_UINT16_BE (data, GST_BUFFER_SIZE (nal));
- memcpy (data + 2, GST_BUFFER_DATA (nal), GST_BUFFER_SIZE (nal));
- data += 2 + GST_BUFFER_SIZE (nal);
+ gsize nal_size = gst_buffer_get_size (nal);
+ GST_WRITE_UINT16_BE (data, nal_size);
+ gst_buffer_extract (nal, 0, data + 2, nal_size);
+ data += 2 + nal_size;
}
}
@@ -842,12 +853,15 @@ gst_h264_parse_make_codec_data (GstH264Parse * h264parse)
data++;
for (i = 0; i < GST_H264_MAX_PPS_COUNT; i++) {
if ((nal = h264parse->pps_nals[i])) {
- GST_WRITE_UINT16_BE (data, GST_BUFFER_SIZE (nal));
- memcpy (data + 2, GST_BUFFER_DATA (nal), GST_BUFFER_SIZE (nal));
- data += 2 + GST_BUFFER_SIZE (nal);
+ gsize nal_size = gst_buffer_get_size (nal);
+ GST_WRITE_UINT16_BE (data, nal_size);
+ gst_buffer_extract (nal, 0, data + 2, nal_size);
+ data += 2 + nal_size;
}
}
+ gst_buffer_unmap (buf, buf_data, -1);
+
return buf;
}
@@ -951,7 +965,8 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
gboolean modified = FALSE;
GstBuffer *buf = NULL;
- if (G_UNLIKELY (!GST_PAD_CAPS (GST_BASE_PARSE_SRC_PAD (h264parse))))
+ if (G_UNLIKELY (!gst_pad_has_current_caps (GST_BASE_PARSE_SRC_PAD
+ (h264parse))))
modified = TRUE;
else if (G_UNLIKELY (!h264parse->update_caps))
return;
@@ -961,13 +976,11 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
if (caps)
sink_caps = caps;
else
- sink_caps = GST_PAD_CAPS (GST_BASE_PARSE_SINK_PAD (h264parse));
+ sink_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (h264parse));
/* carry over input caps as much as possible; override with our own stuff */
- if (sink_caps)
- gst_caps_ref (sink_caps);
- else
- sink_caps = gst_caps_new_simple ("video/x-h264", NULL);
+ if (!sink_caps)
+ sink_caps = gst_caps_new_empty_simple ("video/x-h264");
sps = h264parse->nalparser->last_sps;
GST_DEBUG_OBJECT (h264parse, "sps: %p", sps);
@@ -977,10 +990,15 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
h264parse->align == GST_H264_PARSE_ALIGN_AU) {
buf = gst_h264_parse_make_codec_data (h264parse);
if (buf && h264parse->codec_data) {
- if (GST_BUFFER_SIZE (buf) != GST_BUFFER_SIZE (h264parse->codec_data) ||
- memcmp (GST_BUFFER_DATA (buf),
- GST_BUFFER_DATA (h264parse->codec_data), GST_BUFFER_SIZE (buf)))
+ gsize size;
+ gpointer data;
+
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+ if (size != gst_buffer_get_size (h264parse->codec_data) ||
+ gst_buffer_memcmp (h264parse->codec_data, 0, data, size))
modified = TRUE;
+
+ gst_buffer_unmap (buf, data, size);
} else {
if (h264parse->codec_data)
buf = gst_buffer_ref (h264parse->codec_data);
@@ -1240,7 +1258,7 @@ gst_h264_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
GstBuffer *buf;
buf = gst_adapter_take_buffer (h264parse->frame_out, av);
- gst_buffer_copy_metadata (buf, buffer, GST_BUFFER_COPY_ALL);
+ gst_buffer_copy_into (buf, buffer, GST_BUFFER_COPY_METADATA, 0, -1);
gst_buffer_replace (&frame->buffer, buf);
gst_buffer_unref (buf);
}
@@ -1254,14 +1272,16 @@ static GstFlowReturn
gst_h264_parse_push_codec_buffer (GstH264Parse * h264parse, GstBuffer * nal,
GstClockTime ts)
{
- nal = gst_h264_parse_wrap_nal (h264parse, h264parse->format,
- GST_BUFFER_DATA (nal), GST_BUFFER_SIZE (nal));
+ gpointer data;
+ gsize size;
+
+ data = gst_buffer_map (nal, &size, NULL, GST_MAP_READ);
+ nal = gst_h264_parse_wrap_nal (h264parse, h264parse->format, data, size);
+ gst_buffer_unmap (nal, data, size);
GST_BUFFER_TIMESTAMP (nal) = ts;
GST_BUFFER_DURATION (nal) = 0;
- gst_buffer_set_caps (nal, GST_PAD_CAPS (GST_BASE_PARSE_SRC_PAD (h264parse)));
-
return gst_pad_push (GST_BASE_PARSE_SRC_PAD (h264parse), nal);
}
@@ -1429,36 +1449,33 @@ gst_h264_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
GstBuffer *new_buf;
const gboolean bs = h264parse->format == GST_H264_PARSE_FORMAT_BYTE;
- gst_byte_writer_init_with_size (&bw, GST_BUFFER_SIZE (buffer), FALSE);
- gst_byte_writer_put_data (&bw, GST_BUFFER_DATA (buffer),
- h264parse->idr_pos);
+ gst_byte_writer_init_with_size (&bw, gst_buffer_get_size (buffer),
+ FALSE);
+ gst_byte_writer_put_buffer (&bw, buffer, 0, h264parse->idr_pos);
GST_DEBUG_OBJECT (h264parse, "- inserting SPS/PPS");
for (i = 0; i < GST_H264_MAX_SPS_COUNT; i++) {
if ((codec_nal = h264parse->sps_nals[i])) {
+ gsize nal_size = gst_buffer_get_size (codec_nal);
GST_DEBUG_OBJECT (h264parse, "inserting SPS nal");
- gst_byte_writer_put_uint32_be (&bw,
- bs ? 1 : GST_BUFFER_SIZE (codec_nal));
- gst_byte_writer_put_data (&bw, GST_BUFFER_DATA (codec_nal),
- GST_BUFFER_SIZE (codec_nal));
+ gst_byte_writer_put_uint32_be (&bw, bs ? 1 : nal_size);
+ gst_byte_writer_put_buffer (&bw, codec_nal, 0, nal_size);
h264parse->last_report = new_ts;
}
}
for (i = 0; i < GST_H264_MAX_PPS_COUNT; i++) {
if ((codec_nal = h264parse->pps_nals[i])) {
+ gsize nal_size = gst_buffer_get_size (codec_nal);
GST_DEBUG_OBJECT (h264parse, "inserting PPS nal");
- gst_byte_writer_put_uint32_be (&bw,
- bs ? 1 : GST_BUFFER_SIZE (codec_nal));
- gst_byte_writer_put_data (&bw, GST_BUFFER_DATA (codec_nal),
- GST_BUFFER_SIZE (codec_nal));
+ gst_byte_writer_put_uint32_be (&bw, bs ? 1 : nal_size);
+ gst_byte_writer_put_buffer (&bw, codec_nal, 0, nal_size);
h264parse->last_report = new_ts;
}
}
- gst_byte_writer_put_data (&bw,
- GST_BUFFER_DATA (buffer) + h264parse->idr_pos,
- GST_BUFFER_SIZE (buffer) - h264parse->idr_pos);
+ gst_byte_writer_put_buffer (&bw, buffer, h264parse->idr_pos, -1);
/* collect result and push */
new_buf = gst_byte_writer_reset_and_get_buffer (&bw);
- gst_buffer_copy_metadata (new_buf, buffer, GST_BUFFER_COPY_ALL);
+ gst_buffer_copy_into (new_buf, buffer, GST_BUFFER_COPY_METADATA, 0,
+ -1);
gst_buffer_replace (&frame->buffer, new_buf);
gst_buffer_unref (new_buf);
}
@@ -1482,7 +1499,8 @@ gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
GstStructure *str;
const GValue *value;
GstBuffer *codec_data = NULL;
- guint size, format, align, off;
+ gsize size;
+ guint format, align, off;
GstH264NalUnit nalu;
GstH264ParserResult parseres;
@@ -1518,15 +1536,18 @@ gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
codec_data = gst_value_get_buffer (value);
if (!codec_data)
goto wrong_type;
- data = GST_BUFFER_DATA (codec_data);
- size = GST_BUFFER_SIZE (codec_data);
+ data = gst_buffer_map (codec_data, &size, NULL, GST_MAP_READ);
/* parse the avcC data */
- if (size < 8)
+ if (size < 8) {
+ gst_buffer_unmap (codec_data, data, size);
goto avcc_too_small;
+ }
/* parse the version, this must be 1 */
- if (data[0] != 1)
+ if (data[0] != 1) {
+ gst_buffer_unmap (codec_data, data, size);
goto wrong_version;
+ }
/* AVCProfileIndication */
/* profile_compat */
@@ -1546,8 +1567,10 @@ gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
for (i = 0; i < num_sps; i++) {
parseres = gst_h264_parser_identify_nalu_avc (h264parse->nalparser,
data, off, size, 2, &nalu);
- if (parseres != GST_H264_PARSER_OK)
+ if (parseres != GST_H264_PARSER_OK) {
+ gst_buffer_unmap (codec_data, data, size);
goto avcc_too_small;
+ }
gst_h264_parse_process_nal (h264parse, &nalu);
off = nalu.offset + nalu.size;
@@ -1560,6 +1583,7 @@ gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
parseres = gst_h264_parser_identify_nalu_avc (h264parse->nalparser,
data, off, size, 2, &nalu);
if (parseres != GST_H264_PARSER_OK) {
+ gst_buffer_unmap (codec_data, data, size);
goto avcc_too_small;
}
@@ -1567,6 +1591,8 @@ gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
off = nalu.offset + nalu.size;
}
+ gst_buffer_unmap (codec_data, data, size);
+
h264parse->codec_data = gst_buffer_ref (codec_data);
/* if upstream sets codec_data without setting stream-format and alignment, we
@@ -1612,7 +1638,7 @@ gst_h264_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
/* ERRORS */
avcc_too_small:
{
- GST_DEBUG_OBJECT (h264parse, "avcC size %u < 8", size);
+ GST_DEBUG_OBJECT (h264parse, "avcC size %" G_GSIZE_FORMAT " < 8", size);
goto refuse_caps;
}
wrong_version:
@@ -1633,11 +1659,13 @@ refuse_caps:
}
static GstCaps *
-gst_h264_parse_get_caps (GstBaseParse * parse)
+gst_h264_parse_get_caps (GstBaseParse * parse, GstCaps * filter)
{
- GstCaps *peercaps;
+ GstCaps *peercaps, *template_caps;
GstCaps *res;
+ template_caps =
+ gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD (parse));
peercaps = gst_pad_get_allowed_caps (GST_BASE_PARSE_SRC_PAD (parse));
if (peercaps) {
guint i, n;
@@ -1651,15 +1679,19 @@ gst_h264_parse_get_caps (GstBaseParse * parse)
gst_structure_remove_field (s, "parsed");
}
- res =
- gst_caps_intersect_full (peercaps,
- gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD (parse)),
+ res = gst_caps_intersect_full (peercaps, template_caps,
GST_CAPS_INTERSECT_FIRST);
gst_caps_unref (peercaps);
+ gst_caps_unref (template_caps);
} else {
- res =
- gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_PARSE_SINK_PAD
- (parse)));
+ res = template_caps;
+ }
+
+ if (filter) {
+ GstCaps *tmp = gst_caps_intersect_full (res, filter,
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (res);
+ res = tmp;
}
return res;
@@ -1747,9 +1779,9 @@ gst_h264_parse_src_event (GstBaseParse * parse, GstEvent * event)
}
static GstFlowReturn
-gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer)
+gst_h264_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstH264Parse *h264parse = GST_H264_PARSE (GST_PAD_PARENT (pad));
+ GstH264Parse *h264parse = GST_H264_PARSE (parent);
if (h264parse->packetized && buffer) {
GstBuffer *sub;
@@ -1757,6 +1789,8 @@ gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer)
GstH264ParserResult parse_res;
GstH264NalUnit nalu;
const guint nl = h264parse->nal_length_size;
+ gpointer data;
+ gsize size;
if (nl < 1 || nl > 4) {
GST_DEBUG_OBJECT (h264parse, "insufficient data to split input");
@@ -1765,11 +1799,13 @@ gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer)
return GST_FLOW_NOT_NEGOTIATED;
}
- GST_LOG_OBJECT (h264parse, "processing packet buffer of size %d",
- GST_BUFFER_SIZE (buffer));
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+ GST_LOG_OBJECT (h264parse,
+ "processing packet buffer of size %" G_GSIZE_FORMAT, size);
parse_res = gst_h264_parser_identify_nalu_avc (h264parse->nalparser,
- GST_BUFFER_DATA (buffer), 0, GST_BUFFER_SIZE (buffer), nl, &nalu);
+ data, 0, size, nl, &nalu);
while (parse_res == GST_H264_PARSER_OK) {
GST_DEBUG_OBJECT (h264parse, "AVC nal offset %d",
@@ -1782,7 +1818,7 @@ gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer)
/* at least this should make sense */
GST_BUFFER_TIMESTAMP (sub) = GST_BUFFER_TIMESTAMP (buffer);
GST_LOG_OBJECT (h264parse, "pushing NAL of size %d", nalu.size);
- ret = h264parse->parse_chain (pad, sub);
+ ret = h264parse->parse_chain (pad, parent, sub);
} else {
/* pass-through: no looking for frames (and nal processing),
* so need to parse to collect data here */
@@ -1794,10 +1830,11 @@ gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer)
}
parse_res = gst_h264_parser_identify_nalu_avc (h264parse->nalparser,
- GST_BUFFER_DATA (buffer), nalu.offset + nalu.size,
- GST_BUFFER_SIZE (buffer), nl, &nalu);
+ data, nalu.offset + nalu.size, size, nl, &nalu);
}
+ gst_buffer_unmap (buffer, data, size);
+
if (h264parse->split_packetized) {
gst_buffer_unref (buffer);
return ret;
@@ -1823,7 +1860,7 @@ gst_h264_parse_chain (GstPad * pad, GstBuffer * buffer)
}
}
- return h264parse->parse_chain (pad, buffer);
+ return h264parse->parse_chain (pad, parent, buffer);
}
static void
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index 49a55d3fc..53f97debe 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -65,8 +65,8 @@ enum
PROP_LAST
};
-GST_BOILERPLATE (GstMpeg4VParse, gst_mpeg4vparse, GstBaseParse,
- GST_TYPE_BASE_PARSE);
+#define gst_mpeg4vparse_parent_class parent_class
+G_DEFINE_TYPE (GstMpeg4VParse, gst_mpeg4vparse, GST_TYPE_BASE_PARSE);
static gboolean gst_mpeg4vparse_start (GstBaseParse * parse);
static gboolean gst_mpeg4vparse_stop (GstBaseParse * parse);
@@ -77,7 +77,8 @@ static GstFlowReturn gst_mpeg4vparse_parse_frame (GstBaseParse * parse,
static GstFlowReturn gst_mpeg4vparse_pre_push_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
static gboolean gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps);
-static GstCaps *gst_mpeg4vparse_get_caps (GstBaseParse * parse);
+static GstCaps *gst_mpeg4vparse_get_caps (GstBaseParse * parse,
+ GstCaps * filter);
static void gst_mpeg4vparse_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -88,23 +89,6 @@ static gboolean gst_mpeg4vparse_src_event (GstBaseParse * parse,
GstEvent * event);
static void
-gst_mpeg4vparse_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class, &sink_template);
-
- gst_element_class_set_details_simple (element_class,
- "MPEG 4 video elementary stream parser", "Codec/Parser/Video",
- "Parses MPEG-4 Part 2 elementary video streams",
- "Julien Moutte <julien@fluendo.com>");
-
- GST_DEBUG_CATEGORY_INIT (mpeg4v_parse_debug, "mpeg4videoparse", 0,
- "MPEG-4 video parser");
-}
-
-static void
gst_mpeg4vparse_set_property (GObject * object, guint property_id,
const GValue * value, GParamSpec * pspec)
{
@@ -145,6 +129,7 @@ gst_mpeg4vparse_class_init (GstMpeg4VParseClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@@ -165,6 +150,19 @@ gst_mpeg4vparse_class_init (GstMpeg4VParseClass * klass)
0, 3600, DEFAULT_CONFIG_INTERVAL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "MPEG 4 video elementary stream parser", "Codec/Parser/Video",
+ "Parses MPEG-4 Part 2 elementary video streams",
+ "Julien Moutte <julien@fluendo.com>");
+
+ GST_DEBUG_CATEGORY_INIT (mpeg4v_parse_debug, "mpeg4videoparse", 0,
+ "MPEG-4 video parser");
+
/* Override BaseParse vfuncs */
parse_class->start = GST_DEBUG_FUNCPTR (gst_mpeg4vparse_start);
parse_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg4vparse_stop);
@@ -180,7 +178,7 @@ gst_mpeg4vparse_class_init (GstMpeg4VParseClass * klass)
}
static void
-gst_mpeg4vparse_init (GstMpeg4VParse * parse, GstMpeg4VParseClass * g_class)
+gst_mpeg4vparse_init (GstMpeg4VParse * parse)
{
parse->interval = DEFAULT_CONFIG_INTERVAL;
parse->last_report = GST_CLOCK_TIME_NONE;
@@ -241,8 +239,7 @@ gst_mpeg4vparse_process_config (GstMpeg4VParse * mp4vparse,
const guint8 * data, guint offset, gsize size)
{
/* only do stuff if something new */
- if (mp4vparse->config && size == GST_BUFFER_SIZE (mp4vparse->config) &&
- memcmp (GST_BUFFER_DATA (mp4vparse->config), data, size) == 0)
+ if (!gst_buffer_memcmp (mp4vparse->config, offset, data, size))
return TRUE;
if (mp4vparse->vol_offset < 0) {
@@ -272,10 +269,7 @@ gst_mpeg4vparse_process_config (GstMpeg4VParse * mp4vparse,
if (mp4vparse->config != NULL)
gst_buffer_unref (mp4vparse->config);
- mp4vparse->config = gst_buffer_new_and_alloc (size);
-
- memcpy (GST_BUFFER_DATA (mp4vparse->config), data, size);
-
+ mp4vparse->config = gst_buffer_new_wrapped (g_memdup (data, size), size);
/* trigger src caps update */
mp4vparse->update_caps = TRUE;
@@ -374,15 +368,17 @@ gst_mpeg4vparse_check_valid_frame (GstBaseParse * parse,
{
GstMpeg4VParse *mp4vparse = GST_MPEG4VIDEO_PARSE (parse);
GstMpeg4Packet packet;
- guint8 *data = GST_BUFFER_DATA (frame->buffer);
- guint size = GST_BUFFER_SIZE (frame->buffer);
+ guint8 *data = NULL;
+ gsize size;
gint off = 0;
- gboolean ret;
+ gboolean ret = FALSE;
+
+ data = gst_buffer_map (frame->buffer, &size, NULL, GST_MAP_READ);
retry:
/* at least start code and subsequent byte */
if (G_UNLIKELY (size - off < 5))
- return FALSE;
+ goto out;
/* avoid stale cached parsing state */
if (!(frame->flags & GST_BASE_PARSE_FRAME_FLAG_PARSING)) {
@@ -404,7 +400,7 @@ retry:
case (GST_MPEG4_PARSER_NO_PACKET):
case (GST_MPEG4_PARSER_ERROR):
*skipsize = size - 3;
- return FALSE;
+ goto out;
default:
break;
}
@@ -413,7 +409,7 @@ retry:
/* possible frame header, but not at offset 0? skip bytes before sync */
if (G_UNLIKELY (off > 3)) {
*skipsize = off - 3;
- return FALSE;
+ goto out;
}
switch (packet.type) {
@@ -454,14 +450,15 @@ next:
/* if draining, take all */
if (GST_BASE_PARSE_DRAINING (parse)) {
*framesize = size;
- return TRUE;
+ ret = TRUE;
} else {
/* resume scan where we left it */
mp4vparse->last_sc = size - 3;
/* request best next available */
*framesize = G_MAXUINT;
- return FALSE;
}
+ goto out;
+ break;
default:
/* decide whether this startcode ends a frame */
ret = gst_mpeg4vparse_process_sc (mp4vparse, &packet, size);
@@ -476,6 +473,8 @@ next:
goto next;
}
+out:
+ gst_buffer_unmap (frame->buffer, data, size);
return ret;
}
@@ -487,14 +486,16 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse)
GST_LOG_OBJECT (mp4vparse, "Updating caps");
/* only update if no src caps yet or explicitly triggered */
- if (G_LIKELY (GST_PAD_CAPS (GST_BASE_PARSE_SRC_PAD (mp4vparse)) &&
+ if (G_LIKELY (gst_pad_has_current_caps (GST_BASE_PARSE_SRC_PAD (mp4vparse)) &&
!mp4vparse->update_caps))
return;
/* carry over input caps as much as possible; override with our own stuff */
- caps = GST_PAD_CAPS (GST_BASE_PARSE_SINK_PAD (mp4vparse));
+ caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (mp4vparse));
if (caps) {
- caps = gst_caps_copy (caps);
+ GstCaps *tmp = gst_caps_copy (caps);
+ gst_caps_unref (caps);
+ caps = tmp;
} else {
caps = gst_caps_new_simple ("video/mpeg",
"mpegversion", G_TYPE_INT, 4, NULL);
@@ -667,19 +668,25 @@ gst_mpeg4vparse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
"interval since last config %" GST_TIME_FORMAT, GST_TIME_ARGS (diff));
if (GST_TIME_AS_SECONDS (diff) >= mp4vparse->interval || push_codec) {
+ guint8 *cdata;
+ gsize csize;
+ gboolean diffconf;
+
/* we need to send config now first */
GST_INFO_OBJECT (parse, "inserting config in stream");
+ cdata = gst_buffer_map (mp4vparse->config, &csize, NULL, GST_MAP_READ);
+ diffconf = (gst_buffer_get_size (buffer) < csize)
+ || gst_buffer_memcmp (buffer, 0, cdata, csize);
+ gst_buffer_unmap (mp4vparse->config, cdata, csize);
/* avoid inserting duplicate config */
- if ((GST_BUFFER_SIZE (buffer) < GST_BUFFER_SIZE (mp4vparse->config)) ||
- memcmp (GST_BUFFER_DATA (buffer),
- GST_BUFFER_DATA (mp4vparse->config),
- GST_BUFFER_SIZE (mp4vparse->config))) {
+ if (diffconf) {
GstBuffer *superbuf;
/* insert header */
superbuf = gst_buffer_merge (mp4vparse->config, buffer);
- gst_buffer_copy_metadata (superbuf, buffer, GST_BUFFER_COPY_ALL);
+ gst_buffer_copy_into (superbuf, buffer, GST_BUFFER_COPY_METADATA, 0,
+ csize);
gst_buffer_replace (&frame->buffer, superbuf);
gst_buffer_unref (superbuf);
} else {
@@ -718,8 +725,7 @@ gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps)
/* best possible parse attempt,
* src caps are based on sink caps so it will end up in there
* whether sucessful or not */
- data = GST_BUFFER_DATA (buf);
- size = GST_BUFFER_SIZE (buf);
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
res = gst_mpeg4_parse (&packet, TRUE, NULL, data, 0, size);
while (res == GST_MPEG4_PARSER_OK || res == GST_MPEG4_PARSER_NO_PACKET_END) {
@@ -732,8 +738,8 @@ gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps)
}
/* And take it as config */
- gst_mpeg4vparse_process_config (mp4vparse, GST_BUFFER_DATA (buf),
- 3, GST_BUFFER_SIZE (buf));
+ gst_mpeg4vparse_process_config (mp4vparse, data, 3, size);
+ gst_buffer_unmap (buf, data, size);
}
/* let's not interfere and accept regardless of config parsing success */
@@ -742,7 +748,7 @@ gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps)
static GstCaps *
-gst_mpeg4vparse_get_caps (GstBaseParse * parse)
+gst_mpeg4vparse_get_caps (GstBaseParse * parse, GstCaps * filter)
{
GstCaps *peercaps;
GstCaps *res;
@@ -771,6 +777,14 @@ gst_mpeg4vparse_get_caps (GstBaseParse * parse)
(parse)));
}
+ if (filter) {
+ GstCaps *tmp = gst_caps_intersect_full (res, filter,
+ GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (res);
+ res = tmp;
+ }
+
+
return res;
}
diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c
index 4f8eb3a37..21595407c 100644
--- a/gst/videoparsers/gstmpegvideoparse.c
+++ b/gst/videoparsers/gstmpegvideoparse.c
@@ -61,8 +61,8 @@ enum
PROP_LAST
};
-GST_BOILERPLATE (GstMpegvParse, gst_mpegv_parse, GstBaseParse,
- GST_TYPE_BASE_PARSE);
+#define parent_class gst_mpegv_parse_parent_class
+G_DEFINE_TYPE (GstMpegvParse, gst_mpegv_parse, GST_TYPE_BASE_PARSE);
static gboolean gst_mpegv_parse_start (GstBaseParse * parse);
static gboolean gst_mpegv_parse_stop (GstBaseParse * parse);
@@ -71,7 +71,8 @@ static gboolean gst_mpegv_parse_check_valid_frame (GstBaseParse * parse,
static GstFlowReturn gst_mpegv_parse_parse_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
static gboolean gst_mpegv_parse_set_caps (GstBaseParse * parse, GstCaps * caps);
-static GstCaps *gst_mpegv_parse_get_caps (GstBaseParse * parse);
+static GstCaps *gst_mpegv_parse_get_caps (GstBaseParse * parse,
+ GstCaps * filter);
static GstFlowReturn gst_mpegv_parse_pre_push_frame (GstBaseParse * parse,
GstBaseParseFrame * frame);
@@ -81,27 +82,6 @@ static void gst_mpegv_parse_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void
-gst_mpegv_parse_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class, &src_template);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
-
- gst_element_class_set_details_simple (element_class,
- "MPEG video elementary stream parser",
- "Codec/Parser/Video",
- "Parses and frames MPEG-1 and MPEG-2 elementary video streams",
- "Wim Taymans <wim.taymans@ccollabora.co.uk>, "
- "Jan Schmidt <thaytan@mad.scientist.com>, "
- "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
-
- GST_DEBUG_CATEGORY_INIT (mpegv_parse_debug, "mpegvideoparse", 0,
- "MPEG-1/2 video parser");
-}
-
-static void
gst_mpegv_parse_set_property (GObject * object, guint property_id,
const GValue * value, GParamSpec * pspec)
{
@@ -141,8 +121,12 @@ static void
gst_mpegv_parse_class_init (GstMpegvParseClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
+ GST_DEBUG_CATEGORY_INIT (mpegv_parse_debug, "mpegvideoparse", 0,
+ "MPEG-1/2 video parser");
+
parent_class = g_type_class_peek_parent (klass);
gobject_class->set_property = gst_mpegv_parse_set_property;
@@ -159,6 +143,19 @@ gst_mpegv_parse_class_init (GstMpegvParseClass * klass)
"Split frame when encountering GOP", DEFAULT_PROP_GOP_SPLIT,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "MPEG video elementary stream parser",
+ "Codec/Parser/Video",
+ "Parses and frames MPEG-1 and MPEG-2 elementary video streams",
+ "Wim Taymans <wim.taymans@ccollabora.co.uk>, "
+ "Jan Schmidt <thaytan@mad.scientist.com>, "
+ "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
+
/* Override BaseParse vfuncs */
parse_class->start = GST_DEBUG_FUNCPTR (gst_mpegv_parse_start);
parse_class->stop = GST_DEBUG_FUNCPTR (gst_mpegv_parse_stop);
@@ -172,7 +169,7 @@ gst_mpegv_parse_class_init (GstMpegvParseClass * klass)
}
static void
-gst_mpegv_parse_init (GstMpegvParse * parse, GstMpegvParseClass * g_class)
+gst_mpegv_parse_init (GstMpegvParse * parse)
{
parse->mpeg_version = 0;
}
@@ -232,16 +229,21 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
guint size)
{
GList *tmp;
- guint8 *data = GST_BUFFER_DATA (buf);
- data = data + mpvparse->seq_offset;
+ guint8 *buf_data, *data;
+ gsize buf_size;
+
+ buf_data = gst_buffer_map (buf, &buf_size, NULL, GST_MAP_READ);
+ data = buf_data + mpvparse->seq_offset;
/* only do stuff if something new */
- if (mpvparse->config && size == GST_BUFFER_SIZE (mpvparse->config) &&
- memcmp (GST_BUFFER_DATA (mpvparse->config), data, size) == 0)
+ if (mpvparse->config && size == gst_buffer_get_size (mpvparse->config) &&
+ gst_buffer_memcmp (mpvparse->config, 0, data, size) == 0) {
+ gst_buffer_unmap (buf, buf_data, buf_size);
return TRUE;
+ }
if (gst_mpeg_video_parse_sequence_header (&mpvparse->sequencehdr, data,
- GST_BUFFER_SIZE (buf) - mpvparse->seq_offset, 0)) {
+ buf_size - mpvparse->seq_offset, 0)) {
if (mpvparse->fps_num == 0 || mpvparse->fps_den == 0) {
mpvparse->fps_num = mpvparse->sequencehdr.fps_n;
mpvparse->fps_den = mpvparse->sequencehdr.fps_d;
@@ -250,6 +252,7 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
GST_DEBUG_OBJECT (mpvparse,
"failed to parse config data (size %d) at offset %d",
size, mpvparse->seq_offset);
+ gst_buffer_unmap (buf, buf_data, buf_size);
return FALSE;
}
@@ -267,8 +270,7 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
mpvparse->mpeg_version = 2;
if (gst_mpeg_video_parse_sequence_extension (&mpvparse->sequenceext,
- GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf),
- tpoffsz->offset)) {
+ buf_data, buf_size, tpoffsz->offset)) {
mpvparse->fps_num =
mpvparse->sequencehdr.fps_n * (mpvparse->sequenceext.fps_n_ext +
1) * 2;
@@ -285,11 +287,13 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
gst_buffer_unref (mpvparse->config);
mpvparse->config = gst_buffer_new_and_alloc (size);
- memcpy (GST_BUFFER_DATA (mpvparse->config), data, size);
+ gst_buffer_fill (mpvparse->config, 0, data, size);
/* trigger src caps update */
mpvparse->update_caps = TRUE;
+ gst_buffer_unmap (buf, buf_data, buf_size);
+
return TRUE;
}
@@ -355,8 +359,12 @@ static void
parse_picture_extension (GstMpegvParse * mpvparse, GstBuffer * buf, guint off)
{
GstMpegVideoPictureExt ext;
- if (gst_mpeg_video_parse_picture_extension (&ext, GST_BUFFER_DATA (buf),
- GST_BUFFER_SIZE (buf), off)) {
+ gpointer data;
+ gsize size;
+
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
+ if (gst_mpeg_video_parse_picture_extension (&ext, data, size, off)) {
mpvparse->frame_repeat_count = 1;
if (ext.repeat_first_field) {
@@ -370,6 +378,8 @@ parse_picture_extension (GstMpegvParse * mpvparse, GstBuffer * buf, guint off)
}
}
}
+
+ gst_buffer_unmap (buf, data, size);
}
/* caller guarantees at least start code in @buf at @off */
@@ -381,7 +391,7 @@ gst_mpegv_parse_process_sc (GstMpegvParse * mpvparse,
{
gboolean ret = FALSE, packet = TRUE;
- g_return_val_if_fail (buf && GST_BUFFER_SIZE (buf) >= 4, FALSE);
+ g_return_val_if_fail (buf && gst_buffer_get_size (buf) >= 4, FALSE);
GST_LOG_OBJECT (mpvparse, "process startcode %x (%s)", code,
picture_start_code_name (code));
@@ -428,14 +438,19 @@ gst_mpegv_parse_process_sc (GstMpegvParse * mpvparse,
/* extract some picture info if there is any in the frame being terminated */
if (ret && mpvparse->pic_offset >= 0 && mpvparse->pic_offset < off) {
+ gsize size;
+ gpointer data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
if (gst_mpeg_video_parse_picture_header (&mpvparse->pichdr,
- GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), mpvparse->pic_offset))
+ data, size, mpvparse->pic_offset))
GST_LOG_OBJECT (mpvparse, "picture_coding_type %d (%s), ending"
"frame of size %d", mpvparse->pichdr.pic_type,
picture_type_name (mpvparse->pichdr.pic_type), off - 4);
else
GST_LOG_OBJECT (mpvparse, "Couldn't parse picture at offset %d",
mpvparse->pic_offset);
+
+ gst_buffer_unmap (buf, data, size);
}
return ret;
@@ -488,14 +503,17 @@ gst_mpegv_parse_check_valid_frame (GstBaseParse * parse,
gboolean ret = FALSE;
GList *tmp;
gint off = 0, fsize = -1;
+ gpointer buf_data;
+ gsize buf_size;
update_frame_parsing_status (mpvparse, frame);
if (mpvparse->last_sc >= 0)
off = mpvparse->last_sc;
- mpvparse->typeoffsize =
- gst_mpeg_video_parse (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), off);
+ buf_data = gst_buffer_map (buf, &buf_size, NULL, GST_MAP_READ);
+ mpvparse->typeoffsize = gst_mpeg_video_parse (buf_data, buf_size, off);
+ gst_buffer_unmap (buf, buf_data, buf_size);
/* No sc found */
if (mpvparse->typeoffsize == NULL)
@@ -532,15 +550,15 @@ end:
*framesize = fsize;
ret = TRUE;
} else if (GST_BASE_PARSE_DRAINING (parse)) {
- *framesize = GST_BUFFER_SIZE (buf);
+ *framesize = buf_size;
ret = TRUE;
} else {
/* resume scan where we left it */
if (!mpvparse->last_sc)
- *skipsize = mpvparse->last_sc = GST_BUFFER_SIZE (buf) - 3;
+ *skipsize = mpvparse->last_sc = buf_size - 3;
else if (mpvparse->typeoffsize)
- mpvparse->last_sc = GST_BUFFER_SIZE (buf) - 3;
+ mpvparse->last_sc = buf_size - 3;
else
*skipsize = 0;
@@ -562,16 +580,16 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse)
GstCaps *caps = NULL;
/* only update if no src caps yet or explicitly triggered */
- if (G_LIKELY (GST_PAD_CAPS (GST_BASE_PARSE_SRC_PAD (mpvparse)) &&
+ if (G_LIKELY (gst_pad_has_current_caps (GST_BASE_PARSE_SRC_PAD (mpvparse)) &&
!mpvparse->update_caps))
return;
/* carry over input caps as much as possible; override with our own stuff */
- caps = GST_PAD_CAPS (GST_BASE_PARSE_SINK_PAD (mpvparse));
+ caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (mpvparse));
if (caps) {
- caps = gst_caps_copy (caps);
+ caps = gst_caps_make_writable (caps);
} else {
- caps = gst_caps_new_simple ("video/mpeg", NULL);
+ caps = gst_caps_new_empty_simple ("video/mpeg");
}
/* typically we don't output buffers until we have properly parsed some
@@ -723,13 +741,11 @@ gst_mpegv_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
/* codec tag */
codec = g_strdup_printf ("MPEG %d Video", mpvparse->mpeg_version);
- taglist = gst_tag_list_new ();
- gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
- GST_TAG_VIDEO_CODEC, codec, NULL);
+ taglist = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec, NULL);
g_free (codec);
- gst_element_found_tags_for_pad (GST_ELEMENT (mpvparse),
- GST_BASE_PARSE_SRC_PAD (mpvparse), taglist);
+ gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (mpvparse),
+ gst_event_new_tag (taglist));
mpvparse->send_codec_tag = FALSE;
}
@@ -757,7 +773,7 @@ gst_mpegv_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
/* best possible parse attempt,
* src caps are based on sink caps so it will end up in there
* whether sucessful or not */
- gst_mpegv_parse_process_config (mpvparse, buf, GST_BUFFER_SIZE (buf));
+ gst_mpegv_parse_process_config (mpvparse, buf, gst_buffer_get_size (buf));
}
/* let's not interfere and accept regardless of config parsing success */
@@ -765,7 +781,7 @@ gst_mpegv_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
}
static GstCaps *
-gst_mpegv_parse_get_caps (GstBaseParse * parse)
+gst_mpegv_parse_get_caps (GstBaseParse * parse, GstCaps * filter)
{
GstCaps *peercaps;
GstCaps *res;
diff --git a/gst/videoparsers/h263parse.c b/gst/videoparsers/h263parse.c
index 14911e79f..71f3661c9 100644
--- a/gst/videoparsers/h263parse.c
+++ b/gst/videoparsers/h263parse.c
@@ -73,14 +73,18 @@ gst_h263_parse_get_params (H263Params * params, GstBuffer * buffer,
};
GstBitReader br;
+ guint8 *buf_data;
+ gsize buf_size;
guint8 tr;
guint32 psc = 0, temp32;
guint8 temp8, pquant;
gboolean hasplusptype;
+ buf_data = gst_buffer_map (buffer, &buf_size, NULL, GST_MAP_READ);
+
/* FIXME: we can optimise a little by checking the value of available
* instead of calling using the bit reader's get_bits_* functions. */
- gst_bit_reader_init_from_buffer (&br, buffer);
+ gst_bit_reader_init (&br, buf_data, buf_size);
/* Default PCF is CIF PCF = 30000/1001 */
params->pcfnum = 30000;
@@ -445,10 +449,12 @@ gst_h263_parse_get_params (H263Params * params, GstBuffer * buffer,
done:
*state = GOT_HEADER;
more:
+ gst_buffer_unmap (buffer, buf_data, buf_size);
return GST_FLOW_OK;
beach:
*state = PASSTHROUGH;
+ gst_buffer_unmap (buffer, buf_data, buf_size);
return GST_FLOW_OK;
}
diff --git a/gst/videosignal/gstvideoanalyse.c b/gst/videosignal/gstvideoanalyse.c
index ab2d67483..7ca6626c2 100644
--- a/gst/videosignal/gstvideoanalyse.c
+++ b/gst/videosignal/gstvideoanalyse.c
@@ -279,10 +279,10 @@ gst_video_analyse_base_init (gpointer g_class)
"Filter/Analyzer/Video",
"Analyse video signal", "Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_analyse_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_analyse_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_analyse_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_analyse_src_template));
}
static void
diff --git a/gst/videosignal/gstvideodetect.c b/gst/videosignal/gstvideodetect.c
index 1e795d378..09de8b676 100644
--- a/gst/videosignal/gstvideodetect.c
+++ b/gst/videosignal/gstvideodetect.c
@@ -438,10 +438,10 @@ gst_video_detect_base_init (gpointer g_class)
"Filter/Effect/Video",
"Detect patterns in a video signal", "Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_detect_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_detect_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_detect_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_detect_src_template));
}
static void
diff --git a/gst/videosignal/gstvideomark.c b/gst/videosignal/gstvideomark.c
index 89fbf7092..c45820a31 100644
--- a/gst/videosignal/gstvideomark.c
+++ b/gst/videosignal/gstvideomark.c
@@ -325,10 +325,10 @@ gst_video_mark_base_init (gpointer g_class)
"Filter/Effect/Video",
"Marks a video signal with a pattern", "Wim Taymans <wim@fluendo.com>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_mark_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_video_mark_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_mark_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_video_mark_src_template));
}
static void
diff --git a/gst/vmnc/vmncdec.c b/gst/vmnc/vmncdec.c
index 08085b54e..3db3511ee 100644
--- a/gst/vmnc/vmncdec.c
+++ b/gst/vmnc/vmncdec.c
@@ -168,10 +168,10 @@ gst_vmnc_dec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &vmnc_dec_src_factory);
- gst_element_class_add_static_pad_template (element_class,
- &vmnc_dec_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vmnc_dec_src_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vmnc_dec_sink_factory));
gst_element_class_set_details_simple (element_class, "VMnc video decoder",
"Codec/Decoder/Video",
"Decode VmWare video to raw (RGB) video",
diff --git a/gst/y4m/gsty4mdec.c b/gst/y4m/gsty4mdec.c
index b2ebfb786..277bb1ffe 100644
--- a/gst/y4m/gsty4mdec.c
+++ b/gst/y4m/gsty4mdec.c
@@ -55,11 +55,15 @@ static void gst_y4m_dec_get_property (GObject * object,
static void gst_y4m_dec_dispose (GObject * object);
static void gst_y4m_dec_finalize (GObject * object);
-static GstFlowReturn gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_y4m_dec_sink_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_y4m_dec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_y4m_dec_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
-static gboolean gst_y4m_dec_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_y4m_dec_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_y4m_dec_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_y4m_dec_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstStateChangeReturn
gst_y4m_dec_change_state (GstElement * element, GstStateChange transition);
@@ -82,27 +86,12 @@ static GstStaticPadTemplate gst_y4m_dec_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{I420,Y42B,Y444}"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{I420,Y42B,Y444}"))
);
/* class initialization */
-
-GST_BOILERPLATE (GstY4mDec, gst_y4m_dec, GstElement, GST_TYPE_ELEMENT);
-
-static void
-gst_y4m_dec_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_static_pad_template (element_class,
- &gst_y4m_dec_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_y4m_dec_sink_template);
-
- gst_element_class_set_details_simple (element_class,
- "YUV4MPEG demuxer/decoder", "Codec/Demuxer",
- "Demuxes/decodes YUV4MPEG streams", "David Schleef <ds@schleef.org>");
-}
+#define gst_y4m_dec_parent_class parent_class
+G_DEFINE_TYPE (GstY4mDec, gst_y4m_dec, GST_TYPE_ELEMENT);
static void
gst_y4m_dec_class_init (GstY4mDecClass * klass)
@@ -114,12 +103,21 @@ gst_y4m_dec_class_init (GstY4mDecClass * klass)
gobject_class->get_property = gst_y4m_dec_get_property;
gobject_class->dispose = gst_y4m_dec_dispose;
gobject_class->finalize = gst_y4m_dec_finalize;
+
element_class->change_state = GST_DEBUG_FUNCPTR (gst_y4m_dec_change_state);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_y4m_dec_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_y4m_dec_sink_template));
+
+ gst_element_class_set_details_simple (element_class,
+ "YUV4MPEG demuxer/decoder", "Codec/Demuxer",
+ "Demuxes/decodes YUV4MPEG streams", "David Schleef <ds@schleef.org>");
}
static void
-gst_y4m_dec_init (GstY4mDec * y4mdec, GstY4mDecClass * y4mdec_class)
+gst_y4m_dec_init (GstY4mDec * y4mdec)
{
y4mdec->adapter = gst_adapter_new ();
@@ -232,15 +230,15 @@ gst_y4m_dec_change_state (GstElement * element, GstStateChange transition)
static GstClockTime
gst_y4m_dec_frames_to_timestamp (GstY4mDec * y4mdec, int frame_index)
{
- return gst_util_uint64_scale (frame_index, GST_SECOND * y4mdec->fps_d,
- y4mdec->fps_n);
+ return gst_util_uint64_scale (frame_index, GST_SECOND * y4mdec->info.fps_d,
+ y4mdec->info.fps_n);
}
static int
gst_y4m_dec_timestamp_to_frames (GstY4mDec * y4mdec, GstClockTime timestamp)
{
- return gst_util_uint64_scale (timestamp, y4mdec->fps_n,
- GST_SECOND * y4mdec->fps_d);
+ return gst_util_uint64_scale (timestamp, y4mdec->info.fps_n,
+ GST_SECOND * y4mdec->info.fps_d);
}
static int
@@ -248,13 +246,13 @@ gst_y4m_dec_bytes_to_frames (GstY4mDec * y4mdec, gint64 bytes)
{
if (bytes < y4mdec->header_size)
return 0;
- return (bytes - y4mdec->header_size) / (y4mdec->frame_size + 6);
+ return (bytes - y4mdec->header_size) / (y4mdec->info.size + 6);
}
static gint64
gst_y4m_dec_frames_to_bytes (GstY4mDec * y4mdec, int frame_index)
{
- return y4mdec->header_size + (y4mdec->frame_size + 6) * frame_index;
+ return y4mdec->header_size + (y4mdec->info.size + 6) * frame_index;
}
static GstClockTime
@@ -269,8 +267,12 @@ static gboolean
gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
{
char *end;
- int format = 420;
+ int iformat = 420;
int interlaced_char = 0;
+ gint fps_n = 0, fps_d = 0;
+ gint par_n = 0, par_d = 0;
+ gint width = 0, height = 0;
+ GstVideoFormat format;
if (memcmp (header, "YUV4MPEG2 ", 10) != 0) {
return FALSE;
@@ -285,21 +287,21 @@ gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
break;
case 'C':
header++;
- format = strtoul (header, &end, 10);
+ iformat = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
break;
case 'W':
header++;
- y4mdec->width = strtoul (header, &end, 10);
+ width = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
break;
case 'H':
header++;
- y4mdec->height = strtoul (header, &end, 10);
+ height = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
@@ -315,7 +317,7 @@ gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
break;
case 'F':
header++;
- y4mdec->fps_n = strtoul (header, &end, 10);
+ fps_n = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
@@ -324,14 +326,14 @@ gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
return FALSE;
}
header++;
- y4mdec->fps_d = strtoul (header, &end, 10);
+ fps_d = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
break;
case 'A':
header++;
- y4mdec->par_n = strtoul (header, &end, 10);
+ par_n = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
@@ -340,7 +342,7 @@ gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
return FALSE;
}
header++;
- y4mdec->par_d = strtoul (header, &end, 10);
+ par_d = strtoul (header, &end, 10);
if (end == header)
goto error;
header = end;
@@ -354,41 +356,41 @@ gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
}
}
- switch (format) {
+ switch (iformat) {
case 420:
- y4mdec->format = GST_VIDEO_FORMAT_I420;
+ format = GST_VIDEO_FORMAT_I420;
break;
case 422:
- y4mdec->format = GST_VIDEO_FORMAT_Y42B;
+ format = GST_VIDEO_FORMAT_Y42B;
break;
case 444:
- y4mdec->format = GST_VIDEO_FORMAT_Y444;
+ format = GST_VIDEO_FORMAT_Y444;
break;
default:
- GST_WARNING_OBJECT (y4mdec, "unknown y4m format %d", format);
+ GST_WARNING_OBJECT (y4mdec, "unknown y4m format %d", iformat);
return FALSE;
}
- if (y4mdec->width <= 0 || y4mdec->width > MAX_SIZE ||
- y4mdec->height <= 0 || y4mdec->height > MAX_SIZE) {
- GST_WARNING_OBJECT (y4mdec, "Dimensions %dx%d out of range",
- y4mdec->width, y4mdec->height);
+ if (width <= 0 || width > MAX_SIZE || height <= 0 || height > MAX_SIZE) {
+ GST_WARNING_OBJECT (y4mdec, "Dimensions %dx%d out of range", width, height);
return FALSE;
}
- y4mdec->frame_size = gst_video_format_get_size (y4mdec->format,
- y4mdec->width, y4mdec->height);
+ gst_video_info_set_format (&y4mdec->info, format, width, height);
switch (interlaced_char) {
case 0:
case '?':
case 'p':
- y4mdec->interlaced = FALSE;
+ y4mdec->info.interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+ y4mdec->info.flags &= ~GST_VIDEO_FLAG_INTERLACED;
break;
case 't':
case 'b':
- y4mdec->interlaced = TRUE;
- y4mdec->tff = (interlaced_char == 't');
+ y4mdec->info.interlace_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
+ y4mdec->info.flags |= GST_VIDEO_FLAG_INTERLACED;
+ if (interlaced_char == 't')
+ y4mdec->info.flags |= GST_VIDEO_FLAG_TFF;
break;
default:
GST_WARNING_OBJECT (y4mdec, "Unknown interlaced char '%c'",
@@ -397,14 +399,19 @@ gst_y4m_dec_parse_header (GstY4mDec * y4mdec, char *header)
break;
}
- if (y4mdec->fps_n == 0)
- y4mdec->fps_n = 1;
- if (y4mdec->fps_d == 0)
- y4mdec->fps_d = 1;
- if (y4mdec->par_n == 0)
- y4mdec->par_n = 1;
- if (y4mdec->par_d == 0)
- y4mdec->par_d = 1;
+ if (fps_n == 0)
+ fps_n = 1;
+ if (fps_d == 0)
+ fps_d = 1;
+ if (par_n == 0)
+ par_n = 1;
+ if (par_d == 0)
+ par_d = 1;
+
+ y4mdec->info.fps_n = fps_n;
+ y4mdec->info.fps_d = fps_d;
+ y4mdec->info.par_n = par_n;
+ y4mdec->info.par_d = par_d;
return TRUE;
error:
@@ -413,7 +420,7 @@ error:
}
static GstFlowReturn
-gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer)
+gst_y4m_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
GstY4mDec *y4mdec;
int n_avail;
@@ -423,7 +430,7 @@ gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer)
int i;
int len;
- y4mdec = GST_Y4M_DEC (gst_pad_get_parent (pad));
+ y4mdec = GST_Y4M_DEC (parent);
GST_DEBUG_OBJECT (y4mdec, "chain");
@@ -460,10 +467,7 @@ gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer)
y4mdec->header_size = strlen (header) + 1;
gst_adapter_flush (y4mdec->adapter, y4mdec->header_size);
- caps = gst_video_format_new_caps_interlaced (y4mdec->format,
- y4mdec->width, y4mdec->height,
- y4mdec->fps_n, y4mdec->fps_d,
- y4mdec->par_n, y4mdec->par_d, y4mdec->interlaced);
+ caps = gst_video_info_to_caps (&y4mdec->info);
ret = gst_pad_set_caps (y4mdec->srcpad, caps);
gst_caps_unref (caps);
if (!ret) {
@@ -477,21 +481,25 @@ gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer)
if (y4mdec->have_new_segment) {
GstEvent *event;
GstClockTime start = gst_y4m_dec_bytes_to_timestamp (y4mdec,
- y4mdec->segment_start);
+ y4mdec->segment.start);
GstClockTime stop = gst_y4m_dec_bytes_to_timestamp (y4mdec,
- y4mdec->segment_stop);
- GstClockTime position = gst_y4m_dec_bytes_to_timestamp (y4mdec,
- y4mdec->segment_position);
+ y4mdec->segment.stop);
+ GstClockTime time = gst_y4m_dec_bytes_to_timestamp (y4mdec,
+ y4mdec->segment.time);
+ GstSegment seg;
- event = gst_event_new_new_segment (FALSE, 1.0,
- GST_FORMAT_TIME, start, stop, position);
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ seg.start = start;
+ seg.stop = stop;
+ seg.time = time;
+ event = gst_event_new_segment (&seg);
gst_pad_push_event (y4mdec->srcpad, event);
//gst_event_unref (event);
y4mdec->have_new_segment = FALSE;
y4mdec->frame_index = gst_y4m_dec_bytes_to_frames (y4mdec,
- y4mdec->segment_position);
+ y4mdec->segment.time);
GST_DEBUG ("new frame_index %d", y4mdec->frame_index);
}
@@ -515,25 +523,24 @@ gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer)
}
len = strlen (header);
- if (n_avail < y4mdec->frame_size + len + 1) {
+ if (n_avail < y4mdec->info.size + len + 1) {
/* not enough data */
- GST_DEBUG ("not enough data for frame %d < %d",
- n_avail, y4mdec->frame_size + len + 1);
+ GST_DEBUG ("not enough data for frame %d < %" G_GSIZE_FORMAT,
+ n_avail, y4mdec->info.size + len + 1);
break;
}
gst_adapter_flush (y4mdec->adapter, len + 1);
- buffer = gst_adapter_take_buffer (y4mdec->adapter, y4mdec->frame_size);
+ buffer = gst_adapter_take_buffer (y4mdec->adapter, y4mdec->info.size);
- GST_BUFFER_CAPS (buffer) = gst_caps_ref (GST_PAD_CAPS (y4mdec->srcpad));
GST_BUFFER_TIMESTAMP (buffer) =
gst_y4m_dec_frames_to_timestamp (y4mdec, y4mdec->frame_index);
GST_BUFFER_DURATION (buffer) =
gst_y4m_dec_frames_to_timestamp (y4mdec, y4mdec->frame_index + 1) -
GST_BUFFER_TIMESTAMP (buffer);
- if (y4mdec->interlaced && y4mdec->tff) {
- GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_TFF);
+ if (y4mdec->info.flags & GST_VIDEO_FLAG_TFF) {
+ GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_FLAG_TFF);
}
y4mdec->frame_index++;
@@ -543,18 +550,18 @@ gst_y4m_dec_chain (GstPad * pad, GstBuffer * buffer)
break;
}
- gst_object_unref (y4mdec);
GST_DEBUG ("returning %d", flow_ret);
+
return flow_ret;
}
static gboolean
-gst_y4m_dec_sink_event (GstPad * pad, GstEvent * event)
+gst_y4m_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res;
GstY4mDec *y4mdec;
- y4mdec = GST_Y4M_DEC (gst_pad_get_parent (pad));
+ y4mdec = GST_Y4M_DEC (parent);
GST_DEBUG_OBJECT (y4mdec, "event");
@@ -565,28 +572,16 @@ gst_y4m_dec_sink_event (GstPad * pad, GstEvent * event)
case GST_EVENT_FLUSH_STOP:
res = gst_pad_push_event (y4mdec->srcpad, event);
break;
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- gdouble rate;
- gdouble applied_rate;
- GstFormat format;
- gint64 start;
- gint64 stop;
- gint64 position;
-
- gst_event_parse_new_segment_full (event, &update, &rate,
- &applied_rate, &format, &start, &stop, &position);
-
- GST_DEBUG ("new_segment: update: %d rate: %g applied_rate: %g "
- "format: %d start: %" G_GUINT64_FORMAT " stop: %" G_GUINT64_FORMAT
- " position %" G_GUINT64_FORMAT,
- update, rate, applied_rate, format, start, stop, position);
-
- if (format == GST_FORMAT_BYTES) {
- y4mdec->segment_start = start;
- y4mdec->segment_stop = stop;
- y4mdec->segment_position = position;
+ GstSegment seg;
+
+ gst_event_copy_segment (event, &seg);
+
+ GST_DEBUG ("segment: %" GST_SEGMENT_FORMAT, &seg);
+
+ if (seg.format == GST_FORMAT_BYTES) {
+ y4mdec->segment = seg;
y4mdec->have_new_segment = TRUE;
}
@@ -602,17 +597,16 @@ gst_y4m_dec_sink_event (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (y4mdec);
return res;
}
static gboolean
-gst_y4m_dec_src_event (GstPad * pad, GstEvent * event)
+gst_y4m_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res;
GstY4mDec *y4mdec;
- y4mdec = GST_Y4M_DEC (gst_pad_get_parent (pad));
+ y4mdec = GST_Y4M_DEC (parent);
GST_DEBUG_OBJECT (y4mdec, "event");
@@ -653,21 +647,20 @@ gst_y4m_dec_src_event (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (y4mdec);
return res;
}
static gboolean
-gst_y4m_dec_src_query (GstPad * pad, GstQuery * query)
+gst_y4m_dec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstY4mDec *y4mdec = GST_Y4M_DEC (gst_pad_get_parent (pad));
+ GstY4mDec *y4mdec = GST_Y4M_DEC (parent);
gboolean res = FALSE;
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_DURATION:
{
GstFormat format;
- GstPad *peer;
+ GstQuery *peer_query;
GST_DEBUG ("duration query");
@@ -680,39 +673,33 @@ gst_y4m_dec_src_query (GstPad * pad, GstQuery * query)
break;
}
- peer = gst_pad_get_peer (y4mdec->sinkpad);
- if (peer) {
- GstQuery *peer_query = gst_query_new_duration (GST_FORMAT_BYTES);
-
- res = gst_pad_query (peer, peer_query);
- if (res) {
- gint64 duration;
- int n_frames;
+ peer_query = gst_query_new_duration (GST_FORMAT_BYTES);
- gst_query_parse_duration (peer_query, &format, &duration);
+ res = gst_pad_peer_query (y4mdec->sinkpad, peer_query);
+ if (res) {
+ gint64 duration;
+ int n_frames;
- n_frames = gst_y4m_dec_bytes_to_frames (y4mdec, duration);
- GST_DEBUG ("duration in frames %d", n_frames);
+ gst_query_parse_duration (peer_query, &format, &duration);
- duration = gst_y4m_dec_frames_to_timestamp (y4mdec, n_frames);
- GST_DEBUG ("duration in time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (duration));
+ n_frames = gst_y4m_dec_bytes_to_frames (y4mdec, duration);
+ GST_DEBUG ("duration in frames %d", n_frames);
- gst_query_set_duration (query, GST_FORMAT_TIME, duration);
- res = TRUE;
- }
+ duration = gst_y4m_dec_frames_to_timestamp (y4mdec, n_frames);
+ GST_DEBUG ("duration in time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (duration));
- gst_query_unref (peer_query);
- gst_object_unref (peer);
+ gst_query_set_duration (query, GST_FORMAT_TIME, duration);
+ res = TRUE;
}
+ gst_query_unref (peer_query);
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
- gst_object_unref (y4mdec);
return res;
}
diff --git a/gst/y4m/gsty4mdec.h b/gst/y4m/gsty4mdec.h
index 6ea6ca118..97a7858bb 100644
--- a/gst/y4m/gsty4mdec.h
+++ b/gst/y4m/gsty4mdec.h
@@ -48,20 +48,9 @@ struct _GstY4mDec
int header_size;
gboolean have_new_segment;
- gint64 segment_start;
- gint64 segment_stop;
- gint64 segment_position;
+ GstSegment segment;
- int width;
- int height;
- GstVideoFormat format;
- gboolean interlaced;
- gboolean tff;
- int fps_n;
- int fps_d;
- int par_n;
- int par_d;
- int frame_size;
+ GstVideoInfo info;
};
struct _GstY4mDecClass
diff --git a/sys/Makefile.am b/sys/Makefile.am
index a48b0d25b..d15f8282c 100644
--- a/sys/Makefile.am
+++ b/sys/Makefile.am
@@ -95,11 +95,11 @@ else
ACM_DIR=
endif
-if USE_VDPAU
-VDPAU_DIR=vdpau
-else
-VDPAU_DIR=
-endif
+#if USE_VDPAU
+#VDPAU_DIR=vdpau
+#else
+#VDPAU_DIR=
+#endif
if USE_SHM
diff --git a/sys/acmenc/acmenc.c b/sys/acmenc/acmenc.c
index 2b637a54c..b2db28eba 100644
--- a/sys/acmenc/acmenc.c
+++ b/sys/acmenc/acmenc.c
@@ -470,10 +470,10 @@ acmenc_base_init (ACMEncClass * klass)
gchar *shortname, *longname, *detail, *description;
MMRESULT res;
- gst_element_class_add_static_pad_template (element_class,
- &acmenc_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &acmenc_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&acmenc_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&acmenc_src_template));
params =
(ACMEncParams *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass),
ACMENC_PARAMS_QDATA);
diff --git a/sys/acmmp3dec/acmmp3dec.c b/sys/acmmp3dec/acmmp3dec.c
index 870a9bff3..2f2799270 100644
--- a/sys/acmmp3dec/acmmp3dec.c
+++ b/sys/acmmp3dec/acmmp3dec.c
@@ -405,10 +405,10 @@ acmmp3dec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &acmmp3dec_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &acmmp3dec_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&acmmp3dec_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&acmmp3dec_src_template));
gst_element_class_set_details_simple (element_class, "ACM MP3 decoder",
"Codec/Decoder/Audio",
"Decode MP3 using ACM decoder",
diff --git a/sys/applemedia/avfvideosrc.m b/sys/applemedia/avfvideosrc.m
index d20f94207..37ff576f5 100644
--- a/sys/applemedia/avfvideosrc.m
+++ b/sys/applemedia/avfvideosrc.m
@@ -567,7 +567,8 @@ gst_avf_video_src_base_init (gpointer gclass)
"Reads frames from an iOS AVFoundation device",
"Ole André Vadla Ravnås <oravnas@cisco.com>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
}
static void
diff --git a/sys/applemedia/celvideosrc.c b/sys/applemedia/celvideosrc.c
index 2ef107631..6ea15e88f 100644
--- a/sys/applemedia/celvideosrc.c
+++ b/sys/applemedia/celvideosrc.c
@@ -833,7 +833,8 @@ gst_cel_video_src_base_init (gpointer gclass)
"Reads frames from an iOS Celestial device",
"Ole André Vadla Ravnås <oravnas@cisco.com>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
}
static void
diff --git a/sys/applemedia/miovideosrc.c b/sys/applemedia/miovideosrc.c
index aec4a56a7..7b0e428c4 100644
--- a/sys/applemedia/miovideosrc.c
+++ b/sys/applemedia/miovideosrc.c
@@ -1129,7 +1129,8 @@ gst_mio_video_src_base_init (gpointer gclass)
"Reads frames from a Mac OS X MIO device",
"Ole André Vadla Ravnås <oravnas@cisco.com>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
}
static void
diff --git a/sys/applemedia/qtkitvideosrc.m b/sys/applemedia/qtkitvideosrc.m
index 8553bd13b..c228692dd 100644
--- a/sys/applemedia/qtkitvideosrc.m
+++ b/sys/applemedia/qtkitvideosrc.m
@@ -524,7 +524,8 @@ gst_qtkit_video_src_base_init (gpointer gclass)
"Reads frames from a Mac OS X QTKit device",
"Ole André Vadla Ravnås <oravnas@cisco.com>");
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
}
static void
diff --git a/sys/applemedia/vtdec.c b/sys/applemedia/vtdec.c
index 982f73c6f..22db2e869 100644
--- a/sys/applemedia/vtdec.c
+++ b/sys/applemedia/vtdec.c
@@ -89,7 +89,6 @@ gst_vtdec_base_init (GstVTDecClass * klass)
sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
sink_caps);
gst_element_class_add_pad_template (element_class, sink_template);
- gst_object_unref (sink_template);
src_template = gst_pad_template_new ("src",
GST_PAD_SRC,
@@ -101,7 +100,6 @@ gst_vtdec_base_init (GstVTDecClass * klass)
"framerate", GST_TYPE_FRACTION_RANGE,
min_fps_n, min_fps_d, max_fps_n, max_fps_d, NULL));
gst_element_class_add_pad_template (element_class, src_template);
- gst_object_unref (src_template);
}
static void
diff --git a/sys/applemedia/vtenc.c b/sys/applemedia/vtenc.c
index aa0bcdda6..c7878482c 100644
--- a/sys/applemedia/vtenc.c
+++ b/sys/applemedia/vtenc.c
@@ -118,7 +118,6 @@ gst_vtenc_base_init (GstVTEncClass * klass)
"framerate", GST_TYPE_FRACTION_RANGE,
min_fps_n, min_fps_d, max_fps_n, max_fps_d, NULL));
gst_element_class_add_pad_template (element_class, sink_template);
- gst_object_unref (sink_template);
src_caps = gst_caps_new_simple (codec_details->mimetype,
"width", GST_TYPE_INT_RANGE, min_width, max_width,
@@ -132,7 +131,6 @@ gst_vtenc_base_init (GstVTEncClass * klass)
src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
src_caps);
gst_element_class_add_pad_template (element_class, src_template);
- gst_object_unref (src_template);
}
static void
diff --git a/sys/applemedia/vth264decbin.c b/sys/applemedia/vth264decbin.c
index 816e15ec5..fbc718b3a 100644
--- a/sys/applemedia/vth264decbin.c
+++ b/sys/applemedia/vth264decbin.c
@@ -218,10 +218,10 @@ gst_vt_h264_dec_bin_base_init (gpointer gclass)
"VideoToolbox H.264 decoder bin",
"Ole André Vadla Ravnås <oravnas@cisco.com>");
- gst_element_class_add_static_pad_template (element_class,
- &vth264decbin_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &vth264decbin_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vth264decbin_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vth264decbin_src_template));
}
static void
diff --git a/sys/applemedia/vth264encbin.c b/sys/applemedia/vth264encbin.c
index 222a73142..e97ef29d5 100644
--- a/sys/applemedia/vth264encbin.c
+++ b/sys/applemedia/vth264encbin.c
@@ -80,10 +80,10 @@ gst_vt_h264_enc_bin_base_init (gpointer gclass)
"VideoToolbox H.264 encoder bin",
"Ole André Vadla Ravnås <oravnas@cisco.com>");
- gst_element_class_add_static_pad_template (element_class,
- &vth264encbin_sink_template);
- gst_element_class_add_static_pad_template (element_class,
- &vth264encbin_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vth264encbin_sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&vth264encbin_src_template));
}
static void
diff --git a/sys/avc/gstavcsrc.cpp b/sys/avc/gstavcsrc.cpp
index 405355282..c63c9853a 100644
--- a/sys/avc/gstavcsrc.cpp
+++ b/sys/avc/gstavcsrc.cpp
@@ -99,8 +99,8 @@ gst_avc_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_avc_src_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_avc_src_src_template));
gst_element_class_set_details_simple (element_class,
"AVC Video Services Source", "Video/Source",
diff --git a/sys/d3dvideosink/d3dvideosink.c b/sys/d3dvideosink/d3dvideosink.c
index 53d5c89ff..9ca6b960e 100644
--- a/sys/d3dvideosink/d3dvideosink.c
+++ b/sys/d3dvideosink/d3dvideosink.c
@@ -278,8 +278,8 @@ gst_d3dvideosink_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "Direct3D video sink",
"Sink/Video",
diff --git a/sys/decklink/gstdecklinksink.cpp b/sys/decklink/gstdecklinksink.cpp
index bc24cfefe..922419774 100644
--- a/sys/decklink/gstdecklinksink.cpp
+++ b/sys/decklink/gstdecklinksink.cpp
@@ -158,10 +158,10 @@ gst_decklink_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_decklink_sink_videosink_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_decklink_sink_audiosink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_decklink_sink_videosink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_decklink_sink_audiosink_template));
gst_element_class_set_details_simple (element_class, "Decklink Sink",
"Video/Sink", "Decklink Sink", "David Schleef <ds@entropywave.com>");
@@ -546,7 +546,7 @@ static gboolean
gst_decklink_sink_set_clock (GstElement * element, GstClock * clock)
{
- return TRUE;
+ return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
}
static GstIndex *
diff --git a/sys/decklink/gstdecklinksrc.cpp b/sys/decklink/gstdecklinksrc.cpp
index b2e2c5127..61b546ede 100644
--- a/sys/decklink/gstdecklinksrc.cpp
+++ b/sys/decklink/gstdecklinksrc.cpp
@@ -153,15 +153,12 @@ static void
gst_decklink_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- GstPadTemplate *pad_template;
- gst_element_class_add_static_pad_template (element_class,
- &gst_decklink_src_audio_src_template);
- pad_template =
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_decklink_src_audio_src_template));
+ gst_element_class_add_pad_template (element_class,
gst_pad_template_new ("videosrc", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_decklink_mode_get_template_caps ());
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
+ gst_decklink_mode_get_template_caps ()));
gst_element_class_set_details_simple (element_class, "Decklink source",
"Source/Video", "DeckLink Source", "David Schleef <ds@entropywave.com>");
@@ -731,7 +728,7 @@ static gboolean
gst_decklink_src_set_clock (GstElement * element, GstClock * clock)
{
- return TRUE;
+ return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
}
static GstIndex *
diff --git a/sys/decklink/win/DeckLinkAPI_i.c b/sys/decklink/win/DeckLinkAPI_i.c
index e9346db6a..ca14206ac 100644
--- a/sys/decklink/win/DeckLinkAPI_i.c
+++ b/sys/decklink/win/DeckLinkAPI_i.c
@@ -18,12 +18,13 @@
*/
//@@MIDL_FILE_HEADING( )
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
#ifdef __cplusplus
-extern "C"{
-#endif
+extern "C"
+{
+#endif
#include <rpc.h>
@@ -42,218 +43,277 @@ extern "C"{
#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-#else // !_MIDL_USE_GUIDDEF_
+#else // !_MIDL_USE_GUIDDEF_
#ifndef __IID_DEFINED__
#define __IID_DEFINED__
-typedef struct _IID
-{
+ typedef struct _IID
+ {
unsigned long x;
unsigned short s1;
unsigned short s2;
- unsigned char c[8];
-} IID;
+ unsigned char c[8];
+ } IID;
-#endif // __IID_DEFINED__
+#endif // __IID_DEFINED__
#ifndef CLSID_DEFINED
#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
+ typedef IID CLSID;
+#endif // CLSID_DEFINED
#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-#endif !_MIDL_USE_GUIDDEF_
+#endif /* !_MIDL_USE_GUIDDEF_ */
-MIDL_DEFINE_GUID(IID, LIBID_DeckLinkAPI,0xD864517A,0xEDD5,0x466D,0x86,0x7D,0xC8,0x19,0xF1,0xC0,0x52,0xBB);
+ MIDL_DEFINE_GUID (IID, LIBID_DeckLinkAPI, 0xD864517A, 0xEDD5, 0x466D, 0x86,
+ 0x7D, 0xC8, 0x19, 0xF1, 0xC0, 0x52, 0xBB);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoOutputCallback,0x20AA5225,0x1958,0x47CB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoOutputCallback, 0x20AA5225, 0x1958,
+ 0x47CB, 0x82, 0x0B, 0x80, 0xA8, 0xD5, 0x21, 0xA6, 0xEE);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback,0xDD04E5EC,0x7415,0x42AB,0xAE,0x4A,0xE8,0x0C,0x4D,0xFC,0x04,0x4A);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInputCallback, 0xDD04E5EC, 0x7415,
+ 0x42AB, 0xAE, 0x4A, 0xE8, 0x0C, 0x4D, 0xFC, 0x04, 0x4A);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkMemoryAllocator,0xB36EB6E7,0x9D29,0x4AA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkMemoryAllocator, 0xB36EB6E7, 0x9D29,
+ 0x4AA8, 0x92, 0xEF, 0x84, 0x3B, 0x87, 0xA2, 0x89, 0xE8);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAudioOutputCallback,0x403C681B,0x7F46,0x4A12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkAudioOutputCallback, 0x403C681B, 0x7F46,
+ 0x4A12, 0xB9, 0x93, 0x2B, 0xB1, 0x27, 0x08, 0x4E, 0xE6);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkIterator,0x74E936FC,0xCC28,0x4A67,0x81,0xA0,0x1E,0x94,0xE5,0x2D,0x4E,0x69);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkIterator, 0x74E936FC, 0xCC28, 0x4A67,
+ 0x81, 0xA0, 0x1E, 0x94, 0xE5, 0x2D, 0x4E, 0x69);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAPIInformation,0x7BEA3C68,0x730D,0x4322,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkAPIInformation, 0x7BEA3C68, 0x730D,
+ 0x4322, 0xAF, 0x34, 0x8A, 0x71, 0x52, 0xB5, 0x32, 0xA4);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayModeIterator,0x9C88499F,0xF601,0x4021,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDisplayModeIterator, 0x9C88499F, 0xF601,
+ 0x4021, 0xB8, 0x0B, 0x03, 0x2E, 0x4E, 0xB4, 0x1C, 0x35);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayMode,0x3EB2C1AB,0x0A3D,0x4523,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDisplayMode, 0x3EB2C1AB, 0x0A3D, 0x4523,
+ 0xA3, 0xAD, 0xF4, 0x0D, 0x7F, 0xB1, 0x4E, 0x78);
-MIDL_DEFINE_GUID(IID, IID_IDeckLink,0x62BFF75D,0x6569,0x4E55,0x8D,0x4D,0x66,0xAA,0x03,0x82,0x9A,0xBC);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLink, 0x62BFF75D, 0x6569, 0x4E55, 0x8D,
+ 0x4D, 0x66, 0xAA, 0x03, 0x82, 0x9A, 0xBC);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput,0xA3EF0963,0x0862,0x44ED,0x92,0xA9,0xEE,0x89,0xAB,0xF4,0x31,0xC7);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkOutput, 0xA3EF0963, 0x0862, 0x44ED,
+ 0x92, 0xA9, 0xEE, 0x89, 0xAB, 0xF4, 0x31, 0xC7);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput,0x6D40EF78,0x28B9,0x4E21,0x99,0x0D,0x95,0xBB,0x77,0x50,0xA0,0x4F);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInput, 0x6D40EF78, 0x28B9, 0x4E21, 0x99,
+ 0x0D, 0x95, 0xBB, 0x77, 0x50, 0xA0, 0x4F);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkTimecode,0xBC6CFBD3,0x8317,0x4325,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkTimecode, 0xBC6CFBD3, 0x8317, 0x4325,
+ 0xAC, 0x1C, 0x12, 0x16, 0x39, 0x1E, 0x93, 0x40);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrame,0x3F716FE0,0xF023,0x4111,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoFrame, 0x3F716FE0, 0xF023, 0x4111,
+ 0xBE, 0x5D, 0xEF, 0x44, 0x14, 0xC0, 0x5B, 0x17);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkMutableVideoFrame,0x69E2639F,0x40DA,0x4E19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkMutableVideoFrame, 0x69E2639F, 0x40DA,
+ 0x4E19, 0xB6, 0xF2, 0x20, 0xAC, 0xE8, 0x15, 0xC3, 0x90);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrame3DExtensions,0xDA0F7E4A,0xEDC7,0x48A8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoFrame3DExtensions, 0xDA0F7E4A,
+ 0xEDC7, 0x48A8, 0x9C, 0xDD, 0x2D, 0xB5, 0x1C, 0x72, 0x9C, 0xD7);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame,0x05CFE374,0x537C,0x4094,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoInputFrame, 0x05CFE374, 0x537C,
+ 0x4094, 0x9A, 0x57, 0x68, 0x05, 0x25, 0x11, 0x8F, 0x44);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrameAncillary,0x732E723C,0xD1A4,0x4E29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoFrameAncillary, 0x732E723C, 0xD1A4,
+ 0x4E29, 0x9E, 0x8E, 0x4A, 0x88, 0x79, 0x7A, 0x00, 0x04);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAudioInputPacket,0xE43D5870,0x2894,0x11DE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkAudioInputPacket, 0xE43D5870, 0x2894,
+ 0x11DE, 0x8C, 0x30, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkScreenPreviewCallback,0xB1D3F49A,0x85FE,0x4C5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkScreenPreviewCallback, 0xB1D3F49A,
+ 0x85FE, 0x4C5D, 0x95, 0xC8, 0x0B, 0x5D, 0x5D, 0xCC, 0xD4, 0x38);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkGLScreenPreviewHelper,0x504E2209,0xCAC7,0x4C1A,0x9F,0xB4,0xC5,0xBB,0x62,0x74,0xD2,0x2F);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkGLScreenPreviewHelper, 0x504E2209,
+ 0xCAC7, 0x4C1A, 0x9F, 0xB4, 0xC5, 0xBB, 0x62, 0x74, 0xD2, 0x2F);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkConfiguration,0xC679A35B,0x610C,0x4D09,0xB7,0x48,0x1D,0x04,0x78,0x10,0x0F,0xC0);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkConfiguration, 0xC679A35B, 0x610C,
+ 0x4D09, 0xB7, 0x48, 0x1D, 0x04, 0x78, 0x10, 0x0F, 0xC0);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAttributes,0xABC11843,0xD966,0x44CB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkAttributes, 0xABC11843, 0xD966, 0x44CB,
+ 0x96, 0xE2, 0xA1, 0xCB, 0x5D, 0x31, 0x35, 0xC4);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkKeyer,0x89AFCAF5,0x65F8,0x421E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkKeyer, 0x89AFCAF5, 0x65F8, 0x421E, 0x98,
+ 0xF7, 0x96, 0xFE, 0x5F, 0x5B, 0xFB, 0xA3);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoConversion,0x3BBCB8A2,0xDA2C,0x42D9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoConversion, 0x3BBCB8A2, 0xDA2C,
+ 0x42D9, 0xB5, 0xD8, 0x88, 0x08, 0x36, 0x44, 0xE9, 0x9A);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDeckControlStatusCallback,0xE5F693C1,0x4283,0x4716,0xB1,0x8F,0xC1,0x43,0x15,0x21,0x95,0x5B);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDeckControlStatusCallback, 0xE5F693C1,
+ 0x4283, 0x4716, 0xB1, 0x8F, 0xC1, 0x43, 0x15, 0x21, 0x95, 0x5B);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDeckControl,0x522A9E39,0x0F3C,0x4742,0x94,0xEE,0xD8,0x0D,0xE3,0x35,0xDA,0x1D);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDeckControl, 0x522A9E39, 0x0F3C, 0x4742,
+ 0x94, 0xEE, 0xD8, 0x0D, 0xE3, 0x35, 0xDA, 0x1D);
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkIterator,0xD9EDA3B3,0x2887,0x41FA,0xB7,0x24,0x01,0x7C,0xF1,0xEB,0x1D,0x37);
+ MIDL_DEFINE_GUID (CLSID, CLSID_CDeckLinkIterator, 0xD9EDA3B3, 0x2887,
+ 0x41FA, 0xB7, 0x24, 0x01, 0x7C, 0xF1, 0xEB, 0x1D, 0x37);
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkAPIInformation,0x263CA19F,0xED09,0x482E,0x9F,0x9D,0x84,0x00,0x57,0x83,0xA2,0x37);
+ MIDL_DEFINE_GUID (CLSID, CLSID_CDeckLinkAPIInformation, 0x263CA19F, 0xED09,
+ 0x482E, 0x9F, 0x9D, 0x84, 0x00, 0x57, 0x83, 0xA2, 0x37);
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkGLScreenPreviewHelper,0xF63E77C7,0xB655,0x4A4A,0x9A,0xD0,0x3C,0xA8,0x5D,0x39,0x43,0x43);
+ MIDL_DEFINE_GUID (CLSID, CLSID_CDeckLinkGLScreenPreviewHelper, 0xF63E77C7,
+ 0xB655, 0x4A4A, 0x9A, 0xD0, 0x3C, 0xA8, 0x5D, 0x39, 0x43, 0x43);
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkVideoConversion,0x7DBBBB11,0x5B7B,0x467D,0xAE,0xA4,0xCE,0xA4,0x68,0xFD,0x36,0x8C);
+ MIDL_DEFINE_GUID (CLSID, CLSID_CDeckLinkVideoConversion, 0x7DBBBB11, 0x5B7B,
+ 0x467D, 0xAE, 0xA4, 0xCE, 0xA4, 0x68, 0xFD, 0x36, 0x8C);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDeckControl_v7_9,0xA4D81043,0x0619,0x42B7,0x8E,0xD6,0x60,0x2D,0x29,0x04,0x1D,0xF7);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDeckControl_v7_9, 0xA4D81043, 0x0619,
+ 0x42B7, 0x8E, 0xD6, 0x60, 0x2D, 0x29, 0x04, 0x1D, 0xF7);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayModeIterator_v7_6,0x455D741F,0x1779,0x4800,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDisplayModeIterator_v7_6, 0x455D741F,
+ 0x1779, 0x4800, 0x86, 0xF5, 0x0B, 0x5D, 0x13, 0xD7, 0x97, 0x51);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayMode_v7_6,0x87451E84,0x2B7E,0x439E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDisplayMode_v7_6, 0x87451E84, 0x2B7E,
+ 0x439E, 0xA6, 0x29, 0x43, 0x93, 0xEA, 0x4A, 0x85, 0x50);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput_v7_6,0x29228142,0xEB8C,0x4141,0xA6,0x21,0xF7,0x40,0x26,0x45,0x09,0x55);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkOutput_v7_6, 0x29228142, 0xEB8C, 0x4141,
+ 0xA6, 0x21, 0xF7, 0x40, 0x26, 0x45, 0x09, 0x55);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput_v7_6,0x300C135A,0x9F43,0x48E2,0x99,0x06,0x6D,0x79,0x11,0xD9,0x3C,0xF1);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInput_v7_6, 0x300C135A, 0x9F43, 0x48E2,
+ 0x99, 0x06, 0x6D, 0x79, 0x11, 0xD9, 0x3C, 0xF1);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkTimecode_v7_6,0xEFB9BCA6,0xA521,0x44F7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkTimecode_v7_6, 0xEFB9BCA6, 0xA521,
+ 0x44F7, 0xBD, 0x69, 0x23, 0x32, 0xF2, 0x4D, 0x9E, 0xE6);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrame_v7_6,0xA8D8238E,0x6B18,0x4196,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoFrame_v7_6, 0xA8D8238E, 0x6B18,
+ 0x4196, 0x99, 0xE1, 0x5A, 0xF7, 0x17, 0xB8, 0x3D, 0x32);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkMutableVideoFrame_v7_6,0x46FCEE00,0xB4E6,0x43D0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkMutableVideoFrame_v7_6, 0x46FCEE00,
+ 0xB4E6, 0x43D0, 0x91, 0xC0, 0x02, 0x3A, 0x7F, 0xCE, 0xB3, 0x4F);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame_v7_6,0x9A74FA41,0xAE9F,0x47AC,0x8C,0xF4,0x01,0xF4,0x2D,0xD5,0x99,0x65);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoInputFrame_v7_6, 0x9A74FA41,
+ 0xAE9F, 0x47AC, 0x8C, 0xF4, 0x01, 0xF4, 0x2D, 0xD5, 0x99, 0x65);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkScreenPreviewCallback_v7_6,0x373F499D,0x4B4D,0x4518,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkScreenPreviewCallback_v7_6, 0x373F499D,
+ 0x4B4D, 0x4518, 0xAD, 0x22, 0x63, 0x54, 0xE5, 0xA5, 0x82, 0x5E);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkGLScreenPreviewHelper_v7_6,0xBA575CD9,0xA15E,0x497B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkGLScreenPreviewHelper_v7_6, 0xBA575CD9,
+ 0xA15E, 0x497B, 0xB2, 0xC2, 0xF9, 0xAF, 0xE7, 0xBE, 0x4E, 0xBA);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoConversion_v7_6,0x3EB504C9,0xF97D,0x40FE,0xA1,0x58,0xD4,0x07,0xD4,0x8C,0xB5,0x3B);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoConversion_v7_6, 0x3EB504C9,
+ 0xF97D, 0x40FE, 0xA1, 0x58, 0xD4, 0x07, 0xD4, 0x8C, 0xB5, 0x3B);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkConfiguration_v7_6,0xB8EAD569,0xB764,0x47F0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkConfiguration_v7_6, 0xB8EAD569, 0xB764,
+ 0x47F0, 0xA7, 0x3F, 0xAE, 0x40, 0xDF, 0x6C, 0xBF, 0x10);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoOutputCallback_v7_6,0xE763A626,0x4A3C,0x49D1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoOutputCallback_v7_6, 0xE763A626,
+ 0x4A3C, 0x49D1, 0xBF, 0x13, 0xE7, 0xAD, 0x36, 0x92, 0xAE, 0x52);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback_v7_6,0x31D28EE7,0x88B6,0x4CB1,0x89,0x7A,0xCD,0xBF,0x79,0xA2,0x64,0x14);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInputCallback_v7_6, 0x31D28EE7, 0x88B6,
+ 0x4CB1, 0x89, 0x7A, 0xCD, 0xBF, 0x79, 0xA2, 0x64, 0x14);
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkGLScreenPreviewHelper_v7_6,0xD398CEE7,0x4434,0x4CA3,0x9B,0xA6,0x5A,0xE3,0x45,0x56,0xB9,0x05);
+ MIDL_DEFINE_GUID (CLSID, CLSID_CDeckLinkGLScreenPreviewHelper_v7_6,
+ 0xD398CEE7, 0x4434, 0x4CA3, 0x9B, 0xA6, 0x5A, 0xE3, 0x45, 0x56, 0xB9,
+ 0x05);
-MIDL_DEFINE_GUID(CLSID, CLSID_CDeckLinkVideoConversion_v7_6,0xFFA84F77,0x73BE,0x4FB7,0xB0,0x3E,0xB5,0xE4,0x4B,0x9F,0x75,0x9B);
+ MIDL_DEFINE_GUID (CLSID, CLSID_CDeckLinkVideoConversion_v7_6, 0xFFA84F77,
+ 0x73BE, 0x4FB7, 0xB0, 0x3E, 0xB5, 0xE4, 0x4B, 0x9F, 0x75, 0x9B);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback_v7_3,0xFD6F311D,0x4D00,0x444B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInputCallback_v7_3, 0xFD6F311D, 0x4D00,
+ 0x444B, 0x9E, 0xD4, 0x1F, 0x25, 0xB5, 0x73, 0x0A, 0xD0);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput_v7_3,0x271C65E3,0xC323,0x4344,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkOutput_v7_3, 0x271C65E3, 0xC323, 0x4344,
+ 0xA3, 0x0F, 0xD9, 0x08, 0xBC, 0xB2, 0x0A, 0xA3);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput_v7_3,0x4973F012,0x9925,0x458C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInput_v7_3, 0x4973F012, 0x9925, 0x458C,
+ 0x87, 0x1C, 0x18, 0x77, 0x4C, 0xDB, 0xBE, 0xCB);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame_v7_3,0xCF317790,0x2894,0x11DE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoInputFrame_v7_3, 0xCF317790,
+ 0x2894, 0x11DE, 0x8C, 0x30, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayModeIterator_v7_1,0xB28131B6,0x59AC,0x4857,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDisplayModeIterator_v7_1, 0xB28131B6,
+ 0x59AC, 0x4857, 0xB5, 0xAC, 0xCD, 0x75, 0xD5, 0x88, 0x3E, 0x2F);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkDisplayMode_v7_1,0xAF0CD6D5,0x8376,0x435E,0x84,0x33,0x54,0xF9,0xDD,0x53,0x0A,0xC3);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkDisplayMode_v7_1, 0xAF0CD6D5, 0x8376,
+ 0x435E, 0x84, 0x33, 0x54, 0xF9, 0xDD, 0x53, 0x0A, 0xC3);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoFrame_v7_1,0x333F3A10,0x8C2D,0x43CF,0xB7,0x9D,0x46,0x56,0x0F,0xEE,0xA1,0xCE);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoFrame_v7_1, 0x333F3A10, 0x8C2D,
+ 0x43CF, 0xB7, 0x9D, 0x46, 0x56, 0x0F, 0xEE, 0xA1, 0xCE);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoInputFrame_v7_1,0xC8B41D95,0x8848,0x40EE,0x9B,0x37,0x6E,0x34,0x17,0xFB,0x11,0x4B);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoInputFrame_v7_1, 0xC8B41D95,
+ 0x8848, 0x40EE, 0x9B, 0x37, 0x6E, 0x34, 0x17, 0xFB, 0x11, 0x4B);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkAudioInputPacket_v7_1,0xC86DE4F6,0xA29F,0x42E3,0xAB,0x3A,0x13,0x63,0xE2,0x9F,0x07,0x88);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkAudioInputPacket_v7_1, 0xC86DE4F6,
+ 0xA29F, 0x42E3, 0xAB, 0x3A, 0x13, 0x63, 0xE2, 0x9F, 0x07, 0x88);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkVideoOutputCallback_v7_1,0xEBD01AFA,0xE4B0,0x49C6,0xA0,0x1D,0xED,0xB9,0xD1,0xB5,0x5F,0xD9);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkVideoOutputCallback_v7_1, 0xEBD01AFA,
+ 0xE4B0, 0x49C6, 0xA0, 0x1D, 0xED, 0xB9, 0xD1, 0xB5, 0x5F, 0xD9);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInputCallback_v7_1,0x7F94F328,0x5ED4,0x4E9F,0x97,0x29,0x76,0xA8,0x6B,0xDC,0x99,0xCC);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInputCallback_v7_1, 0x7F94F328, 0x5ED4,
+ 0x4E9F, 0x97, 0x29, 0x76, 0xA8, 0x6B, 0xDC, 0x99, 0xCC);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkOutput_v7_1,0xAE5B3E9B,0x4E1E,0x4535,0xB6,0xE8,0x48,0x0F,0xF5,0x2F,0x6C,0xE5);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkOutput_v7_1, 0xAE5B3E9B, 0x4E1E, 0x4535,
+ 0xB6, 0xE8, 0x48, 0x0F, 0xF5, 0x2F, 0x6C, 0xE5);
-MIDL_DEFINE_GUID(IID, IID_IDeckLinkInput_v7_1,0x2B54EDEF,0x5B32,0x429F,0xBA,0x11,0xBB,0x99,0x05,0x96,0xEA,0xCD);
+ MIDL_DEFINE_GUID (IID, IID_IDeckLinkInput_v7_1, 0x2B54EDEF, 0x5B32, 0x429F,
+ 0xBA, 0x11, 0xBB, 0x99, 0x05, 0x96, 0xEA, 0xCD);
#undef MIDL_DEFINE_GUID
#ifdef __cplusplus
}
#endif
-
-
-
diff --git a/sys/directdraw/gstdirectdrawsink.c b/sys/directdraw/gstdirectdrawsink.c
index bd9b79ca1..429aa7ad1 100644
--- a/sys/directdraw/gstdirectdrawsink.c
+++ b/sys/directdraw/gstdirectdrawsink.c
@@ -386,8 +386,8 @@ gst_directdraw_sink_base_init (gpointer g_class)
"Sink/Video",
"Output to a video card via Direct Draw",
"Sebastien Moutte <sebastien@moutte.net>");
- gst_element_class_add_static_pad_template (element_class,
- &directdrawsink_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&directdrawsink_sink_factory));
}
static void
diff --git a/sys/directsound/gstdirectsoundsrc.c b/sys/directsound/gstdirectsoundsrc.c
index 7f0072d25..54282f664 100644
--- a/sys/directsound/gstdirectsoundsrc.c
+++ b/sys/directsound/gstdirectsoundsrc.c
@@ -156,8 +156,8 @@ gst_directsound_src_base_init (gpointer g_class)
"Capture from a soundcard via DIRECTSOUND",
"Joni Valtanen <joni.valtanen@movial.fi>");
- gst_element_class_add_static_pad_template (element_class,
- &directsound_src_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&directsound_src_src_factory));
}
diff --git a/sys/dshowdecwrapper/gstdshowaudiodec.cpp b/sys/dshowdecwrapper/gstdshowaudiodec.cpp
index bd4bd6496..f10ac8cdc 100644
--- a/sys/dshowdecwrapper/gstdshowaudiodec.cpp
+++ b/sys/dshowdecwrapper/gstdshowaudiodec.cpp
@@ -349,9 +349,6 @@ gst_dshowaudiodec_base_init (gpointer klass)
/* register */
gst_element_class_add_pad_template (element_class, src);
gst_element_class_add_pad_template (element_class, sink);
-
- gst_object_unref (src);
- gst_object_unref (sink);
}
static void
diff --git a/sys/dshowdecwrapper/gstdshowvideodec.cpp b/sys/dshowdecwrapper/gstdshowvideodec.cpp
index fdcfb28bb..663e98043 100644
--- a/sys/dshowdecwrapper/gstdshowvideodec.cpp
+++ b/sys/dshowdecwrapper/gstdshowvideodec.cpp
@@ -401,9 +401,6 @@ gst_dshowvideodec_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class, src);
gst_element_class_add_pad_template (element_class, sink);
-
- gst_object_unref (src);
- gst_object_unref (sink);
}
static void
diff --git a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
index fcd9f2fc5..e7fbadaab 100644
--- a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
@@ -118,7 +118,8 @@ gst_dshowaudiosrc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"Directshow audio capture source", "Source/Audio",
diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
index 3fa13df3b..e84148ab4 100644
--- a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
@@ -126,7 +126,8 @@ gst_dshowvideosrc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"DirectShow video capture source", "Source/Video",
diff --git a/sys/dshowvideosink/dshowvideosink.cpp b/sys/dshowvideosink/dshowvideosink.cpp
index 5ac2a5f3b..8b8554ca6 100644
--- a/sys/dshowvideosink/dshowvideosink.cpp
+++ b/sys/dshowvideosink/dshowvideosink.cpp
@@ -212,14 +212,13 @@ gst_dshowvideosink_init_interfaces (GType type)
GST_DEBUG_CATEGORY_INIT (dshowvideosink_debug, "dshowvideosink", 0, \
"DirectShow video sink");
}
-
static void
gst_dshowvideosink_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "DirectShow video sink",
"Sink/Video", "Display data using a DirectShow video renderer",
diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c
index a90860a7f..c0b7dd78d 100644
--- a/sys/dvb/dvbbasebin.c
+++ b/sys/dvb/dvbbasebin.c
@@ -34,13 +34,13 @@ GST_DEBUG_CATEGORY_STATIC (dvb_base_bin_debug);
#define GST_CAT_DEFAULT dvb_base_bin_debug
static GstStaticPadTemplate src_template =
-GST_STATIC_PAD_TEMPLATE ("src%d", GST_PAD_SRC,
+GST_STATIC_PAD_TEMPLATE ("src_%u", GST_PAD_SRC,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
static GstStaticPadTemplate program_template =
-GST_STATIC_PAD_TEMPLATE ("program_%d", GST_PAD_SRC,
+GST_STATIC_PAD_TEMPLATE ("program_%u", GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
@@ -99,21 +99,21 @@ static void dvb_base_bin_get_property (GObject * object, guint prop_id,
static void dvb_base_bin_dispose (GObject * object);
static void dvb_base_bin_finalize (GObject * object);
-static gboolean dvb_base_bin_ts_pad_probe_cb (GstPad * pad,
- GstBuffer * buf, gpointer user_data);
+static GstPadProbeReturn dvb_base_bin_ts_pad_probe_cb (GstPad * pad,
+ GstPadProbeInfo * info, gpointer user_data);
static GstStateChangeReturn dvb_base_bin_change_state (GstElement * element,
GstStateChange transition);
static void dvb_base_bin_handle_message (GstBin * bin, GstMessage * message);
static void dvb_base_bin_pat_info_cb (DvbBaseBin * dvbbasebin,
- GstStructure * pat);
+ const GstStructure * pat);
static void dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin,
- GstStructure * pmt);
+ const GstStructure * pmt);
static void dvb_base_bin_pad_added_cb (GstElement * mpegtsparse,
GstPad * pad, DvbBaseBin * dvbbasebin);
static void dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse,
GstPad * pad, DvbBaseBin * dvbbasebin);
static GstPad *dvb_base_bin_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * name);
+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
static void dvb_base_bin_release_pad (GstElement * element, GstPad * pad);
static void dvb_base_bin_rebuild_filter (DvbBaseBin * dvbbasebin);
@@ -122,18 +122,6 @@ static void dvb_base_bin_uri_handler_init (gpointer g_iface,
static void dvb_base_bin_program_destroy (gpointer data);
-static void
-dvb_base_bin_setup_interfaces (GType type)
-{
- static const GInterfaceInfo urihandler_info = {
- dvb_base_bin_uri_handler_init,
- NULL,
- NULL,
- };
-
- g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &urihandler_info);
-}
-
static DvbBaseBinStream *
dvb_base_bin_add_stream (DvbBaseBin * dvbbasebin, guint16 pid)
{
@@ -187,26 +175,10 @@ dvb_base_bin_get_program (DvbBaseBin * dvbbasebin, gint program_number)
static guint signals [LAST_SIGNAL] = { 0 };
*/
-GST_BOILERPLATE_FULL (DvbBaseBin, dvb_base_bin, GstBin, GST_TYPE_BIN,
- dvb_base_bin_setup_interfaces);
-
-static void
-dvb_base_bin_base_init (gpointer klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- element_class->request_new_pad = dvb_base_bin_request_new_pad;
- element_class->release_pad = dvb_base_bin_release_pad;
-
- gst_element_class_add_static_pad_template (element_class,
- &program_template);
- gst_element_class_add_static_pad_template (element_class, &src_template);
-
- gst_element_class_set_details_simple (element_class, "DVB bin",
- "Source/Bin/Video",
- "Access descramble and split DVB streams",
- "Alessandro Decina <alessandro@nnva.org>");
-}
+#define dvb_base_bin_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (DvbBaseBin, dvb_base_bin, GST_TYPE_BIN,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ dvb_base_bin_uri_handler_init));
static void
dvb_base_bin_class_init (DvbBaseBinClass * klass)
@@ -246,6 +218,18 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
element_class = GST_ELEMENT_CLASS (klass);
element_class->change_state = dvb_base_bin_change_state;
+ element_class->request_new_pad = dvb_base_bin_request_new_pad;
+ element_class->release_pad = dvb_base_bin_release_pad;
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&program_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+
+ gst_element_class_set_details_simple (element_class, "DVB bin",
+ "Source/Bin/Video",
+ "Access descramble and split DVB streams",
+ "Alessandro Decina <alessandro@nnva.org>");
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->set_property = dvb_base_bin_set_property;
@@ -310,6 +294,7 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
g_param_spec_string ("program-numbers",
"Program Numbers",
"Colon separated list of programs", "", G_PARAM_READWRITE));
+
}
static void
@@ -331,7 +316,7 @@ dvb_base_bin_reset (DvbBaseBin * dvbbasebin)
static gint16 initial_pids[] = { 0, 1, 0x10, 0x11, 0x12, 0x14, -1 };
static void
-dvb_base_bin_init (DvbBaseBin * dvbbasebin, DvbBaseBinClass * klass)
+dvb_base_bin_init (DvbBaseBin * dvbbasebin)
{
DvbBaseBinStream *stream;
int i;
@@ -472,7 +457,7 @@ dvb_base_bin_get_property (GObject * object, guint prop_id,
static GstPad *
dvb_base_bin_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * name)
+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
{
GstPad *pad;
GstPad *ghost;
@@ -542,8 +527,9 @@ dvb_base_bin_reset_pmtlist (DvbBaseBin * dvbbasebin)
dvbbasebin->pmtlist_changed = FALSE;
}
-static gboolean
-dvb_base_bin_ts_pad_probe_cb (GstPad * pad, GstBuffer * buf, gpointer user_data)
+static GstPadProbeReturn
+dvb_base_bin_ts_pad_probe_cb (GstPad * pad, GstPadProbeInfo * info,
+ gpointer user_data)
{
DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (user_data);
@@ -560,7 +546,7 @@ dvb_base_bin_ts_pad_probe_cb (GstPad * pad, GstBuffer * buf, gpointer user_data)
}
}
- return TRUE;
+ return GST_PAD_PROBE_OK;
}
static void
@@ -577,9 +563,10 @@ dvb_base_bin_init_cam (DvbBaseBin * dvbbasebin)
if (cam_device_open (dvbbasebin->hwcam, ca_file)) {
/* HACK: poll the cam in a buffer probe */
dvbbasebin->ts_pad =
- gst_element_get_request_pad (dvbbasebin->mpegtsparse, "src%d");
- gst_pad_add_buffer_probe (dvbbasebin->ts_pad,
- G_CALLBACK (dvb_base_bin_ts_pad_probe_cb), dvbbasebin);
+ gst_element_get_request_pad (dvbbasebin->mpegtsparse, "src_%u");
+ gst_pad_add_probe (dvbbasebin->ts_pad,
+ GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, dvb_base_bin_ts_pad_probe_cb,
+ dvbbasebin, NULL);
} else {
GST_ERROR_OBJECT (dvbbasebin, "could not open %s", ca_file);
cam_device_free (dvbbasebin->hwcam);
@@ -796,12 +783,13 @@ dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
if (message->type == GST_MESSAGE_ELEMENT &&
GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->mpegtsparse)) {
- const gchar *structure_name = gst_structure_get_name (message->structure);
+ const GstStructure *s = gst_message_get_structure (message);
+ const gchar *structure_name = gst_structure_get_name (s);
if (strcmp (structure_name, "pat") == 0)
- dvb_base_bin_pat_info_cb (dvbbasebin, message->structure);
+ dvb_base_bin_pat_info_cb (dvbbasebin, s);
else if (strcmp (structure_name, "pmt") == 0)
- dvb_base_bin_pmt_info_cb (dvbbasebin, message->structure);
+ dvb_base_bin_pmt_info_cb (dvbbasebin, s);
/*else if (strcmp (structure_name, "nit") == 0)
dvb_base_bin_nit_info_cb (dvbbasebin, message->structure);
@@ -821,7 +809,8 @@ dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
static void
-dvb_base_bin_pat_info_cb (DvbBaseBin * dvbbasebin, GstStructure * pat_info)
+dvb_base_bin_pat_info_cb (DvbBaseBin * dvbbasebin,
+ const GstStructure * pat_info)
{
DvbBaseBinProgram *program;
DvbBaseBinStream *stream;
@@ -869,7 +858,7 @@ dvb_base_bin_pat_info_cb (DvbBaseBin * dvbbasebin, GstStructure * pat_info)
}
static void
-dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin, GstStructure * pmt)
+dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin, const GstStructure * pmt)
{
DvbBaseBinProgram *program;
guint program_number;
@@ -964,50 +953,58 @@ dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse,
}
static guint
-dvb_base_bin_uri_get_type (void)
+dvb_base_bin_uri_get_type (GType type)
{
return GST_URI_SRC;
}
-static gchar **
-dvb_base_bin_uri_get_protocols (void)
+static const gchar *const *
+dvb_base_bin_uri_get_protocols (GType type)
{
- static gchar *protocols[] = { (char *) "dvb", NULL };
+ static const gchar *protocols[] = { "dvb", NULL };
return protocols;
}
-static const gchar *
+static gchar *
dvb_base_bin_uri_get_uri (GstURIHandler * handler)
{
- return "dvb://";
+ return g_strdup ("dvb://");
}
static gboolean
-dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
- gboolean ret;
- gchar *protocol;
DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler);
+ gchar *location;
- protocol = gst_uri_get_protocol (uri);
+ location = gst_uri_get_location (uri);
- if (strcmp (protocol, "dvb") != 0) {
- ret = FALSE;
- } else {
- gchar *location = gst_uri_get_location (uri);
+ if (location == NULL)
+ goto no_location;
- if (location != NULL) {
- ret = set_properties_for_channel (G_OBJECT (dvbbasebin), location);
- g_free (location);
- } else
- ret = FALSE;
- }
+ if (!set_properties_for_channel (G_OBJECT (dvbbasebin), location))
+ goto set_properties_failed;
- /* here is where we parse channels.conf */
- g_free (protocol);
+ /* FIXME: here is where we parse channels.conf */
- return ret;
+ g_free (location);
+ return TRUE;
+/* ERRORS */
+no_location:
+ {
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "No details to DVB URI");
+ return FALSE;
+ }
+set_properties_failed:
+ {
+ g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
+ "Could not set properties from DVB URI");
+ g_free (location);
+ return FALSE;
+ }
}
static void
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index 7eb2a2302..156290879 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -305,24 +305,8 @@ static GstStaticPadTemplate ts_src_factory = GST_STATIC_PAD_TEMPLATE ("src",
******************************
*/
-GST_BOILERPLATE (GstDvbSrc, gst_dvbsrc, GstPushSrc, GST_TYPE_PUSH_SRC);
-
-static void
-gst_dvbsrc_base_init (gpointer gclass)
-{
- GstDvbSrcClass *klass = (GstDvbSrcClass *) gclass;
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_static_pad_template (element_class,
- &ts_src_factory);
-
- gst_element_class_set_details_simple (element_class, "DVB Source",
- "Source/Video",
- "Digital Video Broadcast Source",
- "P2P-VCR, C-Lab, University of Paderborn,"
- "Zaheer Abbas Merali <zaheerabbas at merali dot org>");
-}
-
+#define gst_dvbsrc_parent_class parent_class
+G_DEFINE_TYPE (GstDvbSrc, gst_dvbsrc, GST_TYPE_PUSH_SRC);
/* initialize the plugin's class */
static void
@@ -343,6 +327,16 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
gobject_class->finalize = gst_dvbsrc_finalize;
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_dvbsrc_change_state);
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&ts_src_factory));
+
+ gst_element_class_set_details_simple (gstelement_class, "DVB Source",
+ "Source/Video",
+ "Digital Video Broadcast Source",
+ "P2P-VCR, C-Lab, University of Paderborn,"
+ "Zaheer Abbas Merali <zaheerabbas at merali dot org>");
+
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvbsrc_start);
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvbsrc_stop);
gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_dvbsrc_unlock);
@@ -459,7 +453,7 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
* initialize structure
*/
static void
-gst_dvbsrc_init (GstDvbSrc * object, GstDvbSrcClass * klass)
+gst_dvbsrc_init (GstDvbSrc * object)
{
int i = 0;
@@ -907,12 +901,14 @@ gst_dvbsrc_read_device (GstDvbSrc * object, int size)
gint ret_val = 0;
GstBuffer *buf = gst_buffer_new_and_alloc (size);
GstClockTime timeout = object->timeout * GST_USECOND;
+ guint8 *data;
g_return_val_if_fail (GST_IS_BUFFER (buf), NULL);
if (object->fd_dvr < 0)
return NULL;
+ data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
while (count < size) {
ret_val = gst_poll_wait (object->poll, timeout);
GST_LOG_OBJECT (object, "select returned %d", ret_val);
@@ -925,10 +921,9 @@ gst_dvbsrc_read_device (GstDvbSrc * object, int size)
/* timeout, post element message */
gst_element_post_message (GST_ELEMENT_CAST (object),
gst_message_new_element (GST_OBJECT (object),
- gst_structure_empty_new ("dvb-read-failure")));
+ gst_structure_new_empty ("dvb-read-failure")));
} else {
- int nread =
- read (object->fd_dvr, GST_BUFFER_DATA (buf) + count, size - count);
+ int nread = read (object->fd_dvr, data + count, size - count);
if (G_UNLIKELY (nread < 0)) {
GST_WARNING_OBJECT
@@ -937,24 +932,25 @@ gst_dvbsrc_read_device (GstDvbSrc * object, int size)
object->adapter_number, object->frontend_number, errno);
gst_element_post_message (GST_ELEMENT_CAST (object),
gst_message_new_element (GST_OBJECT (object),
- gst_structure_empty_new ("dvb-read-failure")));
+ gst_structure_new_empty ("dvb-read-failure")));
} else
count = count + nread;
}
}
-
- GST_BUFFER_SIZE (buf) = count;
+ gst_buffer_unmap (buf, data, count);
GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
return buf;
stopped:
GST_DEBUG_OBJECT (object, "stop called");
+ gst_buffer_unmap (buf, data, 0);
gst_buffer_unref (buf);
return NULL;
select_error:
GST_ELEMENT_ERROR (object, RESOURCE, READ, (NULL),
("select error %d: %s (%d)", ret_val, g_strerror (errno), errno));
+ gst_buffer_unmap (buf, data, 0);
gst_buffer_unref (buf);
return NULL;
}
@@ -981,13 +977,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
GST_DEBUG_OBJECT (object, "Reading from DVR device");
*buf = gst_dvbsrc_read_device (object, buffer_size);
if (*buf != NULL) {
- GstCaps *caps;
-
retval = GST_FLOW_OK;
-
- caps = gst_pad_get_caps (GST_BASE_SRC_PAD (object));
- gst_buffer_set_caps (*buf, caps);
- gst_caps_unref (caps);
}
if (object->stats_interval != 0 &&
diff --git a/sys/dvb/parsechannels.c b/sys/dvb/parsechannels.c
index 6de7b12a3..b2d3aef2c 100644
--- a/sys/dvb/parsechannels.c
+++ b/sys/dvb/parsechannels.c
@@ -156,8 +156,8 @@ set_properties_for_channel (GObject * dvbbasebin, const gchar * channel_name)
guint major, minor, micro, nano;
gst_version (&major, &minor, &micro, &nano);
- filename = g_strdup_printf ("%s/.gstreamer-%d.%d/dvb-channels.conf",
- g_get_home_dir (), major, minor);
+ filename = g_strdup_printf ("%s/gstreamer-%d.%d/dvb-channels.conf",
+ g_get_user_config_dir (), major, minor);
}
channels = parse_channels_conf_from_file (filename);
g_free (filename);
diff --git a/sys/dxr3/dxr3audiosink.c b/sys/dxr3/dxr3audiosink.c
index b72544b2b..53a69636a 100644
--- a/sys/dxr3/dxr3audiosink.c
+++ b/sys/dxr3/dxr3audiosink.c
@@ -93,7 +93,8 @@ static gboolean dxr3audiosink_open (Dxr3AudioSink * sink);
static gboolean dxr3audiosink_set_mode_pcm (Dxr3AudioSink * sink);
static gboolean dxr3audiosink_set_mode_ac3 (Dxr3AudioSink * sink);
static void dxr3audiosink_close (Dxr3AudioSink * sink);
-static void dxr3audiosink_set_clock (GstElement * element, GstClock * clock);
+static gboolean dxr3audiosink_set_clock (GstElement * element,
+ GstClock * clock);
static GstPadLinkReturn dxr3audiosink_pcm_sinklink (GstPad * pad,
const GstCaps * caps);
@@ -148,10 +149,10 @@ dxr3audiosink_base_init (Dxr3AudioSinkClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &dxr3audiosink_pcm_sink_factory);
- gst_element_class_add_static_pad_template (element_class,
- &dxr3audiosink_ac3_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&dxr3audiosink_pcm_sink_factory));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&dxr3audiosink_ac3_sink_factory));
gst_element_class_set_details_simple (element_class,
"dxr3/Hollywood+ mpeg decoder board audio plugin", "Audio/Sink",
"Feeds audio to Sigma Designs em8300 based boards",
@@ -440,12 +441,14 @@ dxr3audiosink_close (Dxr3AudioSink * sink)
}
-static void
+static gboolean
dxr3audiosink_set_clock (GstElement * element, GstClock * clock)
{
Dxr3AudioSink *src = DXR3AUDIOSINK (element);
src->clock = clock;
+
+ return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
}
diff --git a/sys/dxr3/dxr3spusink.c b/sys/dxr3/dxr3spusink.c
index 7e4d021ef..ec713fbb4 100644
--- a/sys/dxr3/dxr3spusink.c
+++ b/sys/dxr3/dxr3spusink.c
@@ -72,7 +72,7 @@ static void dxr3spusink_get_property (GObject * object,
static gboolean dxr3spusink_open (Dxr3SpuSink * sink);
static void dxr3spusink_close (Dxr3SpuSink * sink);
-static void dxr3spusink_set_clock (GstElement * element, GstClock * clock);
+static gboolean dxr3spusink_set_clock (GstElement * element, GstClock * clock);
static gboolean dxr3spusink_handle_event (GstPad * pad, GstEvent * event);
static void dxr3spusink_chain (GstPad * pad, GstData * _data);
@@ -126,8 +126,8 @@ dxr3spusink_base_init (Dxr3SpuSinkClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &dxr3spusink_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&dxr3spusink_sink_factory));
gst_element_class_set_details_simple (element_class,
"dxr3/Hollywood+ mpeg decoder board subpicture element", "Sink/Video",
"Feeds subpicture information to Sigma Designs em8300 based boards",
@@ -305,12 +305,14 @@ dxr3spusink_close (Dxr3SpuSink * sink)
}
-static void
+static gboolean
dxr3spusink_set_clock (GstElement * element, GstClock * clock)
{
Dxr3SpuSink *src = DXR3SPUSINK (element);
src->clock = clock;
+
+ return GST_ELEMENT_CLASS (element)->set_clock (element, clock);
}
diff --git a/sys/dxr3/dxr3videosink.c b/sys/dxr3/dxr3videosink.c
index 437789cab..1c69295ab 100644
--- a/sys/dxr3/dxr3videosink.c
+++ b/sys/dxr3/dxr3videosink.c
@@ -96,7 +96,8 @@ static void dxr3videosink_get_property (GObject * object,
static gboolean dxr3videosink_open (Dxr3VideoSink * sink);
static void dxr3videosink_close (Dxr3VideoSink * sink);
-static void dxr3videosink_set_clock (GstElement * element, GstClock * clock);
+static gboolean dxr3videosink_set_clock (GstElement * element,
+ GstClock * clock);
static void dxr3videosink_reset_parser (Dxr3VideoSink * sink);
static int dxr3videosink_next_start_code (Dxr3VideoSink * sink);
@@ -151,8 +152,8 @@ dxr3videosink_base_init (Dxr3VideoSinkClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class,
- &dxr3videosink_sink_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&dxr3videosink_sink_factory));
gst_element_class_set_details_simple (element_class,
"dxr3/Hollywood+ mpeg decoder board video element", "Sink/Video",
"Feeds MPEG2 video to Sigma Designs em8300 based boards",
@@ -308,12 +309,14 @@ dxr3videosink_close (Dxr3VideoSink * sink)
}
-static void
+static gboolean
dxr3videosink_set_clock (GstElement * element, GstClock * clock)
{
Dxr3VideoSink *src = DXR3VIDEOSINK (element);
src->clock = clock;
+
+ return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
}
diff --git a/sys/fbdev/gstfbdevsink.c b/sys/fbdev/gstfbdevsink.c
index 7878fbfbc..8925f3d30 100644
--- a/sys/fbdev/gstfbdevsink.c
+++ b/sys/fbdev/gstfbdevsink.c
@@ -93,8 +93,8 @@ gst_fbdevsink_base_init (gpointer g_class)
gst_element_class_set_details_simple (element_class, "fbdev video sink",
"Sink/Video",
"A linux framebuffer videosink", "Sean D'Epagnier <sean@depagnier.com>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
diff --git a/sys/linsys/gstlinsyssdisink.c b/sys/linsys/gstlinsyssdisink.c
index e4260c023..3e9ad165b 100644
--- a/sys/linsys/gstlinsyssdisink.c
+++ b/sys/linsys/gstlinsyssdisink.c
@@ -99,8 +99,8 @@ gst_linsys_sdi_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_linsys_sdi_sink_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_linsys_sdi_sink_sink_template));
gst_element_class_set_details_simple (element_class, "SDI video sink",
"Sink/Video", "Writes video from SDI transmit device",
diff --git a/sys/linsys/gstlinsyssdisrc.c b/sys/linsys/gstlinsyssdisrc.c
index 467c54c50..c5a928c68 100644
--- a/sys/linsys/gstlinsyssdisrc.c
+++ b/sys/linsys/gstlinsyssdisrc.c
@@ -103,8 +103,8 @@ gst_linsys_sdi_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_linsys_sdi_src_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_linsys_sdi_src_src_template));
gst_element_class_set_details_simple (element_class, "SDI video source",
"Source/Video", "Reads video from SDI capture device",
diff --git a/sys/osxvideo/osxvideosrc.c b/sys/osxvideo/osxvideosrc.c
index 864806dcc..ed84619d7 100644
--- a/sys/osxvideo/osxvideosrc.c
+++ b/sys/osxvideo/osxvideosrc.c
@@ -639,7 +639,8 @@ gst_osx_video_src_base_init (gpointer gclass)
GST_DEBUG ("%s", G_STRFUNC);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "Video Source (OSX)",
"Source/Video",
diff --git a/sys/pvr2d/gstpvr.c b/sys/pvr2d/gstpvr.c
index 0112d1ee7..123d15d81 100644
--- a/sys/pvr2d/gstpvr.c
+++ b/sys/pvr2d/gstpvr.c
@@ -69,6 +69,34 @@ gst_ducati_alloc_2d (gint width, gint height, guint * sz)
return MemMgr_Alloc (block, 2);
}
+static struct
+{
+ PVR2DERROR code;
+ const gchar *errstring;
+} pvr2derrorcodestring[] = {
+ {
+ PVR2D_OK, "OK (0)"}, {
+ PVR2DERROR_INVALID_PARAMETER, "Invalid Parameter (-1)"}, {
+ PVR2DERROR_DEVICE_UNAVAILABLE, "Device Unavailable (-2)"}, {
+ PVR2DERROR_INVALID_CONTEXT, "Invalid Context (-3)"}, {
+ PVR2DERROR_MEMORY_UNAVAILABLE, "Memory Unavailable (-4)"}, {
+ PVR2DERROR_DEVICE_NOT_PRESENT, "Device not present (-5)"}, {
+ PVR2DERROR_IOCTL_ERROR, "ioctl Error (-6)"}, {
+ PVR2DERROR_GENERIC_ERROR, "Generic Error (-7)"}, {
+ PVR2DERROR_BLT_NOTCOMPLETE, "blt not complete (-8)"}, {
+ PVR2DERROR_HW_FEATURE_NOT_SUPPORTED, "Hardware feature not supported (-9)"}, {
+ PVR2DERROR_NOT_YET_IMPLEMENTED, "Not yet implemented (-10)"}, {
+ PVR2DERROR_MAPPING_FAILED, "Mapping failed (-11)"}
+};
+
+const gchar *
+gst_pvr2d_error_get_string (PVR2DERROR code)
+{
+ if (code <= PVR2D_OK && code >= PVR2DERROR_MAPPING_FAILED)
+ return pvr2derrorcodestring[PVR2D_OK - code].errstring;
+ return "Uknown Error";
+}
+
/* PACKAGE: this is usually set by autotools depending on some _INIT macro
* in configure.ac and then written into and defined in config.h, but we can
* just set it ourselves here in case someone doesn't use autotools to
diff --git a/sys/pvr2d/gstpvr.h b/sys/pvr2d/gstpvr.h
index d2c57af00..bbde497ae 100644
--- a/sys/pvr2d/gstpvr.h
+++ b/sys/pvr2d/gstpvr.h
@@ -26,6 +26,8 @@
#include <tiler.h>
#include <tilermem.h>
#include <memmgr.h>
+#include "pvr2d.h"
+
#include <gst/gst.h>
@@ -37,6 +39,8 @@ G_BEGIN_DECLS
void * gst_ducati_alloc_1d (gint sz);
void * gst_ducati_alloc_2d (gint width, gint height, guint * sz);
+const gchar * gst_pvr2d_error_get_string (PVR2DERROR code);
+
G_END_DECLS
#endif /* __GST_DUCATI_H__ */
diff --git a/sys/pvr2d/gstpvrbufferpool.c b/sys/pvr2d/gstpvrbufferpool.c
index 03bcafb68..7c269dbd3 100644
--- a/sys/pvr2d/gstpvrbufferpool.c
+++ b/sys/pvr2d/gstpvrbufferpool.c
@@ -1,6 +1,8 @@
/*
* GStreamer
* Copyright (c) 2010, Texas Instruments Incorporated
+ * Copyright (c) 2011, Collabora Ltd
+ * @author: Edward Hervey <edward@collabora.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -17,304 +19,351 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include "gstpvrbufferpool.h"
+/* Debugging category */
+#include <gst/gstinfo.h>
+
+/* Helper functions */
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+
GST_DEBUG_CATEGORY_EXTERN (gst_debug_pvrvideosink);
#define GST_CAT_DEFAULT gst_debug_pvrvideosink
-/*
- * GstDucatiBuffer
- */
+static void
+gst_pvr_meta_free (GstPVRMeta * meta, GstBuffer * buffer)
+{
+ GstPVRVideoSink *pvrsink = (GstPVRVideoSink *) meta->sink;
-static GstBufferClass *buffer_parent_class;
+ GST_LOG ("Releasing PVRMeta for buffer %p (src_mem:%p)",
+ buffer, meta->src_mem);
-/* Get the original buffer, or whatever is the best output buffer.
- * Consumes the input reference, produces the output reference
- */
-GstBuffer *
-gst_ducati_buffer_get (GstDucatiBuffer * self)
-{
- if (self->orig) {
- // TODO copy to orig buffer.. if needed.
- gst_buffer_unref (self->orig);
- self->orig = NULL;
+ if (meta->src_mem) {
+ PVR2DERROR pvr_error;
+
+ GST_OBJECT_LOCK (pvrsink);
+ if (pvrsink->dcontext == NULL || pvrsink->dcontext->pvr_context == NULL) {
+ GST_OBJECT_UNLOCK (pvrsink);
+ goto done;
+ }
+ pvr_error = PVR2DMemFree (pvrsink->dcontext->pvr_context, meta->src_mem);
+ GST_OBJECT_UNLOCK (pvrsink);
+
+ if (pvr_error != PVR2D_OK)
+ GST_ERROR ("Failed to unwrap PVR memory buffer. Error : %s",
+ gst_pvr2d_error_get_string (pvr_error));
}
- return GST_BUFFER (self);
+
+done:
+ gst_pvrvideosink_untrack_buffer (pvrsink, buffer);
+ gst_object_unref (pvrsink);
}
-PVR2DMEMINFO *
-gst_ducati_buffer_get_meminfo (GstDucatiBuffer * self)
+const GstMetaInfo *
+gst_pvr_meta_get_info (void)
{
- return self->src_mem;
-}
+ static const GstMetaInfo *pvr_meta_info = NULL;
+
+ if (pvr_meta_info == NULL) {
+ pvr_meta_info = gst_meta_register ("GstPVRMeta", "GstPVRMeta",
+ sizeof (GstPVRMeta),
+ (GstMetaInitFunction) NULL,
+ (GstMetaFreeFunction) gst_pvr_meta_free,
+ (GstMetaCopyFunction) NULL, (GstMetaTransformFunction) NULL);
+ }
+ return pvr_meta_info;
+}
-static GstDucatiBuffer *
-gst_ducati_buffer_new (GstPvrBufferPool * pool)
+/* Wrap existing buffers */
+GstPVRMeta *
+gst_buffer_add_pvr_meta (GstBuffer * buffer, GstElement * sink)
{
+ guint8 *data;
+ gsize size;
+ GstPVRMeta *meta;
PVR2DERROR pvr_error;
- GstDucatiBuffer *self = (GstDucatiBuffer *)
- gst_mini_object_new (GST_TYPE_DUCATIBUFFER);
+ GstPVRVideoSink *pvrsink = (GstPVRVideoSink *) sink;
- GST_LOG_OBJECT (pool->element, "creating buffer %p in pool %p", self, pool);
+ g_return_val_if_fail (gst_buffer_n_memory (buffer) > 0, NULL);
+ g_return_val_if_fail (pvrsink != NULL, NULL);
- self->pool = (GstPvrBufferPool *)
- gst_mini_object_ref (GST_MINI_OBJECT (pool));
+ GST_LOG_OBJECT (pvrsink, "Adding PVRMeta to buffer %p", buffer);
- GST_BUFFER_DATA (self) = gst_ducati_alloc_1d (pool->size);
- GST_BUFFER_SIZE (self) = pool->size;
- GST_LOG_OBJECT (pool->element, "width=%d, height=%d and size=%d",
- pool->padded_width, pool->padded_height, pool->size);
+ /* Add the meta */
+ meta = (GstPVRMeta *) gst_buffer_add_meta (buffer, GST_PVR_META_INFO, NULL);
+ meta->src_mem = NULL;
+ meta->sink = gst_object_ref (pvrsink);
+ gst_pvrvideosink_track_buffer (pvrsink, buffer);
- pvr_error =
- PVR2DMemWrap (pool->pvr_context, GST_BUFFER_DATA (self), 0, pool->size,
- NULL, &(self->src_mem));
- if (pvr_error != PVR2D_OK) {
- GST_LOG_OBJECT (pool->element, "Failed to Wrap buffer memory"
- "returned %d", pvr_error);
- } else {
- self->wrapped = TRUE;
- }
+ data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
- gst_buffer_set_caps (GST_BUFFER (self), pool->caps);
+ GST_LOG_OBJECT (pvrsink, "data:%p, size:%" G_GSIZE_FORMAT, data, size);
- return self;
-}
+ GST_OBJECT_LOCK (pvrsink);
+ if (pvrsink->dcontext == NULL || pvrsink->dcontext->pvr_context == NULL)
+ goto no_pvr_context;
+ /* Map the memory and wrap it */
+ pvr_error =
+ PVR2DMemWrap (pvrsink->dcontext->pvr_context, data, 0, size, NULL,
+ &(meta->src_mem));
+ GST_OBJECT_UNLOCK (pvrsink);
+ gst_buffer_unmap (buffer, data, size);
-static void
-gst_ducati_buffer_finalize (GstDucatiBuffer * self)
-{
- PVR2DERROR pvr_error;
- GstPvrBufferPool *pool = self->pool;
- gboolean resuscitated = FALSE;
-
- GST_LOG_OBJECT (pool->element, "finalizing buffer %p", self);
+ if (pvr_error != PVR2D_OK)
+ goto wrap_error;
- GST_PVR_BUFFERPOOL_LOCK (pool);
- g_queue_remove (pool->used_buffers, self);
- if (pool->running) {
- resuscitated = TRUE;
+ return meta;
- GST_LOG_OBJECT (pool->element, "reviving buffer %p", self);
+wrap_error:
+ {
+ GST_WARNING_OBJECT (pvrsink, "Failed to Wrap buffer memory. Error : %s",
+ gst_pvr2d_error_get_string (pvr_error));
+ gst_buffer_remove_meta (buffer, (GstMeta *) meta);
- g_queue_push_head (pool->free_buffers, self);
- } else {
- GST_LOG_OBJECT (pool->element, "the pool is shutting down");
+ return NULL;
}
- GST_PVR_BUFFERPOOL_UNLOCK (pool);
- if (resuscitated) {
- GST_LOG_OBJECT (pool->element, "reviving buffer %p, %d", self, index);
- gst_buffer_ref (GST_BUFFER (self));
- GST_BUFFER_SIZE (self) = 0;
- }
-
- if (!resuscitated) {
- GST_LOG_OBJECT (pool->element,
- "buffer %p (data %p, len %u) not recovered, freeing",
- self, GST_BUFFER_DATA (self), GST_BUFFER_SIZE (self));
-
- if (self->wrapped) {
- pvr_error = PVR2DMemFree (pool->pvr_context, self->src_mem);
- if (pvr_error != PVR2D_OK) {
- GST_ERROR_OBJECT (pool->element, "Failed to Unwrap buffer memory"
- "returned %d", pvr_error);
- }
- self->wrapped = FALSE;
- }
- MemMgr_Free ((void *) GST_BUFFER_DATA (self));
- GST_BUFFER_DATA (self) = NULL;
- gst_mini_object_unref (GST_MINI_OBJECT (pool));
- GST_MINI_OBJECT_CLASS (buffer_parent_class)->finalize (GST_MINI_OBJECT
- (self));
+no_pvr_context:
+ {
+ GST_OBJECT_UNLOCK (pvrsink);
+ GST_WARNING_OBJECT (pvrsink, "No PVR2D context available");
+ gst_buffer_remove_meta (buffer, (GstMeta *) meta);
+ return NULL;
}
}
-static void
-gst_ducati_buffer_class_init (gpointer g_class, gpointer class_data)
-{
- GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (g_class);
+/*
+ * GstDucatiBufferPool
+ */
+static void gst_pvr_buffer_pool_finalize (GObject * object);
- buffer_parent_class = g_type_class_peek_parent (g_class);
+#define gst_pvr_buffer_pool_parent_class parent_class
+G_DEFINE_TYPE (GstPVRBufferPool, gst_pvr_buffer_pool, GST_TYPE_BUFFER_POOL);
+static const gchar **
+pvr_buffer_pool_get_options (GstBufferPool * pool)
+{
+ static const gchar *options[] = { GST_BUFFER_POOL_OPTION_VIDEO_META,
+ GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, NULL
+ };
- mini_object_class->finalize = (GstMiniObjectFinalizeFunction)
- GST_DEBUG_FUNCPTR (gst_ducati_buffer_finalize);
+ return options;
}
-GType
-gst_ducati_buffer_get_type (void)
+static gboolean
+pvr_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
{
- static GType type;
-
- if (G_UNLIKELY (type == 0)) {
- static const GTypeInfo info = {
- .class_size = sizeof (GstBufferClass),
- .class_init = gst_ducati_buffer_class_init,
- .instance_size = sizeof (GstDucatiBuffer),
- };
- type = g_type_register_static (GST_TYPE_BUFFER,
- "GstDucatiBufferPvrsink", &info, 0);
+ GstPVRBufferPool *pvrpool = GST_PVR_BUFFER_POOL_CAST (pool);
+ GstVideoInfo info;
+ guint size, align;
+ gboolean ret;
+ const GstCaps *caps;
+
+ if (!gst_buffer_pool_config_get (config, &caps, &size, NULL, NULL, NULL,
+ &align))
+ goto wrong_config;
+
+ if (caps == NULL)
+ goto no_caps;
+
+ /* now parse the caps from the config */
+ if (!gst_video_info_from_caps (&info, caps))
+ goto wrong_caps;
+
+ GST_LOG_OBJECT (pool, "%dx%d, size:%u, align:%u caps %" GST_PTR_FORMAT,
+ info.width, info.height, size, align, caps);
+
+ if (pvrpool->caps)
+ gst_caps_unref (pvrpool->caps);
+ pvrpool->caps = gst_caps_copy (caps);
+ pvrpool->info = info;
+ pvrpool->size = size;
+ pvrpool->align = align;
+ pvrpool->padded_width = GST_VIDEO_INFO_WIDTH (&info);
+ pvrpool->padded_height = GST_VIDEO_INFO_HEIGHT (&info);
+
+ /* enable metadata based on config of the pool */
+ pvrpool->add_metavideo =
+ gst_buffer_pool_config_has_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+#if 0
+ /* parse extra alignment info */
+ priv->need_alignment = gst_buffer_pool_config_has_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+
+ if (priv->need_alignment) {
+ gst_buffer_pool_config_get_video_alignment (config, &priv->align);
+
+ GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top,
+ priv->align.padding_left, priv->align.padding_left,
+ priv->align.padding_bottom);
+
+ /* we need the video metadata too now */
+ priv->add_metavideo = TRUE;
}
- return type;
-}
-/*
- * GstDucatiBufferPool
- */
+ /* add the padding */
+ priv->padded_width =
+ GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left +
+ priv->align.padding_right;
+ priv->padded_height =
+ GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
+ priv->align.padding_bottom;
+#endif
-static GstMiniObjectClass *bufferpool_parent_class = NULL;
+ GST_DEBUG_OBJECT (pool, "before calling parent class");
-/** create new bufferpool
- * @element : the element that owns this pool
- * @caps: the caps to set on the buffer
- * @num_buffers: the requested number of buffers in the pool
- */
-GstPvrBufferPool *
-gst_pvr_bufferpool_new (GstElement * element, GstCaps * caps, gint num_buffers,
- gint size, PVR2DCONTEXTHANDLE pvr_context)
-{
- GstPvrBufferPool *self = (GstPvrBufferPool *)
- gst_mini_object_new (GST_TYPE_PVRBUFFERPOOL);
- GstStructure *s = gst_caps_get_structure (caps, 0);
-
- self->element = gst_object_ref (element);
- gst_structure_get_int (s, "width", &self->padded_width);
- gst_structure_get_int (s, "height", &self->padded_height);
- self->caps = gst_caps_ref (caps);
- self->size = size;
- self->pvr_context = pvr_context;
-
- self->free_buffers = g_queue_new ();
- self->used_buffers = g_queue_new ();
- self->lock = g_mutex_new ();
- self->running = TRUE;
-
- return self;
+ ret = GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
+
+ GST_DEBUG_OBJECT (pool, "parent_class returned %d", ret);
+
+ return ret;
+
+ /* ERRORS */
+wrong_config:
+ {
+ GST_WARNING_OBJECT (pool, "invalid config");
+ return FALSE;
+ }
+no_caps:
+ {
+ GST_WARNING_OBJECT (pool, "no caps in config");
+ return FALSE;
+ }
+wrong_caps:
+ {
+ GST_WARNING_OBJECT (pool,
+ "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
+ return FALSE;
+ }
}
-static void
-unwrap_buffer (gpointer buffer, gpointer user_data)
+/* This function handles GstXImageBuffer creation depending on XShm availability */
+static GstFlowReturn
+pvr_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
+ GstBufferPoolParams * params)
{
- PVR2DERROR pvr_error;
- GstDucatiBuffer *buf = GST_DUCATIBUFFER (buffer);
- GstPvrBufferPool *pool = (GstPvrBufferPool *) user_data;
-
- if (buf->wrapped) {
- pvr_error = PVR2DMemFree (pool->pvr_context, buf->src_mem);
- if (pvr_error != PVR2D_OK) {
- GST_ERROR_OBJECT (pool->element, "Failed to Unwrap buffer memory"
- "returned %d", pvr_error);
+ GstPVRBufferPool *pvrpool = GST_PVR_BUFFER_POOL_CAST (pool);
+ GstVideoInfo *info;
+ GstBuffer *pvr;
+ GstPVRMeta *meta;
+
+ info = &pvrpool->info;
+
+ pvr = gst_buffer_new_allocate (NULL, pvrpool->size, pvrpool->align);
+ meta = gst_buffer_add_pvr_meta (pvr, pvrpool->pvrsink);
+ if (meta == NULL) {
+ gst_buffer_unref (pvr);
+ goto no_buffer;
+ }
+
+ if (pvrpool->add_metavideo) {
+ GstVideoMeta *meta;
+
+ GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
+ /* these are just the defaults for now */
+ meta = gst_buffer_add_video_meta (pvr, 0, GST_VIDEO_INFO_FORMAT (info),
+ pvrpool->padded_width, pvrpool->padded_height);
+ if (G_UNLIKELY (meta == NULL))
+ GST_WARNING_OBJECT (pool, "Failed to add GstVideoMeta");
+
+#if 0
+ const GstVideoFormatInfo *vinfo = info->finfo;
+ gint i;
+
+ if (pvrpool->need_alignment) {
+ meta->width = GST_VIDEO_INFO_WIDTH (&pvrpool->info);
+ meta->height = GST_VIDEO_INFO_HEIGHT (&pvrpool->info);
+
+ /* FIXME, not quite correct, NV12 would apply the vedge twice on the second
+ * plane */
+ for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (info); i++) {
+ gint vedge, hedge, plane;
+
+ hedge =
+ GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (vinfo, i,
+ pvrpool->align.padding_left);
+ vedge =
+ GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (vinfo, i,
+ pvrpool->align.padding_top);
+ plane = GST_VIDEO_FORMAT_INFO_PLANE (vinfo, i);
+
+ GST_LOG_OBJECT (pool, "comp %d, plane %d: hedge %d, vedge %d", i,
+ plane, hedge, vedge);
+
+ meta->offset[plane] += (vedge * meta->stride[plane]) + hedge;
+ }
}
- buf->wrapped = FALSE;
+#endif
+ }
+
+ *buffer = pvr;
+
+ return GST_FLOW_OK;
+
+ /* ERROR */
+no_buffer:
+ {
+ GST_WARNING_OBJECT (pool, "can't create image");
+ return GST_FLOW_ERROR;
}
}
-void
-gst_pvr_bufferpool_stop_running (GstPvrBufferPool * self, gboolean unwrap)
+/** create new bufferpool
+ */
+GstBufferPool *
+gst_pvr_buffer_pool_new (GstElement * pvrsink)
{
- gboolean empty = FALSE;
-
- g_return_if_fail (self);
-
- GST_PVR_BUFFERPOOL_LOCK (self);
- self->running = FALSE;
- GST_PVR_BUFFERPOOL_UNLOCK (self);
-
- GST_DEBUG_OBJECT (self->element, "free available buffers");
-
- /* free all buffers on the freelist */
- while (!empty) {
- GstDucatiBuffer *buf;
- GST_PVR_BUFFERPOOL_LOCK (self);
- buf = g_queue_pop_head (self->free_buffers);
- GST_PVR_BUFFERPOOL_UNLOCK (self);
- if (buf)
- gst_buffer_unref (GST_BUFFER (buf));
- else
- empty = TRUE;
- }
+ GstPVRBufferPool *pool;
+
+ g_return_val_if_fail (GST_IS_PVRVIDEOSINK (pvrsink), NULL);
- if (unwrap)
- g_queue_foreach (self->used_buffers, unwrap_buffer, self);
+ GST_DEBUG_OBJECT (pvrsink, "Creating new GstPVRBufferPool");
- gst_mini_object_unref (GST_MINI_OBJECT (self));
+ pool = g_object_new (GST_TYPE_PVR_BUFFER_POOL, NULL);
+ pool->pvrsink = gst_object_ref (pvrsink);
+
+ return GST_BUFFER_POOL_CAST (pool);
}
-/** get buffer from bufferpool, allocate new buffer if needed */
-GstDucatiBuffer *
-gst_pvr_bufferpool_get (GstPvrBufferPool * self, GstBuffer * orig)
+static void
+gst_pvr_buffer_pool_class_init (GstPVRBufferPoolClass * klass)
{
- GstDucatiBuffer *buf = NULL;
-
- g_return_val_if_fail (self, NULL);
-
- GST_PVR_BUFFERPOOL_LOCK (self);
- if (self->running) {
- /* re-use a buffer off the freelist if any are available
- */
- buf = g_queue_pop_head (self->free_buffers);
- if (!buf)
- buf = gst_ducati_buffer_new (self);
- buf->orig = orig;
- g_queue_push_head (self->used_buffers, buf);
- }
- GST_PVR_BUFFERPOOL_UNLOCK (self);
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
- if (buf && orig) {
- GST_BUFFER_TIMESTAMP (buf) = GST_BUFFER_TIMESTAMP (orig);
- GST_BUFFER_DURATION (buf) = GST_BUFFER_DURATION (orig);
- }
- GST_BUFFER_SIZE (buf) = self->size;
+ gobject_class->finalize = gst_pvr_buffer_pool_finalize;
- return buf;
+ gstbufferpool_class->get_options = pvr_buffer_pool_get_options;
+ gstbufferpool_class->set_config = pvr_buffer_pool_set_config;
+ gstbufferpool_class->alloc_buffer = pvr_buffer_pool_alloc;
}
static void
-gst_pvr_bufferpool_finalize (GstPvrBufferPool * self)
+gst_pvr_buffer_pool_init (GstPVRBufferPool * pool)
{
- GST_DEBUG_OBJECT (self->element, "destroy bufferpool");
- g_mutex_free (self->lock);
- self->lock = NULL;
-
- g_queue_free (self->free_buffers);
- self->free_buffers = NULL;
- g_queue_free (self->used_buffers);
- self->used_buffers = NULL;
-
- gst_caps_unref (self->caps);
- self->caps = NULL;
- gst_object_unref (self->element);
- self->element = NULL;
-
- GST_MINI_OBJECT_CLASS (bufferpool_parent_class)->finalize (GST_MINI_OBJECT
- (self));
+
}
static void
-gst_pvr_bufferpool_class_init (gpointer g_class, gpointer class_data)
+gst_pvr_buffer_pool_finalize (GObject * object)
{
- GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (g_class);
+ GstPVRBufferPool *pool = GST_PVR_BUFFER_POOL_CAST (object);
- bufferpool_parent_class = g_type_class_peek_parent (g_class);
+ GST_LOG_OBJECT (pool, "finalize PVR buffer pool %p", pool);
- mini_object_class->finalize = (GstMiniObjectFinalizeFunction)
- GST_DEBUG_FUNCPTR (gst_pvr_bufferpool_finalize);
-}
+ if (pool->caps)
+ gst_caps_unref (pool->caps);
+ gst_object_unref (pool->pvrsink);
-GType
-gst_pvr_bufferpool_get_type (void)
-{
- static GType type;
-
- if (G_UNLIKELY (type == 0)) {
- static const GTypeInfo info = {
- .class_size = sizeof (GstMiniObjectClass),
- .class_init = gst_pvr_bufferpool_class_init,
- .instance_size = sizeof (GstPvrBufferPool),
- };
- type = g_type_register_static (GST_TYPE_MINI_OBJECT,
- "GstPvrBufferPool", &info, 0);
- }
- return type;
+ G_OBJECT_CLASS (gst_pvr_buffer_pool_parent_class)->finalize (object);
}
diff --git a/sys/pvr2d/gstpvrbufferpool.h b/sys/pvr2d/gstpvrbufferpool.h
index 1d90472b6..c34504d7f 100644
--- a/sys/pvr2d/gstpvrbufferpool.h
+++ b/sys/pvr2d/gstpvrbufferpool.h
@@ -26,63 +26,56 @@
G_BEGIN_DECLS
-GType gst_ducati_buffer_get_type (void);
-#define GST_TYPE_DUCATIBUFFER (gst_ducati_buffer_get_type())
-#define GST_IS_DUCATIBUFFER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DUCATIBUFFER))
-#define GST_DUCATIBUFFER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DUCATIBUFFER, GstDucatiBuffer))
-
-GType gst_pvr_bufferpool_get_type (void);
-#define GST_TYPE_PVRBUFFERPOOL (gst_pvr_bufferpool_get_type())
-#define GST_IS_PVRBUFFERPOOL(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PVRBUFFERPOOL))
-#define GST_PVRBUFFERPOOL(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PVRBUFFERPOOL, \
- GstPvrBufferPool))
-
-typedef struct _GstPvrBufferPool GstPvrBufferPool;
-typedef struct _GstDucatiBuffer GstDucatiBuffer;
-
-struct _GstPvrBufferPool
+typedef struct _GstPVRMeta GstPVRMeta;
+
+typedef struct _GstPVRBufferPool GstPVRBufferPool;
+typedef struct _GstPVRBufferPoolClass GstPVRBufferPoolClass;
+
+#include "gstpvrvideosink.h"
+
+const GstMetaInfo * gst_pvr_meta_get_info (void);
+#define GST_PVR_META_INFO (gst_pvr_meta_get_info())
+
+#define gst_buffer_get_pvr_meta(b) ((GstPVRMeta*)gst_buffer_get_meta((b),GST_PVR_META_INFO))
+
+struct _GstPVRMeta
+{
+ GstMeta meta;
+
+ PVR2DMEMINFO *src_mem; /* Memory wrapped by pvr */
+ GstElement *sink; /* sink, holds a ref */
+};
+
+GstPVRMeta *
+gst_buffer_add_pvr_meta(GstBuffer *buffer, GstElement *pvrsink);
+
+#define GST_TYPE_PVR_BUFFER_POOL (gst_pvr_buffer_pool_get_type())
+#define GST_IS_PVR_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PVR_BUFFER_POOL))
+#define GST_PVR_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PVR_BUFFER_POOL, GstPVRBufferPool))
+#define GST_PVR_BUFFER_POOL_CAST(obj) ((GstPVRBufferPool*)(obj))
+
+struct _GstPVRBufferPool
{
- GstMiniObject parent;
+ GstBufferPool parent;
/* output (padded) size including any codec padding: */
gint padded_width, padded_height;
- gint size;
- PVR2DCONTEXTHANDLE pvr_context;
+ guint size, align;
+
+ GstElement *pvrsink;
GstCaps *caps;
- GMutex *lock;
- gboolean running; /* with lock */
- GstElement *element; /* the element that owns us.. */
- GQueue *free_buffers;
- GQueue *used_buffers;
- guint buffer_count;
+ GstVideoInfo info;
+ gboolean add_metavideo;
};
-GstPvrBufferPool * gst_pvr_bufferpool_new (GstElement * element,
- GstCaps * caps, gint num_buffers, gint size,
- PVR2DCONTEXTHANDLE pvr_context);
-void gst_pvr_bufferpool_stop_running (GstPvrBufferPool * pool, gboolean unwrap);
-GstDucatiBuffer * gst_pvr_bufferpool_get (GstPvrBufferPool * self,
- GstBuffer * orig);
-
-#define GST_PVR_BUFFERPOOL_LOCK(self) g_mutex_lock ((self)->lock)
-#define GST_PVR_BUFFERPOOL_UNLOCK(self) g_mutex_unlock ((self)->lock)
-
-struct _GstDucatiBuffer {
- GstBuffer parent;
-
- GstPvrBufferPool *pool; /* buffer-pool that this buffer belongs to */
- GstBuffer *orig; /* original buffer, if we need to copy output */
- PVR2DMEMINFO *src_mem; /* Memory wrapped by pvr */
- gboolean wrapped;
+struct _GstPVRBufferPoolClass
+{
+ GstBufferPoolClass parent_class;
};
-GstBuffer * gst_ducati_buffer_get (GstDucatiBuffer * self);
-PVR2DMEMINFO * gst_ducati_buffer_get_meminfo (GstDucatiBuffer * self);
+GType gst_pvr_buffer_pool_get_type (void);
+GstBufferPool *gst_pvr_buffer_pool_new (GstElement *pvrsink);
G_END_DECLS
diff --git a/sys/pvr2d/gstpvrvideosink.c b/sys/pvr2d/gstpvrvideosink.c
index 3bfa3ad2d..19cbad657 100644
--- a/sys/pvr2d/gstpvrvideosink.c
+++ b/sys/pvr2d/gstpvrvideosink.c
@@ -3,6 +3,7 @@
* Copyright (C) 2011 Collabora Ltda
* Copyright (C) 2011 Texas Instruments
* @author: Luciana Fujii Pontello <luciana.fujii@collabora.co.uk>
+ * @author: Edward Hervey <edward@collabora.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -22,10 +23,12 @@
/* Object header */
#include "gstpvrvideosink.h"
-
#include "gstpvrbufferpool.h"
+
#include <gst/video/gstvideosink.h>
-#include <gst/interfaces/xoverlay.h>
+#include <gst/video/videooverlay.h>
+/* Helper functions */
+#include <gst/video/gstvideometa.h>
/* Debugging category */
#include <gst/gstinfo.h>
@@ -37,7 +40,6 @@
#include <servicesext.h>
#define DEFAULT_QUEUE_SIZE 12
-#define DEFAULT_MIN_QUEUED_BUFS 1
GST_DEBUG_CATEGORY_EXTERN (gst_debug_pvrvideosink);
#define GST_CAT_DEFAULT gst_debug_pvrvideosink
@@ -55,23 +57,27 @@ GST_DEBUG_CATEGORY_EXTERN (gst_debug_pvrvideosink);
/* end of internal definitions */
static void gst_pvrvideosink_reset (GstPVRVideoSink * pvrvideosink);
-static GstFlowReturn gst_pvrvideosink_buffer_alloc (GstBaseSink * bsink,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
static void gst_pvrvideosink_xwindow_draw_borders (GstPVRVideoSink *
pvrvideosink, GstXWindow * xwindow, GstVideoRectangle rect);
-static void gst_pvrvideosink_expose (GstXOverlay * overlay);
+static void gst_pvrvideosink_expose (GstVideoOverlay * overlay);
static void gst_pvrvideosink_xwindow_destroy (GstPVRVideoSink * pvrvideosink,
GstXWindow * xwindow);
+static void gst_pvrvideosink_dcontext_free (GstDrawContext * dcontext);
+
+static void gst_pvrvideosink_videooverlay_init (GstVideoOverlayInterface *
+ iface);
+
+#define gst_pvrvideosink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstPVRVideoSink, gst_pvrvideosink, GST_TYPE_VIDEO_SINK,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY,
+ gst_pvrvideosink_videooverlay_init));
+
static GstStaticPadTemplate gst_pvrvideosink_sink_template_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw-yuv, "
- "format = (fourcc) NV12, "
- "width = " GST_VIDEO_SIZE_RANGE ", "
- "height = " GST_VIDEO_SIZE_RANGE ", "
- "framerate = " GST_VIDEO_FPS_RANGE));
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("NV12")));
enum
{
@@ -81,8 +87,6 @@ enum
PROP_WINDOW_HEIGHT
};
-static GstVideoSinkClass *parent_class = NULL;
-
/* ============================================================= */
/* */
/* Private Methods */
@@ -91,12 +95,6 @@ static GstVideoSinkClass *parent_class = NULL;
/* pvrvideo buffers */
-#define GST_TYPE_PVRVIDEO_BUFFER (gst_pvrvideo_buffer_get_type())
-
-#define GST_IS_PVRVIDEO_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PVRVIDEO_BUFFER))
-#define GST_PVRVIDEO_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PVRVIDEO_BUFFER, GstPVRVideoBuffer))
-#define GST_PVRVIDEO_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PVRVIDEO_BUFFER, GstPVRVideoBufferClass))
-
static void
gst_pvrvideosink_xwindow_update_geometry (GstPVRVideoSink * pvrvideosink)
{
@@ -126,17 +124,16 @@ gst_pvrvideosink_xwindow_update_geometry (GstPVRVideoSink * pvrvideosink)
}
if (pvrvideosink->dcontext != NULL) {
glerror =
- pvrvideosink->dcontext->
- wsegl_table->pfnWSEGL_DeleteDrawable (pvrvideosink->dcontext->
- drawable_handle);
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_DeleteDrawable (pvrvideosink->dcontext->drawable_handle);
if (glerror != WSEGL_SUCCESS) {
GST_ERROR_OBJECT (pvrvideosink, "Error destroying drawable");
return;
}
glerror =
- pvrvideosink->dcontext->
- wsegl_table->pfnWSEGL_CreateWindowDrawable (pvrvideosink->dcontext->
- display_handle, pvrvideosink->dcontext->glconfig,
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_CreateWindowDrawable (pvrvideosink->dcontext->display_handle,
+ pvrvideosink->dcontext->glconfig,
&pvrvideosink->dcontext->drawable_handle,
(NativeWindowType) pvrvideosink->xwindow->window,
&pvrvideosink->dcontext->rotation);
@@ -145,9 +142,9 @@ gst_pvrvideosink_xwindow_update_geometry (GstPVRVideoSink * pvrvideosink)
return;
}
glerror =
- pvrvideosink->dcontext->
- wsegl_table->pfnWSEGL_GetDrawableParameters (pvrvideosink->dcontext->
- drawable_handle, &source_params, &pvrvideosink->render_params);
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_GetDrawableParameters (pvrvideosink->dcontext->drawable_handle,
+ &source_params, &pvrvideosink->render_params);
if (glerror != WSEGL_SUCCESS) {
GST_ERROR_OBJECT (pvrvideosink, "Error getting Drawable params");
return;
@@ -198,7 +195,7 @@ gst_pvrvideosink_handle_xevents (GstPVRVideoSink * pvrvideosink)
g_mutex_unlock (pvrvideosink->dcontext->x_lock);
g_mutex_unlock (pvrvideosink->flow_lock);
- gst_pvrvideosink_expose (GST_X_OVERLAY (pvrvideosink));
+ gst_pvrvideosink_expose (GST_VIDEO_OVERLAY (pvrvideosink));
g_mutex_lock (pvrvideosink->flow_lock);
g_mutex_lock (pvrvideosink->dcontext->x_lock);
@@ -284,58 +281,108 @@ gst_pvrvideosink_manage_event_thread (GstPVRVideoSink * pvrvideosink)
static GstDrawContext *
gst_pvrvideosink_get_dcontext (GstPVRVideoSink * pvrvideosink)
{
- GstDrawContext *dcontext;
+ GstDrawContext *dcontext = NULL;
PVR2DERROR pvr_error;
gint refresh_rate;
DRI2WSDisplay *displayImpl;
WSEGLError glerror;
const WSEGLCaps *glcaps;
+ GST_DEBUG_OBJECT (pvrvideosink, "Getting draw context");
+
dcontext = g_new0 (GstDrawContext, 1);
- dcontext->p_blt_info = 0;
dcontext->x_lock = g_mutex_new ();
dcontext->p_blt_info = g_new0 (PVR2D_3DBLT_EXT, 1);
- if (!dcontext->p_blt_info) {
- GST_ERROR_OBJECT (pvrvideosink, "Alloc of bltinfo failed");
- return NULL;
- }
+ if (!dcontext->p_blt_info)
+ goto p_blt_info_alloc_failed;
+
dcontext->p_blt2d_info = g_new0 (PVR2DBLTINFO, 1);
+ GST_LOG_OBJECT (pvrvideosink, "Opening X Display");
dcontext->x_display = XOpenDisplay (NULL);
+ if (dcontext->x_display == NULL)
+ goto fail_open_display;
+
+ GST_LOG_OBJECT (pvrvideosink, "WSEGL_GetFunctionTablePointer()");
dcontext->wsegl_table = WSEGL_GetFunctionTablePointer ();
+
+ GST_LOG_OBJECT (pvrvideosink, "pfnWSEGL_IsDisplayValid()");
glerror = dcontext->wsegl_table->pfnWSEGL_IsDisplayValid (
(NativeDisplayType) dcontext->x_display);
- if (glerror != WSEGL_SUCCESS) {
- GST_ERROR_OBJECT (pvrvideosink, "Display is not valid");
- return NULL;
- }
+ if (glerror != WSEGL_SUCCESS)
+ goto display_invalid;
+
+ GST_LOG_OBJECT (pvrvideosink, "pfnWSEGL_InitialiseDisplay()");
glerror = dcontext->wsegl_table->pfnWSEGL_InitialiseDisplay (
(NativeDisplayType) dcontext->x_display, &dcontext->display_handle,
&glcaps, &dcontext->glconfig);
- if (glerror != WSEGL_SUCCESS) {
- GST_ERROR_OBJECT (pvrvideosink, "Error initializing display");
- return NULL;
- }
+ if (glerror != WSEGL_SUCCESS)
+ goto display_init_failed;
displayImpl = (DRI2WSDisplay *) dcontext->display_handle;
dcontext->pvr_context = displayImpl->hContext;
+ GST_LOG_OBJECT (pvrvideosink, "PVR2DGetScreenMode()");
+
pvr_error = PVR2DGetScreenMode (dcontext->pvr_context,
&dcontext->display_format, &dcontext->display_width,
&dcontext->display_height, &dcontext->stride, &refresh_rate);
- if (pvr_error != PVR2D_OK) {
- GST_ERROR_OBJECT (pvrvideosink, "Failed) to get screen mode"
- "returned %d", pvr_error);
- return NULL;
- }
+ if (pvr_error != PVR2D_OK)
+ goto screen_mode_failed;
+
+ GST_DEBUG_OBJECT (pvrvideosink,
+ "Got format:%d, width:%d, height:%d, stride:%d, refresh_rate:%d",
+ dcontext->display_format, dcontext->display_width,
+ dcontext->display_height, dcontext->stride, refresh_rate);
+
dcontext->screen_num = DefaultScreen (dcontext->x_display);
dcontext->black = XBlackPixel (dcontext->x_display, dcontext->screen_num);
+ GST_DEBUG_OBJECT (pvrvideosink, "Returning dcontext %p", dcontext);
+
return dcontext;
+
+p_blt_info_alloc_failed:
+ {
+ GST_ERROR_OBJECT (pvrvideosink, "Alloc of bltinfo failed");
+ gst_pvrvideosink_dcontext_free (dcontext);
+ return NULL;
+ }
+
+fail_open_display:
+ {
+ GST_ERROR_OBJECT (pvrvideosink, "Failed to open X Display");
+ gst_pvrvideosink_dcontext_free (dcontext);
+ return NULL;
+ }
+
+display_invalid:
+ {
+ GST_ERROR_OBJECT (pvrvideosink, "Display is not valid (glerror:%d)",
+ glerror);
+ gst_pvrvideosink_dcontext_free (dcontext);
+ return NULL;
+ }
+
+display_init_failed:
+ {
+ GST_ERROR_OBJECT (pvrvideosink, "Error initializing display (glerror:%d)",
+ glerror);
+ gst_pvrvideosink_dcontext_free (dcontext);
+ return NULL;
+ }
+
+screen_mode_failed:
+ {
+ GST_ERROR_OBJECT (pvrvideosink, "Failed to get screen mode. error : %s",
+ gst_pvr2d_error_get_string (pvr_error));
+ gst_pvrvideosink_dcontext_free (dcontext);
+ return NULL;
+ }
}
static void
@@ -438,8 +485,9 @@ gst_pvrvideosink_create_window (GstPVRVideoSink * pvrvideosink, gint width,
g_mutex_unlock (pvrvideosink->dcontext->x_lock);
glerror =
- dcontext->wsegl_table->pfnWSEGL_CreateWindowDrawable (dcontext->
- display_handle, dcontext->glconfig, &(dcontext->drawable_handle),
+ dcontext->wsegl_table->
+ pfnWSEGL_CreateWindowDrawable (dcontext->display_handle,
+ dcontext->glconfig, &(dcontext->drawable_handle),
(NativeWindowType) xwindow->window, &(dcontext->rotation));
if (glerror != WSEGL_SUCCESS) {
@@ -447,8 +495,9 @@ gst_pvrvideosink_create_window (GstPVRVideoSink * pvrvideosink, gint width,
return NULL;
}
glerror =
- dcontext->wsegl_table->pfnWSEGL_GetDrawableParameters (dcontext->
- drawable_handle, &source_params, &pvrvideosink->render_params);
+ dcontext->wsegl_table->
+ pfnWSEGL_GetDrawableParameters (dcontext->drawable_handle, &source_params,
+ &pvrvideosink->render_params);
client_mem_info =
(PVRSRV_CLIENT_MEM_INFO *) pvrvideosink->render_params.hPrivateData;
PVR2DMEMINFO_INITIALISE (&dcontext->dst_mem, client_mem_info);
@@ -462,39 +511,38 @@ gst_pvrvideosink_blit (GstPVRVideoSink * pvrvideosink, GstBuffer * buffer)
{
PVR2DERROR pvr_error;
GstDrawContext *dcontext = pvrvideosink->dcontext;
- GstCaps *caps;
- GstStructure *structure;
gint video_width;
gint video_height;
- gboolean ret;
gboolean draw_border = FALSE;
PPVR2D_3DBLT_EXT p_blt_3d;
PVR2DMEMINFO *src_mem;
- PVR2DFORMAT pvr_format = pvrvideosink->format == GST_VIDEO_FORMAT_NV12 ?
- PVR2D_YUV420_2PLANE : PVR2D_ARGB8888;
+ PVR2DFORMAT pvr_format;
GstVideoRectangle result;
+ GstPVRMeta *meta;
+ GstVideoCropMeta *cropmeta;
+
+ GST_DEBUG_OBJECT (pvrvideosink, "buffer %p", buffer);
+
+ pvr_format =
+ GST_VIDEO_INFO_FORMAT (&pvrvideosink->info) ==
+ GST_VIDEO_FORMAT_NV12 ? PVR2D_YUV420_2PLANE : PVR2D_ARGB8888;
- GST_DEBUG_OBJECT (pvrvideosink, "begin");
g_mutex_lock (pvrvideosink->flow_lock);
if (buffer == NULL)
buffer = pvrvideosink->current_buffer;
- if (buffer == NULL) {
- g_mutex_unlock (pvrvideosink->flow_lock);
- return;
- }
+ if (buffer == NULL)
+ goto done;
+
+ meta = gst_buffer_get_pvr_meta (buffer);
+ if (G_UNLIKELY (meta == NULL))
+ goto no_pvr_meta;
- caps = GST_BUFFER_CAPS (buffer);
- src_mem = gst_ducati_buffer_get_meminfo ((GstDucatiBuffer *) buffer);
+ src_mem = meta->src_mem;
p_blt_3d = dcontext->p_blt_info;
- structure = gst_caps_get_structure (caps, 0);
- ret = gst_structure_get_int (structure, "width", &video_width);
- ret &= gst_structure_get_int (structure, "height", &video_height);
- if (!ret) {
- GST_ERROR_OBJECT (pvrvideosink, "Failed to get dimensions of the buffer");
- goto done;
- }
+ video_width = GST_VIDEO_SINK_WIDTH (pvrvideosink);
+ video_height = GST_VIDEO_SINK_HEIGHT (pvrvideosink);
g_mutex_lock (pvrvideosink->dcontext->x_lock);
@@ -531,9 +579,7 @@ gst_pvrvideosink_blit (GstPVRVideoSink * pvrvideosink, GstBuffer * buffer)
p_blt_3d->sDst.pSurfMemInfo = &dcontext->dst_mem;
p_blt_3d->sDst.SurfOffset = 0;
- p_blt_3d->sDst.Stride =
- gst_video_format_get_row_stride (GST_VIDEO_FORMAT_BGRx, 0,
- pvrvideosink->render_params.ui32Stride);
+ p_blt_3d->sDst.Stride = 4 * pvrvideosink->render_params.ui32Stride;
p_blt_3d->sDst.Format = PVR2D_ARGB8888;
p_blt_3d->sDst.SurfWidth = pvrvideosink->xwindow->width;
p_blt_3d->sDst.SurfHeight = pvrvideosink->xwindow->height;
@@ -545,56 +591,41 @@ gst_pvrvideosink_blit (GstPVRVideoSink * pvrvideosink, GstBuffer * buffer)
p_blt_3d->sSrc.pSurfMemInfo = src_mem;
p_blt_3d->sSrc.SurfOffset = 0;
- p_blt_3d->sSrc.Stride = pvrvideosink->rowstride;
+ p_blt_3d->sSrc.Stride = GST_VIDEO_INFO_COMP_STRIDE (&pvrvideosink->info, 0);
p_blt_3d->sSrc.Format = pvr_format;
p_blt_3d->sSrc.SurfWidth = video_width;
p_blt_3d->sSrc.SurfHeight = video_height;
- p_blt_3d->rcSource.left = 0;
- p_blt_3d->rcSource.top = 0;
- p_blt_3d->rcSource.right = video_width;
- p_blt_3d->rcSource.bottom = video_height;
+ /* If buffer has crop information, use that */
+ if ((cropmeta = gst_buffer_get_video_crop_meta (buffer))) {
+ p_blt_3d->rcSource.left = cropmeta->x;
+ p_blt_3d->rcSource.top = cropmeta->y;
+ p_blt_3d->rcSource.right = cropmeta->x + cropmeta->width;
+ p_blt_3d->rcSource.bottom = cropmeta->y + cropmeta->height;
+ } else {
+ p_blt_3d->rcSource.left = 0;
+ p_blt_3d->rcSource.top = 0;
+ p_blt_3d->rcSource.right = video_width;
+ p_blt_3d->rcSource.bottom = video_height;
+ }
p_blt_3d->hUseCode = NULL;
- if (pvrvideosink->format == GST_VIDEO_FORMAT_NV12)
+ if (GST_VIDEO_INFO_FORMAT (&pvrvideosink->info) == GST_VIDEO_FORMAT_NV12)
p_blt_3d->bDisableDestInput = TRUE;
else
/* blit fails for RGB without this... not sure why yet... */
p_blt_3d->bDisableDestInput = FALSE;
+ GST_DEBUG_OBJECT (pvrvideosink, "about to blit");
+
pvr_error = PVR2DBlt3DExt (pvrvideosink->dcontext->pvr_context,
dcontext->p_blt_info);
- switch (pvr_error) {
- case PVR2D_OK:
- break;
- case PVR2DERROR_DEVICE_UNAVAILABLE:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, device unavailable");
- goto done;
- break;
- case PVR2DERROR_INVALID_CONTEXT:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, invalid context");
- goto done;
- break;
- case PVR2DERROR_INVALID_PARAMETER:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, invalid parameter");
- goto done;
- break;
- case PVR2DERROR_HW_FEATURE_NOT_SUPPORTED:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, "
- "hardware feature not supported");
- goto done;
- break;
- case PVR2DERROR_GENERIC_ERROR:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, generic error");
- goto done;
- break;
- default:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, "
- "undefined error %d", pvr_error);
- goto done;
- break;
+ if (pvr_error != PVR2D_OK) {
+ GST_ERROR_OBJECT (pvrvideosink, "Failed to blit. Error : %s",
+ gst_pvr2d_error_get_string (pvr_error));
+ goto done;
}
dcontext->wsegl_table->pfnWSEGL_SwapDrawable (dcontext->drawable_handle, 1);
@@ -608,19 +639,35 @@ gst_pvrvideosink_blit (GstPVRVideoSink * pvrvideosink, GstBuffer * buffer)
done:
GST_DEBUG_OBJECT (pvrvideosink, "end");
g_mutex_unlock (pvrvideosink->flow_lock);
+ return;
+
+ /* Error cases */
+
+no_pvr_meta:
+ {
+ g_mutex_unlock (pvrvideosink->flow_lock);
+ GST_ERROR_OBJECT (pvrvideosink, "Got a buffer without GstPVRMeta");
+ return;
+ }
}
static void
gst_pvrvideosink_destroy_drawable (GstPVRVideoSink * pvrvideosink)
{
+ GST_DEBUG_OBJECT (pvrvideosink, "dcontext : %p", pvrvideosink->dcontext);
+
if (pvrvideosink->dcontext != NULL) {
- if (pvrvideosink->dcontext->drawable_handle)
- pvrvideosink->dcontext->
- wsegl_table->pfnWSEGL_DeleteDrawable (pvrvideosink->dcontext->
- drawable_handle);
+ if (pvrvideosink->dcontext->drawable_handle) {
+ GST_DEBUG_OBJECT (pvrvideosink, "Deleting Drawable (drawable_handle:%p)",
+ pvrvideosink->dcontext->drawable_handle);
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_DeleteDrawable (pvrvideosink->dcontext->drawable_handle);
+ }
- pvrvideosink->dcontext->wsegl_table->pfnWSEGL_CloseDisplay (pvrvideosink->
- dcontext->display_handle);
+ GST_DEBUG_OBJECT (pvrvideosink, "Closing display (display_handle:%p)",
+ pvrvideosink->dcontext->display_handle);
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_CloseDisplay (pvrvideosink->dcontext->display_handle);
}
}
@@ -641,9 +688,7 @@ gst_pvrvideosink_pvrfill_rectangle (GstPVRVideoSink * pvrvideosink,
p_blt2d_info->BlitFlags = PVR2D_BLIT_DISABLE_ALL;
p_blt2d_info->DstOffset = 0;
p_blt2d_info->CopyCode = PVR2DROPclear;
- p_blt2d_info->DstStride =
- gst_video_format_get_row_stride (GST_VIDEO_FORMAT_BGRx, 0,
- pvrvideosink->render_params.ui32Stride);
+ p_blt2d_info->DstStride = 4 * pvrvideosink->render_params.ui32Stride;
p_blt2d_info->DstFormat = PVR2D_ARGB8888;
p_blt2d_info->DstSurfWidth = pvrvideosink->xwindow->width;
p_blt2d_info->DstSurfHeight = pvrvideosink->xwindow->height;
@@ -654,35 +699,10 @@ gst_pvrvideosink_pvrfill_rectangle (GstPVRVideoSink * pvrvideosink,
pvr_error = PVR2DBlt (pvrvideosink->dcontext->pvr_context, p_blt2d_info);
- switch (pvr_error) {
- case PVR2D_OK:
- break;
- case PVR2DERROR_DEVICE_UNAVAILABLE:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, device unavailable");
- goto done;
- break;
- case PVR2DERROR_INVALID_CONTEXT:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, invalid context");
- goto done;
- break;
- case PVR2DERROR_INVALID_PARAMETER:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, invalid parameter");
- goto done;
- break;
- case PVR2DERROR_HW_FEATURE_NOT_SUPPORTED:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, "
- "hardware feature not supported");
- goto done;
- break;
- case PVR2DERROR_GENERIC_ERROR:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, generic error");
- goto done;
- break;
- default:
- GST_ERROR_OBJECT (pvrvideosink, "Failed to blit, "
- "undefined error %d", pvr_error);
- goto done;
- break;
+ if (pvr_error != PVR2D_OK) {
+ GST_ERROR_OBJECT (pvrvideosink, "Failed to blit. Error : %s",
+ gst_pvr2d_error_get_string (pvr_error));
+ goto done;
}
dcontext->wsegl_table->pfnWSEGL_SwapDrawable (dcontext->drawable_handle, 1);
@@ -744,112 +764,106 @@ static gboolean
gst_pvrvideosink_setcaps (GstBaseSink * bsink, GstCaps * caps)
{
GstPVRVideoSink *pvrvideosink;
- gboolean ret = TRUE;
+ GstVideoInfo info;
GstStructure *structure;
- gint new_width, new_height;
- const GValue *fps;
- GstQuery *query;
+ GstBufferPool *oldpool, *newpool;
pvrvideosink = GST_PVRVIDEOSINK (bsink);
GST_DEBUG_OBJECT (pvrvideosink,
- "sinkconnect possible caps with given caps %", caps);
-
- structure = gst_caps_get_structure (caps, 0);
-
- ret = gst_video_format_parse_caps_strided (caps, &pvrvideosink->format,
- &new_width, &new_height, &pvrvideosink->rowstride);
- if (pvrvideosink->rowstride == 0)
- pvrvideosink->rowstride =
- gst_video_format_get_row_stride (pvrvideosink->format, 0, new_width);
- fps = gst_structure_get_value (structure, "framerate");
- ret &= (fps != NULL);
- if (!ret) {
- GST_ERROR_OBJECT (pvrvideosink, "problem at parsing caps");
- return FALSE;
- }
+ "sinkconnect possible caps with given caps %" GST_PTR_FORMAT, caps);
- if (pvrvideosink->current_caps) {
- GST_DEBUG_OBJECT (pvrvideosink, "already have caps set");
- if (gst_caps_is_equal (pvrvideosink->current_caps, caps)) {
- GST_DEBUG_OBJECT (pvrvideosink, "caps are equal!");
- return TRUE;
- }
- GST_DEBUG_OBJECT (pvrvideosink, "caps are different");
- }
-
- g_mutex_lock (pvrvideosink->pool_lock);
- if (pvrvideosink->buffer_pool) {
- if (!gst_caps_is_equal (pvrvideosink->buffer_pool->caps, caps)) {
- GST_INFO_OBJECT (pvrvideosink, "in set caps, pool->caps != caps");
- gst_pvr_bufferpool_stop_running (pvrvideosink->buffer_pool, FALSE);
- pvrvideosink->buffer_pool = NULL;
- }
- }
- g_mutex_unlock (pvrvideosink->pool_lock);
-
- /* query to find if anyone upstream using these buffers has any
- * minimum requirements:
- */
- query = gst_query_new_buffers (caps);
- if (gst_element_query (GST_ELEMENT (pvrvideosink), query)) {
- gint min_buffers;
-
- gst_query_parse_buffers_count (query, &min_buffers);
-
- GST_DEBUG_OBJECT (pvrvideosink, "min_buffers=%d", min_buffers);
-
- /* XXX need to account for some buffers used by queue, etc.. probably
- * queue should handle query, pass on to sink pad, and then add some
- * number of buffers to the min, so this value is dynamic depending
- * on the pipeline?
- */
- if (min_buffers != -1) {
- min_buffers += 3 + pvrvideosink->min_queued_bufs;
- pvrvideosink->num_buffers_can_change = FALSE;
- }
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_format;
- if (min_buffers > pvrvideosink->num_buffers) {
- pvrvideosink->num_buffers = min_buffers;
- }
- }
- gst_query_unref (query);
+ GST_VIDEO_SINK_WIDTH (pvrvideosink) = info.width;
+ GST_VIDEO_SINK_HEIGHT (pvrvideosink) = info.height;
/* Notify application to set xwindow id now */
g_mutex_lock (pvrvideosink->flow_lock);
if (!pvrvideosink->xwindow) {
g_mutex_unlock (pvrvideosink->flow_lock);
- gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (pvrvideosink));
+ gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (pvrvideosink));
} else {
g_mutex_unlock (pvrvideosink->flow_lock);
}
- GST_VIDEO_SINK_WIDTH (pvrvideosink) = new_width;
- GST_VIDEO_SINK_HEIGHT (pvrvideosink) = new_height;
g_mutex_lock (pvrvideosink->flow_lock);
if (!pvrvideosink->xwindow)
pvrvideosink->xwindow = gst_pvrvideosink_create_window (pvrvideosink,
- new_width, new_height);
+ GST_VIDEO_SINK_WIDTH (pvrvideosink),
+ GST_VIDEO_SINK_HEIGHT (pvrvideosink));
g_mutex_unlock (pvrvideosink->flow_lock);
- pvrvideosink->fps_n = gst_value_get_fraction_numerator (fps);
- pvrvideosink->fps_d = gst_value_get_fraction_denominator (fps);
+ pvrvideosink->info = info;
- pvrvideosink->current_caps = gst_caps_ref (caps);
+ /* After a resize, we want to redraw the borders in case the new frame size
+ * doesn't cover the same area */
+ pvrvideosink->redraw_borders = TRUE;
+
+ /* create a new pool for the new configuration */
+ newpool = gst_pvr_buffer_pool_new (GST_ELEMENT_CAST (pvrvideosink));
+
+ /* PVR needs at least 3 buffers */
+ structure = gst_buffer_pool_get_config (newpool);
+ gst_buffer_pool_config_set (structure, caps, GST_VIDEO_INFO_SIZE (&info), 3,
+ 0, 0, 15);
+ if (!gst_buffer_pool_set_config (newpool, structure))
+ goto config_failed;
+
+ oldpool = pvrvideosink->pool;
+ pvrvideosink->pool = newpool;
+ g_mutex_unlock (pvrvideosink->flow_lock);
+
+ /* unref the old sink */
+ if (oldpool) {
+ /* we don't deactivate, some elements might still be using it, it will
+ * be deactivated when the last ref is gone */
+ gst_object_unref (oldpool);
+ }
return TRUE;
+
+config_failed:
+ {
+ GST_ERROR_OBJECT (pvrvideosink, "failed to set config.");
+ g_mutex_unlock (pvrvideosink->flow_lock);
+ return FALSE;
+ }
+
+invalid_format:
+ {
+ GST_DEBUG_OBJECT (pvrvideosink,
+ "Could not locate image format from caps %" GST_PTR_FORMAT, caps);
+ return FALSE;
+ }
}
static GstCaps *
-gst_pvrvideosink_getcaps (GstBaseSink * bsink)
+gst_pvrvideosink_getcaps (GstBaseSink * bsink, GstCaps * filter)
{
GstPVRVideoSink *pvrvideosink;
GstCaps *caps;
+ GST_DEBUG_OBJECT (bsink, "filter:%" GST_PTR_FORMAT, filter);
+
pvrvideosink = GST_PVRVIDEOSINK (bsink);
- caps = gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK
- (pvrvideosink)->sinkpad));
+ /* FIXME : If we have curently configured caps, we should return those
+ * intersected with the filter*/
+
+ caps = gst_pad_get_pad_template_caps (GST_BASE_SINK (pvrvideosink)->sinkpad);
+ if (filter) {
+ GstCaps *intersection;
+
+ intersection =
+ gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = intersection;
+ }
+
+ GST_DEBUG_OBJECT (bsink, "Returning %" GST_PTR_FORMAT, caps);
+
return caps;
}
@@ -875,14 +889,8 @@ gst_pvrvideosink_change_state (GstElement * element, GstStateChange transition)
gst_pvrvideosink_manage_event_thread (pvrvideosink);
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
- g_mutex_lock (pvrvideosink->pool_lock);
- pvrvideosink->pool_invalid = FALSE;
- g_mutex_unlock (pvrvideosink->pool_lock);
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
- g_mutex_lock (pvrvideosink->pool_lock);
- pvrvideosink->pool_invalid = TRUE;
- g_mutex_unlock (pvrvideosink->pool_lock);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break;
@@ -896,8 +904,6 @@ gst_pvrvideosink_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
- pvrvideosink->fps_n = 0;
- pvrvideosink->fps_d = 1;
GST_VIDEO_SINK_WIDTH (pvrvideosink) = 0;
GST_VIDEO_SINK_HEIGHT (pvrvideosink) = 0;
break;
@@ -924,185 +930,125 @@ gst_pvrvideosink_get_times (GstBaseSink * bsink, GstBuffer * buf,
if (GST_BUFFER_DURATION_IS_VALID (buf)) {
*end = *start + GST_BUFFER_DURATION (buf);
} else {
- if (pvrvideosink->fps_n > 0) {
- *end = *start +
- gst_util_uint64_scale_int (GST_SECOND, pvrvideosink->fps_d,
- pvrvideosink->fps_n);
+ gint fps_n, fps_d;
+ fps_n = GST_VIDEO_INFO_FPS_N (&pvrvideosink->info);
+ fps_d = GST_VIDEO_INFO_FPS_D (&pvrvideosink->info);
+ if (fps_n > 0) {
+ *end = *start + gst_util_uint64_scale_int (GST_SECOND, fps_d, fps_n);
}
}
}
}
static GstFlowReturn
-gst_pvrvideosink_show_frame (GstBaseSink * vsink, GstBuffer * buf)
+gst_pvrvideosink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
{
- GstPVRVideoSink *pvrvideosink;
- GstBuffer *newbuf = NULL;
- g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR);
-
- pvrvideosink = GST_PVRVIDEOSINK (vsink);
+ GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (vsink);
+ GstPVRMeta *meta;
GST_DEBUG_OBJECT (pvrvideosink, "render buffer: %p", buf);
- if (!GST_IS_BUFFER (buf)) {
- GstFlowReturn ret;
-
- /* special case check for sub-buffers: In certain cases, places like
- * GstBaseTransform, which might check that the buffer is writable
- * before copying metadata, timestamp, and such, will find that the
- * buffer has more than one reference to it. In these cases, they
- * will create a sub-buffer with an offset=0 and length equal to the
- * original buffer size.
- *
- * This could happen in two scenarios: (1) a tee in the pipeline, and
- * (2) because the refcnt is incremented in gst_mini_object_free()
- * before the finalize function is called, and decremented after it
- * returns.. but returning this buffer to the buffer pool in the
- * finalize function, could wake up a thread blocked in _buffer_alloc()
- * which could run and get a buffer w/ refcnt==2 before the thread
- * originally unref'ing the buffer returns from finalize function and
- * decrements the refcnt back to 1!
- */
- if (buf->parent &&
- (GST_BUFFER_DATA (buf) == GST_BUFFER_DATA (buf->parent)) &&
- (GST_BUFFER_SIZE (buf) == GST_BUFFER_SIZE (buf->parent))) {
- GST_DEBUG_OBJECT (pvrvideosink, "I have a sub-buffer!");
- return gst_pvrvideosink_show_frame (vsink, buf->parent);
- }
-
- GST_DEBUG_OBJECT (pvrvideosink,
- "slow-path.. I got a %s so I need to memcpy",
- g_type_name (G_OBJECT_TYPE (buf)));
-
- ret = gst_pvrvideosink_buffer_alloc (GST_BASE_SINK (vsink),
- GST_BUFFER_OFFSET (buf), GST_BUFFER_SIZE (buf), GST_BUFFER_CAPS (buf),
- &newbuf);
-
- if (GST_FLOW_OK != ret) {
- GST_DEBUG_OBJECT (pvrvideosink, "dropping frame!!");
- return GST_FLOW_OK;
- }
-
- memcpy (GST_BUFFER_DATA (newbuf),
- GST_BUFFER_DATA (buf),
- MIN (GST_BUFFER_SIZE (newbuf), GST_BUFFER_SIZE (buf)));
+ meta = gst_buffer_get_pvr_meta (buf);
- GST_DEBUG_OBJECT (pvrvideosink, "render copied buffer: %p", newbuf);
-
- buf = newbuf;
+ if (G_UNLIKELY (meta == NULL)) {
+ meta = gst_buffer_add_pvr_meta (buf, GST_ELEMENT_CAST (pvrvideosink));
+ if (meta == NULL)
+ goto meta_failure;
}
gst_pvrvideosink_blit (pvrvideosink, buf);
- if (newbuf) {
- gst_buffer_unref (newbuf);
- }
-
return GST_FLOW_OK;
-}
+meta_failure:
+ {
+ GST_WARNING_OBJECT (pvrvideosink, "Failed to map incoming buffer");
+ return GST_FLOW_ERROR;
+ }
+}
-/* Buffer management
- *
- * The buffer_alloc function must either return a buffer with given size and
- * caps or create a buffer with different caps attached to the buffer. This
- * last option is called reverse negotiation, ie, where the sink suggests a
- * different format from the upstream peer.
- *
- * We try to do reverse negotiation when our geometry changes and we like a
- * resized buffer.
- */
-static GstFlowReturn
-gst_pvrvideosink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size,
- GstCaps * caps, GstBuffer ** buf)
+static gboolean
+gst_pvrvideosink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
{
- GstPVRVideoSink *pvrvideosink;
- GstDucatiBuffer *pvrvideo = NULL;
- GstStructure *structure = NULL;
- GstFlowReturn ret = GST_FLOW_OK;
- gint width, height;
+ GstPVRVideoSink *pvrvideosink = (GstPVRVideoSink *) bsink;
+ GstBufferPool *pool;
+ GstStructure *config;
+ GstCaps *caps;
+ guint size;
+ gboolean need_pool;
- pvrvideosink = GST_PVRVIDEOSINK (bsink);
+ gst_query_parse_allocation (query, &caps, &need_pool);
- GST_DEBUG_OBJECT (pvrvideosink, "begin");
+ if (caps == NULL)
+ goto no_caps;
- if (G_UNLIKELY (!caps)) {
- GST_WARNING_OBJECT (pvrvideosink,
- "have no caps, doing fallback allocation");
- *buf = NULL;
- ret = GST_FLOW_OK;
- goto beach;
- }
+ g_mutex_lock (pvrvideosink->flow_lock);
+ if ((pool = pvrvideosink->pool))
+ gst_object_ref (pool);
+ g_mutex_unlock (pvrvideosink->flow_lock);
- g_mutex_lock (pvrvideosink->pool_lock);
- if (G_UNLIKELY (pvrvideosink->pool_invalid)) {
- GST_DEBUG_OBJECT (pvrvideosink, "the pool is flushing");
- ret = GST_FLOW_WRONG_STATE;
- g_mutex_unlock (pvrvideosink->pool_lock);
- goto beach;
- } else {
- g_mutex_unlock (pvrvideosink->pool_lock);
- }
+ if (pool != NULL) {
+ const GstCaps *pcaps;
- GST_LOG_OBJECT (pvrvideosink,
- "a buffer of %d bytes was requested with caps %" GST_PTR_FORMAT
- " and offset %" G_GUINT64_FORMAT, size, caps, offset);
-
- /* get struct to see what is requested */
- structure = gst_caps_get_structure (caps, 0);
- if (!gst_structure_get_int (structure, "width", &width) ||
- !gst_structure_get_int (structure, "height", &height)) {
- GST_WARNING_OBJECT (pvrvideosink, "invalid caps for buffer allocation %"
- GST_PTR_FORMAT, caps);
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto beach;
- }
+ /* we had a pool, check caps */
+ GST_DEBUG_OBJECT (pvrvideosink, "check existing pool caps");
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, NULL);
- g_mutex_lock (pvrvideosink->pool_lock);
- /* initialize the buffer pool if not initialized yet */
- if (G_UNLIKELY (!pvrvideosink->buffer_pool ||
- pvrvideosink->buffer_pool->size != size)) {
- if (pvrvideosink->buffer_pool) {
- GST_INFO_OBJECT (pvrvideosink, "in buffer alloc, pool->size != size");
- gst_pvr_bufferpool_stop_running (pvrvideosink->buffer_pool, FALSE);
+ if (!gst_caps_is_equal (caps, pcaps)) {
+ GST_DEBUG_OBJECT (pvrvideosink, "pool has different caps");
+ /* different caps, we can't use this pool */
+ gst_object_unref (pool);
+ pool = NULL;
}
+ }
- GST_LOG_OBJECT (pvrvideosink, "Creating a buffer pool with %d buffers",
- pvrvideosink->num_buffers);
- if (!(pvrvideosink->buffer_pool =
- gst_pvr_bufferpool_new (GST_ELEMENT (pvrvideosink),
- caps, pvrvideosink->num_buffers, size,
- pvrvideosink->dcontext->pvr_context))) {
- g_mutex_unlock (pvrvideosink->pool_lock);
- return GST_FLOW_ERROR;
- }
+ if (pool == NULL && need_pool) {
+ GstVideoInfo info;
+
+ GST_DEBUG_OBJECT (pvrvideosink, "create new pool");
+ pool = gst_pvr_buffer_pool_new (GST_ELEMENT_CAST (pvrvideosink));
+
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
+
+ /* the normal size of a frame */
+ size = info.size;
+
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 0);
+ if (!gst_buffer_pool_set_config (pool, config))
+ goto config_failed;
}
- pvrvideo = gst_pvr_bufferpool_get (pvrvideosink->buffer_pool, NULL);
- g_mutex_unlock (pvrvideosink->pool_lock);
+ /* we need at least 3 buffers */
+ gst_query_set_allocation_params (query, size, 3, 0, 0, 0, pool);
- *buf = GST_BUFFER_CAST (pvrvideo);
+ /* we also support various metadata */
+ gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API);
-beach:
- return ret;
-}
+ gst_object_unref (pool);
-/* Interfaces stuff */
+ return TRUE;
-static gboolean
-gst_pvrvideosink_interface_supported (GstImplementsInterface * iface,
- GType type)
-{
- if (type == GST_TYPE_X_OVERLAY)
- return TRUE;
- else
+ /* ERRORS */
+no_caps:
+ {
+ GST_DEBUG_OBJECT (bsink, "no caps specified");
+ return FALSE;
+ }
+invalid_caps:
+ {
+ GST_DEBUG_OBJECT (bsink, "invalid caps specified");
+ return FALSE;
+ }
+config_failed:
+ {
+ GST_DEBUG_OBJECT (bsink, "failed setting config");
return FALSE;
+ }
}
-static void
-gst_pvrvideosink_interface_init (GstImplementsInterfaceClass * klass)
-{
- klass->supported = gst_pvrvideosink_interface_supported;
-}
+/* Interfaces stuff */
/* This function destroys a GstXWindow */
static void
@@ -1129,9 +1075,9 @@ gst_pvrvideosink_xwindow_destroy (GstPVRVideoSink * pvrvideosink,
}
static void
-gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
+gst_pvrvideosink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
{
- XID xwindow_id = id;
+ XID window_handle = id;
GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
GstXWindow *xwindow = NULL;
@@ -1140,7 +1086,7 @@ gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
g_mutex_lock (pvrvideosink->flow_lock);
/* If we already use that window return */
- if (pvrvideosink->xwindow && (xwindow_id == pvrvideosink->xwindow->window)) {
+ if (pvrvideosink->xwindow && (window_handle == pvrvideosink->xwindow->window)) {
g_mutex_unlock (pvrvideosink->flow_lock);
return;
}
@@ -1153,14 +1099,6 @@ gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
return;
}
- /* Clear image pool as the images are unusable anyway */
- g_mutex_lock (pvrvideosink->pool_lock);
- if (pvrvideosink->buffer_pool) {
- gst_pvr_bufferpool_stop_running (pvrvideosink->buffer_pool, FALSE);
- pvrvideosink->buffer_pool = NULL;
- }
- g_mutex_unlock (pvrvideosink->pool_lock);
-
/* If a window is there already we destroy it */
if (pvrvideosink->xwindow) {
gst_pvrvideosink_xwindow_destroy (pvrvideosink, pvrvideosink->xwindow);
@@ -1168,14 +1106,14 @@ gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
}
/* If the xid is 0 we will create an internal one in buffer_alloc */
- if (xwindow_id != 0) {
+ if (window_handle != 0) {
XWindowAttributes attr;
WSEGLError glerror;
WSEGLDrawableParams source_params;
PVRSRV_CLIENT_MEM_INFO *client_mem_info;
xwindow = g_new0 (GstXWindow, 1);
- xwindow->window = xwindow_id;
+ xwindow->window = window_handle;
/* Set the event we want to receive and create a GC */
g_mutex_lock (pvrvideosink->dcontext->x_lock);
@@ -1203,9 +1141,9 @@ gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
g_mutex_unlock (pvrvideosink->dcontext->x_lock);
glerror =
- pvrvideosink->dcontext->
- wsegl_table->pfnWSEGL_CreateWindowDrawable (pvrvideosink->dcontext->
- display_handle, pvrvideosink->dcontext->glconfig,
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_CreateWindowDrawable (pvrvideosink->dcontext->display_handle,
+ pvrvideosink->dcontext->glconfig,
&(pvrvideosink->dcontext->drawable_handle),
(NativeWindowType) xwindow->window,
&(pvrvideosink->dcontext->rotation));
@@ -1215,9 +1153,9 @@ gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
return;
}
glerror =
- pvrvideosink->dcontext->
- wsegl_table->pfnWSEGL_GetDrawableParameters (pvrvideosink->dcontext->
- drawable_handle, &source_params, &pvrvideosink->render_params);
+ pvrvideosink->dcontext->wsegl_table->
+ pfnWSEGL_GetDrawableParameters (pvrvideosink->dcontext->drawable_handle,
+ &source_params, &pvrvideosink->render_params);
client_mem_info =
(PVRSRV_CLIENT_MEM_INFO *) pvrvideosink->render_params.hPrivateData;
@@ -1231,7 +1169,7 @@ gst_pvrvideosink_set_window_handle (GstXOverlay * overlay, guintptr id)
}
static void
-gst_pvrvideosink_expose (GstXOverlay * overlay)
+gst_pvrvideosink_expose (GstVideoOverlay * overlay)
{
GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
@@ -1239,7 +1177,7 @@ gst_pvrvideosink_expose (GstXOverlay * overlay)
}
static void
-gst_pvrvideosink_set_event_handling (GstXOverlay * overlay,
+gst_pvrvideosink_set_event_handling (GstVideoOverlay * overlay,
gboolean handle_events)
{
GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
@@ -1262,8 +1200,8 @@ gst_pvrvideosink_set_event_handling (GstXOverlay * overlay,
}
static void
-gst_pvrvideosink_set_render_rectangle (GstXOverlay * overlay, gint x, gint y,
- gint width, gint height)
+gst_pvrvideosink_set_render_rectangle (GstVideoOverlay * overlay, gint x,
+ gint y, gint width, gint height)
{
GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
@@ -1284,7 +1222,7 @@ gst_pvrvideosink_set_render_rectangle (GstXOverlay * overlay, gint x, gint y,
}
static void
-gst_pvrvideosink_xoverlay_init (GstXOverlayClass * iface)
+gst_pvrvideosink_videooverlay_init (GstVideoOverlayInterface * iface)
{
iface->set_window_handle = gst_pvrvideosink_set_window_handle;
iface->expose = gst_pvrvideosink_expose;
@@ -1338,11 +1276,72 @@ gst_pvrvideosink_get_property (GObject * object, guint prop_id,
}
}
+void
+gst_pvrvideosink_track_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer)
+{
+ GST_DEBUG_OBJECT (pvrsink, "Adding buffer %p to tracked buffers", buffer);
+ pvrsink->metabuffers = g_list_prepend (pvrsink->metabuffers, buffer);
+}
+
+void
+gst_pvrvideosink_untrack_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer)
+{
+ GST_DEBUG_OBJECT (pvrsink, "Removing buffer %p from tracked buffers", buffer);
+ pvrsink->metabuffers = g_list_remove_all (pvrsink->metabuffers, buffer);
+}
+
+static void
+gst_pvrvideosink_release_pvr_metas (GstPVRVideoSink * pvrsink)
+{
+ GstBuffer *buf;
+ GstPVRMeta *pvrmeta;
+
+ GST_DEBUG_OBJECT (pvrsink, "Releasing pending PVR metas");
+
+ while (pvrsink->metabuffers) {
+ buf = (GstBuffer *) pvrsink->metabuffers->data;
+
+ pvrmeta = gst_buffer_get_pvr_meta (buf);
+ if (pvrmeta)
+ gst_buffer_remove_meta (buf, (GstMeta *) pvrmeta);
+ }
+
+ GST_DEBUG_OBJECT (pvrsink, "Done");
+}
+
+static void
+gst_pvrvideosink_dcontext_free (GstDrawContext * dcontext)
+{
+ GST_DEBUG ("Freeing dcontext %p", dcontext);
+
+ if (dcontext->p_blt_info)
+ g_free (dcontext->p_blt_info);
+
+ if (dcontext->p_blt2d_info)
+ g_free (dcontext->p_blt2d_info);
+
+ if (dcontext->x_lock)
+ g_mutex_lock (dcontext->x_lock);
+ if (dcontext->x_display) {
+ GST_LOG ("Closing display");
+ XCloseDisplay (dcontext->x_display);
+ }
+ if (dcontext->x_lock) {
+ g_mutex_unlock (dcontext->x_lock);
+ g_mutex_free (dcontext->x_lock);
+ }
+
+ g_free (dcontext);
+}
+
static void
gst_pvrvideosink_dcontext_clear (GstPVRVideoSink * pvrvideosink)
{
GstDrawContext *dcontext;
+ GST_DEBUG_OBJECT (pvrvideosink, "Clearing dcontext %p",
+ pvrvideosink->dcontext);
+
GST_OBJECT_LOCK (pvrvideosink);
if (!pvrvideosink->dcontext) {
GST_OBJECT_UNLOCK (pvrvideosink);
@@ -1353,15 +1352,7 @@ gst_pvrvideosink_dcontext_clear (GstPVRVideoSink * pvrvideosink)
pvrvideosink->dcontext = NULL;
GST_OBJECT_UNLOCK (pvrvideosink);
- if (dcontext->p_blt_info)
- g_free (dcontext->p_blt_info);
-
- g_mutex_lock (dcontext->x_lock);
- XCloseDisplay (dcontext->x_display);
- g_mutex_unlock (dcontext->x_lock);
- g_mutex_free (dcontext->x_lock);
-
- g_free (dcontext);
+ gst_pvrvideosink_dcontext_free (dcontext);
}
static void
@@ -1369,6 +1360,8 @@ gst_pvrvideosink_reset (GstPVRVideoSink * pvrvideosink)
{
GThread *thread;
+ GST_DEBUG_OBJECT (pvrvideosink, "Resetting");
+
GST_OBJECT_LOCK (pvrvideosink);
pvrvideosink->running = FALSE;
thread = pvrvideosink->event_thread;
@@ -1379,23 +1372,24 @@ gst_pvrvideosink_reset (GstPVRVideoSink * pvrvideosink)
g_thread_join (thread);
if (pvrvideosink->current_buffer) {
+ GST_LOG_OBJECT (pvrvideosink, "Removing cached buffer");
gst_buffer_unref (pvrvideosink->current_buffer);
pvrvideosink->current_buffer = NULL;
}
- g_mutex_lock (pvrvideosink->pool_lock);
- pvrvideosink->pool_invalid = TRUE;
- if (pvrvideosink->buffer_pool) {
- gst_pvr_bufferpool_stop_running (pvrvideosink->buffer_pool, TRUE);
- pvrvideosink->buffer_pool = NULL;
+ if (pvrvideosink->pool) {
+ GST_LOG_OBJECT (pvrvideosink, "Unreffing pool");
+ gst_object_unref (pvrvideosink->pool);
+ pvrvideosink->pool = NULL;
}
- g_mutex_unlock (pvrvideosink->pool_lock);
memset (&pvrvideosink->render_params, 0, sizeof (WSEGLDrawableParams));
pvrvideosink->render_rect.x = pvrvideosink->render_rect.y = 0;
pvrvideosink->render_rect.w = pvrvideosink->render_rect.h = 0;
pvrvideosink->have_render_rect = FALSE;
+ gst_pvrvideosink_release_pvr_metas (pvrvideosink);
+
gst_pvrvideosink_destroy_drawable (pvrvideosink);
if (pvrvideosink->xwindow) {
@@ -1419,10 +1413,6 @@ gst_pvrvideosink_finalize (GObject * object)
g_mutex_free (pvrvideosink->flow_lock);
pvrvideosink->flow_lock = NULL;
}
- if (pvrvideosink->pool_lock) {
- g_mutex_free (pvrvideosink->pool_lock);
- pvrvideosink->pool_lock = NULL;
- }
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -1432,19 +1422,11 @@ gst_pvrvideosink_init (GstPVRVideoSink * pvrvideosink)
{
pvrvideosink->running = FALSE;
- pvrvideosink->fps_n = 0;
- pvrvideosink->fps_d = 1;
-
pvrvideosink->flow_lock = g_mutex_new ();
- pvrvideosink->pool_lock = g_mutex_new ();
- pvrvideosink->buffer_pool = NULL;
- pvrvideosink->pool_invalid = TRUE;
+ pvrvideosink->pool = NULL;
pvrvideosink->keep_aspect = FALSE;
pvrvideosink->current_caps = NULL;
- pvrvideosink->num_buffers = DEFAULT_QUEUE_SIZE;
- pvrvideosink->num_buffers_can_change = TRUE;
- pvrvideosink->min_queued_bufs = DEFAULT_MIN_QUEUED_BUFS;
pvrvideosink->dcontext = NULL;
pvrvideosink->xwindow = NULL;
pvrvideosink->redraw_borders = TRUE;
@@ -1454,29 +1436,17 @@ gst_pvrvideosink_init (GstPVRVideoSink * pvrvideosink)
}
static void
-gst_pvrvideosink_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class,
- "PVR Video sink", "Sink/Video",
- "A PVR videosink",
- "Luciana Fujii Pontello <luciana.fujii@collabora.co.uk");
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_pvrvideosink_sink_template_factory));
-}
-
-static void
gst_pvrvideosink_class_init (GstPVRVideoSinkClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
GstBaseSinkClass *gstbasesink_class;
+ GstVideoSinkClass *videosink_class;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
gstbasesink_class = (GstBaseSinkClass *) klass;
+ videosink_class = (GstVideoSinkClass *) klass;
parent_class = g_type_class_peek_parent (klass);
@@ -1490,59 +1460,21 @@ gst_pvrvideosink_class_init (GstPVRVideoSinkClass * klass)
"original aspect ratio", FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_set_details_simple (gstelement_class,
+ "PVR Video sink", "Sink/Video",
+ "A PVR videosink",
+ "Luciana Fujii Pontello <luciana.fujii@collabora.co.uk");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_pvrvideosink_sink_template_factory));
+
gstelement_class->change_state = gst_pvrvideosink_change_state;
gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_pvrvideosink_setcaps);
gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_pvrvideosink_getcaps);
- gstbasesink_class->buffer_alloc =
- GST_DEBUG_FUNCPTR (gst_pvrvideosink_buffer_alloc);
+ gstbasesink_class->propose_allocation =
+ GST_DEBUG_FUNCPTR (gst_pvrvideosink_propose_allocation);
gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_pvrvideosink_get_times);
- gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_pvrvideosink_show_frame);
-}
-
-/* ============================================================= */
-/* */
-/* Public Methods */
-/* */
-/* ============================================================= */
-
-/* =========================================== */
-/* */
-/* Object typing & Creation */
-/* */
-/* =========================================== */
-
-GType
-gst_pvrvideosink_get_type (void)
-{
- static GType pvrvideosink_type = 0;
-
- if (!pvrvideosink_type) {
- static const GTypeInfo pvrvideosink_info = {
- sizeof (GstPVRVideoSinkClass),
- gst_pvrvideosink_base_init,
- NULL,
- (GClassInitFunc) gst_pvrvideosink_class_init,
- NULL,
- NULL,
- sizeof (GstPVRVideoSink), 0, (GInstanceInitFunc) gst_pvrvideosink_init,
- };
- static const GInterfaceInfo iface_info = {
- (GInterfaceInitFunc) gst_pvrvideosink_interface_init, NULL, NULL,
- };
- static const GInterfaceInfo overlay_info = {
- (GInterfaceInitFunc) gst_pvrvideosink_xoverlay_init, NULL, NULL,
- };
-
- pvrvideosink_type = g_type_register_static (GST_TYPE_VIDEO_SINK,
- "GstPVRVideoSink", &pvrvideosink_info, 0);
-
- g_type_add_interface_static (pvrvideosink_type,
- GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info);
- g_type_add_interface_static (pvrvideosink_type, GST_TYPE_X_OVERLAY,
- &overlay_info);
- }
-
- return pvrvideosink_type;
+ videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_pvrvideosink_show_frame);
}
diff --git a/sys/pvr2d/gstpvrvideosink.h b/sys/pvr2d/gstpvrvideosink.h
index 45f6a129e..f0b9df6a9 100644
--- a/sys/pvr2d/gstpvrvideosink.h
+++ b/sys/pvr2d/gstpvrvideosink.h
@@ -25,7 +25,6 @@
#include <gst/video/gstvideosink.h>
#include <gst/video/video.h>
-#include "gstpvrbufferpool.h"
#include <string.h>
#include <math.h>
@@ -98,7 +97,6 @@ struct _GstXWindow
* @fps_d: the framerate fraction denominator
* @flow_lock: used to protect data flow routines from external calls such as
* events from @event_thread or methods from the #GstXOverlay interface
- * @pool_lock: used to protect the buffer pool
* @x_lock: used to protect X calls
* @buffer_pool: a list of #GstPVRVideoBuffer that could be reused at next buffer
* allocation call
@@ -115,20 +113,12 @@ struct _GstPVRVideoSink
gboolean running;
/* Framerate numerator and denominator */
- GstVideoFormat format;
- gint fps_n;
- gint fps_d;
- gint rowstride;
+ GstVideoInfo info;
GThread *event_thread;
GMutex *flow_lock;
- GMutex *pool_lock;
- GstPvrBufferPool *buffer_pool;
- gboolean pool_invalid;
- gint num_buffers;
- gboolean num_buffers_can_change;
- gint min_queued_bufs;
+ GstBufferPool *pool;
gboolean keep_aspect;
@@ -143,6 +133,9 @@ struct _GstPVRVideoSink
gboolean redraw_borders;
GstBuffer *current_buffer;
+ /* List of buffer using GstPVRMeta on ourselves */
+ GList *metabuffers;
+
WSEGLDrawableParams render_params;
};
@@ -153,5 +146,8 @@ struct _GstPVRVideoSinkClass
GType gst_pvrvideosink_get_type (void);
+void gst_pvrvideosink_track_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer);
+void gst_pvrvideosink_untrack_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer);
+
G_END_DECLS
#endif /* __GST_PVRVIDEOSINK_H__ */
diff --git a/sys/qcam/gstqcamsrc.c b/sys/qcam/gstqcamsrc.c
index 2bd3a5855..76229ac76 100644
--- a/sys/qcam/gstqcamsrc.c
+++ b/sys/qcam/gstqcamsrc.c
@@ -148,8 +148,8 @@ gst_qcamsrc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class,
- &gst_qcamsrc_src_factory);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_qcamsrc_src_factory));
gst_element_class_set_details_simple (element_class, "QCam Source",
"Source/Video",
"Read from a QuickCam device", "Wim Taymans <wim.taymans@chello.be>");
diff --git a/sys/qtwrapper/audiodecoders.c b/sys/qtwrapper/audiodecoders.c
index abb2541de..32f8e1d43 100644
--- a/sys/qtwrapper/audiodecoders.c
+++ b/sys/qtwrapper/audiodecoders.c
@@ -747,7 +747,8 @@ process_buffer_cb (ComponentInstance inAudioConverter,
return noErr;
}
- GST_LOG_OBJECT (qtwrapper, "No remaining input data, returning NO_MORE_INPUT_DATA");
+ GST_LOG_OBJECT (qtwrapper,
+ "No remaining input data, returning NO_MORE_INPUT_DATA");
return NO_MORE_INPUT_DATA;
}
@@ -970,7 +971,8 @@ qtwrapper_audio_decoder_base_init (QTWrapperAudioDecoderClass * klass)
klass->sinktempl = gst_pad_template_new ("sink", GST_PAD_SINK,
GST_PAD_ALWAYS, params->sinkcaps);
gst_element_class_add_pad_template (element_class, klass->sinktempl);
- gst_element_class_add_static_pad_template (element_class, &src_templ);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_templ));
/* Store class-global values */
klass->componentSubType = desc.componentSubType;
diff --git a/sys/qtwrapper/videodecoders.c b/sys/qtwrapper/videodecoders.c
index c532ef9bb..b2e58e968 100644
--- a/sys/qtwrapper/videodecoders.c
+++ b/sys/qtwrapper/videodecoders.c
@@ -171,7 +171,8 @@ qtwrapper_video_decoder_base_init (QTWrapperVideoDecoderClass * klass)
GST_PAD_ALWAYS, params->sinkcaps);
gst_element_class_add_pad_template (element_class, klass->sinktempl);
- gst_element_class_add_static_pad_template (element_class, &src_templ);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_templ));
/* Store class-global values */
klass->component = params->component;
diff --git a/sys/shm/gstshmsink.c b/sys/shm/gstshmsink.c
index 903760be1..cb6c92bfa 100644
--- a/sys/shm/gstshmsink.c
+++ b/sys/shm/gstshmsink.c
@@ -96,7 +96,8 @@ gst_shm_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &sinktemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sinktemplate));
gst_element_class_set_details_simple (element_class,
"Shared Memory Sink",
diff --git a/sys/shm/gstshmsrc.c b/sys/shm/gstshmsrc.c
index cff5d46da..bbeadcd7d 100644
--- a/sys/shm/gstshmsrc.c
+++ b/sys/shm/gstshmsrc.c
@@ -85,7 +85,8 @@ gst_shm_src_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
gst_element_class_set_details_simple (element_class,
"Shared Memory Source",
diff --git a/sys/vcd/vcdsrc.c b/sys/vcd/vcdsrc.c
index 553e264cc..5ce58d870 100644
--- a/sys/vcd/vcdsrc.c
+++ b/sys/vcd/vcdsrc.c
@@ -99,7 +99,8 @@ gst_vcdsrc_base_init (gpointer g_class)
"Source/File",
"Asynchronous read from VCD disk", "Erik Walthinsen <omega@cse.ogi.edu>");
- gst_element_class_add_static_pad_template (element_class, &srctemplate);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&srctemplate));
}
static void
diff --git a/sys/vdpau/gstvdp/gstvdpdecoder.c b/sys/vdpau/gstvdp/gstvdpdecoder.c
index a400a39d6..977f6e6b2 100644
--- a/sys/vdpau/gstvdp/gstvdpdecoder.c
+++ b/sys/vdpau/gstvdp/gstvdpdecoder.c
@@ -293,7 +293,6 @@ gst_vdp_decoder_base_init (gpointer g_class)
GST_PAD_SRC, GST_PAD_ALWAYS, src_caps);
gst_element_class_add_pad_template (element_class, src_template);
- gst_object_unref (src_template);
}
static void
diff --git a/sys/vdpau/gstvdpsink.c b/sys/vdpau/gstvdpsink.c
index 7b9fa2e6c..c3d097fdd 100644
--- a/sys/vdpau/gstvdpsink.c
+++ b/sys/vdpau/gstvdpsink.c
@@ -1383,8 +1383,8 @@ gst_vdp_sink_base_init (gpointer g_class)
"Sink/Video",
"VDPAU Sink", "Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
static void
diff --git a/sys/vdpau/gstvdpvideopostprocess.c b/sys/vdpau/gstvdpvideopostprocess.c
index 09e484409..ced168fec 100644
--- a/sys/vdpau/gstvdpvideopostprocess.c
+++ b/sys/vdpau/gstvdpvideopostprocess.c
@@ -1190,14 +1190,12 @@ gst_vdp_vpp_base_init (gpointer gclass)
src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
src_caps);
gst_element_class_add_pad_template (element_class, src_template);
- gst_object_unref (src_template);
/* SINK PAD */
sink_caps = gst_vdp_video_buffer_get_caps (FALSE, 0);
sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
sink_caps);
gst_element_class_add_pad_template (element_class, sink_template);
- gst_object_unref (sink_template);
}
/* initialize the vdpaumpegdecoder's class */
diff --git a/sys/vdpau/h264/gstvdph264dec.c b/sys/vdpau/h264/gstvdph264dec.c
index 6b6c3360a..6c181aff0 100644
--- a/sys/vdpau/h264/gstvdph264dec.c
+++ b/sys/vdpau/h264/gstvdph264dec.c
@@ -870,8 +870,8 @@ gst_vdp_h264_dec_base_init (gpointer g_class)
"Decode h264 stream with vdpau",
"Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
static void
diff --git a/sys/vdpau/mpeg/gstvdpmpegdec.c b/sys/vdpau/mpeg/gstvdpmpegdec.c
index 6a473e48e..3de0eec65 100644
--- a/sys/vdpau/mpeg/gstvdpmpegdec.c
+++ b/sys/vdpau/mpeg/gstvdpmpegdec.c
@@ -624,8 +624,8 @@ gst_vdp_mpeg_dec_base_init (gpointer gclass)
"Decode mpeg stream with vdpau",
"Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
/* initialize the vdpaumpegdecoder's class */
diff --git a/sys/vdpau/mpeg4/gstvdpmpeg4dec.c b/sys/vdpau/mpeg4/gstvdpmpeg4dec.c
index 4c1bcb8b3..2ecf434e1 100644
--- a/sys/vdpau/mpeg4/gstvdpmpeg4dec.c
+++ b/sys/vdpau/mpeg4/gstvdpmpeg4dec.c
@@ -445,8 +445,8 @@ gst_vdp_mpeg4_dec_base_init (gpointer gclass)
"Decode mpeg4 stream with vdpau",
"Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>");
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
}
/* initialize the vdpaumpeg4decoder's class */
diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c
index 8e515dc93..3a3d9e906 100644
--- a/sys/wasapi/gstwasapisink.c
+++ b/sys/wasapi/gstwasapisink.c
@@ -65,8 +65,8 @@ gst_wasapi_sink_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class,
- &sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
gst_element_class_set_details_simple (element_class, "WasapiSrc",
"Sink/Audio",
"Stream audio to an audio capture device through WASAPI",
diff --git a/sys/wasapi/gstwasapisrc.c b/sys/wasapi/gstwasapisrc.c
index 0ef642b08..a4100315b 100644
--- a/sys/wasapi/gstwasapisrc.c
+++ b/sys/wasapi/gstwasapisrc.c
@@ -69,7 +69,8 @@ gst_wasapi_src_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class, "WasapiSrc",
"Source/Audio",
"Stream audio from an audio capture device through WASAPI",
diff --git a/sys/wininet/gstwininetsrc.c b/sys/wininet/gstwininetsrc.c
index b21e3d0be..8104f7cea 100644
--- a/sys/wininet/gstwininetsrc.c
+++ b/sys/wininet/gstwininetsrc.c
@@ -83,7 +83,8 @@ gst_win_inet_src_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"Windows Network Source", "Source/Network",
diff --git a/sys/winks/gstksvideosrc.c b/sys/winks/gstksvideosrc.c
index 3f2b66914..897ff0c34 100644
--- a/sys/winks/gstksvideosrc.c
+++ b/sys/winks/gstksvideosrc.c
@@ -167,7 +167,6 @@ static void
gst_ks_video_src_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- GstPadTemplate *pad_template;
gst_element_class_set_details_simple (element_class, "KsVideoSrc",
"Source/Video",
@@ -176,11 +175,9 @@ gst_ks_video_src_base_init (gpointer gclass)
"Haakon Sporsheim <hakon.sporsheim@tandberg.com>\n"
"Andres Colubri <andres.colubri@gmail.com>");
- pad_template =
+ gst_element_class_add_pad_template (element_class,
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- ks_video_get_all_caps ());
- gst_element_class_add_pad_template (element_class, pad_template);
- gst_object_unref (pad_template);
+ ks_video_get_all_caps ()));
}
static void
@@ -756,7 +753,7 @@ gst_ks_video_src_set_clock (GstElement * element, GstClock * clock)
gst_ks_clock_provide_master_clock (priv->ksclock, clock);
GST_OBJECT_UNLOCK (element);
- return TRUE;
+ return GST_ELEMENT_CLASS (element)->set_clock (element, clock);
}
static GstCaps *
diff --git a/sys/winscreencap/gstdx9screencapsrc.c b/sys/winscreencap/gstdx9screencapsrc.c
index 72a04cecd..83bcea277 100644
--- a/sys/winscreencap/gstdx9screencapsrc.c
+++ b/sys/winscreencap/gstdx9screencapsrc.c
@@ -101,7 +101,8 @@ gst_dx9screencapsrc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"DirectX 9 screen capture source", "Source/Video", "Captures screen",
diff --git a/sys/winscreencap/gstgdiscreencapsrc.c b/sys/winscreencap/gstgdiscreencapsrc.c
index a10a2fc00..ff9ea7b72 100644
--- a/sys/winscreencap/gstgdiscreencapsrc.c
+++ b/sys/winscreencap/gstgdiscreencapsrc.c
@@ -97,7 +97,8 @@ gst_gdiscreencapsrc_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_add_static_pad_template (element_class, &src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
gst_element_class_set_details_simple (element_class,
"GDI screen capture source", "Source/Video", "Captures screen",
"Haakon Sporsheim <hakon.sporsheim@tandberg.com>");
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 74e186073..76f39f59e 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -213,7 +213,7 @@ noinst_HEADERS = elements/mxfdemux.h
TESTS = $(check_PROGRAMS)
-AM_CFLAGS = $(GST_CHECK_CFLAGS) $(GST_OPTION_CFLAGS) \
+AM_CFLAGS = $(GST_CFLAGS) $(GST_CHECK_CFLAGS) $(GST_OPTION_CFLAGS) \
-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
LDADD = $(GST_CHECK_LIBS)
@@ -223,7 +223,7 @@ noinst_LTLIBRARIES = libparser.la
libparser_la_SOURCES = elements/parser.c elements/parser.h
libparser_la_CFLAGS = \
-I$(top_srcdir)/tests/check \
- $(GST_CHECK_CFLAGS) $(GST_OPTION_CFLAGS)
+ $(GST_CFLAGS) $(GST_CHECK_CFLAGS) $(GST_OPTION_CFLAGS)
elements_mpegvideoparse_LDADD = libparser.la $(LDADD)
diff --git a/tests/check/elements/asfmux.c b/tests/check/elements/asfmux.c
index abc641f97..c2bfeaf4e 100644
--- a/tests/check/elements/asfmux.c
+++ b/tests/check/elements/asfmux.c
@@ -92,9 +92,7 @@ teardown_src_pad (GstElement * element, const gchar * sinkname)
gchar *padname;
/* clean up floating src pad */
- /* hm, asfmux uses _01 as suffixes for padnames */
- padname = g_strdup (sinkname);
- memcpy (strchr (padname, '%'), "01", 2);
+ padname = g_strdup_printf (sinkname, 1);
if (!(sinkpad = gst_element_get_static_pad (element, padname)))
sinkpad = gst_element_get_request_pad (element, padname);
g_free (padname);
@@ -130,7 +128,7 @@ setup_asfmux (GstStaticPadTemplate * srctemplate, const gchar * sinkname)
asfmux = gst_check_setup_element ("asfmux");
mysrcpad = setup_src_pad (asfmux, srctemplate, NULL, sinkname);
- mysinkpad = gst_check_setup_sink_pad (asfmux, &sinktemplate, NULL);
+ mysinkpad = gst_check_setup_sink_pad (asfmux, &sinktemplate);
gst_pad_set_active (mysrcpad, TRUE);
gst_pad_set_active (mysinkpad, TRUE);
return asfmux;
@@ -181,14 +179,14 @@ check_asfmux_pad (GstStaticPadTemplate * srctemplate,
GST_START_TEST (test_video_pad)
{
- check_asfmux_pad (&srcvideotemplate, VIDEO_CAPS_STRING, "video_%d");
+ check_asfmux_pad (&srcvideotemplate, VIDEO_CAPS_STRING, "video_%u");
}
GST_END_TEST;
GST_START_TEST (test_audio_pad)
{
- check_asfmux_pad (&srcaudiotemplate, AUDIO_CAPS_STRING, "audio_%d");
+ check_asfmux_pad (&srcaudiotemplate, AUDIO_CAPS_STRING, "audio_%u");
}
GST_END_TEST;
diff --git a/tests/check/elements/autoconvert.c b/tests/check/elements/autoconvert.c
index f341a9944..e1fffe00c 100644
--- a/tests/check/elements/autoconvert.c
+++ b/tests/check/elements/autoconvert.c
@@ -115,9 +115,9 @@ GST_START_TEST (test_autoconvert_simple)
set_autoconvert_factories (autoconvert);
- test_src_pad = gst_check_setup_src_pad (autoconvert, &src_factory, NULL);
+ test_src_pad = gst_check_setup_src_pad (autoconvert, &src_factory);
gst_pad_set_active (test_src_pad, TRUE);
- test_sink_pad = gst_check_setup_sink_pad (autoconvert, &sink_factory, NULL);
+ test_sink_pad = gst_check_setup_sink_pad (autoconvert, &sink_factory);
gst_pad_set_active (test_sink_pad, TRUE);
gst_element_set_state (GST_ELEMENT_CAST (autoconvert), GST_STATE_PLAYING);
@@ -206,9 +206,13 @@ static void
test_element1_class_init (TestElement1Class * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstPadTemplate *src_template, *sink_template;
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ src_template = gst_static_pad_template_get (&src_factory);
+ gst_element_class_add_pad_template (element_class, src_template);
+
+ sink_template = gst_static_pad_template_get (&sink_factory);
+ gst_element_class_add_pad_template (element_class, sink_template);
}
static void
@@ -221,9 +225,13 @@ static void
test_element2_class_init (TestElement2Class * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstPadTemplate *src_template, *sink_template;
+
+ src_template = gst_static_pad_template_get (&src_factory);
+ gst_element_class_add_pad_template (element_class, src_template);
- gst_element_class_add_static_pad_template (element_class, &src_factory);
- gst_element_class_add_static_pad_template (element_class, &sink_factory);
+ sink_template = gst_static_pad_template_get (&sink_factory);
+ gst_element_class_add_pad_template (element_class, sink_template);
}
static void
diff --git a/tests/check/elements/baseaudiovisualizer.c b/tests/check/elements/baseaudiovisualizer.c
index f06b53d04..7de009518 100644
--- a/tests/check/elements/baseaudiovisualizer.c
+++ b/tests/check/elements/baseaudiovisualizer.c
@@ -72,10 +72,10 @@ gst_test_scope_base_init (gpointer g_class)
"Visualization",
"Dummy test scope", "Stefan Kost <ensonic@users.sf.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_test_scope_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_test_scope_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_test_scope_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_test_scope_sink_template));
}
static void
@@ -126,8 +126,8 @@ GST_START_TEST (count_in_out)
/* setup up */
elem = gst_check_setup_element ("testscope");
- srcpad = gst_check_setup_src_pad (elem, &srctemplate, NULL);
- sinkpad = gst_check_setup_sink_pad (elem, &sinktemplate, NULL);
+ srcpad = gst_check_setup_src_pad (elem, &srctemplate);
+ sinkpad = gst_check_setup_sink_pad (elem, &sinktemplate);
gst_pad_set_active (srcpad, TRUE);
gst_pad_set_active (sinkpad, TRUE);
fail_unless (gst_element_set_state (elem,
diff --git a/tests/check/elements/camerabin2.c b/tests/check/elements/camerabin2.c
index f39e4aaaf..efdd977f0 100644
--- a/tests/check/elements/camerabin2.c
+++ b/tests/check/elements/camerabin2.c
@@ -38,8 +38,8 @@
#define CAPTURE_COUNT 3
#define VIDEO_DURATION 5
-#define VIDEO_PAD_SUPPORTED_CAPS GST_VIDEO_CAPS_RGB ", width=600, height=480"
-#define IMAGE_PAD_SUPPORTED_CAPS GST_VIDEO_CAPS_RGB ", width=800, height=600"
+#define VIDEO_PAD_SUPPORTED_CAPS "video/x-raw, format=rgb, width=600, height=480"
+#define IMAGE_PAD_SUPPORTED_CAPS "video/x-raw, format=rgb, width=800, height=600"
/* custom test camera src element */
#define GST_TYPE_TEST_CAMERA_SRC \
@@ -74,8 +74,8 @@ struct _GstTestCameraSrcClass
GType gst_test_camera_src_get_type (void);
-GST_BOILERPLATE (GstTestCameraSrc,
- gst_test_camera_src, GstBaseCameraSrc, GST_TYPE_BASE_CAMERA_SRC);
+#define gst_test_camera_src_parent_class parent_class
+G_DEFINE_TYPE (GstTestCameraSrc, gst_test_camera_src, GST_TYPE_BASE_CAMERA_SRC);
static gboolean
gst_test_camera_src_set_mode (GstBaseCameraSrc * src, GstCameraBinMode mode)
@@ -86,51 +86,65 @@ gst_test_camera_src_set_mode (GstBaseCameraSrc * src, GstCameraBinMode mode)
return TRUE;
}
-static GstCaps *
-gst_test_camera_src_get_caps (GstPad * pad)
+static gboolean
+gst_test_camera_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstTestCameraSrc *self = (GstTestCameraSrc *) GST_PAD_PARENT (pad);
GstCaps *result = NULL;
-
- if (pad == self->vfpad) {
- result = gst_caps_new_any ();
- } else if (pad == self->vidpad) {
- result = gst_caps_from_string (VIDEO_PAD_SUPPORTED_CAPS);
- } else if (pad == self->imgpad) {
- result = gst_caps_from_string (IMAGE_PAD_SUPPORTED_CAPS);
- } else {
- g_assert_not_reached ();
+ gboolean ret = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ if (pad == self->vfpad) {
+ result = gst_caps_new_any ();
+ } else if (pad == self->vidpad) {
+ result = gst_caps_from_string (VIDEO_PAD_SUPPORTED_CAPS);
+ } else if (pad == self->imgpad) {
+ result = gst_caps_from_string (IMAGE_PAD_SUPPORTED_CAPS);
+ } else {
+ g_assert_not_reached ();
+ }
+ if (result) {
+ GstCaps *filter;
+
+ gst_query_parse_caps (query, &filter);
+ if (filter) {
+ GstCaps *tmp;
+ tmp = gst_caps_intersect (result, filter);
+ gst_caps_replace (&result, tmp);
+ gst_caps_unref (tmp);
+ }
+ gst_query_set_caps_result (query, result);
+ ret = TRUE;
+ }
+ break;
+ default:
+ break;
}
- return result;
-}
-
-static void
-gst_test_camera_src_base_init (gpointer g_class)
-{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (gstelement_class,
- "Test Camera Src",
- "Camera/Src",
- "Some test camera src",
- "Thiago Santos <thiago.sousa.santos@collabora.co.uk>");
+ return ret;
}
static void
gst_test_camera_src_class_init (GstTestCameraSrcClass * klass)
{
GstBaseCameraSrcClass *gstbasecamera_class;
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
gstbasecamera_class = GST_BASE_CAMERA_SRC_CLASS (klass);
gstbasecamera_class->set_mode = gst_test_camera_src_set_mode;
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "Test Camera Src",
+ "Camera/Src",
+ "Some test camera src",
+ "Thiago Santos <thiago.sousa.santos@collabora.com>");
}
static void
-gst_test_camera_src_init (GstTestCameraSrc * self,
- GstTestCameraSrcClass * g_class)
+gst_test_camera_src_init (GstTestCameraSrc * self)
{
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (parent_class);
GstPadTemplate *template;
/* create pads */
@@ -153,9 +167,9 @@ gst_test_camera_src_init (GstTestCameraSrc * self,
gst_element_add_pad (GST_ELEMENT_CAST (self), self->vidpad);
/* add get caps functions */
- gst_pad_set_getcaps_function (self->vfpad, gst_test_camera_src_get_caps);
- gst_pad_set_getcaps_function (self->vidpad, gst_test_camera_src_get_caps);
- gst_pad_set_getcaps_function (self->imgpad, gst_test_camera_src_get_caps);
+ gst_pad_set_query_function (self->vfpad, gst_test_camera_src_query);
+ gst_pad_set_query_function (self->vidpad, gst_test_camera_src_query);
+ gst_pad_set_query_function (self->imgpad, gst_test_camera_src_query);
}
/* end of custom test camera src element */
@@ -315,9 +329,11 @@ check_preview_image (GstElement * camera, const gchar * filename, gint index)
fail_unless (strcmp (preview_filename, prev_filename) == 0);
}
if (preview_caps) {
- fail_unless (GST_BUFFER_CAPS (preview_buffer) != NULL);
- fail_unless (gst_caps_can_intersect (GST_BUFFER_CAPS (preview_buffer),
- preview_caps));
+ /* TODO porting
+ fail_unless (GST_BUFFER_CAPS (preview_buffer) != NULL);
+ fail_unless (gst_caps_can_intersect (GST_BUFFER_CAPS (preview_buffer),
+ preview_caps));
+ */
}
g_free (prev_filename);
}
@@ -526,7 +542,7 @@ check_file_validity (const gchar * filename, gint num, GstTagList * taglist,
if (width != 0 && height != 0) {
g_signal_emit_by_name (playbin, "get-video-pad", 0, &pad, NULL);
g_assert (pad != NULL);
- caps = gst_pad_get_negotiated_caps (pad);
+ caps = gst_pad_get_current_caps (pad);
g_assert (gst_structure_get_int (gst_caps_get_structure (caps, 0),
"width", &caps_width));
@@ -569,14 +585,14 @@ check_file_validity (const gchar * filename, gint num, GstTagList * taglist,
return TRUE;
}
-static gboolean
-filter_buffer_count (GstPad * pad, GstMiniObject * obj, gpointer data)
+static GstPadProbeReturn
+filter_buffer_count (GstPad * pad, GstPadProbeInfo * info, gpointer data)
{
gint *counter = data;
(*counter)++;
- return TRUE;
+ return GST_PAD_PROBE_OK;
}
static GstMessage *
@@ -982,7 +998,7 @@ GST_START_TEST (test_image_capture_with_tags)
if (!camera)
return;
- taglists[0] = gst_tag_list_new_full (GST_TAG_COMMENT, "test1",
+ taglists[0] = gst_tag_list_new (GST_TAG_COMMENT, "test1",
GST_TAG_GEO_LOCATION_LATITUDE, 36.6, GST_TAG_GEO_LOCATION_LONGITUDE,
-12.5,
GST_TAG_COPYRIGHT, "My copyright notice",
@@ -991,7 +1007,7 @@ GST_START_TEST (test_image_capture_with_tags)
GST_TAG_DESCRIPTION, "some description",
GST_TAG_APPLICATION_NAME, "camerabin2 test",
GST_TAG_GEO_LOCATION_ELEVATION, 300.85, NULL);
- taglists[1] = gst_tag_list_new_full (GST_TAG_COMMENT, "test2",
+ taglists[1] = gst_tag_list_new (GST_TAG_COMMENT, "test2",
GST_TAG_GEO_LOCATION_LATITUDE, 1.6, GST_TAG_GEO_LOCATION_LONGITUDE,
0.0,
GST_TAG_COPYRIGHT, "some cp",
@@ -1000,7 +1016,7 @@ GST_START_TEST (test_image_capture_with_tags)
GST_TAG_DESCRIPTION, "desc",
GST_TAG_APPLICATION_NAME, "another cam test",
GST_TAG_GEO_LOCATION_ELEVATION, 10.0, NULL);
- taglists[2] = gst_tag_list_new_full (GST_TAG_COMMENT, "test3",
+ taglists[2] = gst_tag_list_new (GST_TAG_COMMENT, "test3",
GST_TAG_GEO_LOCATION_LATITUDE, 1.3, GST_TAG_GEO_LOCATION_LONGITUDE,
-5.0,
GST_TAG_COPYRIGHT, "CC",
@@ -1054,9 +1070,9 @@ GST_START_TEST (test_video_capture_with_tags)
if (!camera)
return;
- taglists[0] = gst_tag_list_new_full (GST_TAG_COMMENT, "test1", NULL);
- taglists[1] = gst_tag_list_new_full (GST_TAG_COMMENT, "test2", NULL);
- taglists[2] = gst_tag_list_new_full (GST_TAG_COMMENT, "test3", NULL);
+ taglists[0] = gst_tag_list_new (GST_TAG_COMMENT, "test1", NULL);
+ taglists[1] = gst_tag_list_new (GST_TAG_COMMENT, "test2", NULL);
+ taglists[2] = gst_tag_list_new (GST_TAG_COMMENT, "test3", NULL);
/* set video mode */
g_object_set (camera, "mode", 2, "location", video_filename, NULL);
@@ -1072,7 +1088,7 @@ GST_START_TEST (test_video_capture_with_tags)
profile = gst_encoding_container_profile_new ("qt", "jpeg+qt", caps, NULL);
gst_caps_unref (caps);
- caps = gst_caps_new_simple ("image/jpeg", NULL);
+ caps = gst_caps_new_simple ("image/jpeg", NULL, NULL);
if (!gst_encoding_container_profile_add_profile (profile,
(GstEncodingProfile *) gst_encoding_video_profile_new (caps,
NULL, NULL, 1))) {
@@ -1241,18 +1257,18 @@ GST_START_TEST (test_image_custom_filter)
preview_filter = gst_element_factory_make ("identity", "preview-filter");
pad = gst_element_get_static_pad (vf_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &vf_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &vf_probe_counter, NULL);
gst_object_unref (pad);
pad = gst_element_get_static_pad (image_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &image_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &image_probe_counter, NULL);
gst_object_unref (pad);
pad = gst_element_get_static_pad (preview_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &preview_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &preview_probe_counter, NULL);
gst_object_unref (pad);
/* set still image mode and filters */
@@ -1314,23 +1330,23 @@ GST_START_TEST (test_video_custom_filter)
audio_filter = gst_element_factory_make ("identity", "audio-filter");
pad = gst_element_get_static_pad (vf_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &vf_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &vf_probe_counter, NULL);
gst_object_unref (pad);
pad = gst_element_get_static_pad (video_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &video_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &video_probe_counter, NULL);
gst_object_unref (pad);
pad = gst_element_get_static_pad (audio_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &audio_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &audio_probe_counter, NULL);
gst_object_unref (pad);
pad = gst_element_get_static_pad (preview_filter, "src");
- gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count,
- &preview_probe_counter);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, filter_buffer_count,
+ &preview_probe_counter, NULL);
gst_object_unref (pad);
/* set still image mode and filters */
diff --git a/tests/check/elements/legacyresample.c b/tests/check/elements/legacyresample.c
index 26c572a62..055313b2e 100644
--- a/tests/check/elements/legacyresample.c
+++ b/tests/check/elements/legacyresample.c
@@ -71,8 +71,9 @@ setup_legacyresample (int channels, int inrate, int outrate)
GST_STATE_PAUSED) == GST_STATE_CHANGE_SUCCESS,
"could not set to paused");
- mysrcpad = gst_check_setup_src_pad (legacyresample, &srctemplate, caps);
- gst_pad_set_caps (mysrcpad, caps);
+ mysrcpad = gst_check_setup_src_pad (legacyresample, &srctemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ fail_unless (gst_pad_set_caps (mysrcpad, caps));
gst_caps_unref (caps);
caps = gst_caps_from_string (RESAMPLE_CAPS_TEMPLATE_STRING);
@@ -81,16 +82,14 @@ setup_legacyresample (int channels, int inrate, int outrate)
"rate", G_TYPE_INT, outrate, NULL);
fail_unless (gst_caps_is_fixed (caps));
- mysinkpad = gst_check_setup_sink_pad (legacyresample, &sinktemplate, caps);
+ mysinkpad = gst_check_setup_sink_pad (legacyresample, &sinktemplate);
+ gst_pad_set_active (mysinkpad, TRUE);
/* this installs a getcaps func that will always return the caps we set
* later */
- gst_pad_set_caps (mysinkpad, caps);
+ fail_unless (gst_pad_set_caps (mysinkpad, caps));
gst_pad_use_fixed_caps (mysinkpad);
gst_caps_unref (caps);
- gst_pad_set_active (mysinkpad, TRUE);
- gst_pad_set_active (mysrcpad, TRUE);
-
return legacyresample;
}
diff --git a/tests/check/elements/mplex.c b/tests/check/elements/mplex.c
index 356de173f..d9e21809a 100644
--- a/tests/check/elements/mplex.c
+++ b/tests/check/elements/mplex.c
@@ -182,7 +182,7 @@ setup_mplex (void)
GST_DEBUG ("setup_mplex");
mplex = gst_check_setup_element ("mplex");
- mysrcpad = setup_src_pad (mplex, &srctemplate, NULL, "audio_%d");
+ mysrcpad = setup_src_pad (mplex, &srctemplate, NULL, "audio_%u");
mysinkpad = gst_check_setup_sink_pad (mplex, &sinktemplate, NULL);
gst_pad_set_active (mysrcpad, TRUE);
gst_pad_set_active (mysinkpad, TRUE);
@@ -205,7 +205,7 @@ cleanup_mplex (GstElement * mplex)
gst_pad_set_active (mysrcpad, FALSE);
gst_pad_set_active (mysinkpad, FALSE);
- teardown_src_pad (mplex, "audio_%d");
+ teardown_src_pad (mplex, "audio_%u");
gst_check_teardown_sink_pad (mplex);
gst_check_teardown_element (mplex);
diff --git a/tests/check/elements/parser.c b/tests/check/elements/parser.c
index 392f3ce57..70b05b035 100644
--- a/tests/check/elements/parser.c
+++ b/tests/check/elements/parser.c
@@ -55,16 +55,19 @@ buffer_new (const unsigned char *buffer_data, guint size)
buffer = gst_buffer_new_and_alloc (size);
if (buffer_data) {
- memcpy (GST_BUFFER_DATA (buffer), buffer_data, size);
+ gst_buffer_fill (buffer, 0, buffer_data, size);
} else {
guint i;
+ guint8 *data;
+
/* Create a recognizable pattern (loop 0x00 -> 0xff) in the data block */
+ data = gst_buffer_map (buffer, NULL, NULL, GST_MAP_WRITE);
for (i = 0; i < size; i++) {
- GST_BUFFER_DATA (buffer)[i] = i % 0x100;
+ data[i] = i % 0x100;
}
+ gst_buffer_unmap (buffer, data, size);
}
- gst_buffer_set_caps (buffer, GST_PAD_CAPS (srcpad));
GST_BUFFER_OFFSET (buffer) = dataoffset;
dataoffset += size;
return buffer;
@@ -77,7 +80,7 @@ static void
buffer_count_size (void *buffer, void *user_data)
{
guint *sum = (guint *) user_data;
- *sum += GST_BUFFER_SIZE (buffer);
+ *sum += gst_buffer_get_size (buffer);
}
/*
@@ -99,7 +102,7 @@ buffer_verify_data (void *buffer, void *user_data)
if (ctx_verify_buffer)
ctx_verify_buffer (vdata, buffer);
vdata->buffer_counter++;
- vdata->offset_counter += GST_BUFFER_SIZE (buffer);
+ vdata->offset_counter += gst_buffer_get_size (buffer);
if (vdata->buffer_counter == vdata->discard) {
vdata->buffer_counter = 0;
vdata->discard = 0;
@@ -108,8 +111,8 @@ buffer_verify_data (void *buffer, void *user_data)
}
if (!ctx_verify_buffer || !ctx_verify_buffer (vdata, buffer)) {
- fail_unless (GST_BUFFER_SIZE (buffer) == vdata->data_to_verify_size);
- fail_unless (memcmp (GST_BUFFER_DATA (buffer), vdata->data_to_verify,
+ fail_unless (gst_buffer_get_size (buffer) == vdata->data_to_verify_size);
+ fail_unless (gst_buffer_memcmp (buffer, 0, vdata->data_to_verify,
vdata->data_to_verify_size) == 0);
}
@@ -125,14 +128,8 @@ buffer_verify_data (void *buffer, void *user_data)
fail_unless (GST_BUFFER_OFFSET (buffer) == vdata->offset_counter);
}
- if (vdata->caps) {
- GST_LOG ("%" GST_PTR_FORMAT " = %" GST_PTR_FORMAT " ?",
- GST_BUFFER_CAPS (buffer), vdata->caps);
- fail_unless (gst_caps_is_equal (GST_BUFFER_CAPS (buffer), vdata->caps));
- }
-
vdata->ts_counter += GST_BUFFER_DURATION (buffer);
- vdata->offset_counter += GST_BUFFER_SIZE (buffer);
+ vdata->offset_counter += gst_buffer_get_size (buffer);
vdata->buffer_counter++;
}
@@ -150,10 +147,14 @@ setup_element (const gchar * factory, ElementSetup setup,
} else {
element = gst_check_setup_element (factory);
}
- srcpad = gst_check_setup_src_pad (element, src_template, src_caps);
- sinkpad = gst_check_setup_sink_pad (element, sink_template, sink_caps);
+ srcpad = gst_check_setup_src_pad (element, src_template);
+ sinkpad = gst_check_setup_sink_pad (element, sink_template);
gst_pad_set_active (srcpad, TRUE);
gst_pad_set_active (sinkpad, TRUE);
+ if (src_caps)
+ fail_unless (gst_pad_set_caps (srcpad, src_caps));
+ if (sink_caps)
+ fail_unless (gst_pad_set_caps (sinkpad, sink_caps));
bus = gst_bus_new ();
gst_element_set_bus (element, bus);
@@ -246,14 +247,8 @@ gst_parser_test_run (GstParserTest * test, GstCaps ** out_caps)
if (!k)
buffer = buffer_new (test->series[j].data, test->series[j].size);
else {
- GstCaps *caps = gst_buffer_get_caps (buffer);
-
buffer = gst_buffer_join (buffer,
buffer_new (test->series[j].data, test->series[j].size));
- if (caps) {
- gst_buffer_set_caps (buffer, caps);
- gst_caps_unref (caps);
- }
}
}
fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
@@ -292,7 +287,7 @@ gst_parser_test_run (GstParserTest * test, GstCaps ** out_caps)
fail_unless_equals_int (datasum, size);
}
- src_caps = gst_pad_get_negotiated_caps (sinkpad);
+ src_caps = gst_pad_get_current_caps (sinkpad);
GST_LOG ("output caps: %" GST_PTR_FORMAT, src_caps);
if (test->sink_caps) {
diff --git a/tests/check/elements/vp8dec.c b/tests/check/elements/vp8dec.c
index 30b010d14..4d7da4487 100644
--- a/tests/check/elements/vp8dec.c
+++ b/tests/check/elements/vp8dec.c
@@ -76,10 +76,11 @@ setup_vp8dec (const gchar * src_caps_str)
gst_element_add_pad (bin, ghostpad);
gst_object_unref (targetpad);
- srcpad = gst_check_setup_src_pad (bin, &srctemplate, srccaps);
- sinkpad = gst_check_setup_sink_pad (bin, &sinktemplate, NULL);
+ srcpad = gst_check_setup_src_pad (bin, &srctemplate);
+ sinkpad = gst_check_setup_sink_pad (bin, &sinktemplate);
gst_pad_set_active (srcpad, TRUE);
gst_pad_set_active (sinkpad, TRUE);
+ fail_unless (gst_pad_set_caps (srcpad, srccaps));
bus = gst_bus_new ();
gst_element_set_bus (bin, bus);
diff --git a/tests/check/elements/vp8enc.c b/tests/check/elements/vp8enc.c
index 1008c9ba5..d9c1df69f 100644
--- a/tests/check/elements/vp8enc.c
+++ b/tests/check/elements/vp8enc.c
@@ -51,10 +51,11 @@ setup_vp8enc (const gchar * src_caps_str)
vp8enc = gst_check_setup_element ("vp8enc");
fail_unless (vp8enc != NULL);
- srcpad = gst_check_setup_src_pad (vp8enc, &srctemplate, srccaps);
- sinkpad = gst_check_setup_sink_pad (vp8enc, &sinktemplate, NULL);
+ srcpad = gst_check_setup_src_pad (vp8enc, &srctemplate);
+ sinkpad = gst_check_setup_sink_pad (vp8enc, &sinktemplate);
gst_pad_set_active (srcpad, TRUE);
gst_pad_set_active (sinkpad, TRUE);
+ fail_unless (gst_pad_set_caps (srcpad, srccaps));
bus = gst_bus_new ();
gst_element_set_bus (vp8enc, bus);
diff --git a/tests/check/pipelines/colorspace.c b/tests/check/pipelines/colorspace.c
index 3704e86e3..1acb4ab67 100644
--- a/tests/check/pipelines/colorspace.c
+++ b/tests/check/pipelines/colorspace.c
@@ -199,17 +199,16 @@ colorspace_compare (gint width, gint height, gboolean comp)
for (j = 0; j < gst_caps_get_size (caps); j++) {
GstCaps *in_caps, *out_caps;
GstStructure *s;
- guint32 fourcc;
+ const gchar *fourcc;
in_caps = gst_caps_copy_nth (caps, i);
out_caps = gst_caps_copy_nth (caps, j);
/* FIXME remove if videotestsrc and video format handle these properly */
s = gst_caps_get_structure (in_caps, 0);
- if (gst_structure_get_fourcc (s, "format", &fourcc)) {
- if (fourcc == GST_MAKE_FOURCC ('Y', 'U', 'V', '9') ||
- fourcc == GST_MAKE_FOURCC ('Y', 'V', 'U', '9') ||
- fourcc == GST_MAKE_FOURCC ('v', '2', '1', '6')) {
+ if ((fourcc = gst_structure_get_string (s, "format"))) {
+ if (!strcmp (fourcc, "YUV9") ||
+ !strcmp (fourcc, "YVU9") || !strcmp (fourcc, "v216")) {
gst_caps_unref (in_caps);
gst_caps_unref (out_caps);
continue;
diff --git a/tests/examples/camerabin/Makefile.am b/tests/examples/camerabin/Makefile.am
index 9d74d91d7..aa9f23f7b 100644
--- a/tests/examples/camerabin/Makefile.am
+++ b/tests/examples/camerabin/Makefile.am
@@ -15,6 +15,7 @@ gst_camera_LDADD = \
$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-@GST_MAJORMINOR@.la \
$(GST_PLUGINS_BASE_LIBS) \
-lgstinterfaces-@GST_MAJORMINOR@ \
+ -lgstvideo-@GST_MAJORMINOR@ \
$(GST_LIBS) \
$(GTK_LIBS) \
$(GMODULE_EXPORT_LIBS)
@@ -40,6 +41,7 @@ gst_camerabin_test_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUG
gst_camerabin_test_LDADD = \
$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-@GST_MAJORMINOR@.la \
-lgstinterfaces-@GST_MAJORMINOR@ \
+ -lgstvideo-@GST_MAJORMINOR@ \
$(GST_LIBS) \
$(GST_PLUGINS_BASE_LIBS) \
$(X11_LIBS)
diff --git a/tests/examples/camerabin/gst-camera-perf.c b/tests/examples/camerabin/gst-camera-perf.c
index c5554a0e3..1b1c9d868 100644
--- a/tests/examples/camerabin/gst-camera-perf.c
+++ b/tests/examples/camerabin/gst-camera-perf.c
@@ -171,15 +171,15 @@ static const gchar *test_names[TEST_CASES] = {
static void print_result (void);
static gboolean run_test (gpointer user_data);
static gboolean setup_add_pad_probe (GstElement * elem, const gchar * pad_name,
- GCallback handler, gpointer data);
+ GstPadProbeCallback handler, gpointer data);
/*
* Callbacks
*/
-static gboolean
-pad_has_buffer (GstPad * pad, GstBuffer * buf, gpointer user_data)
+static GstPadProbeReturn
+pad_has_buffer (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
{
gboolean *signal_sink = (gboolean *) user_data;
gboolean print_and_restart = FALSE;
@@ -209,7 +209,7 @@ pad_has_buffer (GstPad * pad, GstBuffer * buf, gpointer user_data)
print_result ();
g_idle_add ((GSourceFunc) run_test, NULL);
}
- return TRUE;
+ return GST_PAD_PROBE_OK;
}
static void
@@ -227,8 +227,7 @@ element_added (GstBin * bin, GstElement * element, gpointer user_data)
if (elem) {
need_vmux_pad_probe = FALSE;
GST_INFO_OBJECT (elem, "got default video muxer");
- if (setup_add_pad_probe (elem, "src", (GCallback) pad_has_buffer,
- &signal_vid_sink)) {
+ if (setup_add_pad_probe (elem, "src", pad_has_buffer, &signal_vid_sink)) {
/* enable test */
target[8] = test_09_taget;
}
@@ -239,8 +238,7 @@ element_added (GstBin * bin, GstElement * element, gpointer user_data)
if (elem) {
need_ienc_pad_probe = FALSE;
GST_INFO_OBJECT (elem, "got default image encoder");
- if (setup_add_pad_probe (elem, "src", (GCallback) pad_has_buffer,
- &signal_img_enc)) {
+ if (setup_add_pad_probe (elem, "src", pad_has_buffer, &signal_img_enc)) {
/* enable test */
target[5] = test_06_taget;
}
@@ -480,7 +478,7 @@ cleanup_pipeline (void)
static gboolean
setup_add_pad_probe (GstElement * elem, const gchar * pad_name,
- GCallback handler, gpointer data)
+ GstPadProbeCallback handler, gpointer data)
{
GstPad *pad = NULL;
@@ -489,7 +487,8 @@ setup_add_pad_probe (GstElement * elem, const gchar * pad_name,
return FALSE;
}
- gst_pad_add_buffer_probe (pad, (GCallback) handler, data);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER,
+ handler, data, NULL);
gst_object_unref (pad);
return TRUE;
@@ -567,13 +566,12 @@ setup_pipeline (void)
/* set properties */
g_object_set (camera_bin, "filename", filename->str, NULL);
- if (src_csp && strlen (src_csp) == 4) {
+ if (src_csp) {
GstCaps *filter_caps;
/* FIXME: why do we need to set this? */
- filter_caps = gst_caps_new_simple ("video/x-raw-yuv",
- "format", GST_TYPE_FOURCC,
- GST_MAKE_FOURCC (src_csp[0], src_csp[1], src_csp[2], src_csp[3]), NULL);
+ filter_caps = gst_caps_new_simple ("video/x-raw",
+ "format", G_TYPE_STRING, src_csp, NULL);
if (filter_caps) {
g_object_set (camera_bin, "filter-caps", filter_caps, NULL);
gst_caps_unref (filter_caps);
@@ -589,8 +587,7 @@ setup_pipeline (void)
/* connect signal handlers */
g_assert (sink);
- if (!setup_add_pad_probe (sink, "sink", (GCallback) pad_has_buffer,
- &signal_vf_sink)) {
+ if (!setup_add_pad_probe (sink, "sink", pad_has_buffer, &signal_vf_sink)) {
goto error;
}
if (!vmux) {
@@ -603,8 +600,7 @@ setup_pipeline (void)
}
}
if (vmux) {
- if (!setup_add_pad_probe (vmux, "src", (GCallback) pad_has_buffer,
- &signal_vid_sink)) {
+ if (!setup_add_pad_probe (vmux, "src", pad_has_buffer, &signal_vid_sink)) {
goto error;
}
}
@@ -618,8 +614,7 @@ setup_pipeline (void)
}
}
if (ienc) {
- if (!setup_add_pad_probe (ienc, "src", (GCallback) pad_has_buffer,
- &signal_img_enc)) {
+ if (!setup_add_pad_probe (ienc, "src", pad_has_buffer, &signal_img_enc)) {
goto error;
}
}
diff --git a/tests/examples/camerabin/gst-camera.c b/tests/examples/camerabin/gst-camera.c
index 80a31217a..e5e48e68f 100644
--- a/tests/examples/camerabin/gst-camera.c
+++ b/tests/examples/camerabin/gst-camera.c
@@ -32,8 +32,8 @@
#include "gst-camera.h"
#include <gst/gst.h>
-#include <gst/interfaces/xoverlay.h>
-#include <gst/interfaces/colorbalance.h>
+#include <gst/video/videooverlay.h>
+#include <gst/video/colorbalance.h>
#include <gst/interfaces/photography.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
@@ -219,8 +219,7 @@ handle_element_message (GstMessage * msg)
const GValue *image;
GstBuffer *buf = NULL;
guint8 *data = NULL;
- gchar *caps_string;
- guint size = 0;
+ gsize size = 0;
gchar *filename = NULL;
FILE *f = NULL;
size_t written;
@@ -232,8 +231,6 @@ handle_element_message (GstMessage * msg)
image = gst_structure_get_value (st, "buffer");
if (image) {
buf = gst_value_get_buffer (image);
- data = GST_BUFFER_DATA (buf);
- size = GST_BUFFER_SIZE (buf);
if (g_str_equal (gst_structure_get_name (st), "raw-image")) {
filename = g_strdup_printf ("test_%04u.raw", num_pics);
} else if (g_str_equal (gst_structure_get_name (st), "preview-image")) {
@@ -243,13 +240,12 @@ handle_element_message (GstMessage * msg)
g_print ("unknown buffer received\n");
return;
}
- caps_string = gst_caps_to_string (GST_BUFFER_CAPS (buf));
- g_print ("writing buffer to %s, buffer caps: %s\n",
- filename, caps_string);
- g_free (caps_string);
+ g_print ("writing buffer to %s\n", filename);
f = g_fopen (filename, "w");
if (f) {
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
written = fwrite (data, size, 1, f);
+ gst_buffer_unmap (buf, data, size);
if (!written) {
g_print ("errro writing file\n");
}
@@ -270,11 +266,11 @@ my_bus_sync_callback (GstBus * bus, GstMessage * message, gpointer data)
if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
return GST_BUS_PASS;
- if (!gst_structure_has_name (message->structure, "prepare-xwindow-id"))
+ if (!gst_message_has_name (message, "prepare-xwindow-id"))
return GST_BUS_PASS;
/* FIXME: make sure to get XID in main thread */
- gst_x_overlay_set_window_handle (GST_X_OVERLAY (message->src),
+ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (message->src),
#if GTK_CHECK_VERSION (2, 91, 6)
GDK_WINDOW_XID (gtk_widget_get_window (ui_drawing)));
#else
@@ -465,7 +461,7 @@ me_gst_setup_pipeline_create_post_bin (const gchar * post, gboolean video)
}
caps = gst_caps_new_simple ("video/x-raw-yuv",
- "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('I', '4', '2', '0'), NULL);
+ "format", G_TYPE_STRING, "I420", NULL);
g_object_set (G_OBJECT (filter), "caps", caps, NULL);
gst_caps_unref (caps);
@@ -1110,7 +1106,7 @@ create_menu_items_from_structure (GstStructure * structure)
GString *item_str = NULL;
guint j, num_items_created = 0, num_framerates = 1;
gint w = 0, h = 0, n = 0, d = 1;
- guint32 fourcc = 0;
+ const gchar *format = NULL;
g_return_val_if_fail (structure != NULL, 0);
@@ -1120,8 +1116,8 @@ create_menu_items_from_structure (GstStructure * structure)
if (0 == strcmp (structure_name, "video/x-raw-yuv")) {
item_str = g_string_new_len ("", 128);
- if (gst_structure_has_field_typed (structure, "format", GST_TYPE_FOURCC)) {
- gst_structure_get_fourcc (structure, "format", &fourcc);
+ if (gst_structure_has_field_typed (structure, "format", G_TYPE_STRING)) {
+ format = gst_structure_get_string (structure, "format");
}
if (gst_structure_has_field_typed (structure, "width", GST_TYPE_INT_RANGE)) {
@@ -1170,15 +1166,14 @@ create_menu_items_from_structure (GstStructure * structure)
d = gst_value_get_fraction_denominator (item);
}
g_string_assign (item_str, structure_name);
- g_string_append_printf (item_str, " (%" GST_FOURCC_FORMAT ")",
- GST_FOURCC_ARGS (fourcc));
+ g_string_append_printf (item_str, " (%s)", format);
g_string_append_printf (item_str, ", %dx%d at %d/%d", w, h, n, d);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, item_str->str, -1);
video_caps =
- gst_caps_new_simple (structure_name, "format", GST_TYPE_FOURCC,
- fourcc,
+ gst_caps_new_simple (structure_name, "format", G_TYPE_STRING,
+ format,
"width", G_TYPE_INT, w, "height", G_TYPE_INT, h,
"framerate", GST_TYPE_FRACTION, n, d, NULL);
video_caps_list = g_list_append (video_caps_list, video_caps);
diff --git a/tests/examples/camerabin/gst-camerabin-test.c b/tests/examples/camerabin/gst-camerabin-test.c
index 27037fad3..e877de1e9 100644
--- a/tests/examples/camerabin/gst-camerabin-test.c
+++ b/tests/examples/camerabin/gst-camerabin-test.c
@@ -89,7 +89,7 @@
#define GST_USE_UNSTABLE_API 1
#include <gst/gst.h>
-#include <gst/interfaces/xoverlay.h>
+#include <gst/video/videooverlay.h>
#include <gst/interfaces/photography.h>
#include <string.h>
#include <sys/time.h>
@@ -240,8 +240,7 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
const GValue *image;
GstBuffer *buf = NULL;
guint8 *data_buf = NULL;
- gchar *caps_string;
- guint size = 0;
+ gsize size = 0;
gchar *preview_filename = NULL;
FILE *f = NULL;
size_t written;
@@ -250,10 +249,10 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
case GST_MESSAGE_ELEMENT:{
st = gst_message_get_structure (message);
if (st) {
- if (gst_structure_has_name (message->structure, "prepare-xwindow-id")) {
+ if (gst_structure_has_name (st, "prepare-xwindow-id")) {
if (!no_xwindow && window) {
- gst_x_overlay_set_window_handle (GST_X_OVERLAY (GST_MESSAGE_SRC
- (message)), window);
+ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY
+ (GST_MESSAGE_SRC (message)), window);
gst_message_unref (message);
message = NULL;
return GST_BUS_DROP;
@@ -266,13 +265,10 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
image = gst_structure_get_value (st, "buffer");
if (image) {
buf = gst_value_get_buffer (image);
- data_buf = GST_BUFFER_DATA (buf);
- size = GST_BUFFER_SIZE (buf);
+ data_buf = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
preview_filename = g_strdup_printf ("test_vga.rgb");
- caps_string = gst_caps_to_string (GST_BUFFER_CAPS (buf));
- g_print ("writing buffer to %s, elapsed: %.2fs, buffer caps: %s\n",
- preview_filename, g_timer_elapsed (timer, NULL), caps_string);
- g_free (caps_string);
+ g_print ("writing buffer to %s, elapsed: %.2fs\n",
+ preview_filename, g_timer_elapsed (timer, NULL));
f = g_fopen (preview_filename, "w");
if (f) {
written = fwrite (data_buf, size, 1, f);
@@ -284,6 +280,7 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
g_print ("error opening file for raw image writing\n");
}
g_free (preview_filename);
+ gst_buffer_unmap (buf, data_buf, size);
}
}
}
@@ -526,12 +523,11 @@ setup_pipeline (void)
/* set properties */
if (src_format) {
filter_caps = gst_caps_from_string (src_format);
- } else if (src_csp && strlen (src_csp) == 4) {
+ } else if (src_csp) {
/* Set requested colorspace format, this is needed if the default
colorspace negotiated for viewfinder doesn't match with e.g. encoders. */
- filter_caps = gst_caps_new_simple ("video/x-raw-yuv",
- "format", GST_TYPE_FOURCC,
- GST_MAKE_FOURCC (src_csp[0], src_csp[1], src_csp[2], src_csp[3]), NULL);
+ filter_caps = gst_caps_new_simple ("video/x-raw",
+ "format", G_TYPE_STRING, src_csp, NULL);
}
if (filter_caps) {
@@ -646,8 +642,7 @@ run_pipeline (gpointer user_data)
g_object_get (camera_bin, "video-source", &video_source, NULL);
if (video_source) {
- if (GST_IS_ELEMENT (video_source) &&
- gst_element_implements_interface (video_source, GST_TYPE_PHOTOGRAPHY)) {
+ if (GST_IS_ELEMENT (video_source) && GST_IS_PHOTOGRAPHY (video_source)) {
/* Set GstPhotography interface options. If option not given as
command-line parameter use default of the source element. */
if (scene_mode != SCENE_MODE_NONE)
diff --git a/tests/examples/camerabin2/Makefile.am b/tests/examples/camerabin2/Makefile.am
index 6b38bd278..807a22924 100644
--- a/tests/examples/camerabin2/Makefile.am
+++ b/tests/examples/camerabin2/Makefile.am
@@ -15,6 +15,7 @@ gst_camera2_LDADD = \
$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-@GST_MAJORMINOR@.la \
$(GST_PLUGINS_BASE_LIBS) \
-lgstinterfaces-@GST_MAJORMINOR@ \
+ -lgstvideo-@GST_MAJORMINOR@ \
$(GST_LIBS) \
$(GTK_LIBS) \
$(GMODULE_EXPORT_LIBS)
diff --git a/tests/examples/camerabin2/gst-camera2.c b/tests/examples/camerabin2/gst-camera2.c
index bd612e701..c8cc8dc84 100644
--- a/tests/examples/camerabin2/gst-camera2.c
+++ b/tests/examples/camerabin2/gst-camera2.c
@@ -32,7 +32,7 @@
#include "gst-camera2.h"
#include <gst/gst.h>
-#include <gst/interfaces/xoverlay.h>
+#include <gst/video/videooverlay.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
@@ -92,12 +92,12 @@ bus_sync_callback (GstBus * bus, GstMessage * message, gpointer data)
if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
return GST_BUS_PASS;
- if (!gst_structure_has_name (message->structure, "prepare-xwindow-id"))
+ if (!gst_message_has_name (message, "prepare-xwindow-id"))
return GST_BUS_PASS;
/* FIXME: make sure to get XID in main thread */
ui_drawing = GTK_WIDGET (gtk_builder_get_object (builder, "viewfinderArea"));
- gst_x_overlay_set_window_handle (GST_X_OVERLAY (message->src),
+ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (message->src),
#if GTK_CHECK_VERSION (2, 91, 6)
GDK_WINDOW_XID (gtk_widget_get_window (ui_drawing)));
#else
diff --git a/tests/examples/camerabin2/gst-camerabin2-test.c b/tests/examples/camerabin2/gst-camerabin2-test.c
index f112dbcb3..952dadfb2 100644
--- a/tests/examples/camerabin2/gst-camerabin2-test.c
+++ b/tests/examples/camerabin2/gst-camerabin2-test.c
@@ -105,7 +105,7 @@
#define GST_USE_UNSTABLE_API 1
#include <gst/gst.h>
-#include <gst/interfaces/xoverlay.h>
+#include <gst/video/videooverlay.h>
#include <gst/interfaces/photography.h>
#include <string.h>
#include <sys/time.h>
@@ -311,8 +311,8 @@ create_host_window (void)
}
}
-static gboolean
-camera_src_get_timestamp_probe (GstPad * pad, GstMiniObject * obj,
+static GstPadProbeReturn
+camera_src_get_timestamp_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer udata)
{
CaptureTiming *timing;
@@ -320,13 +320,11 @@ camera_src_get_timestamp_probe (GstPad * pad, GstMiniObject * obj,
timing = (CaptureTiming *) g_list_first (capture_times)->data;
timing->camera_capture = gst_util_get_timestamp ();
- gst_pad_remove_data_probe (pad, camera_probe_id);
-
- return TRUE;
+ return GST_PAD_PROBE_REMOVE;
}
-static gboolean
-viewfinder_get_timestamp_probe (GstPad * pad, GstMiniObject * obj,
+static GstPadProbeReturn
+viewfinder_get_timestamp_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer udata)
{
CaptureTiming *timing;
@@ -334,9 +332,7 @@ viewfinder_get_timestamp_probe (GstPad * pad, GstMiniObject * obj,
timing = (CaptureTiming *) g_list_first (capture_times)->data;
timing->precapture = gst_util_get_timestamp ();
- gst_pad_remove_data_probe (pad, viewfinder_probe_id);
-
- return TRUE;
+ return GST_PAD_PROBE_REMOVE;
}
static GstBusSyncReply
@@ -346,8 +342,7 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
const GValue *image;
GstBuffer *buf = NULL;
guint8 *data_buf = NULL;
- gchar *caps_string;
- guint size = 0;
+ gsize size = 0;
gchar *preview_filename = NULL;
FILE *f = NULL;
size_t written;
@@ -356,10 +351,10 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
case GST_MESSAGE_ELEMENT:{
st = gst_message_get_structure (message);
if (st) {
- if (gst_structure_has_name (message->structure, "prepare-xwindow-id")) {
+ if (gst_message_has_name (message, "prepare-xwindow-id")) {
if (!no_xwindow && window) {
- gst_x_overlay_set_window_handle (GST_X_OVERLAY (GST_MESSAGE_SRC
- (message)), window);
+ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY
+ (GST_MESSAGE_SRC (message)), window);
gst_message_unref (message);
message = NULL;
return GST_BUS_DROP;
@@ -376,8 +371,9 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
/* set up probe to check when the viewfinder gets data */
GstPad *pad = gst_element_get_static_pad (viewfinder_sink, "sink");
- viewfinder_probe_id = gst_pad_add_buffer_probe (pad,
- (GCallback) viewfinder_get_timestamp_probe, NULL);
+ viewfinder_probe_id =
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
+ viewfinder_get_timestamp_probe, NULL, NULL);
gst_object_unref (pad);
}
@@ -386,14 +382,12 @@ sync_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
image = gst_structure_get_value (st, "buffer");
if (image) {
buf = gst_value_get_buffer (image);
- data_buf = GST_BUFFER_DATA (buf);
- size = GST_BUFFER_SIZE (buf);
preview_filename = g_strdup_printf ("test_vga.rgb");
- caps_string = gst_caps_to_string (GST_BUFFER_CAPS (buf));
- g_free (caps_string);
f = g_fopen (preview_filename, "w");
if (f) {
+ data_buf = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
written = fwrite (data_buf, size, 1, f);
+ gst_buffer_unmap (buf, data_buf, size);
if (!written) {
g_print ("error writing file\n");
}
@@ -915,8 +909,7 @@ run_pipeline (gpointer user_data)
g_object_get (camerabin, "camera-source", &video_source, NULL);
if (video_source) {
- if (GST_IS_ELEMENT (video_source) &&
- gst_element_implements_interface (video_source, GST_TYPE_PHOTOGRAPHY)) {
+ if (GST_IS_ELEMENT (video_source) && GST_IS_PHOTOGRAPHY (video_source)) {
/* Set GstPhotography interface options. If option not given as
command-line parameter use default of the source element. */
if (scene_mode != SCENE_MODE_NONE)
@@ -953,8 +946,8 @@ run_pipeline (gpointer user_data)
GstPad *pad;
pad = gst_element_get_static_pad (video_source, "imgsrc");
- camera_probe_id = gst_pad_add_buffer_probe (pad,
- (GCallback) camera_src_get_timestamp_probe, NULL);
+ camera_probe_id = gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
+ camera_src_get_timestamp_probe, NULL, NULL);
gst_object_unref (pad);
}
diff --git a/tests/examples/mxf/mxfdemux-structure.c b/tests/examples/mxf/mxfdemux-structure.c
index 6f735c4da..03ab7b920 100644
--- a/tests/examples/mxf/mxfdemux-structure.c
+++ b/tests/examples/mxf/mxfdemux-structure.c
@@ -30,8 +30,14 @@ static gchar *
g_value_to_string (const GValue * val)
{
if (G_VALUE_TYPE (val) == GST_TYPE_BUFFER) {
- const GstBuffer *buf = gst_value_get_buffer (val);
- gchar *ret = g_base64_encode (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
+ GstBuffer *buf = gst_value_get_buffer (val);
+ gpointer data;
+ gsize size;
+ gchar *ret;
+
+ data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+ ret = g_base64_encode (data, size);
+ gst_buffer_unmap (buf, data, size);
return ret;
} else {
diff --git a/tests/examples/opencv/gst_element_print_properties.c b/tests/examples/opencv/gst_element_print_properties.c
index 4192fe84e..e91188b52 100644
--- a/tests/examples/opencv/gst_element_print_properties.c
+++ b/tests/examples/opencv/gst_element_print_properties.c
@@ -403,8 +403,8 @@ gst_element_print_properties (GstElement * element)
pfraction->def_num, pfraction->def_den);
}
- else if (GST_IS_PARAM_SPEC_MINI_OBJECT (param)) {
- g_print ("%-*.*s | MiniObject of type \"%s\"",
+ else if (G_IS_PARAM_SPEC_BOXED (param)) {
+ g_print ("%-*.*s | Boxed of type \"%s\"",
c3w, c3w,
g_type_name (param->value_type), g_type_name (param->value_type));
}
diff --git a/tests/examples/opencv/gstmotioncells_dynamic_test.c b/tests/examples/opencv/gstmotioncells_dynamic_test.c
index 83834065b..56e359f9c 100644
--- a/tests/examples/opencv/gstmotioncells_dynamic_test.c
+++ b/tests/examples/opencv/gstmotioncells_dynamic_test.c
@@ -26,7 +26,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
-#include <gst/interfaces/propertyprobe.h>
#include "gstmotioncells_dynamic_test.h"
#include "gst_element_print_properties.h"
diff --git a/tests/examples/scaletempo/demo-player.c b/tests/examples/scaletempo/demo-player.c
index 0adf0e1f0..8ff0fc521 100644
--- a/tests/examples/scaletempo/demo-player.c
+++ b/tests/examples/scaletempo/demo-player.c
@@ -68,19 +68,19 @@ no_pipeline (DemoPlayer * player)
return FALSE;
}
-static gboolean
-demo_player_event_listener (GstElement * host, GstEvent * event, gpointer data)
+static GstPadProbeReturn
+demo_player_event_listener (GstPad * pad, GstPadProbeInfo * info, gpointer data)
{
+ GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
DemoPlayer *player = DEMO_PLAYER (data);
DemoPlayerPrivate *priv = DEMO_PLAYER_GET_PRIVATE (player);
- if (GST_EVENT_TYPE (event) == GST_EVENT_NEWSEGMENT) {
- gdouble rate, applied_rate;
+ if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+ const GstSegment *segment;
gdouble new_rate;
- gst_event_parse_new_segment_full (event, NULL, &rate, &applied_rate, NULL,
- NULL, NULL, NULL);
- new_rate = rate * applied_rate;
+ gst_event_parse_segment (event, &segment);
+ new_rate = segment->rate * segment->applied_rate;
if (priv->rate != new_rate) {
priv->rate = new_rate;
g_signal_emit (player, demo_player_signals[SIGNAL_RATE_CHANGE], 0,
@@ -88,7 +88,7 @@ demo_player_event_listener (GstElement * host, GstEvent * event, gpointer data)
}
}
- return TRUE;
+ return GST_PAD_PROBE_OK;
}
static void
@@ -174,8 +174,9 @@ demo_player_build_pipeline (DemoPlayer * player)
LINK_ELEMENTS (format, resample);
LINK_ELEMENTS (resample, asink);
- gst_pad_add_event_probe (gst_element_get_static_pad (asink, "sink"),
- G_CALLBACK (demo_player_event_listener), player);
+ gst_pad_add_probe (gst_element_get_static_pad (asink, "sink"),
+ GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ demo_player_event_listener, player, NULL);
ghostpad = gst_element_get_static_pad (filter, "sink");
gst_element_add_pad (audioline, gst_ghost_pad_new ("sink", ghostpad));
@@ -196,8 +197,9 @@ demo_player_build_pipeline (DemoPlayer * player)
priv->scaletempo_line = audioline;
MAKE_ELEMENT (NULL, priv->scalerate_line, audiosink_name,
"scaling_audio_sink");
- gst_pad_add_event_probe (gst_element_get_static_pad (priv->scalerate_line,
- "sink"), G_CALLBACK (demo_player_event_listener), player);
+ gst_pad_add_probe (gst_element_get_static_pad (priv->scalerate_line,
+ "sink"), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ demo_player_event_listener, player, NULL);
g_object_ref (priv->scaletempo_line);
g_object_ref (priv->scalerate_line);
}
@@ -221,9 +223,8 @@ _set_rate (DemoPlayer * player, gdouble new_rate, gint second)
priv = DEMO_PLAYER_GET_PRIVATE (player);
if (second < 0) {
- GstFormat fmt = GST_FORMAT_TIME;
seek_type = GST_SEEK_TYPE_SET;
- if (!gst_element_query_position (priv->pipeline, &fmt, &pos)) {
+ if (!gst_element_query_position (priv->pipeline, GST_FORMAT_TIME, &pos)) {
// This should be the default but too many upstream elements seek anyway
pos = GST_CLOCK_TIME_NONE;
seek_type = GST_SEEK_TYPE_NONE;
@@ -461,12 +462,12 @@ demo_player_get_position_func (DemoPlayer * player)
{
DemoPlayerPrivate *priv = DEMO_PLAYER_GET_PRIVATE (player);
gint64 pos;
- GstFormat fmt = GST_FORMAT_TIME;
if (!priv->pipeline)
return -1;
- if (!gst_element_query_position (priv->pipeline, &fmt, &pos) || pos < 0) {
+ if (!gst_element_query_position (priv->pipeline, GST_FORMAT_TIME, &pos)
+ || pos < 0) {
return -1;
}
@@ -478,12 +479,12 @@ demo_player_get_duration_func (DemoPlayer * player)
{
DemoPlayerPrivate *priv = DEMO_PLAYER_GET_PRIVATE (player);
gint64 dur;
- GstFormat fmt = GST_FORMAT_TIME;
if (!priv->pipeline)
return -1;
- if (!gst_element_query_duration (priv->pipeline, &fmt, &dur) || dur < 0) {
+ if (!gst_element_query_duration (priv->pipeline, GST_FORMAT_TIME, &dur)
+ || dur < 0) {
return -1;
}
diff --git a/tests/icles/pitch-test.c b/tests/icles/pitch-test.c
index 152bde35b..2936dd0d3 100644
--- a/tests/icles/pitch-test.c
+++ b/tests/icles/pitch-test.c
@@ -25,7 +25,6 @@
#include <string.h>
#include <unistd.h>
#include <gst/gst.h>
-#include <gst/controller/gstcontroller.h>
int
main (int argc, char **argv)
@@ -49,7 +48,6 @@ main (int argc, char **argv)
/* initialize GStreamer */
gst_init (&argc, &argv);
- gst_controller_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
@@ -76,8 +74,7 @@ main (int argc, char **argv)
}
csource = gst_interpolation_control_source_new ();
- gst_interpolation_control_source_set_interpolation_mode (csource,
- GST_INTERPOLATE_LINEAR);
+ g_object_set (csource, "mode", GST_INTERPOLATION_MODE_LINEAR, NULL);
gst_controller_set_control_source (ctl, "pitch",
GST_CONTROL_SOURCE (csource));
@@ -91,7 +88,8 @@ main (int argc, char **argv)
else
g_value_set_float (&val, 1.5);
- gst_interpolation_control_source_set (csource, i * GST_SECOND, &val);
+ gst_timed_value_control_source_set ((GstTimedValueControlSource *) csource,
+ i * GST_SECOND, &val);
}
g_value_unset (&val);
diff --git a/tools/element-templates/element b/tools/element-templates/element
index ed025ee2b..001f48762 100644
--- a/tools/element-templates/element
+++ b/tools/element-templates/element
@@ -97,7 +97,7 @@ static gboolean
gst_replace_set_clock (GstElement * element, GstClock * clock)
{
- return TRUE;
+ return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
}
static GstIndex *
diff --git a/tools/element-templates/sinkpad b/tools/element-templates/sinkpad
index ec8a98060..6d3bad1fb 100644
--- a/tools/element-templates/sinkpad
+++ b/tools/element-templates/sinkpad
@@ -30,8 +30,8 @@ GST_STATIC_PAD_TEMPLATE ("sink",
);
% base-init
- gst_element_class_add_static_pad_template (element_class,
- &gst_replace_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_replace_sink_template));
% instance-init
replace->sinkpad = gst_pad_new_from_static_template (&gst_replace_sink_template
diff --git a/tools/element-templates/sinkpad-simple b/tools/element-templates/sinkpad-simple
index 822079bee..e8538b6ec 100644
--- a/tools/element-templates/sinkpad-simple
+++ b/tools/element-templates/sinkpad-simple
@@ -12,8 +12,8 @@ GST_STATIC_PAD_TEMPLATE ("sink",
);
% base-init
- gst_element_class_add_static_pad_template (element_class,
- &gst_replace_sink_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_replace_sink_template));
% instance-init
replace->sinkpad = gst_pad_new_from_static_template (&gst_replace_sink_template
diff --git a/tools/element-templates/srcpad b/tools/element-templates/srcpad
index 9c4f32052..d1f799267 100644
--- a/tools/element-templates/srcpad
+++ b/tools/element-templates/srcpad
@@ -28,8 +28,8 @@ GST_STATIC_PAD_TEMPLATE ("src",
);
% base-init
- gst_element_class_add_static_pad_template (element_class,
- &gst_replace_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_replace_src_template));
% instance-init
replace->srcpad = gst_pad_new_from_static_template (&gst_replace_src_template
diff --git a/tools/element-templates/srcpad-simple b/tools/element-templates/srcpad-simple
index efb3190c6..0fca9157e 100644
--- a/tools/element-templates/srcpad-simple
+++ b/tools/element-templates/srcpad-simple
@@ -12,8 +12,8 @@ GST_STATIC_PAD_TEMPLATE ("src",
);
% base-init
- gst_element_class_add_static_pad_template (element_class,
- &gst_replace_src_template);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_replace_src_template));
% instance-init
replace->srcpad = gst_pad_new_from_static_template (&gst_replace_src_template
diff --git a/win32/common/config.h b/win32/common/config.h
index 16f0ed287..dd84f004b 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -6,7 +6,7 @@
#undef ENABLE_NLS
/* gettext package name */
-#define GETTEXT_PACKAGE "gst-plugins-bad-0.10"
+#define GETTEXT_PACKAGE "gst-plugins-bad-0.11"
/* PREFIX - specifically added for Windows for easier moving */
#define PREFIX "C:\\gstreamer"
@@ -199,7 +199,7 @@
#undef USE_POISONING
/* Version number of package */
-#define VERSION "0.10.22.1"
+#define VERSION "0.11.0.1"
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */