LINUX.ORG.RU

FreshPlayerPlugin — PepperFlash в Firefox

 , , , , ppapi


55

41

Flash плеер всё заменяют и заменяют, но никак не заменят полностью. Новые и сверхновые фичи браузеров это замечательно, но Flash бывает всё ещё нужен. К сожалению, доступная NPAPI браузерам версия застыла на 11.2, а новые версии выходят только в составе Chrome. Поэтому я делаю адаптер, который сможет быть посредником между PPAPI плагином и NPAPI браузером. Это такая штука, которая позволит использовать свежий Flash в Firefox, Opera и других браузерах, в которых работают плагины.

https://github.com/i-rinat/freshplayerplugin

★★★★★

Последнее исправление: i-rinat (всего исправлений: 6)
Ответ на: комментарий от hizel

Можешь получить backtrace от x_error_handler? Подключиться прямо к работающему процессу, через gdb --pid `pidof plugin-container`

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

подойдет?

(gdb) break x_error_handler
Breakpoint 1 at 0x7f2527263750: file /home/hizel/src/freshplayerplugin/src/np_entry.c, line 385.
(gdb) continue 
Continuing.
[Thread 0x7f251e3fe700 (LWP 4295) exited]
[Switching to Thread 0x7f2520f36700 (LWP 4293)]

Breakpoint 1, x_error_handler (dpy=0x7f252930f800, ee=0x7f2520f358b0) at /home/hizel/src/freshplayerplugin/src/np_entry.c:385
385     {
(gdb) bt
#0  x_error_handler (dpy=0x7f252930f800, ee=0x7f2520f358b0) at /home/hizel/src/freshplayerplugin/src/np_entry.c:385
#1  0x00007f252d6bae96 in ?? () from /usr/lib64/opengl/nvidia/lib/libGL.so.1
#2  0x00007f252d6b339b in glXBindTexImageEXT () from /usr/lib64/opengl/nvidia/lib/libGL.so.1
#3  0x00007f252728a811 in issue_frame (vd=0x7f25133f8a00) at /home/hizel/src/freshplayerplugin/src/ppb_video_decoder.c:708
#4  decode_frame (bitstream_buffer_id=<optimized out>, data_len=<optimized out>, data=<optimized out>, vd=0x7f25133f8a00)
    at /home/hizel/src/freshplayerplugin/src/ppb_video_decoder.c:789
#5  ppb_video_decoder_decode (video_decoder=1778, bitstream_buffer=0x7f2520f35b60, callback=...)
    at /home/hizel/src/freshplayerplugin/src/ppb_video_decoder.c:837
#6  0x00007f252000deda in ?? () from /opt/google/chrome/PepperFlash/libpepflashplayer.so
#7  0x00007f251f5cf873 in ?? () from /opt/google/chrome/PepperFlash/libpepflashplayer.so
#8  0x00007f251f5d09a2 in ?? () from /opt/google/chrome/PepperFlash/libpepflashplayer.so
#9  0x00007f2527279de3 in ppb_message_loop_run_int (message_loop=message_loop@entry=2, flags=flags@entry=2)
    at /home/hizel/src/freshplayerplugin/src/ppb_message_loop.c:323
#10 0x00007f2527279eba in ppb_message_loop_run (message_loop=message_loop@entry=2)
    at /home/hizel/src/freshplayerplugin/src/ppb_message_loop.c:200
#11 0x00007f252726751c in fresh_wrapper_main_thread (p=0x7f25296dd600) at /home/hizel/src/freshplayerplugin/src/main_thread.c:58
#12 0x00007f253aede4c6 in start_thread () from /lib64/libpthread.so.0
#13 0x00007f253555602d in clone () from /lib64/libc.so.6
(gdb) 
или собрать с дебагом

hizel ★★★★★
()
Ответ на: комментарий от hizel

Вполне подойдёт.

Видимо, я накосячил с глубиной цвета. Странно, что вообще что-то выводится на экран при этом.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

через vaapi:

$ firefox 

(process:9708): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
libva info: VA-API version 0.37.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/va/drivers/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_0_37
libva info: va_openDriver() returns 0
NOT SANDBOXED
[fresh  9811] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh  9811] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16

