diff --git a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json index 3cac631e00..8843b2e5c3 100644 --- a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json +++ b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json @@ -913,6 +913,764 @@ "tracers": {}, "url": "Unknown package origin" }, + "applemedia": { + "description": "Elements for capture and codec access on Apple OS X and iOS", + "elements": { + "atdec": { + "author": "Alessandro Decina ", + "description": "AudioToolbox based audio decoder", + "hierarchy": [ + "GstATDec", + "GstAudioDecoder", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "klass": "Codec/Decoder/Audio", + "long-name": "AudioToolbox based audio decoder", + "pad-templates": { + "sink": { + "caps": "audio/mpeg:\n mpegversion: 4\n framed: true\n channels: [ 1, 2147483647 ]\naudio/mpeg:\n mpegversion: 1\n layer: [ 1, 3 ]\n", + "direction": "sink", + "presence": "always" + }, + "src": { + "caps": "audio/x-raw:\n format: S16LE\n rate: [ 1, 2147483647 ]\n channels: [ 1, 2147483647 ]\n layout: interleaved\naudio/x-raw:\n format: F32LE\n rate: [ 1, 2147483647 ]\n channels: [ 1, 2147483647 ]\n layout: interleaved\n", + "direction": "src", + "presence": "always" + } + }, + "rank": "marginal" + }, + "avfassetsrc": { + "author": "Andoni Morales Alastruey amorales@fluendo.com", + "description": "Read and decode samples from AVFoundation assets using the AVFAssetReader API", + "hierarchy": [ + "GstAVFAssetSrc", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstURIHandler" + ], + "klass": "Source/Codec", + "long-name": "Source and decoder for AVFoundation assets", + "pad-templates": { + "audio": { + "caps": "audio/x-raw:\n format: F32LE\n rate: [ 1, 2147483647 ]\n channels: [ 1, 2 ]\n layout: interleaved\n", + "direction": "src", + "presence": "sometimes" + }, + "video": { + "caps": "video/x-raw:\n format: NV12\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n", + "direction": "src", + "presence": "sometimes" + } + }, + "properties": { + "uri": { + "blurb": "URI of the asset to read", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "NULL", + "mutable": "ready", + "readable": true, + "type": "gchararray", + "writable": true + } + }, + "rank": "secondary" + }, + "avfvideosrc": { + "author": "Ole André Vadla Ravnås ", + "description": "Reads frames from an iOS AVFoundation device", + "hierarchy": [ + "GstAVFVideoSrc", + "GstPushSrc", + "GstBaseSrc", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "klass": "Source/Video/Hardware", + "long-name": "Video Source (AVFoundation)", + "pad-templates": { + "src": { + "caps": "video/x-raw(memory:GLMemory):\n format: UYVY\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n texture-target: rectangle\nvideo/x-raw:\n format: { NV12, UYVY, YUY2 }\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\nvideo/x-raw:\n format: BGRA\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n", + "direction": "src", + "presence": "always" + } + }, + "properties": { + "capture-screen": { + "blurb": "Enable screen capture functionality", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "capture-screen-cursor": { + "blurb": "Enable cursor capture while capturing screen", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "capture-screen-mouse-clicks": { + "blurb": "Enable mouse clicks capture while capturing screen", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "device-index": { + "blurb": "The zero-based device index", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "-1", + "max": "2147483647", + "min": "-1", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": true + }, + "device-name": { + "blurb": "The name of the currently opened capture device", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "NULL", + "mutable": "null", + "readable": true, + "type": "gchararray", + "writable": false + }, + "device-type": { + "blurb": "The general type of a video capture device", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "default (0)", + "mutable": "null", + "readable": true, + "type": "GstAVFVideoSourceDeviceType", + "writable": true + }, + "do-stats": { + "blurb": "Enable logging of statistics", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "fps": { + "blurb": "Last measured framerate, if statistics are enabled", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "-1", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": false + }, + "orientation": { + "blurb": "The orientation of the video", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "default (0)", + "mutable": "null", + "readable": true, + "type": "GstAVFVideoSourceOrientation", + "writable": true + }, + "position": { + "blurb": "The position of the capture device (front or back-facing)", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "default (0)", + "mutable": "null", + "readable": true, + "type": "GstAVFVideoSourcePosition", + "writable": true + } + }, + "rank": "secondary" + }, + "avsamplebufferlayersink": { + "author": "Matthew Waters ", + "description": "A videosink based on AVSampleBuffers", + "hierarchy": [ + "GstAVSampleVideoSink", + "GstVideoSink", + "GstBaseSink", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "klass": "Sink/Video", + "long-name": "AV Sample video sink", + "pad-templates": { + "sink": { + "caps": "video/x-raw:\n format: { RGB, BGR, ARGB, BGRA, ABGR, RGBA, YUY2, UYVY, NV12, I420 }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "direction": "sink", + "presence": "always" + } + }, + "properties": { + "force-aspect-ratio": { + "blurb": "When enabled, scaling will respect original aspect ratio", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "layer": { + "blurb": "The CoreAnimation layer that can be placed in the render tree", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "mutable": "null", + "readable": true, + "type": "gpointer", + "writable": false + } + }, + "rank": "none" + }, + "vtdec": { + "author": "Ole André Vadla Ravnås ; Alessandro Decina ", + "description": "Apple VideoToolbox Decoder", + "hierarchy": [ + "GstVtdec", + "GstVideoDecoder", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "klass": "Codec/Decoder/Video/Hardware", + "long-name": "Apple VideoToolbox decoder", + "pad-templates": { + "sink": { + "caps": "video/x-h264:\n stream-format: avc\n alignment: au\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\nvideo/mpeg:\n mpegversion: 2\n systemstream: false\n parsed: true\nimage/jpeg:\nvideo/x-prores:\n variant: { (string)standard, (string)hq, (string)lt, (string)proxy, (string)4444, (string)4444xq }\n", + "direction": "sink", + "presence": "always" + }, + "src": { + "caps": "video/x-raw:\n format: { NV12, AYUV64, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:GLMemory):\n format: { NV12, AYUV64, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n texture-target: rectangle\n", + "direction": "src", + "presence": "always" + } + }, + "rank": "secondary" + }, + "vtdec_hw": { + "author": "Ole André Vadla Ravnås ; Alessandro Decina ", + "description": "Apple VideoToolbox Decoder", + "hierarchy": [ + "GstVtdecHw", + "GstVtdec", + "GstVideoDecoder", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "klass": "Codec/Decoder/Video/Hardware", + "long-name": "Apple VideoToolbox decoder (hardware only)", + "pad-templates": { + "sink": { + "caps": "video/x-h264:\n stream-format: avc\n alignment: au\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\nvideo/mpeg:\n mpegversion: 2\n systemstream: false\n parsed: true\nimage/jpeg:\nvideo/x-prores:\n variant: { (string)standard, (string)hq, (string)lt, (string)proxy, (string)4444, (string)4444xq }\n", + "direction": "sink", + "presence": "always" + }, + "src": { + "caps": "video/x-raw:\n format: { NV12, AYUV64, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:GLMemory):\n format: { NV12, AYUV64, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n texture-target: rectangle\n", + "direction": "src", + "presence": "always" + } + }, + "rank": "primary + 1" + }, + "vtenc_h264": { + "author": "Ole André Vadla Ravnås , Dominik Röttsches ", + "description": "H.264 encoder", + "hierarchy": [ + "vtenc_h264", + "GstVideoEncoder", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstPreset" + ], + "klass": "Codec/Encoder/Video/Hardware", + "long-name": "H.264 encoder", + "pad-templates": { + "sink": { + "caps": "video/x-raw:\n format: { AYUV64, UYVY, NV12, I420, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "direction": "sink", + "presence": "always" + }, + "src": { + "caps": "video/x-h264:\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive, (string)interleaved }\n stream-format: avc\n alignment: au\n", + "direction": "src", + "presence": "always" + } + }, + "properties": { + "allow-frame-reordering": { + "blurb": "Whether to allow frame reordering or not", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "bitrate": { + "blurb": "Target video bitrate in kbps (0 = auto)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "-1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint", + "writable": true + }, + "max-keyframe-interval": { + "blurb": "Maximum number of frames between keyframes (0 = auto)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": true + }, + "max-keyframe-interval-duration": { + "blurb": "Maximum number of nanoseconds between keyframes (0 = no limit)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "18446744073709551615", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint64", + "writable": true + }, + "quality": { + "blurb": "The desired compression quality", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0.5", + "max": "1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gdouble", + "writable": true + }, + "realtime": { + "blurb": "Configure the encoder for realtime output", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + } + }, + "rank": "primary" + }, + "vtenc_h264_hw": { + "author": "Ole André Vadla Ravnås , Dominik Röttsches ", + "description": "H.264 (HW only) encoder", + "hierarchy": [ + "vtenc_h264_hw", + "GstVideoEncoder", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstPreset" + ], + "klass": "Codec/Encoder/Video/Hardware", + "long-name": "H.264 (HW only) encoder", + "pad-templates": { + "sink": { + "caps": "video/x-raw:\n format: { AYUV64, UYVY, NV12, I420, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "direction": "sink", + "presence": "always" + }, + "src": { + "caps": "video/x-h264:\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive, (string)interleaved }\n stream-format: avc\n alignment: au\n", + "direction": "src", + "presence": "always" + } + }, + "properties": { + "allow-frame-reordering": { + "blurb": "Whether to allow frame reordering or not", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "bitrate": { + "blurb": "Target video bitrate in kbps (0 = auto)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "-1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint", + "writable": true + }, + "max-keyframe-interval": { + "blurb": "Maximum number of frames between keyframes (0 = auto)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": true + }, + "max-keyframe-interval-duration": { + "blurb": "Maximum number of nanoseconds between keyframes (0 = no limit)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "18446744073709551615", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint64", + "writable": true + }, + "quality": { + "blurb": "The desired compression quality", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0.5", + "max": "1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gdouble", + "writable": true + }, + "realtime": { + "blurb": "Configure the encoder for realtime output", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + } + }, + "rank": "primary" + }, + "vtenc_prores": { + "author": "Ole André Vadla Ravnås , Dominik Röttsches ", + "description": "Apple ProRes encoder", + "hierarchy": [ + "vtenc_prores", + "GstVideoEncoder", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstPreset" + ], + "klass": "Codec/Encoder/Video/Hardware", + "long-name": "Apple ProRes encoder", + "pad-templates": { + "sink": { + "caps": "video/x-raw:\n format: { AYUV64, UYVY, NV12, I420, RGBA64_LE, ARGB64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "direction": "sink", + "presence": "always" + }, + "src": { + "caps": "video/x-prores:\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive, (string)interleaved }\n variant: { (string)standard, (string)4444xq, (string)4444, (string)hq, (string)lt, (string)proxy }\n", + "direction": "src", + "presence": "always" + } + }, + "properties": { + "allow-frame-reordering": { + "blurb": "Whether to allow frame reordering or not", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "bitrate": { + "blurb": "Target video bitrate in kbps (0 = auto)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "-1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint", + "writable": true + }, + "max-keyframe-interval": { + "blurb": "Maximum number of frames between keyframes (0 = auto)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": true + }, + "max-keyframe-interval-duration": { + "blurb": "Maximum number of nanoseconds between keyframes (0 = no limit)", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "18446744073709551615", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint64", + "writable": true + }, + "preserve-alpha": { + "blurb": "Video alpha values (non opaque) need to be preserved", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "quality": { + "blurb": "The desired compression quality", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "0.5", + "max": "1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gdouble", + "writable": true + }, + "realtime": { + "blurb": "Configure the encoder for realtime output", + "conditionally-available": false, + "construct": true, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + } + }, + "rank": "primary" + } + }, + "filename": "gstapplemedia", + "license": "LGPL", + "other-types": { + "GstAVFVideoSourceDeviceType": { + "kind": "enum", + "values": [ + { + "desc": "A built-in wide angle camera. These devices are suitable for general purpose use.", + "name": "wide-angle", + "value": "1" + }, + { + "desc": "A built-in camera device with a longer focal length than a wide-angle camera.", + "name": "telephoto", + "value": "2" + }, + { + "desc": "A dual camera device, combining built-in wide-angle and telephoto cameras that work together as a single capture device.", + "name": "dual", + "value": "3" + }, + { + "desc": "Default", + "name": "default", + "value": "0" + } + ] + }, + "GstAVFVideoSourceOrientation": { + "kind": "enum", + "values": [ + { + "desc": "Indicates that video should be oriented vertically, top at the top.", + "name": "portrait", + "value": "1" + }, + { + "desc": "Indicates that video should be oriented vertically, top at the bottom.", + "name": "portrat-upside-down", + "value": "2" + }, + { + "desc": "Indicates that video should be oriented horizontally, top on the left.", + "name": "landscape-right", + "value": "3" + }, + { + "desc": "Indicates that video should be oriented horizontally, top on the right.", + "name": "landscape-left", + "value": "4" + }, + { + "desc": "Default", + "name": "default", + "value": "0" + } + ] + }, + "GstAVFVideoSourcePosition": { + "kind": "enum", + "values": [ + { + "desc": "Front-facing camera", + "name": "front", + "value": "1" + }, + { + "desc": "Back-facing camera", + "name": "back", + "value": "2" + }, + { + "desc": "Default", + "name": "default", + "value": "0" + } + ] + } + }, + "package": "GStreamer Bad Plug-ins", + "source": "gst-plugins-bad", + "tracers": {}, + "url": "Unknown package origin" + }, "asfmux": { "description": "ASF Muxer Plugin", "elements": { diff --git a/subprojects/gst-plugins-bad/sys/applemedia/avfvideosrc.m b/subprojects/gst-plugins-bad/sys/applemedia/avfvideosrc.m index 081aa9a9fc..154b5a523c 100644 --- a/subprojects/gst-plugins-bad/sys/applemedia/avfvideosrc.m +++ b/subprojects/gst-plugins-bad/sys/applemedia/avfvideosrc.m @@ -1353,6 +1353,10 @@ gst_avf_video_src_class_init (GstAVFVideoSrcClass * klass) GST_DEBUG_CATEGORY_INIT (gst_avf_video_src_debug, "avfvideosrc", 0, "iOS AVFoundation video source"); + + gst_type_mark_as_plugin_api (GST_TYPE_AVF_VIDEO_SOURCE_POSITION, 0); + gst_type_mark_as_plugin_api (GST_TYPE_AVF_VIDEO_SOURCE_ORIENTATION, 0); + gst_type_mark_as_plugin_api (GST_TYPE_AVF_VIDEO_SOURCE_DEVICE_TYPE, 0); } static void diff --git a/subprojects/gst-plugins-bad/sys/applemedia/vtdec.c b/subprojects/gst-plugins-bad/sys/applemedia/vtdec.c index 76a268aeed..6f3453f78b 100644 --- a/subprojects/gst-plugins-bad/sys/applemedia/vtdec.c +++ b/subprojects/gst-plugins-bad/sys/applemedia/vtdec.c @@ -19,9 +19,10 @@ */ /** * SECTION:element-vtdec - * @title: gstvtdec + * @title: vtdec * - * Apple VideoToolbox based decoder. + * Apple VideoToolbox based decoder which might use a HW or a SW + * implementation depending on the device. * * ## Example launch line * |[ @@ -31,6 +32,20 @@ * */ +/** + * SECTION:element-vtdec_hw + * @title: vtdec_hw + * + * Apple VideoToolbox based HW-only decoder. + * + * ## Example launch line + * |[ + * gst-launch-1.0 -v filesrc location=file.mov ! qtdemux ! queue ! h264parse ! vtdec_hw ! videoconvert ! autovideosink + * ]| + * Decode h264 video from a mov file. + * + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/subprojects/gst-plugins-bad/sys/applemedia/vtenc.c b/subprojects/gst-plugins-bad/sys/applemedia/vtenc.c index 7d44e7f9e7..817a936750 100644 --- a/subprojects/gst-plugins-bad/sys/applemedia/vtenc.c +++ b/subprojects/gst-plugins-bad/sys/applemedia/vtenc.c @@ -17,6 +17,49 @@ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ + +/** + * SECTION:element-vtenc_h264 + * @title: vtenc_h264 + * + * Apple VideoToolbox H264 encoder, which can either use HW or a SW + * implementation depending on the device. + * + * ## Example pipeline + * |[ + * gst-launch-1.0 -v videotestsrc ! vtenc_h264 ! qtmux ! filesink location=out.mov + * ]| Encode a test video pattern and save it as an MOV file + * + */ + +/** + * SECTION:element-vtenc_h264_hw + * @title: vtenc_h264_hw + * + * Apple VideoToolbox H264 HW-only encoder (only available on macOS at + * present). + * + * ## Example pipeline + * |[ + * gst-launch-1.0 -v videotestsrc ! vtenc_h264_hw ! qtmux ! filesink location=out.mov + * ]| Encode a test video pattern and save it as an MOV file + * + */ + +/** + * SECTION:element-vtenc_prores + * @title: vtenc_prores + * + * Apple VideoToolbox ProRes encoder + * + * ## Example pipeline + * |[ + * gst-launch-1.0 -v videotestsrc ! vtenc_prores ! qtmux ! filesink location=out.mov + * ]| Encode a test video pattern and save it as an MOV file + * + * Since: 1.20 + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -315,11 +358,24 @@ gst_vtenc_class_init (GstVTEncClass * klass) G_MAXUINT64, VTENC_DEFAULT_MAX_KEYFRAME_INTERVAL_DURATION, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (gobject_class, PROP_PRESERVE_ALPHA, - g_param_spec_boolean ("preserve-alpha", "Preserve Video Alpha Values", - "Video alpha values (non opaque) need to be perserved.", - VTENC_DEFAULT_PRESERVE_ALPHA, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + /* + * H264 doesn't support alpha components, so only add the property for prores + */ + if (g_strcmp0 (G_OBJECT_CLASS_NAME (klass), "vtenc_prores") == 0) { + /** + * vtenc_prores:preserve-alpha + * + * Preserve non-opaque video alpha values from the input video when + * compressing, else treat all alpha component as opaque. Default is %TRUE. + * + * Since: 1.20 + */ + g_object_class_install_property (gobject_class, PROP_PRESERVE_ALPHA, + g_param_spec_boolean ("preserve-alpha", "Preserve Video Alpha Values", + "Video alpha values (non opaque) need to be preserved", + VTENC_DEFAULT_PRESERVE_ALPHA, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + } } static void diff --git a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json index a9ba5d36b5..1afe15e9e9 100644 --- a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json +++ b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json @@ -10749,6 +10749,182 @@ "tracers": {}, "url": "Unknown package origin" }, + "osxaudio": { + "description": "OSX (Mac OS X) audio support for GStreamer", + "elements": { + "osxaudiosink": { + "author": "Zaheer Abbas Merali ", + "description": "Output to a sound card in OS X", + "hierarchy": [ + "GstOsxAudioSink", + "GstAudioBaseSink", + "GstBaseSink", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstOsxAudioElement" + ], + "klass": "Sink/Audio", + "long-name": "Audio Sink (OSX)", + "pad-templates": { + "sink": { + "caps": "audio/x-raw:\n format: { F64LE, F64BE, F32LE, F32BE, S32LE, S32BE, U32LE, U32BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, S16LE, S16BE, U16LE, U16BE, S8, U8 }\n layout: interleaved\n rate: [ 1, 2147483647 ]\n channels: [ 1, 9 ]\naudio/x-ac3:\n framed: true\naudio/x-dts:\n framed: true\n", + "direction": "sink", + "presence": "always" + } + }, + "properties": { + "device": { + "blurb": "Device ID of output device", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": true + }, + "volume": { + "blurb": "Volume of this stream", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "1", + "max": "1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gdouble", + "writable": true + } + }, + "rank": "primary" + }, + "osxaudiosrc": { + "author": "Zaheer Abbas Merali ", + "description": "Input from a sound card in OS X", + "hierarchy": [ + "GstOsxAudioSrc", + "GstAudioBaseSrc", + "GstPushSrc", + "GstBaseSrc", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstOsxAudioElement" + ], + "klass": "Source/Audio", + "long-name": "Audio Source (OSX)", + "pad-templates": { + "src": { + "caps": "audio/x-raw:\n format: { F64LE, F64BE, F32LE, F32BE, S32LE, S32BE, U32LE, U32BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, S16LE, S16BE, U16LE, U16BE, S8, U8 }\n layout: interleaved\n rate: [ 1, 2147483647 ]\n channels: [ 1, 2147483647 ]\n", + "direction": "src", + "presence": "always" + } + }, + "properties": { + "device": { + "blurb": "Device ID of input device", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "2147483647", + "min": "0", + "mutable": "null", + "readable": true, + "type": "gint", + "writable": true + } + }, + "rank": "primary" + } + }, + "filename": "gstosxaudio", + "license": "LGPL", + "other-types": {}, + "package": "GStreamer Good Plug-ins", + "source": "gst-plugins-good", + "tracers": {}, + "url": "Unknown package origin" + }, + "osxvideo": { + "description": "OSX native video output plugin", + "elements": { + "osxvideosink": { + "author": "Zaheer Abbas Merali ", + "description": "OSX native videosink", + "hierarchy": [ + "GstOSXVideoSink", + "GstVideoSink", + "GstBaseSink", + "GstElement", + "GstObject", + "GInitiallyUnowned", + "GObject" + ], + "interfaces": [ + "GstVideoOverlay", + "GstNavigation" + ], + "klass": "Sink/Video", + "long-name": "OSX Video sink", + "pad-templates": { + "sink": { + "caps": "video/x-raw:\n framerate: [ 0/1, 2147483647/1 ]\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n format: UYVY\n", + "direction": "sink", + "presence": "always" + } + }, + "properties": { + "embed": { + "blurb": "For ABI compatibility only, do not use", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + }, + "force-aspect-ratio": { + "blurb": "When enabled, scaling will respect original aspect ration", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "false", + "mutable": "null", + "readable": true, + "type": "gboolean", + "writable": true + } + }, + "rank": "marginal" + } + }, + "filename": "gstosxvideo", + "license": "LGPL", + "other-types": {}, + "package": "GStreamer Good Plug-ins", + "source": "gst-plugins-good", + "tracers": {}, + "url": "Unknown package origin" + }, "png": { "description": "PNG plugin library", "elements": {