Compare commits

...

4 commits

Author SHA1 Message Date
Nicolas Dufresne 6e704a4919 Merge branch 'gst-devtools-video-aware-checksum' into 'main'
WIP: pad-monitor: Make the checksum video padding agnostic

See merge request gstreamer/gstreamer!968
2024-04-27 19:10:03 +00:00
Nirbheek Chauhan d7eeb62f38 meson: Fix Python library searching on Windows
Neither LIBDIR nor LIBPL are set with the native windows Python
(unlike MSYS2), so we need to use `prefix` which takes us to the
rootdir of the Python installation.

The name is also different: it's python312.dll, not python3.12.dll.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6734>
2024-04-27 01:30:21 +00:00
Nirbheek Chauhan 753aeccde7 meson: Fix Python library name fetching on Windows
`python.get_variable('FOO', [])` becomes `python.get_variable('FOO')`
due to how Meson treats empty arrays in arguments, which breaks the
fallback feature of get_variable().

So we need to actually check whether the variable exists before trying
to fetch it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6734>
2024-04-27 01:30:21 +00:00
Nicolas Dufresne 654f71576f pad-monitor: Make the checksum video padding agnostic
We make a copy of the frame to remove any padding that was added. This will
normalize the video buffer size so that checksum will be the same
regardless of the decoder being used. This is useful when testing bitstream
for conformance.
2021-09-29 09:59:15 -04:00
2 changed files with 56 additions and 16 deletions

View file

@ -2205,6 +2205,8 @@ gst_validate_pad_monitor_check_right_buffer (GstValidatePadMonitor *
gchar *checksum;
GstBuffer *wanted_buf;
GstMapInfo map, wanted_map;
GstVideoFrame cropped_frame;
GstVideoMeta *vmeta;
gboolean ret = TRUE;
GstPad *pad;
@ -2267,7 +2269,27 @@ gst_validate_pad_monitor_check_right_buffer (GstValidatePadMonitor *
}
g_assert (gst_buffer_map (wanted_buf, &wanted_map, GST_MAP_READ));
g_assert (gst_buffer_map (buffer, &map, GST_MAP_READ));
vmeta = gst_buffer_get_video_meta (buffer);
if (vmeta) {
GstVideoInfo vinfo;
GstVideoFrame src;
GstBuffer *copy;
gst_video_info_set_format (&vinfo, vmeta->format, vmeta->width,
vmeta->height);
copy = gst_buffer_new_and_alloc (vinfo.size);
g_assert (gst_video_frame_map (&src, &vinfo, buffer, GST_MAP_READ));
g_assert (gst_video_frame_map (&cropped_frame, &vinfo, copy,
GST_MAP_READWRITE));
gst_buffer_unref (copy);
gst_video_frame_copy (&src, &cropped_frame);
gst_video_frame_unmap (&src);
map = *cropped_frame.map;
} else {
g_assert (gst_buffer_map (buffer, &map, GST_MAP_READ));
}
checksum = g_compute_checksum_for_data (G_CHECKSUM_MD5,
(const guchar *) map.data, map.size);
@ -2280,7 +2302,12 @@ gst_validate_pad_monitor_check_right_buffer (GstValidatePadMonitor *
}
gst_buffer_unmap (wanted_buf, &wanted_map);
gst_buffer_unmap (buffer, &map);
if (vmeta)
gst_video_frame_unmap (&cropped_frame);
else
gst_buffer_unmap (buffer, &map);
g_free (checksum);
gst_object_unref (pad);

View file

@ -45,35 +45,53 @@ pylib_loc = get_option('libpython-dir')
fsmod = import('fs')
pylib_prefix = 'lib'
pylib_suffix = 'so'
pylib_ver = python_dep.version()
pylib_locs = []
if host_system == 'windows'
if cc.get_argument_syntax() == 'msvc'
pylib_prefix = ''
endif
pylib_suffix = 'dll'
pylib_ver = pylib_ver.replace('.', '')
elif host_system == 'darwin'
pylib_suffix = 'dylib'
endif
pylib_fnames = []
# Library name with soversion, non-devel package
pylib_fnames += python.get_variable('INSTSONAME', [])
if python.has_variable('INSTSONAME')
# For example, libpython3.12.so.1.0 (Linux), libpython3.11.dll.a (MSYS2), etc.
pylib_fnames += python.get_variable('INSTSONAME')
endif
# Library name without soversion, devel package, framework, etc.
pylib_fnames += python.get_variable('LDLIBRARY', [])
if python.has_variable('LDLIBRARY')
# For example, libpython3.12.so (Linux), libpython3.11.dll.a (MSYS2), etc.
pylib_fnames += python.get_variable('LDLIBRARY')
endif
# Manually construct name as a fallback
pylib_fnames += [
pylib_prefix + 'python' + python_dep.version() + python_abi_flags + '.' + pylib_suffix
pylib_prefix + 'python' + pylib_ver + python_abi_flags + '.' + pylib_suffix
]
if pylib_loc != ''
pylib_locs = [pylib_loc]
else
pylib_locs = [
python.get_variable('LIBDIR', ''),
python.get_variable('LIBPL', ''),
]
if python.has_variable('LIBDIR')
pylib_locs += python.get_variable('LIBDIR')
endif
if python.has_variable('LIBPL')
pylib_locs += python.get_variable('LIBPL')
endif
# On Windows, python312.dll is in the rootdir where Python is installed,
# which is configured as the "prefix" in sysconfig.
if host_system == 'windows'
pylib_locs += python.get_variable('prefix')
endif
endif
pylib_fname = ''
foreach loc: pylib_locs
foreach fname: pylib_fnames
if fsmod.exists(loc / fname)
fpath = loc / fname
debug(f'Looking for Python library at: @fpath@')
if fsmod.exists(fpath)
pylib_fname = fname
message(f'PY_LIB_FNAME = @fname@ (@loc@)')
break
@ -81,12 +99,7 @@ foreach loc: pylib_locs
endforeach
endforeach
if pylib_fname == ''
error_msg = 'Could not find python library to load'
if python_opt.enabled()
error(error_msg)
else
message(error_msg)
endif
message('Could not find python library to load, will try loading at runtime')
endif
pygi_override_dir = get_option('pygi-overrides-dir')