hizel ★★★★★
()
Ответ на: комментарий от hizel

Похоже, на nVidia всегда используется 32-битный цвет, вне зависимости от того, нужна прозрачность или нет.

Добавил в print-vdp-output-surface-dimensions учёт глубины цвета при вызове glXCreatePixmap. Потестишь?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat
$ firefox 

(process:4146): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh  4211] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh  4211] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
g3d->depth = 24
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
hizel ★★★★★
()
Ответ на: комментарий от i-rinat
$ $ firefox 

(process:21490): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 21557] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 21557] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
g3d->depth = 24
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
Call glXBindTexImageEXT idx 0
Call glXBindTexImageEXT idx 1
Call glXBindTexImageEXT idx 2
Call glXBindTexImageEXT idx 3
Call glXBindTexImageEXT idx 4
Call glXBindTexImageEXT idx 5
Call glXBindTexImageEXT idx 6
Call glXBindTexImageEXT idx 0
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
Call glXBindTexImageEXT idx 1
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
Call glXBindTexImageEXT idx 3
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
Call glXBindTexImageEXT idx 4
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
Call glXBindTexImageEXT idx 5
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
Call glXBindTexImageEXT idx 7
Call glXBindTexImageEXT idx 8
Call glXBindTexImageEXT idx 9
Call glXBindTexImageEXT idx 10
Call glXBindTexImageEXT idx 11
Call glXBindTexImageEXT idx 0
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
[fresh] [error] [NP] caught Xlib error 2(BadValue (integer parameter out of range for operation)) request_code 154 minor_code 16
Call glXBindTexImageEXT idx 1
hizel ★★★★★
()
Ответ на: комментарий от hizel

У mpv есть

static void destroy_texture(struct gl_hwdec *hw)
{
    struct priv *p = hw->priv;
    GL *gl = hw->gl;

    if (p->glxpixmap) {
        p->glXReleaseTexImage(p->xdisplay, p->glxpixmap, GLX_FRONT_EXT);
        glXDestroyPixmap(p->xdisplay, p->glxpixmap);
    }
    p->glxpixmap = 0;

    if (p->pixmap)
        XFreePixmap(p->xdisplay, p->pixmap);
    p->pixmap = 0;

    gl->DeleteTextures(1, &p->gl_texture);
    p->gl_texture = 0;
}

похоже надо примерно така-же освобождать ресурсы в районе release_buffer2. vaapi via vdpau так же ругается Xlib error

hizel ★★★★★
()
Ответ на: комментарий от i-rinat

Теперь картинка подмигивает.

$ firefox 

(process:16855): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
SystemMessageCache: initNOT SANDBOXED
[fresh 16965] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 16965] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
g3d->depth = 24
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
[fresh] [error] [NP] caught Xlib error 170
[fresh] [error] [NP] caught Xlib error 170
[fresh] [error] [NP] caught Xlib error 2
[fresh] [error] [NP] caught Xlib error 2
[fresh] [error] [NP] caught Xlib error 2
[fresh] [error] [NP] caught Xlib error 2
[fresh] [error] [NP] caught Xlib error 2

hizel ★★★★★
()
Ответ на: комментарий от i-rinat
$ firefox                                                                                                                                                                                [206/437]

