Download raw body.
mplayer generates X11 errors and no longer renders video
On 2024-12-01 9:57 a.m., Matthieu Herrb wrote:
> On Fri, Nov 29, 2024 at 09:07:16PM -0500, Brad Smith wrote:
>> On 2024-11-29 4:10 p.m., Stuart Henderson wrote:
>>> dmesg is missing. It would also be helpful to include pkg_info to see
>>> which packages are installed (both for version numbers of things, and
>>> to see if anything vaapi-related is there).
>>
>> The last part is not relevant for MPlayer, but more details are necessary.
>>
> Hi Brad,
>
> I can reproduce this with mplayer-20240803. This is caused by mplayer
> still using the 20th century XSHM api and having changed shmget() to
> create the shared memory segment with mode 0600 instead of 0777.
>
> The patch below to the mplayer port should fix it.
>
> ok ?
>
> Index: Makefile
> ===================================================================
> RCS file: /local/cvs/ports/x11/mplayer/Makefile,v
> diff -u -p -u -r1.332 Makefile
> --- Makefile 29 Nov 2024 09:52:09 -0000 1.332
> +++ Makefile 1 Dec 2024 14:56:36 -0000
> @@ -3,7 +3,7 @@ COMMENT= movie player supporting many fo
> V= 20240803
> FFMPEG_V= 6.1.2
> DISTNAME= mplayer-${V}
> -REVISION= 0
> +REVISION= 1
> CATEGORIES= x11 multimedia
> SITES= https://comstyle.com/source/
> EXTRACT_SUFX= .tar.xz
> Index: patches/patch-libvo_vo_x11_c
> ===================================================================
> RCS file: patches/patch-libvo_vo_x11_c
> diff -N patches/patch-libvo_vo_x11_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-libvo_vo_x11_c 1 Dec 2024 14:56:36 -0000
> @@ -0,0 +1,12 @@
> +Index: libvo/vo_x11.c
> +--- libvo/vo_x11.c.orig
> ++++ libvo/vo_x11.c
> +@@ -150,7 +150,7 @@ static void getMyXImage(void)
> + }
> + Shminfo[0].shmid = shmget(IPC_PRIVATE,
> + myximage->bytes_per_line *
> +- myximage->height, IPC_CREAT | SHM_R | SHM_W);
> ++ myximage->height, IPC_CREAT | 0777);
> + if (Shminfo[0].shmid< 0) + { + XDestroyImage(myximage); Index: patches/patch-libvo_vo_xv_c
> ===================================================================
> RCS file: patches/patch-libvo_vo_xv_c diff -N
> patches/patch-libvo_vo_xv_c --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-libvo_vo_xv_c 1 Dec 2024 14:56:36 -0000 @@ -0,0
> +1,12 @@ +Index: libvo/vo_xv.c +--- libvo/vo_xv.c.orig ++++
> libvo/vo_xv.c +@@ -279,7 +279,7 @@ static void allocate_xvimage(int
> foo) + &Shminfo[foo]); + + Shminfo[foo].shmid = +- shmget(IPC_PRIVATE,
> xvimage[foo]->data_size, IPC_CREAT | SHM_R | SHM_W);
> ++ shmget(IPC_PRIVATE, xvimage[foo]->data_size, IPC_CREAT | 0777);
> + Shminfo[foo].shmaddr = (char *) shmat(Shminfo[foo].shmid, 0, 0);
> + Shminfo[foo].readOnly = False;
> +
Yup, here is the original commit.
r38419 | ib | 2023-04-22 18:58:52 -0400 (Sat, 22 Apr 2023) | 10 lines
Use appropriate shared memory permissions.
An umask setting does not affect the permissions assigned to
System V IPC objects created by the process using shmget().
Original patch by Vladimir D. Seleznev, vseleznv altlinux org,
slightly modified by committer.
Reported by Wladmis, dev wladmis org.
$ svn diff -r38418:38419
Index: gui/wm/ws.c
===================================================================
--- gui/wm/ws.c (revision 38418)
+++ gui/wm/ws.c (revision 38419)
@@ -1357,7 +1357,7 @@
mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0);
}
- win->Shminfo.shmid = shmget(IPC_PRIVATE,
win->xImage->bytes_per_line * win->xImage->height, IPC_CREAT | 0777);
+ win->Shminfo.shmid = shmget(IPC_PRIVATE,
win->xImage->bytes_per_line * win->xImage->height, IPC_CREAT | SHM_R |
SHM_W);
if (win->Shminfo.shmid < 0) {
XDestroyImage(win->xImage);
Index: libvo/vo_x11.c
===================================================================
--- libvo/vo_x11.c (revision 38418)
+++ libvo/vo_x11.c (revision 38419)
@@ -150,7 +150,7 @@
}
Shminfo[0].shmid = shmget(IPC_PRIVATE,
myximage->bytes_per_line *
- myximage->height, IPC_CREAT | 0777);
+ myximage->height, IPC_CREAT | SHM_R |
SHM_W);
if (Shminfo[0].shmid < 0)
{
XDestroyImage(myximage);
Index: libvo/vo_xv.c
===================================================================
--- libvo/vo_xv.c (revision 38418)
+++ libvo/vo_xv.c (revision 38419)
@@ -279,7 +279,7 @@
&Shminfo[foo]);
Shminfo[foo].shmid =
- shmget(IPC_PRIVATE, xvimage[foo]->data_size, IPC_CREAT | 0777);
+ shmget(IPC_PRIVATE, xvimage[foo]->data_size, IPC_CREAT |
SHM_R | SHM_W);
Shminfo[foo].shmaddr = (char *) shmat(Shminfo[foo].shmid, 0, 0);
Shminfo[foo].readOnly = False;
Index: libvo/vo_xvmc.c
===================================================================
--- libvo/vo_xvmc.c (revision 38418)
+++ libvo/vo_xvmc.c (revision 38419)
@@ -203,7 +203,7 @@
if (!xvimage->data_size)
goto shmgetfail;
- Shminfo.shmid = shmget(IPC_PRIVATE, xvimage->data_size,
IPC_CREAT | 0777);
+ Shminfo.shmid = shmget(IPC_PRIVATE, xvimage->data_size,
IPC_CREAT | SHM_R | SHM_W);
if (Shminfo.shmid == -1)
goto shmgetfail;
Shminfo.shmaddr = (char *) shmat(Shminfo.shmid, 0, 0);
mplayer generates X11 errors and no longer renders video