On Tue, Mar 4, 2025 at 5:14 PM Kacper Michajłow <kaspe...@gmail.com> wrote: > > Signed-off-by: Kacper Michajłow <kaspe...@gmail.com> > --- > compat/w32pthreads.h | 30 ++++++++++++++++++++++++++++++ > libavutil/thread.h | 2 ++ > 2 files changed, 32 insertions(+) > > diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h > index fd6428e29f..8d5b4729fa 100644 > --- a/compat/w32pthreads.h > +++ b/compat/w32pthreads.h > @@ -44,6 +44,7 @@ > #include "libavutil/internal.h" > #include "libavutil/mem.h" > #include "libavutil/time.h" > +#include "libavutil/wchar_filename.h" > > typedef struct pthread_t { > void *handle; > @@ -209,4 +210,33 @@ static inline int pthread_setcancelstate(int state, int > *oldstate) > return 0; > } > > +static inline int win32_thread_setname(const char *name) > +{ > + typedef HRESULT (WINAPI *SetThreadDescriptionFn)(HANDLE, PCWSTR); > + SetThreadDescriptionFn pSetThreadDescription; > + HRESULT hr; > + wchar_t *wname; > + > +#if !HAVE_UWP > + HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); > + if (!kernel32) > + return AVERROR(ENOSYS); > + pSetThreadDescription = (SetThreadDescriptionFn) > + GetProcAddress(kernel32, "SetThreadDescription"); > + if (!pSetThreadDescription) > + return AVERROR(ENOSYS); > +#else > + WINBASEAPI HRESULT WINAPI > + SetThreadDescription(HANDLE hThread, PCWSTR lpThreadDescription); > + pSetThreadDescription = &SetThreadDescription; > +#endif > + > + if (utf8towchar(name, &wname) < 0) > + return AVERROR(ENOMEM); > + > + hr = pSetThreadDescription(GetCurrentThread(), wname); > + av_free(wname); > + return SUCCEEDED(hr) ? 0 : AVERROR(EINVAL); > +} > +
I can only comment on the non-UWP side of things, but in general the code seems fine. I guess this function definition has not been in mingw-w64 etc for long enough to hope it would always be there and thus we need to define it (similar to pf_DXGIGetDebugInterface)? The only question mark that is left is whether this functionality is actually in kernel32 or kernelbase. When I first saw https://stackoverflow.com/questions/62243162/how-to-access-setthreaddescription-in-windows-2016-server-version-1607 I more or less thought of it as a possibly fluke or so, but then apparently mingw-w64 went for kernelbase as well in winpthreads? https://sourceforge.net/p/mingw-w64/mailman/message/58829419/ What it seems like is that kernel32 works for (at the very least) 20+ versions of win10+, and older stuff such as the still-supported server 2016 requires direct usage of kernelbase? Jan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".