(process:18825): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 18896] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 18896] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
g3d->depth = 24
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
creating vdp output surface, 854x480
Call glXBindTexImageEXT idx 0
Call glXBindTexImageEXT idx 1
Call release glXBindTexImageEXT idx 2
[fresh] [error] [NP] caught Xlib error 170
[fresh] [error] [NP] caught Xlib error 170
Call glXBindTexImageEXT idx 2
Call glXBindTexImageEXT idx 3
Call release glXBindTexImageEXT idx 2
Call glXBindTexImageEXT idx 4
Call release glXBindTexImageEXT idx 0
Call glXBindTexImageEXT idx 5
Call release glXBindTexImageEXT idx 0
Call glXBindTexImageEXT idx 6
Call release glXBindTexImageEXT idx 2
Call glXBindTexImageEXT idx 0
Call release glXBindTexImageEXT idx 1
Call glXBindTexImageEXT idx 1
Call release glXBindTexImageEXT idx 1
Call glXBindTexImageEXT idx 3
[fresh] [error] [NP] caught Xlib error 2
[fresh] [error] [NP] caught Xlib error 2
Call release glXBindTexImageEXT idx 3
Call glXBindTexImageEXT idx 4
[fresh] [error] [NP] caught Xlib error 2
[fresh] [error] [NP] caught Xlib error 2
Call release glXBindTexImageEXT idx 1
hizel ★★★★★
()
Ответ на: комментарий от hizel

Переместил вызов glXReleaseTexImage в reuse_picture_buffer(). В release_buffer2 обрабатываются рабочие видео-поверхности, у них там другая последовательность.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

gts450 не может 1080p, начинает картинка скакать: кадр из видео, кадр фон, 720p прожевывает

$ firefox

(process:16895): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 16958] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 16958] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpPresentationQueueDisplay failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpPresentationQueueDisplay failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpPresentationQueueDisplay failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpPresentationQueueDisplay failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.

hizel ★★★★★
()
Ответ на: комментарий от hizel

Не ожидал, что у nVidia драйверов будут лимиты на VdpOutputSurface. Попробую избавиться от лишних.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

на VdpPresentationQueue тоже есть ограничения

A VdpPresentationQueue allows a maximum of 8 surfaces to be QUEUED or VISIBLE at any one time. This limit is per presentation queue. If this limit is exceeded, VdpPresentationQueueDisplay blocks until an entry in the presentation queue becomes free.

hizel ★★★★★
()
Ответ на: комментарий от i-rinat

Если включать из auto в 720p или 1080p работает штатно, при переключении между ними:

$ firefox

(process:24687): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
SystemMessageCache: initNOT SANDBOXED
[fresh 24859] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 24859] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh] [error] prepare_vdpau_context, VdpDecoderCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[fresh] [error] prepare_vdpau_context, VdpDecoderCreate failed: 23, The system does not have enough resources to complete the requested operation at this time.
[h264 @ 0x7f9cee5fb700] decode_slice_header error
[h264 @ 0x7f9cee5fb700] no frame!
[fresh] [error] decode_frame, error -1094995529 while decoding frame
[fresh] [error] decode_frame, error -1094995529 while decoding frame
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
[fresh] [warning] ppb_video_decoder_decode, there were errors before, giving up
^C
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpVideoMixerRender failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpPresentationQueueDisplay failed: 3, An invalid handle value was provided.
[fresh] [error] issue_frame, VdpPresentationQueueDisplay failed: 3, An invalid handle value was provided.

такие ошибки для 1080p ушли

hizel ★★★★★
()
Ответ на: комментарий от hizel

Вроде всё работает, но такое пишет:

(process:2440): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 2537] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 2537] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh] [warning] audio_thread, snd_pcm_writei error -32
[h264 @ 0x7f37f10de000] reference picture missing during reorder
[h264 @ 0x7f37f10de000] Missing reference picture, default is 65572
[h264 @ 0x7f37f10de000] reference picture missing during reorder
[h264 @ 0x7f37f10de000] Missing reference picture, default is 65584
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[fresh] [error] ppb_video_decoder_assign_picture_buffers, VdpOutputSurfaceCreate failed: 25, A catch-all error, used when no other error code applies.
[h264 @ 0x7f37ea514000] reference picture missing during reorder
[h264 @ 0x7f37ea514000] Missing reference picture, default is 65560
[h264 @ 0x7f37ea514000] reference picture missing during reorder
[h264 @ 0x7f37ea514000] reference picture missing during reorder
[h264 @ 0x7f37ea514000] Missing reference picture, default is 65568
[h264 @ 0x7f37ea514000] Missing reference picture, default is 65568
[h264 @ 0x7f37ea514000] reference picture missing during reorder
[h264 @ 0x7f37ea514000] Missing reference picture, default is 65578
[h264 @ 0x7f37ea514000] reference picture missing during reorder
[h264 @ 0x7f37ea514000] Missing reference picture, default is 65582

