Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 19
View file
gstreamer-plugins-bad-codecs.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Fri Sep 22 17:25:19 UTC 2023 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.22.6 + +------------------------------------------------------------------- Sat Aug 12 09:49:32 UTC 2023 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.22.5
View file
gstreamer-plugins-bad-codecs.spec
Changed
@@ -7,7 +7,7 @@ %define _version 1.22.0 Name: gstreamer-plugins-bad-codecs -Version: 1.22.5 +Version: 1.22.6 Release: 0 Summary: Codecs/plugins for gstreamer-plugins-bad License: LGPL-2.1-or-later
View file
gst-plugins-bad-1.22.5.tar.xz/ChangeLog -> gst-plugins-bad-1.22.6.tar.xz/ChangeLog
Changed
@@ -1,3 +1,287 @@ +=== release 1.22.6 === + +2023-09-20 18:10:57 +0100 Tim-Philipp Müller <tim@centricular.com> + + * NEWS: + * RELEASE: + * gst-plugins-bad.doap: + * meson.build: + Release 1.22.6 + +2023-08-10 15:47:03 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/mxf/mxfd10.c: + mxfdemux: Check number of channels for AES3 audio + Only up to 8 channels are allowed and using a higher number would cause + integer overflows when copying the data, and lead to out of bound + writes. + Also check that each buffer is at least 4 bytes long to avoid another + overflow. + Fixes ZDI-CAN-21661, CVE-2023-40475 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2897 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5365> + +2023-08-10 15:45:01 +0300 Sebastian Dröge <sebastian@centricular.com> + + * gst/mxf/mxfup.c: + mxfdemux: Fix integer overflow causing out of bounds writes when handling invalid uncompressed video + Check ahead of time when parsing the track information whether + width, height and bpp are valid and usable without overflows. + Fixes ZDI-CAN-21660, CVE-2023-40474 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2896 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5365> + +2023-08-09 12:49:19 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst-libs/gst/codecparsers/gsth265parser.c: + h265parser: Fix possible overflow using max_sub_layers_minus1 + This fixes a possible overflow that can be triggered by an invalid value of + max_sub_layers_minus1 being set in the bitstream. The bitstream uses 3 bits, + but the allowed range is 0 to 6 only. + Fixes ZDI-CAN-21768, CVE-2023-40476 + Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2895 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5366> + +2023-09-11 18:12:28 +0200 Hugues Fruchet <hugues.fruchet@foss.st.com> + + * gst-libs/gst/wayland/gstwlwindow.c: + waylandsink: Fix cropping for video with non-square aspect ratio + Padding of unaligned content is still visible at right with some aspect-ratio. + Fix this by giving the original content resolution to wp_viewport_set_source() + instead of pixel aspect ratio scaled one. + Fixes !5259 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5360> + +2023-09-14 01:18:59 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/codecs/gsth264decoder.c: + * gst-libs/gst/codecs/gsth264picture.h: + h264decoder: Update latency dynamically + The actual number of reorder frames is unknown + unless frame reordering is disabled + (e.g., POC type 2 or constrained-* profiles). + Also derived maximum DPB size or max_num_reorder_frames in VUI + is not the upper bound of output delay. + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2702 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5341> + +2023-08-16 13:43:56 +0000 L. E. Segovia <amy@amyspark.me> + + * sys/applemedia/avsamplevideosink.m: + applemedia: Also fix inconsistent pixel format definition for NV12 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5203> + +2023-08-15 21:45:56 +0000 L. E. Segovia <amy@amyspark.me> + + * sys/applemedia/coremediabuffer.c: + * sys/applemedia/corevideobuffer.c: + applemedia: Fix pixel format for I420 + In Intel Macs, using full range 8-bit 4:2:0 YCbCr results in a failure on + initialization. I've validated this to be the correct pixel format with FFmpeg: + https://github.com/FFmpeg/FFmpeg/blob/8653dcaf7d665b15b40ea9a560c8171b0914a882/libavutil/hwcontext_videotoolbox.c#L45 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5203> + +2023-08-24 12:12:09 +0200 Víctor Manuel Jáquez Leal <vjaquez@igalia.com> + + * sys/va/gstvadecoder.c: + * sys/va/gstvadisplay_priv.c: + va: Fix in error logs functions mismatches + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5340> + +2023-09-15 11:06:52 +1000 Matthew Waters <matthew@centricular.com> + + * sys/androidmedia/gstamcvideoenc.c: + androidmedia/enc: handle codec-data before popping GstVideoCodecFrames + Issue is that when amc was producing a codec-data buffer, a + GstVideoCodecFrame was being popped off the internal queue. This meant + that the codec-data was being associated with the first input frame and + the second (first encoded buffer) output buffer with the second input + frame. At the end (assuming one input produces one output which seems + to hold in my testing and how the encoder is currently implemented) + there would be an input frame missing and would be pushed without any + timing information. This would lead to e.g. muxers rejecting the buffer + without PTS and failing to mux. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5335> + +2023-09-15 11:06:07 +1000 Matthew Waters <matthew@centricular.com> + + * sys/androidmedia/gstamc-constants.h: + * sys/androidmedia/gstamcvideoenc.c: + androidmedia/enc: add fixme log about partial frames + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5335> + +2023-09-16 03:13:33 +0900 Seungha Yang <seungha@centricular.com> + + * gst-libs/gst/codecparsers/gstav1parser.c: + av1parser: Fix segmentation params update + Even if the segmentation feature value is not updated, + the parsed "segmentation_update_map" and "segmentation_temporal_update" + values should not be cleared as it's referenced during lower + level bitstream parsing. Also, don't use assert() in parser + unless it's clearly impossible condition. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5336> + +2023-08-24 17:40:42 +0200 Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com> + + * gst/rtmp2/rtmp/rtmpclient.c: + rtmp2: Allow NULL flash version, omitting the field + rtmpsink omits it by default. Allow us to do the same. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5248> + +2023-09-05 14:15:04 +0200 Thomas Schneider <thomas.schneider@voliro.ch> + + * sys/androidmedia/gstamc.c: + androidmedia: fix hevc codec profile registration + Fix the codec registration logic such that all supported + profiles are available instead of just the first in the + list. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5313> + +2023-09-03 13:21:30 +0000 Akihiro Sagawa <sagawa.aki@gmail.com> + + * gst-libs/gst/codecparsers/gstmpegvideoparser.c: + codecparsers: Fix MPEG-1 aspect ratio table + The values defined in ISO/IEC 11172-2 are different from those used so far. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5300> + +2023-08-29 14:55:03 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com> + + * gst-libs/gst/wayland/gstwlwindow.c: + waylandsink: Crop surfaces to their display width height + Setting the surface source rectangle has been omitted so far. As a side effect + surface created with padded width/height are being scaled down. Fix this using + the viewporter source rectangle configuration. This can later be enhanced + to support crop meta. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5298> + +2023-08-28 20:58:22 +0900 Seungha Yang <seungha@centricular.com> + + * sys/d3d11/gstd3d11convert.cpp: + d3d11convert: Passthrough allocation query on same caps + Since d3d11convert and its variant elements does not enable basetransform's + passthrough, passthrough allocation query needs to be handled + manually in order to respect downstream element's min/max buffer + requirement. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5297> + +2023-08-23 19:27:43 +0900 Seungha Yang <seungha@centricular.com> + + * sys/nvcodec/gstnvencoder.cpp: + nvencoder: Fix negotiation error when interlace-mode is unspecified + Use GST_PAD_SET_ACCEPT_INTERSECT() to accept caps without interlace-mode + field + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5240> + +2023-08-23 18:07:31 +0900 Seungha Yang <seungha@centricular.com> + + * sys/win32ipc/protocol/win32ipcpipeserver.cpp: + win32ipc: Fix pipe handle leak + Named pipe handle must be closed if it's no longer needed + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2923 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5231> + +2023-08-22 02:57:24 +0900 Seungha Yang <seungha@centricular.com> + + * gst/videoparsers/gsth265parse.c: + * tests/check/elements/h265parse.c: + h265parse: Allow partially broken hvcC data + Ignores parsing error on the last nalu of the array if the nalu type + is not VPS/SPS/PPS + Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2905 + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5220> + +2023-08-18 18:21:18 +1000 Jan Schmidt <jan@centricular.com> + + * ext/mdns/gstmicrodnsdevice.c: + mdns: Fix a crash on context error + Make sure not to free the microdns provider context until the + device provider asks it to stop. Fixes a crash if there is + an error (such as MDNS port being busy) that makes the + mdns listener exit early. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5207> + +2023-08-18 09:27:36 +0200 Guillaume Desmottes <guillaume.desmottes@onestream.live> + + * gst/rtmp2/gstrtmp2sink.c: + rtmp2sink: fix crash if message conversion failed + The message pointer is not set so we can't display it in logs. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5202> + +2023-08-08 01:29:40 +0900 Seungha Yang <seungha@centricular.com> + + * ext/hls/gsthlssink2.c: + hlssink2: Always use forward slash separator + g_build_filename() will insert back slash on Windows, and resulting + playlist will contain media segment path with back slash if + "playlist-root" property is specified + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5161> + +2023-08-05 01:39:29 +1000 Jan Schmidt <jan@centricular.com> + + * gst/audiolatency/gstaudiolatency.c: + audiolatency: Fix event refcounting bug handling latency events + Fix a refcounting bug introduced in + https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5146 + If upstream returns FALSE when processing a latency event, it will + be unreffed an extra time + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5152> + +2023-08-04 17:25:26 +1000 Jan Schmidt <jan@centricular.com> + + * gst/audiolatency/gstaudiolatency.c: + audiolatency: Forward latency query and event upstream + Make sure the pipeline still configures the latency that it would configure + if audiolatency was not in the pipeline. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5152> + +2023-07-19 18:08:32 -0500 Ryan Pavlik <ryan.pavlik@collabora.com> + + * sys/androidmedia/gstjniutils.c: + androidmedia: Add more null checks (of env) to JNI utilities + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5142> + +2023-07-22 10:42:39 +0100 Philippe Normand <philn@igalia.com> + + * gst/transcode/gsttranscodebin.c: + transcodebin: Fixes for upstream selectable support + The upstream selectable query was not performed in all situations where we + handle the stream-start event. This could potentially lead to unlinked pads + between decodebin3 and encodebin later on. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5141> + +2023-07-19 18:08:32 -0500 Ryan Pavlik <ryan.pavlik@collabora.com> + + * sys/androidmedia/gstjniutils.c: + androidmedia: Add more null checks to JNI utilities + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5136> + +2023-07-28 14:02:22 -0500 Ryan Pavlik <ryan.pavlik@collabora.com> + + * sys/androidmedia/gstamcvideodec.c: + androidmedia: Fix typo + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5136> + +2023-07-19 18:08:16 -0500 Ryan Pavlik <ryan.pavlik@collabora.com> + + * sys/androidmedia/gst-android-hardware-camera.c: + androidmedia: Clear err if we don't have an optional camera field/constant + Fixes startup on devices where those fields/constants are not found. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5136> + +2023-07-26 16:45:18 -0500 Ryan Pavlik <ryan.pavlik@collabora.com> + + * ext/webrtc/gstwebrtcbin.c: + webrtc: Fix docs for create-data-channel action signal + Initial line of the doc comment was incorrect, so the nicely written + docs were not being extracted. + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5134> + +2023-07-20 16:57:47 +0100 Tim-Philipp Müller <tim@centricular.com> + + * meson.build: + Back to development + Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5082> + === release 1.22.5 === 2023-07-20 15:22:48 +0100 Tim-Philipp Müller <tim@centricular.com>
View file
gst-plugins-bad-1.22.5.tar.xz/NEWS -> gst-plugins-bad-1.22.6.tar.xz/NEWS
Changed
@@ -2189,6 +2189,183 @@ - List of Merge Requests applied in 1.22.5 - List of Issues fixed in 1.22.5 +1.22.6 + +The sixth 1.22 bug-fix release (1.22.6) was released on 20 September +2023. + +This release only contains bugfixes and security fixes and it should be +safe to update from 1.22.x. + +Highlighted bugfixes in 1.22.6 + +- Security fixes for the MXF demuxer and H.265 video parser +- Fix latency regression in H.264 hardware decoder base class +- androidmedia: fix HEVC codec profile registration and fix coded_data + handling +- decodebin3: fix switching from a raw stream to an encoded stream +- gst-inspect: prettier and more correct signal and action signals + printing +- rtmp2: Allow NULL flash version, omitting the field, for better RTMP + server compatibility +- rtspsrc: better compatibility with buggy RTSP servers that don’t set + a clock-rate +- rtpjitterbuffer: fix integer overflow that led to more packets being + declared lost than have been lost +- v4l2: fix video encoding regression on RPi and fix support for left + and top padding +- waylandsink: Crop surfaces to their display width height +- cerbero: recognise Manjaro; add Rust support for MSVC ARM64; cmake + detection fixes +- various bug fixes, build fixes, memory leak fixes, and other + stability and reliability improvements + +gstreamer + +- gst-inspect: prettier and more correct signal printing, and print + action signals in g_signal_emit_by_name() format +- gst-launch: Disable fault signal handlers on macOS + +gst-plugins-base + +- audio: Make sure to stop ringbuffer on error +- decodebin3: avoid identity, sinkpad, parsebin leakage when reset + input +- decodebin3: Ensure the slot is unlinked before linking to decoder +- sdp: fix wrong debug log error message for missing clock-rate in + caps +- sdp: Parse zero clock-rate as default + +gst-plugins-good + +- adaptivedemux2: fix memory leak +- pulsedeviceprovider: fix incorrect usage of GST_ELEMENT_ERROR +- qt: Unbreak build with qt-egl enabled but viv_fb missing +- qt: Fix searching of qt5/qt6 tools with qmake in Meson +- qtdemux: Fix premature EOS when some files are played in push mode +- qtdemux: attach cbcs crypt info at the right moment +- rtpjitterbuffer: Avoid integer overflow in max saveable packets + calculation with negative offset +- videoflip: fix concurrent access when modifying the tag list +- v4l2: allocator: Don’t close foreign dmabuf +- v4l2: bufferpool: Fix large encoded stream regression +- v4l2: bufferpool: Problems when checking for truncated buffer +- v4l2: Fix support for left and top padding +- v4l2object: clear format lists if source change event is received + +gst-plugins-bad + +- androidmedia/enc: handle codec-data before popping + GstVideoCodecFrames +- androidmedia: fix hevc codec profile registration +- androidmedia: Small fixes +- androidmedia: Add more null checks (of env) to JNI utilities +- applemedia: Fix pixel format for I420 and NV12 +- audiolatency: Forward latency query and event upstream +- av1parser: Fix segmentation params update +- codecparsers: Fix MPEG-1 aspect ratio table +- d3d11convert: Passthrough allocation query on same caps +- h264decoder: Update latency dynamically +- h265parser: Allow partially broken hvcC data +- h265parser: Fix possible overflow using max_sub_layers_minus1 +- hlssink2: Always use forward slash separator +- mdns: Fix a crash on context error +- mxfdemux: Fix integer overflow causing out of bounds writes when + handling invalid uncompressed video and check channels for AES3 +- nvencoder: Fix negotiation error when interlace-mode is unspecified +- rtmp2: Allow NULL flash version, omitting the field +- rtmp2sink: fix crash if message conversion failed +- transcodebin: Fixes for upstream selectable support +- va: Fix in error logs functions mismatches +- waylandsink: Crop surfaces to their display width height +- waylandsink: Fix cropping for video with non-square aspect ratio +- webrtc: Fix docs for create-data-channel action signal +- win32ipc: Fix pipe handle leak + +gst-plugins-ugly + +- No changes + +gst-plugins-rs + +- fallbackswitch: locking/deadlock fixes +- onvifmetadataparse: Skip metadata frames with unrepresentable UTC + time +- transcriberbin: Configure audioresample in front of transcriber +- webrtcsink: Propagate GstContext messages +- webrtcsink: Add support for d3d11 memory and qsvh264enc +- webrtcsink: fix TWCC extension adding +- webrtcsink: don’t forget to setup encoders for discoveries +- webrtcsink: NVIDIA V4L2 encoders always require NVMM memory +- meson: Fix handling of optional deps, and don’t require Python 3.8 + +gst-libav + +- No changes + +gst-rtsp-server + +- No changes + +gstreamer-vaapi + +- No changes + +gstreamer-sharp + +- No changes + +gst-omx + +- No changes + +gst-python + +- No changes + +gst-editing-services + +- No changes + +gst-validate + gst-integration-testsuites + +- gst-validate: Disable fault signal handlers on macOS + +gst-examples + +- No changes + +Development build environment + +- macos-bison: Update to 3.8.2 and add an ARM64 build +- wrap: update libpsl to 0.21.2 + +Cerbero build tool and packaging changes in 1.22.6 + +- Add Rust support for MSVC ARM64 +- Recognise PERL5LIB as a joinable Unix variable +- Recognise Manjaro as an Arch derivative +- Fix picking up cmake from build-tools + +Contributors to 1.22.6 + +Akihiro Sagawa, Alicia Boya García, Guillaume Desmottes, Haihua Hu, +Hugues Fruchet, Ivan Molodetskikh, Jan Alexander Steffens (heftig), Jan +Schmidt, L. E. Segovia, Mathieu Duponchelle, Matthew Waters, Ming Qian, +Nicolas Dufresne, Nirbheek Chauhan, Olivier Blin, Olivier Crête, +Philippe Normand, Piotr Brzeziński, Robert Ayrapetyan, Ryan Pavlik, +Sebastian Dröge, Seungha Yang, Stéphane Cerveau, Stephan Seitz, Thomas +Schneider, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Wang Chuan, +Xabier Rodriguez Calvar, + +… and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.22.6 + +- List of Merge Requests applied in 1.22.6 +- List of Issues fixed in 1.22.6 + Schedule for 1.24 Our next major feature release will be 1.24, and 1.23 will be the
View file
gst-plugins-bad-1.22.5.tar.xz/RELEASE -> gst-plugins-bad-1.22.6.tar.xz/RELEASE
Changed
@@ -1,4 +1,4 @@ -This is GStreamer gst-plugins-bad 1.22.5. +This is GStreamer gst-plugins-bad 1.22.6. The GStreamer team is thrilled to announce a new major feature release of your favourite cross-platform multimedia framework!
View file
gst-plugins-bad-1.22.5.tar.xz/ext/hls/gsthlssink2.c -> gst-plugins-bad-1.22.6.tar.xz/ext/hls/gsthlssink2.c
Changed
@@ -447,7 +447,9 @@ entry_location = g_path_get_basename (sink->current_location); } else { gchar *name = g_path_get_basename (sink->current_location); - entry_location = g_build_filename (sink->playlist_root, name, NULL); + /* g_build_filename() will insert back slash on Windows */ + entry_location = g_build_path ("/", + sink->playlist_root, name, NULL); g_free (name); }
View file
gst-plugins-bad-1.22.5.tar.xz/ext/mdns/gstmicrodnsdevice.c -> gst-plugins-bad-1.22.6.tar.xz/ext/mdns/gstmicrodnsdevice.c
Changed
@@ -44,6 +44,7 @@ struct _ListenerContext { GMutex lock; + GCond stop_cond; GstDeviceProvider *provider; /* The following fields are protected by @lock */ @@ -362,9 +363,18 @@ done: GST_INFO_OBJECT (ctx->provider, "Done listening"); + /* Wait until we're told to stop, or gst_mdns_device_provider_stop() + can access a freed context */ + g_mutex_lock (&ctx->lock); + while (!ctx->stop) { + g_cond_wait (&ctx->stop_cond, &ctx->lock); + } + g_mutex_unlock (&ctx->lock); + g_sequence_free (ctx->last_seen_devices); g_hash_table_unref (ctx->devices); g_mutex_clear (&ctx->lock); + g_cond_clear (&ctx->stop_cond); g_free (ctx); return NULL; @@ -385,6 +395,7 @@ ListenerContext *ctx = g_new0 (ListenerContext, 1); g_mutex_init (&ctx->lock); + g_cond_init (&ctx->stop_cond); ctx->provider = provider; ctx->devices = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); @@ -405,6 +416,7 @@ g_mutex_lock (&self->current_ctx->lock); self->current_ctx->stop = true; + g_cond_broadcast (&self->current_ctx->stop_cond); g_mutex_unlock (&self->current_ctx->lock); self->current_ctx = NULL;
View file
gst-plugins-bad-1.22.5.tar.xz/ext/webrtc/gstwebrtcbin.c -> gst-plugins-bad-1.22.6.tar.xz/ext/webrtc/gstwebrtcbin.c
Changed
@@ -8945,7 +8945,7 @@ G_CALLBACK (gst_webrtc_bin_add_turn_server), NULL, NULL, NULL, G_TYPE_BOOLEAN, 1, G_TYPE_STRING); - /* + /** * GstWebRTCBin::create-data-channel: * @object: the #GstWebRTCBin * @label: the label for the data channel
View file
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecparsers/gstav1parser.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecparsers/gstav1parser.c
Changed
@@ -2129,20 +2129,37 @@ } } } else { + gint8 ref_idx; + GstAV1SegmenationParams *ref_seg_params; + /* Copy it from prime_ref */ - g_assert (frame_header->primary_ref_frame != GST_AV1_PRIMARY_REF_NONE); - g_assert (parser->state.ref_info. - entryframe_header->ref_frame_idxframe_header->primary_ref_frame. - ref_valid); - memcpy (seg_params, - &parser->state.ref_info. - entryframe_header->ref_frame_idxframe_header-> - primary_ref_frame.ref_segmentation_params, - sizeof (GstAV1SegmenationParams)); + if (frame_header->primary_ref_frame >= GST_AV1_PRIMARY_REF_NONE) { + GST_WARNING ("Invalid primary_ref_frame %d", + frame_header->primary_ref_frame); + return GST_AV1_PARSER_BITSTREAM_ERROR; + } - seg_params->segmentation_update_map = 0; - seg_params->segmentation_temporal_update = 0; - seg_params->segmentation_update_data = 0; + ref_idx = frame_header->ref_frame_idxframe_header->primary_ref_frame; + if (ref_idx >= GST_AV1_NUM_REF_FRAMES || ref_idx < 0) { + GST_WARNING ("Invalid ref_frame_idx %d", ref_idx); + return GST_AV1_PARSER_BITSTREAM_ERROR; + } + + if (!parser->state.ref_info.entryref_idx.ref_valid) { + GST_WARNING ("Reference frame at index %d is unavailable", ref_idx); + return GST_AV1_PARSER_BITSTREAM_ERROR; + } + + ref_seg_params = + &parser->state.ref_info.entryref_idx.ref_segmentation_params; + + for (i = 0; i < GST_AV1_MAX_SEGMENTS; i++) { + for (j = 0; j < GST_AV1_SEG_LVL_MAX; j++) { + seg_params->feature_enabledij = + ref_seg_params->feature_enabledij; + seg_params->feature_dataij = ref_seg_params->feature_dataij; + } + } } } else { seg_params->segmentation_update_map = 0;
View file
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecparsers/gsth265parser.c
Changed
@@ -1845,6 +1845,7 @@ READ_UINT8 (&nr, vps->max_layers_minus1, 6); READ_UINT8 (&nr, vps->max_sub_layers_minus1, 3); + CHECK_ALLOWED (vps->max_sub_layers_minus1, 0, 6); READ_UINT8 (&nr, vps->temporal_id_nesting_flag, 1); /* skip reserved_0xffff_16bits */ @@ -2015,6 +2016,7 @@ READ_UINT8 (&nr, sps->vps_id, 4); READ_UINT8 (&nr, sps->max_sub_layers_minus1, 3); + CHECK_ALLOWED (sps->max_sub_layers_minus1, 0, 6); READ_UINT8 (&nr, sps->temporal_id_nesting_flag, 1); if (!gst_h265_parse_profile_tier_level (&sps->profile_tier_level, &nr,
View file
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecparsers/gstmpegvideoparser.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecparsers/gstmpegvideoparser.c
Changed
@@ -150,13 +150,13 @@ {64, 45}, /* 3, 0.7031 16:9 625 line */ {10000, 7615}, /* 4, 0.7615 */ {10000, 8055}, /* 5, 0.8055 */ - {32, 27}, /* 6, 0.8437 */ + {32, 27}, /* 6, 0.8437 16:9 525 line */ {10000, 8935}, /* 7, 0.8935 */ - {10000, 9375}, /* 8, 0.9375 */ + {10000, 9157}, /* 8, 0.9157 CCIR601, 625 line */ {10000, 9815}, /* 9, 0.9815 */ {10000, 10255}, /* 10, 1.0255 */ {10000, 10695}, /* 11, 1.0695 */ - {8, 9}, /* 12, 1.125 */ + {10000, 10950}, /* 12, 1.0950 CCIR601, 525 line */ {10000, 11575}, /* 13, 1.1575 */ {10000, 12015}, /* 14, 1.2015 */ {0, 0}, /* 15, invalid */
View file
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecs/gsth264decoder.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecs/gsth264decoder.c
Changed
@@ -152,6 +152,12 @@ GstQueueArray *output_queue; gboolean input_state_changed; + + /* Latency report params */ + guint32 max_reorder_count; + guint32 last_reorder_frame_number; + gint fps_n; + gint fps_d; }; typedef struct @@ -407,6 +413,17 @@ } static void +gst_h264_decoder_reset_latency_infos (GstH264Decoder * self) +{ + GstH264DecoderPrivate *priv = self->priv; + + priv->max_reorder_count = 0; + priv->last_reorder_frame_number = 0; + priv->fps_n = 25; + priv->fps_d = 1; +} + +static void gst_h264_decoder_reset (GstH264Decoder * self) { GstH264DecoderPrivate *priv = self->priv; @@ -420,6 +437,8 @@ priv->width = 0; priv->height = 0; priv->nal_length_size = 4; + + gst_h264_decoder_reset_latency_infos (self); } static gboolean @@ -1285,6 +1304,9 @@ gst_h264_picture_unref (picture); return ret; } + + priv->last_reorder_frame_number++; + picture->reorder_frame_number = priv->last_reorder_frame_number; } /* This allows accessing the frame from the picture. */ @@ -1788,6 +1810,28 @@ priv->last_output_poc = picture->pic_order_cnt; + if (priv->last_reorder_frame_number > picture->reorder_frame_number) { + guint64 diff = priv->last_reorder_frame_number - + picture->reorder_frame_number; + guint64 total_delay = diff + priv->preferred_output_delay; + if (diff > priv->max_reorder_count && total_delay < G_MAXUINT32) { + GstClockTime latency; + + priv->max_reorder_count = (guint32) diff; + latency = gst_util_uint64_scale_int (GST_SECOND * total_delay, + priv->fps_d, priv->fps_n); + + if (latency != G_MAXUINT64) { + GST_DEBUG_OBJECT (self, "Updating latency to %" GST_TIME_FORMAT + ", reorder count: %" G_GUINT64_FORMAT ", output-delay: %u", + GST_TIME_ARGS (latency), diff, priv->preferred_output_delay); + + gst_video_decoder_set_latency (GST_VIDEO_DECODER (self), + latency, latency); + } + } + } + frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (self), picture->system_frame_number); @@ -2326,16 +2370,14 @@ bump_level = get_bump_level (self); if (bump_level != GST_H264_DPB_BUMP_NORMAL_LATENCY) { - if (sps->pic_order_cnt_type == 2) { - /* POC type 2 has does not allow frame reordering */ - frames_delay = 0; - } else { - guint32 max_reorder_frames = - gst_h264_dpb_get_max_num_reorder_frames (priv->dpb); - frames_delay = MIN (max_dpb_size, max_reorder_frames); - } + GST_DEBUG_OBJECT (self, "Actual latency will be updated later"); + frames_delay = 0; } + priv->max_reorder_count = frames_delay; + priv->fps_n = fps_n; + priv->fps_d = fps_d; + /* Consider output delay wanted by subclass */ frames_delay += priv->preferred_output_delay; @@ -2450,6 +2492,8 @@ if (ret != GST_FLOW_OK) return ret; + gst_h264_decoder_reset_latency_infos (self); + g_assert (klass->new_sequence); if (klass->get_preferred_output_delay) {
View file
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/codecs/gsth264picture.h -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/codecs/gsth264picture.h
Changed
@@ -155,6 +155,9 @@ GstH264DecRefPicMarking dec_ref_pic_marking; + /* Set by decoder to trace the number of delayed output pictures */ + guint32 reorder_frame_number; + /* For interlaced decoding */ gboolean second_field; GstH264Picture * other_field;
View file
gst-plugins-bad-1.22.5.tar.xz/gst-libs/gst/wayland/gstwlwindow.c -> gst-plugins-bad-1.22.6.tar.xz/gst-libs/gst/wayland/gstwlwindow.c
Changed
@@ -63,6 +63,9 @@ /* the size of the video in the buffers */ gint video_width, video_height; + /* video width scaled according to par */ + gint scaled_width; + enum wl_output_transform buffer_transform; /* when this is not set both the area_surface and the video_surface are not @@ -431,7 +434,7 @@ case WL_OUTPUT_TRANSFORM_180: case WL_OUTPUT_TRANSFORM_FLIPPED: case WL_OUTPUT_TRANSFORM_FLIPPED_180: - src.w = priv->video_width; + src.w = priv->scaled_width; src.h = priv->video_height; break; case WL_OUTPUT_TRANSFORM_90: @@ -439,7 +442,7 @@ case WL_OUTPUT_TRANSFORM_FLIPPED_90: case WL_OUTPUT_TRANSFORM_FLIPPED_270: src.w = priv->video_height; - src.h = priv->video_width; + src.h = priv->scaled_width; break; } @@ -449,6 +452,9 @@ /* center the video_subsurface inside area_subsurface */ if (priv->video_viewport) { gst_video_center_rect (&src, &dst, &res, TRUE); + wp_viewport_set_source (priv->video_viewport, wl_fixed_from_int (0), + wl_fixed_from_int (0), wl_fixed_from_int (priv->video_width), + wl_fixed_from_int (priv->video_height)); wp_viewport_set_destination (priv->video_viewport, res.w, res.h); } else { gst_video_center_rect (&src, &dst, &res, FALSE); @@ -494,8 +500,9 @@ GstWlWindowPrivate *priv = gst_wl_window_get_instance_private (self); if (G_UNLIKELY (info)) { - priv->video_width = + priv->scaled_width = gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d); + priv->video_width = info->width; priv->video_height = info->height; wl_subsurface_set_sync (priv->video_subsurface); @@ -608,14 +615,14 @@ if (!priv->configured) return; - if (priv->video_width != 0) { + if (priv->scaled_width != 0) { wl_subsurface_set_sync (priv->video_subsurface); gst_wl_window_resize_video_surface (self, TRUE); } wl_surface_commit (priv->area_surface_wrapper); - if (priv->video_width != 0) + if (priv->scaled_width != 0) wl_subsurface_set_desync (priv->video_subsurface); }
View file
gst-plugins-bad-1.22.5.tar.xz/gst-plugins-bad.doap -> gst-plugins-bad-1.22.6.tar.xz/gst-plugins-bad.doap
Changed
@@ -35,6 +35,16 @@ <release> <Version> + <revision>1.22.6</revision> + <branch>1.22</branch> + <name></name> + <created>2023-09-20</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.22.6.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.22.5</revision> <branch>1.22</branch> <name></name>
View file
gst-plugins-bad-1.22.5.tar.xz/gst/audiolatency/gstaudiolatency.c -> gst-plugins-bad-1.22.6.tar.xz/gst/audiolatency/gstaudiolatency.c
Changed
@@ -227,7 +227,9 @@ templ = gst_static_pad_template_get (&src_template); srcpad = gst_element_get_static_pad (self->audiosrc, "src"); - gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_BUFFER, + gst_pad_add_probe (srcpad, + GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_QUERY_UPSTREAM | + GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, (GstPadProbeCallback) gst_audiolatency_src_probe, self, NULL); self->srcpad = gst_ghost_pad_new_from_template ("src", srcpad, templ); @@ -383,7 +385,7 @@ } static GstPadProbeReturn -gst_audiolatency_src_probe (GstPad * pad, GstPadProbeInfo * info, +gst_audiolatency_src_probe_buffer (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) { GstAudioLatency *self = user_data; @@ -425,6 +427,46 @@ return GST_PAD_PROBE_OK; } +static GstPadProbeReturn +gst_audiolatency_src_probe (GstPad * pad, GstPadProbeInfo * info, + gpointer user_data) +{ + GstAudioLatency *self = user_data; + + if (info->type & GST_PAD_PROBE_TYPE_BUFFER) { + return gst_audiolatency_src_probe_buffer (pad, info, user_data); + } else if (info->type & GST_PAD_PROBE_TYPE_QUERY_UPSTREAM) { + GstQuery *query = gst_pad_probe_info_get_query (info); + + /* Forward latency query to the upstream sinkpad */ + if (GST_QUERY_TYPE (query) == GST_QUERY_LATENCY) { + gboolean res = gst_pad_peer_query (self->sinkpad, query); + GST_LOG_OBJECT (self, + "Forwarded latency query to sinkpad. Result %d %" GST_PTR_FORMAT, res, + query); + return res ? GST_PAD_PROBE_HANDLED : GST_PAD_PROBE_DROP; + } + } else if (info->type & GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) { + GstEvent *event = gst_pad_probe_info_get_event (info); + + if (GST_EVENT_TYPE (event) == GST_EVENT_LATENCY) { + gboolean res = gst_pad_push_event (self->sinkpad, event); + + GST_LOG_OBJECT (self, + "Forwarded latency event to sinkpad. Result %d %" GST_PTR_FORMAT, res, + event); + if (!res) { + /* This doesn't actually do anything - pad probe handling ignores + * it, but maybe one day */ + GST_PAD_PROBE_INFO_FLOW_RETURN (info) = GST_FLOW_ERROR; + } + return GST_PAD_PROBE_HANDLED; + } + } + + return GST_PAD_PROBE_OK; +} + static GstFlowReturn gst_audiolatency_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
View file
gst-plugins-bad-1.22.5.tar.xz/gst/mxf/mxfd10.c -> gst-plugins-bad-1.22.6.tar.xz/gst/mxf/mxfd10.c
Changed
@@ -119,7 +119,7 @@ gst_buffer_map (buffer, &map, GST_MAP_READ); /* Now transform raw AES3 into raw audio, see SMPTE 331M */ - if ((map.size - 4) % 32 != 0) { + if (map.size < 4 || (map.size - 4) % 32 != 0) { gst_buffer_unmap (buffer, &map); GST_ERROR ("Invalid D10 sound essence buffer size"); return GST_FLOW_ERROR; @@ -219,6 +219,7 @@ GstAudioFormat audio_format; if (s->channel_count == 0 || + s->channel_count > 8 || s->quantization_bits == 0 || s->audio_sampling_rate.n == 0 || s->audio_sampling_rate.d == 0) { GST_ERROR ("Invalid descriptor");
View file
gst-plugins-bad-1.22.5.tar.xz/gst/mxf/mxfup.c -> gst-plugins-bad-1.22.6.tar.xz/gst/mxf/mxfup.c
Changed
@@ -134,6 +134,8 @@ gpointer mapping_data, GstBuffer ** outbuf) { MXFUPMappingData *data = mapping_data; + gsize expected_in_stride = 0, out_stride = 0; + gsize expected_in_size = 0, out_size = 0; /* SMPTE 384M 7.1 */ if (key->u12 != 0x15 || (key->u14 != 0x01 && key->u14 != 0x02 @@ -162,22 +164,25 @@ } } - if (gst_buffer_get_size (buffer) != data->bpp * data->width * data->height) { + // Checked for overflows when parsing the descriptor + expected_in_stride = data->bpp * data->width; + out_stride = GST_ROUND_UP_4 (expected_in_stride); + expected_in_size = expected_in_stride * data->height; + out_size = out_stride * data->height; + + if (gst_buffer_get_size (buffer) != expected_in_size) { GST_ERROR ("Invalid buffer size"); gst_buffer_unref (buffer); return GST_FLOW_ERROR; } - if (data->bpp != 4 - || GST_ROUND_UP_4 (data->width * data->bpp) != data->width * data->bpp) { + if (data->bpp != 4 || out_stride != expected_in_stride) { guint y; GstBuffer *ret; GstMapInfo inmap, outmap; guint8 *indata, *outdata; - ret = - gst_buffer_new_and_alloc (GST_ROUND_UP_4 (data->width * data->bpp) * - data->height); + ret = gst_buffer_new_and_alloc (out_size); gst_buffer_map (buffer, &inmap, GST_MAP_READ); gst_buffer_map (ret, &outmap, GST_MAP_WRITE); indata = inmap.data; @@ -185,8 +190,8 @@ for (y = 0; y < data->height; y++) { memcpy (outdata, indata, data->width * data->bpp); - outdata += GST_ROUND_UP_4 (data->width * data->bpp); - indata += data->width * data->bpp; + outdata += out_stride; + indata += expected_in_stride; } gst_buffer_unmap (buffer, &inmap); @@ -394,6 +399,36 @@ return NULL; } + if (caps) { + MXFUPMappingData *data = *mapping_data; + gsize expected_in_stride = 0, out_stride = 0; + gsize expected_in_size = 0, out_size = 0; + + // Do some checking of the parameters to see if they're valid and + // we can actually work with them. + if (data->image_start_offset > data->image_end_offset) { + GST_WARNING ("Invalid image start/end offset"); + g_free (data); + *mapping_data = NULL; + gst_clear_caps (&caps); + + return NULL; + } + + if (!g_size_checked_mul (&expected_in_stride, data->bpp, data->width) || + (out_stride = GST_ROUND_UP_4 (expected_in_stride)) < expected_in_stride + || !g_size_checked_mul (&expected_in_size, expected_in_stride, + data->height) + || !g_size_checked_mul (&out_size, out_stride, data->height)) { + GST_ERROR ("Invalid resolution or bit depth"); + g_free (data); + *mapping_data = NULL; + gst_clear_caps (&caps); + + return NULL; + } + } + return caps; }
View file
gst-plugins-bad-1.22.5.tar.xz/gst/rtmp2/gstrtmp2sink.c -> gst-plugins-bad-1.22.6.tar.xz/gst/rtmp2/gstrtmp2sink.c
Changed
@@ -821,7 +821,7 @@ gst_rtmp2_sink_render (GstBaseSink * sink, GstBuffer * buffer) { GstRtmp2Sink *self = GST_RTMP2_SINK (sink); - GstBuffer *message; + GstBuffer *message = NULL; GstFlowReturn ret; if (G_UNLIKELY (should_drop_header (self, buffer))) { @@ -833,7 +833,7 @@ if (G_UNLIKELY (!buffer_to_message (self, buffer, &message))) { GST_ELEMENT_ERROR (self, STREAM, FAILED, ("Failed to convert FLV to RTMP"), - ("Failed to convert %" GST_PTR_FORMAT, message)); + ("Failed to convert %" GST_PTR_FORMAT, buffer)); return GST_FLOW_ERROR; }
View file
gst-plugins-bad-1.22.5.tar.xz/gst/rtmp2/rtmp/rtmpclient.c -> gst-plugins-bad-1.22.6.tar.xz/gst/rtmp2/rtmp/rtmpclient.c
Changed
@@ -602,13 +602,6 @@ goto out; } - if (!flash_ver) { - g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_INITIALIZED, - "Flash version is not set"); - g_object_unref (task); - goto out; - } - if (data->auth_query) { const gchar *query = data->auth_query; appstr = g_strdup_printf ("%s?%s", app, query); @@ -649,9 +642,11 @@ gst_amf_node_append_field_string (node, "type", "nonprivate", -1); } - /* "Flash Player version. It is the same string as returned by the - * ApplicationScript getversion () function." */ - gst_amf_node_append_field_string (node, "flashVer", flash_ver, -1); + if (flash_ver) { + /* "Flash Player version. It is the same string as returned by the + * ApplicationScript getversion () function." */ + gst_amf_node_append_field_string (node, "flashVer", flash_ver, -1); + } /* "URL of the source SWF file making the connection." * XXX: libavformat sends "swfUrl" here, if provided. */
View file
gst-plugins-bad-1.22.5.tar.xz/gst/transcode/gsttranscodebin.c -> gst-plugins-bad-1.22.6.tar.xz/gst/transcode/gsttranscodebin.c
Changed
@@ -124,6 +124,9 @@ #define DEFAULT_AVOID_REENCODING FALSE +GST_DEBUG_CATEGORY_STATIC(gst_transcodebin_debug); +#define GST_CAT_DEFAULT gst_transcodebin_debug + G_DEFINE_TYPE (GstTranscodeBin, gst_transcode_bin, GST_TYPE_BIN); GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (transcodebin, "transcodebin", GST_RANK_NONE, GST_TYPE_TRANSCODE_BIN, transcodebin_element_init (plugin)); @@ -303,6 +306,9 @@ TranscodingStream *res = NULL; GST_OBJECT_LOCK (self); + GST_DEBUG_OBJECT (self, + "Looking for stream %s in %u existing transcoding streams", + stream_id, self->transcoding_streams->len); for (i = 0; i < self->transcoding_streams->len; i = i + 1) { TranscodingStream *s = self->transcoding_streams->pdatai; @@ -317,6 +323,7 @@ done: GST_OBJECT_UNLOCK (self); + GST_DEBUG_OBJECT (self, "Look-up result: %p", res); return res; } @@ -327,6 +334,9 @@ TranscodingStream *res = NULL; GstPad *encodebin_pad = get_encodebin_pad_from_stream (self, stream); + GST_DEBUG_OBJECT (self, + "Encodebin pad for stream %" GST_PTR_FORMAT " : %" GST_PTR_FORMAT, stream, + encodebin_pad); if (encodebin_pad) { GST_INFO_OBJECT (self, "Going to transcode stream %s (encodebin pad: %" GST_PTR_FORMAT ")", @@ -410,6 +420,31 @@ } } +static void +query_upstream_selectable (GstTranscodeBin * self, GstPad * pad) +{ + GstQuery *query; + gboolean result; + + /* Query whether upstream can handle stream selection or not */ + query = gst_query_new_selectable (); + result = GST_PAD_IS_SINK (pad) ? gst_pad_peer_query (pad, query) + : gst_pad_query (pad, query); + if (result) { + GST_FIXME_OBJECT (self, + "We force `transcodebin` to upstream selection" + " mode if *any* of the inputs is. This means things might break if" + " there's a mix"); + gst_query_parse_selectable (query, &self->upstream_selected); + GST_DEBUG_OBJECT (pad, "Upstream is selectable : %d", + self->upstream_selected); + } else { + self->upstream_selected = FALSE; + GST_DEBUG_OBJECT (pad, "Upstream does not handle SELECTABLE query"); + } + gst_query_unref (query); +} + static GstPadProbeReturn wait_stream_start_probe (GstPad * pad, GstPadProbeInfo * info, GstTranscodeBin * self) @@ -420,6 +455,7 @@ GST_INFO_OBJECT (self, "Got pad %" GST_PTR_FORMAT " with stream:: %" GST_PTR_FORMAT, pad, info->data); + query_upstream_selectable (self, pad); gst_transcode_bin_link_encodebin_pad (self, pad, info->data); return GST_PAD_PROBE_REMOVE; @@ -440,6 +476,7 @@ gst_event_parse_stream_start (sstart_event, &stream_id); GST_INFO_OBJECT (self, "Got pad %" GST_PTR_FORMAT " with stream ID: %s", pad, stream_id); + query_upstream_selectable (self, pad); gst_transcode_bin_link_encodebin_pad (self, pad, sstart_event); return; } @@ -773,25 +810,8 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_STREAM_START: - { - GstQuery *q = gst_query_new_selectable (); - - /* Query whether upstream can handle stream selection or not */ - if (gst_pad_peer_query (sinkpad, q)) { - GST_FIXME_OBJECT (self, "We force `transcodebin` to upstream selection" - " mode if *any* of the inputs is. This means things might break if" - " there's a mix"); - gst_query_parse_selectable (q, &self->upstream_selected); - GST_DEBUG_OBJECT (sinkpad, "Upstream is selectable : %d", - self->upstream_selected); - } else { - self->upstream_selected = FALSE; - GST_DEBUG_OBJECT (sinkpad, "Upstream does not handle SELECTABLE query"); - } - gst_query_unref (q); - + query_upstream_selectable (self, sinkpad); break; - } default: break; } @@ -997,6 +1017,9 @@ object_class->get_property = gst_transcode_bin_get_property; object_class->set_property = gst_transcode_bin_set_property; + GST_DEBUG_CATEGORY_INIT (gst_transcodebin_debug, "transcodebin", 0, + "Transcodebin element"); + gstelement_klass = (GstElementClass *) klass; gstelement_klass->change_state = GST_DEBUG_FUNCPTR (gst_transcode_bin_change_state);
View file
gst-plugins-bad-1.22.5.tar.xz/gst/videoparsers/gsth265parse.c -> gst-plugins-bad-1.22.6.tar.xz/gst/videoparsers/gsth265parse.c
Changed
@@ -3180,11 +3180,14 @@ off = 23; for (i = 0; i < num_nal_arrays; i++) { + guint8 nalu_type; + if (off + 3 >= size) { gst_buffer_unmap (codec_data, &map); goto hvcc_too_small; } + nalu_type = dataoff & 0x3f; num_nals = GST_READ_UINT16_BE (data + off + 1); off += 3; for (j = 0; j < num_nals; j++) { @@ -3192,6 +3195,15 @@ data, off, size, 2, &nalu); if (parseres != GST_H265_PARSER_OK) { + if (i + 1 == num_nal_arrays && j + 1 == num_nals && + nalu_type != GST_H265_NAL_VPS && nalu_type != GST_H265_NAL_SPS && + nalu_type != GST_H265_NAL_PPS) { + GST_WARNING_OBJECT (h265parse, + "Couldn't parse the last nalu, type %d at array %d / %d", + nalu_type, i, j); + goto codec_data_done; + } + GST_ERROR ("aaa, %d", nalu_type); gst_buffer_unmap (codec_data, &map); goto hvcc_too_small; } @@ -3200,6 +3212,7 @@ off = nalu.offset + nalu.size; } } + codec_data_done: gst_buffer_unmap (codec_data, &map); /* don't confuse codec_data with inband vps/sps/pps */
View file
gst-plugins-bad-1.22.5.tar.xz/meson.build -> gst-plugins-bad-1.22.6.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('gst-plugins-bad', 'c', 'cpp', - version : '1.22.5', + version : '1.22.6', meson_version : '>= 0.62', default_options : 'warning_level=1', 'buildtype=debugoptimized' )
View file
gst-plugins-bad-1.22.5.tar.xz/po/gst-plugins-bad-1.0.pot -> gst-plugins-bad-1.22.6.tar.xz/po/gst-plugins-bad-1.0.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.22.5\n" +"Project-Id-Version: gst-plugins-bad-1.22.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-20 15:26+0100\n" +"POT-Creation-Date: 2023-09-20 18:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
View file
gst-plugins-bad-1.22.5.tar.xz/po/gst-plugins-bad.pot -> gst-plugins-bad-1.22.6.tar.xz/po/gst-plugins-bad.pot
Changed
@@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad-1.22.5\n" +"Project-Id-Version: gst-plugins-bad-1.22.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-07-20 15:26+0100\n" +"POT-Creation-Date: 2023-09-20 18:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
View file
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gst-android-hardware-camera.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gst-android-hardware-camera.c
Changed
@@ -979,6 +979,7 @@ } } else { android_hardware_camera_parameters.EFFECT_EMBOSS = NULL; + g_clear_error (&err); } fieldID = @@ -1000,6 +1001,7 @@ } } else { android_hardware_camera_parameters.EFFECT_SKETCH = NULL; + g_clear_error (&err); } fieldID = @@ -1021,6 +1023,7 @@ } } else { android_hardware_camera_parameters.EFFECT_NEON = NULL; + g_clear_error (&err); } fieldID = @@ -1519,6 +1522,7 @@ } } else { android_hardware_camera_parameters.SCENE_MODE_BACKLIGHT = NULL; + g_clear_error (&err); } fieldID = @@ -1540,6 +1544,7 @@ } } else { android_hardware_camera_parameters.SCENE_MODE_FLOWERS = NULL; + g_clear_error (&err); } fieldID = @@ -1561,6 +1566,7 @@ } } else { android_hardware_camera_parameters.SCENE_MODE_AR = NULL; + g_clear_error (&err); } fieldID = @@ -1582,6 +1588,7 @@ } } else { android_hardware_camera_parameters.SCENE_MODE_HDR = NULL; + g_clear_error (&err); } fieldID =
View file
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamc-constants.h -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamc-constants.h
Changed
@@ -31,7 +31,8 @@ { BUFFER_FLAG_SYNC_FRAME = 1, BUFFER_FLAG_CODEC_CONFIG = 2, - BUFFER_FLAG_END_OF_STREAM = 4 + BUFFER_FLAG_END_OF_STREAM = 4, + BUFFER_FLAG_PARTIAL_FRAME = 8, }; enum
View file
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamc.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamc.c
Changed
@@ -2372,18 +2372,13 @@ g_value_reset (&v); encoded_ret = gst_caps_merge_structure (encoded_ret, tmp3); - have_profile_level = TRUE; } - } - - if (have_profile_level) { gst_structure_free (tmp2); } else { encoded_ret = gst_caps_merge_structure (encoded_ret, tmp2); + have_profile_level = TRUE; } - - have_profile_level = TRUE; } }
View file
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamcvideodec.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamcvideodec.c
Changed
@@ -1134,7 +1134,7 @@ * * As a result, we need to advance the ready counter somehow ourselves when * such events happen. There is no reliable way of knowing when/if the frame - * listener is going to fire. The only uniqueu identifier, + * listener is going to fire. The only unique identifier, * SurfaceTexture::get_timestamp seems to always return 0. * * The maximum queue size as defined in
View file
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstamcvideoenc.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstamcvideoenc.c
Changed
@@ -877,6 +877,16 @@ if (best) gst_video_codec_frame_ref (best); + GST_DEBUG_OBJECT (self, "found best %p from %u frames", best, + g_list_length (frames)); + if (best) { + GST_LOG_OBJECT (self, "best %p (input pts %" GST_TIME_FORMAT " dts %" + GST_TIME_FORMAT " frame no %" G_GUINT32_FORMAT " buffer %" + GST_PTR_FORMAT, best, GST_TIME_ARGS (best->pts), + GST_TIME_ARGS (best->dts), best->system_frame_number, + best->input_buffer); + } + g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL); g_list_free (frames); @@ -954,56 +964,14 @@ GstFlowReturn flow_ret = GST_FLOW_OK; GstVideoEncoder *encoder = GST_VIDEO_ENCODER_CAST (self); - /* The BUFFER_FLAG_CODEC_CONFIG logic is borrowed from - * gst-omx. see *_handle_output_frame in - * gstomxvideoenc.c and gstomxh264enc.c */ - if ((buffer_info->flags & BUFFER_FLAG_CODEC_CONFIG) - && buffer_info->size > 0) { - - if (self->codec_data_in_bytestream) { - if (buffer_info->size > 4 && - GST_READ_UINT32_BE (buf->data + buffer_info->offset) == 0x00000001) { - GList *l = NULL; - GstBuffer *hdrs; - - GST_DEBUG_OBJECT (self, "got codecconfig in byte-stream format"); - - hdrs = gst_buffer_new_and_alloc (buffer_info->size); - gst_buffer_fill (hdrs, 0, buf->data + buffer_info->offset, - buffer_info->size); - GST_BUFFER_PTS (hdrs) = - gst_util_uint64_scale (buffer_info->presentation_time_us, - GST_USECOND, 1); - - l = g_list_append (l, hdrs); - gst_video_encoder_set_headers (encoder, l); - } - } else { - GstBuffer *codec_data; - GstVideoCodecState *output_state = - gst_video_encoder_get_output_state (GST_VIDEO_ENCODER (self)); - - GST_DEBUG_OBJECT (self, "Handling codec data"); - - codec_data = gst_buffer_new_and_alloc (buffer_info->size); - gst_buffer_fill (codec_data, 0, buf->data + buffer_info->offset, - buffer_info->size); - output_state->codec_data = codec_data; - gst_video_codec_state_unref (output_state); - - if (!gst_video_encoder_negotiate (encoder)) { - gst_video_codec_frame_unref (frame); - return GST_FLOW_NOT_NEGOTIATED; - } - - return GST_FLOW_OK; - } - } - if (buffer_info->size > 0) { GstBuffer *out_buf; GstPad *srcpad; + if (buffer_info->flags & BUFFER_FLAG_PARTIAL_FRAME) { + GST_FIXME_OBJECT (self, "partial frames are currently not handled"); + } + srcpad = GST_VIDEO_ENCODER_SRC_PAD (encoder); out_buf = gst_video_encoder_allocate_output_buffer (encoder, buffer_info->size); @@ -1023,7 +991,10 @@ * caps and filling it */ - GST_ERROR_OBJECT (self, "No corresponding frame found"); + GST_ERROR_OBJECT (self, "No corresponding frame found: buffer pts: %" + GST_TIME_FORMAT " presentation_time_us %" G_GUINT64_FORMAT, + GST_TIME_ARGS (GST_BUFFER_PTS (out_buf)), + (guint64) buffer_info->presentation_time_us); flow_ret = gst_pad_push (srcpad, out_buf); } } else if (frame) { @@ -1036,9 +1007,10 @@ static void gst_amc_video_enc_loop (GstAmcVideoEnc * self) { + GstVideoEncoder *encoder = GST_VIDEO_ENCODER_CAST (self); GstVideoCodecFrame *frame; GstFlowReturn flow_ret = GST_FLOW_OK; - gboolean is_eos; + gboolean is_eos, is_codec_data; GstAmcBufferInfo buffer_info; GstAmcBuffer *buf; gint idx; @@ -1148,14 +1120,62 @@ goto got_null_output_buffer; } - frame = - _find_nearest_frame (self, - gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND, 1)); + is_codec_data = FALSE; + /* The BUFFER_FLAG_CODEC_CONFIG logic is borrowed from + * gst-omx. see *_handle_output_frame in + * gstomxvideoenc.c and gstomxh264enc.c */ + if ((buffer_info.flags & BUFFER_FLAG_CODEC_CONFIG) + && buffer_info.size > 0) { + + if (self->codec_data_in_bytestream) { + if (buffer_info.size > 4 && + GST_READ_UINT32_BE (buf->data + buffer_info.offset) == 0x00000001) { + GList *l = NULL; + GstBuffer *hdrs; + + GST_DEBUG_OBJECT (self, "got codecconfig in byte-stream format"); + + hdrs = gst_buffer_new_and_alloc (buffer_info.size); + gst_buffer_fill (hdrs, 0, buf->data + buffer_info.offset, + buffer_info.size); + GST_BUFFER_PTS (hdrs) = + gst_util_uint64_scale (buffer_info.presentation_time_us, + GST_USECOND, 1); + + l = g_list_append (l, hdrs); + gst_video_encoder_set_headers (encoder, l); + is_codec_data = TRUE; + } + } else { + GstBuffer *codec_data; + GstVideoCodecState *output_state = + gst_video_encoder_get_output_state (GST_VIDEO_ENCODER (self)); + + GST_DEBUG_OBJECT (self, "Handling codec data"); + + codec_data = gst_buffer_new_and_alloc (buffer_info.size); + gst_buffer_fill (codec_data, 0, buf->data + buffer_info.offset, + buffer_info.size); + output_state->codec_data = codec_data; + gst_video_codec_state_unref (output_state); + is_codec_data = TRUE; + + if (!gst_video_encoder_negotiate (encoder)) + flow_ret = GST_FLOW_NOT_NEGOTIATED; + } + } is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM); - flow_ret = - gst_amc_video_enc_handle_output_frame (self, buf, &buffer_info, frame); + if (flow_ret == GST_FLOW_OK && !is_codec_data) { + frame = + _find_nearest_frame (self, + gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND, + 1)); + + flow_ret = + gst_amc_video_enc_handle_output_frame (self, buf, &buffer_info, frame); + } gst_amc_buffer_free (buf); buf = NULL;
View file
gst-plugins-bad-1.22.5.tar.xz/sys/androidmedia/gstjniutils.c -> gst-plugins-bad-1.22.6.tar.xz/sys/androidmedia/gstjniutils.c
Changed
@@ -201,6 +201,8 @@ gst_amc_jni_object_make_global (JNIEnv * env, jobject object) { jobject ret; + g_return_val_if_fail (env != NULL, NULL); + g_return_val_if_fail (object != NULL, NULL); ret = (*env)->NewGlobalRef (env, object); if (!ret) { @@ -215,6 +217,8 @@ gst_amc_jni_object_ref (JNIEnv * env, jobject object) { jobject ret; + g_return_val_if_fail (env != NULL, NULL); + g_return_val_if_fail (object != NULL, NULL); ret = (*env)->NewGlobalRef (env, object); if (!ret) { @@ -226,6 +230,7 @@ void gst_amc_jni_object_unref (JNIEnv * env, jobject object) { + g_return_if_fail (env != NULL); g_return_if_fail (object != NULL); (*env)->DeleteGlobalRef (env, object); @@ -234,6 +239,7 @@ void gst_amc_jni_object_local_unref (JNIEnv * env, jobject object) { + g_return_if_fail (env != NULL); g_return_if_fail (object != NULL); (*env)->DeleteLocalRef (env, object);
View file
gst-plugins-bad-1.22.5.tar.xz/sys/applemedia/avsamplevideosink.m -> gst-plugins-bad-1.22.6.tar.xz/sys/applemedia/avsamplevideosink.m
Changed
@@ -288,11 +288,8 @@ return kCVPixelFormatType_24RGB; case GST_VIDEO_FORMAT_BGR: return kCVPixelFormatType_24BGR; -#if 0 - /* FIXME doesn't seem to work */ case GST_VIDEO_FORMAT_NV12: return kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange; -#endif case GST_VIDEO_FORMAT_I420: return kCVPixelFormatType_420YpCbCr8Planar; case GST_VIDEO_FORMAT_YUY2: @@ -330,10 +327,8 @@ return GST_VIDEO_FORMAT_RGB; case kCVPixelFormatType_24BGR: return GST_VIDEO_FORMAT_BGR; -#if 0 case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: return GST_VIDEO_FORMAT_NV12; -#endif case kCVPixelFormatType_420YpCbCr8Planar: return GST_VIDEO_FORMAT_I420; case kCVPixelFormatType_422YpCbCr8_yuvs:
View file
gst-plugins-bad-1.22.5.tar.xz/sys/applemedia/coremediabuffer.c -> gst-plugins-bad-1.22.6.tar.xz/sys/applemedia/coremediabuffer.c
Changed
@@ -123,6 +123,8 @@ gst_core_media_buffer_get_video_format (OSType format) { switch (format) { + case kCVPixelFormatType_420YpCbCr8Planar: + return GST_VIDEO_FORMAT_I420; case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: return GST_VIDEO_FORMAT_NV12; case kCVPixelFormatType_422YpCbCr8_yuvs:
View file
gst-plugins-bad-1.22.5.tar.xz/sys/applemedia/corevideobuffer.c -> gst-plugins-bad-1.22.6.tar.xz/sys/applemedia/corevideobuffer.c
Changed
@@ -216,6 +216,8 @@ gst_core_video_get_video_format (OSType format) { switch (format) { + case kCVPixelFormatType_420YpCbCr8Planar: + return GST_VIDEO_FORMAT_I420; case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: return GST_VIDEO_FORMAT_NV12; case kCVPixelFormatType_422YpCbCr8_yuvs:
View file
gst-plugins-bad-1.22.5.tar.xz/sys/d3d11/gstd3d11convert.cpp -> gst-plugins-bad-1.22.6.tar.xz/sys/d3d11/gstd3d11convert.cpp
Changed
@@ -1189,6 +1189,7 @@ gst_d3d11_base_convert_propose_allocation (GstBaseTransform * trans, GstQuery * decide_query, GstQuery * query) { + GstD3D11BaseConvert *self = GST_D3D11_BASE_CONVERT (trans); GstD3D11BaseFilter *filter = GST_D3D11_BASE_FILTER (trans); GstVideoInfo info; GstBufferPool *pool = NULL; @@ -1205,8 +1206,18 @@ ID3D11Device *device_handle; if (!GST_BASE_TRANSFORM_CLASS (parent_class)->propose_allocation (trans, - decide_query, query)) + decide_query, query)) { return FALSE; + } + + if (self->same_caps) { + if (!gst_pad_peer_query (trans->srcpad, query)) + return FALSE; + + gst_query_add_allocation_meta (query, + GST_VIDEO_CROP_META_API_TYPE, nullptr); + return TRUE; + } gst_query_parse_allocation (query, &caps, NULL);
View file
gst-plugins-bad-1.22.5.tar.xz/sys/nvcodec/gstnvencoder.cpp -> gst-plugins-bad-1.22.6.tar.xz/sys/nvcodec/gstnvencoder.cpp
Changed
@@ -183,6 +183,7 @@ gst_video_encoder_set_min_pts (GST_VIDEO_ENCODER (self), GST_SECOND * 60 * 60 * 1000); + GST_PAD_SET_ACCEPT_INTERSECT (GST_VIDEO_ENCODER_SINK_PAD (self)); } static void
View file
gst-plugins-bad-1.22.5.tar.xz/sys/va/gstvadecoder.c -> gst-plugins-bad-1.22.6.tar.xz/sys/va/gstvadecoder.c
Changed
@@ -328,7 +328,7 @@ VA_PROGRESSIVE, render_targets, num_render_targets, &context); if (status != VA_STATUS_SUCCESS) { - GST_ERROR_OBJECT (self, "vaDestroyConfig: %s", vaErrorStr (status)); + GST_ERROR_OBJECT (self, "vaCreateContext: %s", vaErrorStr (status)); return FALSE; }
View file
gst-plugins-bad-1.22.5.tar.xz/sys/va/gstvadisplay_priv.c -> gst-plugins-bad-1.22.6.tar.xz/sys/va/gstvadisplay_priv.c
Changed
@@ -146,7 +146,7 @@ status = vaQueryConfigEntrypoints (dpy, VAProfileNone, entrypoints, &num); if (status != VA_STATUS_SUCCESS) { - GST_ERROR ("vaQueryImageFormats: %s", vaErrorStr (status)); + GST_ERROR ("vaQueryConfigEntrypoints: %s", vaErrorStr (status)); goto bail; }
View file
gst-plugins-bad-1.22.5.tar.xz/sys/win32ipc/protocol/win32ipcpipeserver.cpp -> gst-plugins-bad-1.22.6.tar.xz/sys/win32ipc/protocol/win32ipcpipeserver.cpp
Changed
@@ -449,6 +449,9 @@ self->conn.clear (); + if (pipe != INVALID_HANDLE_VALUE) + CloseHandle (pipe); + lk.lock (); CloseHandle (overlap.hEvent); self->last_err = ERROR_OPERATION_ABORTED;
View file
gst-plugins-bad-1.22.5.tar.xz/tests/check/elements/h265parse.c -> gst-plugins-bad-1.22.6.tar.xz/tests/check/elements/h265parse.c
Changed
@@ -1116,6 +1116,68 @@ GST_END_TEST; +GST_START_TEST (test_invalid_sei_in_hvcc) +{ + GstHarness *h; + GstCaps *caps; + GstBuffer *codec_data; + /* Consists of 4 arrays (VPS, SPS, PPS, SEI -> broken) and each array contains + * single nalu + * Captured from the log at + * https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2905 + */ + static const guint8 hvcc_data = { + 0x01, 0x01, 0x01, 0x01, 0x60, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0xfc, 0xfd, 0xf8, 0xf8, 0x00, 0x00, 0x0f, 0x04, 0x20, + 0x00, 0x01, 0x00, 0x17, 0x40, 0x01, 0x0c, 0x01, 0xff, 0xff, 0x01, 0x60, + 0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, + 0x7b, 0xac, 0x09, 0x21, 0x00, 0x01, 0x00, 0x42, 0x42, 0x01, 0x01, 0x01, + 0x60, 0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, + 0x00, 0x7b, 0xa0, 0x02, 0x80, 0x80, 0x2d, 0x1f, 0xe3, 0x6b, 0xbb, 0x53, + 0x77, 0x72, 0x5d, 0x60, 0x2d, 0xc0, 0x40, 0x40, 0x41, 0x00, 0x00, 0x03, + 0x03, 0xe8, 0x00, 0x00, 0x4e, 0x20, 0x72, 0x1d, 0xee, 0x51, 0x00, 0x05, + 0xdc, 0x00, 0x00, 0x1a, 0x5e, 0x00, 0x00, 0x2e, 0xe0, 0x00, 0x00, 0xd2, + 0xf0, 0x08, 0x22, 0x00, 0x01, 0x00, 0x0b, 0x44, 0x01, 0xc1, 0x72, 0xb0, + 0x9c, 0x38, 0x77, 0x06, 0x0c, 0x24, 0x27, 0x00, 0x01, 0x00, 0x00, 0x00 + }; + + caps = gst_caps_new_simple ("video/x-h265", "stream-format", G_TYPE_STRING, + "hvc1", "alignment", G_TYPE_STRING, "au", NULL); + codec_data = gst_buffer_new_memdup (hvcc_data, sizeof (hvcc_data)); + gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, codec_data, NULL); + gst_buffer_unref (codec_data); + + h = gst_harness_new ("h265parse"); + gst_harness_set_src_caps (h, caps); + gst_harness_push_event (h, gst_event_new_eos ()); + + while (TRUE) { + GstEvent *event = gst_harness_pull_event (h); + fail_unless (event); + + if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS) { + GstStructure *s; + gint width, height; + + gst_event_parse_caps (event, &caps); + s = gst_caps_get_structure (caps, 0); + + fail_unless (gst_structure_get_int (s, "width", &width)); + fail_unless_equals_int (width, 1280); + fail_unless (gst_structure_get_int (s, "height", &height)); + fail_unless_equals_int (height, 720); + + gst_event_unref (event); + break; + } + + gst_event_unref (event); + } + + gst_harness_teardown (h); +} + +GST_END_TEST; static Suite * h265parse_harnessed_suite (void) @@ -1152,6 +1214,8 @@ tcase_add_test (tc_chain, test_drain); + tcase_add_test (tc_chain, test_invalid_sei_in_hvcc); + return s; }
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.