Projects
Essentials
gstreamer-plugins-bad-codecs
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
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
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
.