nvidia
()
Ответ на: комментарий от nvidia

Ветка use-one-output-surface при переключении 720p->1080p->720p тоже вроде работает и вот что пишет:

(process:4934): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
NOT SANDBOXED
[fresh 5028] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 5028] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[h264 @ 0x7f9bba50e000] reference picture missing during reorder
[h264 @ 0x7f9bba50e000] Missing reference picture, default is 65668

nvidia
()

Иногда, при закрытии вкладки с флеш-видео, лисица намертво виснет. Не всегда, но именно в момент закрытия таба.
Куда бы покопать?

www-client/firefox-38.0.5
www-plugins/chrome-binary-plugins-44.0.2403.61_beta1
www-plugins/freshplayerplugin-0.3.0
enable_hwdec=0

Lavos ★★★★★
()
Ответ на: комментарий от hizel

при переключении между ними

Тут уже вряд ли что-то можно сделать.

Сейчас попробовал на Youtube переключать качество. PepperFlash просто запрашивает новый декодер, а старые так и остаются висеть в рабочем состоянии. При перемотке он хотя бы старые сбрасывает, где я могу корректно завершить. Тут вроде как этого делать нельзя, да и определить нужный момент сложно.

Кстати, если запустить два и более MPlayer'а (или mpv) с декодированием 1080p фильмов одновременно, нормально работает?

(Влил изменения из use-one-output-surface в основную ветку.)

i-rinat ★★★★★
() автор топика
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от nvidia

при переключении 720p->1080p->720p тоже вроде работает

Видимо, у разных карт различные ограничения по ресурсам видео-декодера.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

PepperFlash просто запрашивает новый декодер, а старые так и остаются висеть в рабочем состоянии.

А еслм принудительно килять? Один фиг в момент времени пашет только один.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Один фиг в момент времени пашет только один

StageVideo поддерживает несколько видео одновременно, поэтому вполне возможно, что какое-то приложение захочет сразу четыре потока декодировать аппаратно. С несколькими встроенными видео на странице тоже возникнет проблема.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Lavos

Куда бы покопать?

Для начала — подцепиться gdb к процессу плагина:

$ gdb --pid `pidof plugin-container`

и получить стек вызовов для всех нитей: thread apply all bt

Похоже, при завершении плагин где-то висит, браузер в этот момент делает синхронный вызов и подвисает за компанию.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Dmitry_Sokolowsky

Попробовал несколько раз, воспроизвести не получилось.

Видимо, плагин прибивается браузером за долгое зависание. Неплохо было бы выяснить, что его заставляет зависать. Для этого нужно параметр dom.ipc.plugins.timeoutSecs в about:config увеличить, скажем, до 6000 секунд, чтобы хватило потом подключиться gdb и снять backtrace.

gdb --pid `pidof plugin-container`

а в самом gdb: thread apply all bt

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Тут уже вряд ли что-то можно сделать.

Сейчас попробовал на Youtube переключать качество. PepperFlash просто запрашивает новый декодер, а старые так и остаются висеть в рабочем состоянии. При перемотке он хотя бы старые сбрасывает, где я могу корректно завершить. Тут вроде как этого делать нельзя, да и определить нужный момент сложно.

Я не совсем понял... Т.е. в гуглохроме оно работает нормально, а тут старые декодеры остаются висеть? Или как?

mvitamin
()
Ответ на: комментарий от mvitamin

Т.е. в гуглохроме оно работает нормально, а тут старые декодеры остаются висеть? Или как?

Во-первых, в настольном Google Chrome код для поддержки аппаратных декодеров не компилируется вообще, там этой проблемы нет. Во-вторых, в этом коде есть только поддержка VA-API, он нацелен на интегрированные адаптеры Intel, которые хорошо себя чувствуют даже когда приложение создаёт много декодеров.

Кстати, интересно посмотреть, на скольки декодерах и на скольки видеоповерхностях посыпятся ошибки.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

на скольки декодерах и на скольки видеоповерхностях посыпятся ошибки

Получилось создать 65445 декодеров с 18-ю видеоповерхностями каждый. На 65446-м вывалилось с «intel_batchbuffer.c:63: intel_batchbuffer_reset: Assertion `batch->buffer->virtual' failed.»

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Кстати, если запустить два и более MPlayer'а (или mpv) с декодированием 1080p фильмов одновременно, нормально работает?

mpv на 6-ом ломается, но если посмотреть, у него какая-то другая логика вывода через opengl: https://github.com/mpv-player/mpv/blob/master/video/out/gl_hwdec_vdpau.c

hizel ★★★★★
()
Ответ на: комментарий от hizel

но если посмотреть, у него какая-то другая логика вывода через opengl

Там используются функции из `GL_NV_vdpau_interop`. Надо бы попробовать сделать и через него.

i-rinat ★★★★★
() автор топика

Заметил, что процесс плагина потребляет 500Mб на странице с одним видео, это обычное поведение?

nvidia
()
Ответ на: комментарий от nvidia

У меня сейчас ~900M vsz и ~250M rss с одним 1080p видео на Youtube. Насчёт значений rss я не помню, но vsz примерно такой всегда был. Для подробной картины имеет смысл под Massif'ом (из состава Valgrind) прогнать.

Занятая память не растёт со временем или от переключений с видео на видео?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Имел в виду rss, на x86_64. Память вроде бы высвобождается, но я не держу его запущенным долго, нужно будет попробовать.

nvidia
()
Ответ на: комментарий от i-rinat

> Добавил использование VDPAU

Ну всё, теперь Legacy Flash Player не нужен. И да, спасибо!
А в Google Chrome работает? Нужно ли для этого отключать HTML5 для Youtube и Vimeo?

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

А в Google Chrome работает?

Нет, там выключено на этапе сборки.

Для Chromium существуют патчи, включающие поддержку аппаратного декодера. Работают только с адаптерами Intel через VA-API.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Если бы в Chrome не продумали, разработали и реализовали интерфейс для аппаратного декодера вкупе с собственно кодом декодера, в PepperFlash он не взялся бы с неба. Так что hwdec в freshplayerplugin возможен только потому что сначала аналогичную работу выполнили в Chrome.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Привет! Установил Fresh Player, и всё заработало! Но не работает VDPAU (скрин).

  • Firefox без поддержки gstreamer (потому что Gentoo это может, и потому что зачем, если будет Flash Player?)
  • Fresh Player с libva, libvdpau и libgles2
  • Создал файл /etc/adobe/mms.cfg, без которого VDPAU не работает в версии 11.2.
$ firefox
NOT SANDBOXED
[fresh 16144] not implemented: PPB_OpenGLES2VertexArrayObject;1.0
[fresh 16144] not implemented: PPB_OpenGLES2DrawBuffers(Dev);1.0
[fresh 16144] [PPB] {zilch} ppb_network_monitor_update_network_list
[fresh 16144] [PPB] {zilch} ppb_flash_set_instance_always_on_top instance=11, on_top=1
WARNING: content window passed to PrivateBrowsingUtils.isWindowPrivate. Use isContentWindowPrivate instead (but only for frame scripts).
pbu_isWindowPrivate@resource://gre/modules/PrivateBrowsingUtils.jsm:25:14
nsBrowserAccess.prototype.openURI@chrome://browser/content/browser.js:14291:25
[fresh 16144] [PPB] {zilch} ppb_network_monitor_update_network_list

$ cat /etc/adobe/mms.cfg 
EnableLinuxHWVideoDecode = 1
OverrideGPUValidation = 1

$ cat ~/.config/freshwrapper.conf 
enable_vaapi = 0
enable_vdpau = 1
ZenitharChampion ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.