Zabrimus Ich habe nochmal was eingecheckt. Damit sollte jetzt (hoffentlich) zumindest drm und OpenGL richtig starten. Evtl. funktioniert ja damit auch schon mal OSD...
[softhddevice-drm] LibreELEC / AMLGX
-
-
rell Mit den Patches habe ich jetzt Video und OSD.
Ohne HW Decoder, HD sieht gut aus und SD krisselig, wie in einem früherem Screenshot/Foto mit dem Branch von zillerbaer.
-
Schön. Kannst du mal diese Patches probieren?
-
Auf die Idee mit Patch 0005 kam ich auch schon:
Codeodroid2:~ # cat /sys/firmware/devicetree/base/compatible hardkernel,odroid-n2-plusamlogic,s922xamlogic,g12b
Und jetzt wird es etwas seltsam. Ich verstehe nicht, wie ffmpeg gebaut wird.
Das Original ffmpeg mit deinen Patches liefert:
[softhddev]Initialize:
[softhddev]cSoftHdDevice:
[softhddev]MakePrimaryDevice: 1
Start(void):
AlsaFlushBuffers: AlsaFlushBuffers
AudioPlayHandlerThread: pthread_cond_wait
FindDevice: Plane id 34 crtc_id 40 possible_crtcs 255 possible CRTC 40 type primary plane
FindDevice: PixelFormats AR24 AB24 XR24 XB24 RG24 RG16
FindDevice: Plane id 37 crtc_id 0 possible_crtcs 255 possible CRTC 40 type overlay plane
FindDevice: PixelFormats YUYV NV12 NV21 YU24 YU16 YU12 YU11 YUV9 YU08 YU10
best_overlay_video_plane: plane_id 37, type OVERLAY, zpos 0
best_primary_osd_plane: plane_id 34, type PRIMARY, zpos 1
CheckZpos: cannot set atomic mode (22): Invalid argument
CheckZpos: don't use zpos change
56 EGL configs found
16 appropriate EGL configs found, which match attributes
EGLSurface 0x1d4fc80 on EGLDisplay 0x1d247e8 for 1920 x 1080 BO created
FindDevice: DRM setup CRTC: 40 video_plane: 37 (OVERLAY 0) osd_plane: 34 (PRIMARY 1) use_zpos: 0
ReadHWPlatform: g12b foundSetupFB: fb_id 43 width 720 height 576 pix_fmt NV12
VideoThreadWakeup: VideoThreadWakeup
VideoThreadWakeup: DisplayThreadWakeup
[softhddev]cSoftOsdProvider:
[softhddev]GetSpuDecoder:
[softhddev]Start:
Start(void):
[softhddev]CanReplay:
[softhddev]CanReplay:
[softhddev]SetPlayMode: 1
SetPlayMode: play_mode 1
VideoThreadWakeup: VideoThreadWakeup
DisplayThreadWakeup: VideoThreadWakeup
[softhddev]CreateOsd:
cOglThread: InitOpenGL
Created a 4085 x 219 (873 kB) FontAtlas for fontsize 68, rowh 71, roww 778
Created new font: /usr/local/vdrshare/fonts/vdrsymbols/VDRSymbolsSans-Bold.ttf (68) height: 81, bottom: 17 - 5294 chars (0 - 5296)
Created a 4084 x 74 (295 kB) FontAtlas for fontsize 33, rowh 35, roww 131
Created new font: /usr/local/vdrshare/fonts/vdrsymbols/VDRSymbolsSans.ttf (33) height: 39, bottom: 8 - 5366 chars (0 - 5368)
Created a 2542 x 20 (49 kB) FontAtlas for fontsize 16, rowh 20, roww 2542
Created new font: /usr/local/vdrshare/fonts/vdrsymbols/VDRSymbolsSans-Bold.ttf (16) height: 19, bottom: 4 - 5294 chars (0 - 5296)
drm_get_buf_from_bo: New GL buffer 1920 x 1080 pix_fmt AR24 fb_id 42
VideoOsdDrawARGB(GL): eglSwapBuffers eglDisplay 0x1d247e8 eglSurface 0x1d4fc80 (1920 x 1080, 7680)
Frame2Display: goto page_flip_osd
Frame2Display: SetPlane: osd->plane_id 34, crtc_id 40, fb_id 42, w 1920, h 1080
CodecAudioClose
CodecAudioOpen: Codec ATSC A/52A (AC-3) found
AlsaSetup: Channels 2 SampleRate 48000
HWChannels 2 HWSampleRate 48000 SampleFormat S16_LE
Supports pause: no mmap: yes
AlsaBufferTime 100ms AudioBufferTime 450ms Threshold 450ms
AudioFilterInit: IN ch_layout stereo sample_fmt s16p sample_rate 48000 channels 2
AudioFilterInit: OUT AudioDownMix 0 HwChannels 2 HwSampleRate 48000 ch_layout stereo bytes_per_sample 2
CodecVideoOpen: Codec V4L2 mem2mem H.264 decoder wrapper found
CodecVideoOpen: Parsed width 1280 height 720
CodecVideoOpen: decoder use 4 threads
[h264_v4l2m2m @ 0xe5000490] level=-99
Video_get_format: PixelFormat drm_prime ctx_fmt (null) sw_pix_fmt yuv420p Codecname: h264_v4l2m2m
[h264_v4l2m2m @ 0xe5000490] Using device /dev/video0
[h264_v4l2m2m @ 0xe5000490] driver 'meson-vdec' on card 'Amlogic Video Decoder' in mplane mode
[h264_v4l2m2m @ 0xe5000490] requesting formats: output=H264 capture=NM12
drm_get_buf_from_bo: New GL buffer 1920 x 1080 pix_fmt AR24 fb_id 46
VideoOsdDrawARGB(GL): eglSwapBuffers eglDisplay 0x1d247e8 eglSurface 0x1d4fc80 (1920 x 1080, 7680)
Frame2Display: goto page_flip_osd
Frame2Display: SetPlane: osd->plane_id 34, crtc_id 40, fb_id 46, w 1920, h 1080
AudioPlayHandlerThread: nach pthread_cond_wait ----> 1824ms start
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
SetupFB: 1280 x 720 nb_objects 2 nb_layers 1 nb_planes 2 size 983040 pix_fmt NV12 modifier 0
SetupFB: plane 0 pitch 1280 offset 0
SetupFB: plane 1 pitch 1280 offset 0
Frame2Display: start PTS 6:55:48.709
AudioVideoReady: Audio is Running !!!???
Frame2Display: page flip failed (22): Invalid argument
crtc_id 40
Aborted
Und mit meiner (schräg und auf die schnelle) gepatchten Version des ffmpeg/package.mk erhalte ich diese Ausgabe
[softhddev]Initialize:
[softhddev]cSoftHdDevice:
[softhddev]MakePrimaryDevice: 1
Start(void):
AlsaFlushBuffers: AlsaFlushBuffers
AudioPlayHandlerThread: pthread_cond_wait
FindDevice: Plane id 34 crtc_id 40 possible_crtcs 255 possible CRTC 40 type primary plane
FindDevice: PixelFormats AR24 AB24 XR24 XB24 RG24 RG16
FindDevice: Plane id 37 crtc_id 0 possible_crtcs 255 possible CRTC 40 type overlay plane
FindDevice: PixelFormats YUYV NV12 NV21 YU24 YU16 YU12 YU11 YUV9 YU08 YU10
best_overlay_video_plane: plane_id 37, type OVERLAY, zpos 0
best_primary_osd_plane: plane_id 34, type PRIMARY, zpos 1
CheckZpos: cannot set atomic mode (22): Invalid argument
CheckZpos: don't use zpos change
56 EGL configs found
16 appropriate EGL configs found, which match attributes
EGLSurface 0x771398 on EGLDisplay 0x745ea8 for 1920 x 1080 BO created
FindDevice: DRM setup CRTC: 40 video_plane: 37 (OVERLAY 0) osd_plane: 34 (PRIMARY 1) use_zpos: 0
ReadHWPlatform: g12b found
SetupFB: fb_id 42 width 720 height 576 pix_fmt NV12
VideoThreadWakeup: VideoThreadWakeup
VideoThreadWakeup: DisplayThreadWakeup
[softhddev]cSoftOsdProvider:
[softhddev]GetSpuDecoder:
[softhddev]Start:
Start(void):
[softhddev]CanReplay:
[softhddev]CanReplay:
[softhddev]SetPlayMode: 1
SetPlayMode: play_mode 1
VideoThreadWakeup: VideoThreadWakeup
DisplayThreadWakeup: VideoThreadWakeup
[softhddev]CreateOsd:
cOglThread: InitOpenGL
Created a 4085 x 219 (873 kB) FontAtlas for fontsize 68, rowh 71, roww 778
Created new font: /usr/local/vdrshare/fonts/vdrsymbols/VDRSymbolsSans-Bold.ttf (68) height: 81, bottom: 17 - 5294 chars (0 - 5296)
Created a 4084 x 74 (295 kB) FontAtlas for fontsize 33, rowh 35, roww 131
Created new font: /usr/local/vdrshare/fonts/vdrsymbols/VDRSymbolsSans.ttf (33) height: 39, bottom: 8 - 5366 chars (0 - 5368)
Created a 2542 x 20 (49 kB) FontAtlas for fontsize 16, rowh 20, roww 2542
Created new font: /usr/local/vdrshare/fonts/vdrsymbols/VDRSymbolsSans-Bold.ttf (16) height: 19, bottom: 4 - 5294 chars (0 - 5296)
drm_get_buf_from_bo: New GL buffer 1920 x 1080 pix_fmt AR24 fb_id 45
VideoOsdDrawARGB(GL): eglSwapBuffers eglDisplay 0x745ea8 eglSurface 0x771398 (1920 x 1080, 7680)
Frame2Display: goto page_flip_osd
Frame2Display: SetPlane: osd->plane_id 34, crtc_id 40, fb_id 45, w 1920, h 1080
CodecVideoOpen: Codec V4L2 mem2mem H.264 decoder wrapper found
CodecVideoOpen: Parsed width 1280 height 720
CodecVideoOpen: decoder use 4 threads
Video_get_format: PixelFormat drm_prime ctx_fmt (null) sw_pix_fmt nv12 Codecname: h264_v4l2m2m
[h264_v4l2m2m @ 0xe4a00490] Using device /dev/video0
[h264_v4l2m2m @ 0xe4a00490] driver 'meson-vdec' on card 'Amlogic Video Decoder' in mplane mode
[h264_v4l2m2m @ 0xe4a00490] requesting formats: output=H264 capture=NM12
CodecAudioClose
CodecAudioOpen: Codec ATSC A/52A (AC-3) found
AlsaSetup: Channels 2 SampleRate 48000
HWChannels 2 HWSampleRate 48000 SampleFormat S16_LE
Supports pause: no mmap: yes
AlsaBufferTime 100ms AudioBufferTime 450ms Threshold 450ms
AudioFilterInit: IN ch_layout stereo sample_fmt s16p sample_rate 48000 channels 2
AudioFilterInit: OUT AudioDownMix 0 HwChannels 2 HwSampleRate 48000 ch_layout stereo bytes_per_sample 2
SetupFB: 1280 x 720 nb_objects 2 nb_layers 1 nb_planes 2 size 983040 pix_fmt NV12 modifier 0
SetupFB: plane 0 pitch 1280 offset 0
SetupFB: plane 1 pitch 1280 offset 0
Frame2Display: start PTS 6:33:04.595
drm_get_buf_from_bo: New GL buffer 1920 x 1080 pix_fmt AR24 fb_id 47
VideoOsdDrawARGB(GL): eglSwapBuffers eglDisplay 0x745ea8 eglSurface 0x771398 (1920 x 1080, 7680)
AudioPlayHandlerThread: nach pthread_cond_wait ----> 468ms start
Frame2Display: SetPlane: osd->plane_id 34, crtc_id 40, fb_id 47, w 1920, h 1080
VideoOsdClear(GL): eglSwapBuffers eglDisplay 0x745ea8 eglSurface 0x771398 (1920 x 1080, 7680)
Frame2Display: SetPlane: osd->plane_id 34
[softhddev]CreateOsd:
VideoOsdDrawARGB(GL): eglSwapBuffers eglDisplay 0x745ea8 eglSurface 0x771398 (1920 x 1080, 7680)
Frame2Display: SetPlane: osd->plane_id 34, crtc_id 40, fb_id 47, w 1920, h 1080
VideoOsdClear(GL): eglSwapBuffers eglDisplay 0x745ea8 eglSurface 0x771398 (1920 x 1080, 7680)
Frame2Display: SetPlane: osd->plane_id 34
Das sieht auch soweit gut aus. Nur, daß ich jetzt kein Bild mehr habe. Das OSD geht aber weiterhin.
Im Moment tendiere ich zur ungepatchen ffmpeg Version, weil ich nicht, welche Auswirkungen das z.B. auf Kodi hätte.
-
Was bzw. wie patchst du da ffmpeg? Der Fehler im ersten Log kommt von drm. Da stimmt noch was nicht. Den wirst du bei zillerbaers Version wahrscheinlich nicht bekommen.
-
Was bzw. wie patchst du da ffmpeg?
Ich patche nicht ffmpeg. Das war vielleicht etwas mißverständlich. Aber ich verstehe das package.mk für amlogic nicht.
Es wird wohl nicht das offizielle ffmpeg, sondern ein rpi-ffmpeg verwendet und dann wird erst V4L2_REQUEST eingeschaltet um dann doch wieder abgeschaltet zu werden.
Wie gesagt: Ich verstehe es nicht und lass lieber die Finger davon
-
Hm, lese ich nicht so. Amlogic verwendet wie RPi einen v4l2_m2m Treiber, der wird gebaut und lt. logs auch genutzt.
Ich warte noch auf meine S905 Box, dann kann ich auch selbst testen.
Ansonsten kann ich versuchen herauszufinden, warum drm in den abort läuft - falls du testwillig bist.
-
Hm, lese ich nicht so. Amlogic verwendet wie RPi einen v4l2_m2m Treiber, der wird gebaut und lt. logs auch genutzt
Genau deshalb denke ich, ich habe irgendwo einen Denkfehler und finde den nicht. Ich habe das package.mk mal gekürzt
Code
Display MorePKG_NAME="ffmpeg" case "${PROJECT}" in Amlogic) PKG_URL="https://github.com/jc-kynesim/rpi-ffmpeg/archive/${PKG_VERSION}.tar.gz" ;; esac ### V4L2_SUPPORT ist yes für amlogic if [ "${V4L2_SUPPORT}" = "yes" ]; then PKG_FFMPEG_V4L2="--enable-v4l2_m2m --enable-libdrm" ## Project ist Amlogic... also ... if [ "${PROJECT}" = "Allwinner" -o "${PROJECT}" = "Rockchip" -o "${DEVICE}" = "iMX8" ]; then PKG_V4L2_REQUEST="yes" elif [ "${PROJECT}" = "RPi" -a "${DEVICE}" = "RPi4" ]; then else ## ..... landet der hier PKG_V4L2_REQUEST="no" fi ### PKG_V4L2_REQUEST steht ja jetzt auf "no" if [ "${PKG_V4L2_REQUEST}" = "yes" ]; then else ## und wird hier nicht wieder alles abgeschaltet, was notwendig ist? PKG_FFMPEG_V4L2+=" --disable-libudev --disable-v4l2-request" fi else fi
Ansonsten kann ich versuchen herauszufinden, warum drm in den abort läuft - falls du testwillig bist.
Ich habe extra dafür eine Kiste auf Standby
Seit über einer Woche will ich mich mal dransetzen den Dev/Test-Zyklus zeitlich stark zu verkürzen (oder es zumindest zu versuchen), aber ich komme nicht dazu. Immer die vielen Images bauen, Update, Reboot, Test- Zyklen dauern mir zu lange für solche Sachen.
-
v4l2request brauchst du nicht, sondern v4l2m2m und das ist aktiviert. Das siehst du auch in deinen Logs:
Code
Display MoreCodecVideoOpen: Codec V4L2 mem2mem H.264 decoder wrapper found CodecVideoOpen: Parsed width 1280 height 720 CodecVideoOpen: decoder use 4 threads [h264_v4l2m2m @ 0xe5000490] level=-99 Video_get_format: PixelFormat drm_prime ctx_fmt (null) sw_pix_fmt yuv420p Codecname: h264_v4l2m2m [h264_v4l2m2m @ 0xe5000490] Using device /dev/video0 [h264_v4l2m2m @ 0xe5000490] driver 'meson-vdec' on card 'Amlogic Video Decoder' in mplane mode [h264_v4l2m2m @ 0xe5000490] requesting formats: output=H264 capture=NM12
-
Ich bin jetzt hier an einem Showstopper angekommen. Der Decoder liefert die Bilder in V4L2_PIX_FMT_NV12M (NM12) aus. DRM kann mit dem Format aber nicht umgehen. FFMPEG behauptet daher es wäre NV12. Das Ergebnis sieht bescheiden aus.
-
-
Ich bin jetzt hier an einem Showstopper angekommen. Der Decoder liefert die Bilder in V4L2_PIX_FMT_NV12M (NM12) aus. DRM kann mit dem Format aber nicht umgehen. FFMPEG behauptet daher es wäre NV12. Das Ergebnis sieht bescheiden aus.
Weißt, du wie kodi das macht?
EDIT: Die rendern das auf ein texture, oder? -
Weißt, du wie kodi das macht?
Nö.
-
v4l2request brauchst du nicht, sondern v4l2m2m und das ist aktiviert.
Okay. Denkfehler gefunden. Ich dachte ich hätte irgendwo gelesen v4l2request wäre Pflicht und deshalb ....
Zabrimus Ich habe nochmal 2 patches hinzugefügt. Damit wird das Log wohl zwar ziemlich voll, aber evtl. kann ich sehen, was an den Werten für den Commit nicht passt. Gerne testen und das Log schicken.
Das journal habe ich angehängt.
-
Danke, da ist der Fehler: CRTC_H: -1. Muss ich mir anschauen.
-
-
Zabrimus So, damit sollte es laufen. Bitte nochmal probieren. Wenns geht, kannst du die beiden letzten natürlich weglassen.
Bliebe dann noch die Sache mit NM12 und DRM...
Soooo. VDR startet und ich habe ein HD Bild. Aber. Ich meine, es sieht cool aus, aber wahrscheinlich nicht so gewollt.
Es liegen 2 gleiche Bilder übereinander, das zweite mit seltsamen Farben, vertikal nach unten verschoben und leicht gestreckt.
Auf der Konsole habe ich permanent diese Ausgabe:
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
Das Journal sieht am Ende dann so aus:
AlsaSetup: Channels 6 SampleRate 48000
HWChannels 6 HWSampleRate 48000 SampleFormat S16_LE
Supports pause: no mmap: yes
AlsaBufferTime 100ms AudioBufferTime 450ms Threshold 450ms
AudioFilterInit: IN ch_layout 5.1(side) sample_fmt s16p sample_rate 48000 channels 6
AudioFilterInit: OUT AudioDownMix 0 HwChannels 6 HwSampleRate 48000 ch_layout 5.1 bytes_per_sample 2
VideoOsdDrawARGB(GL): eglSwapBuffers eglDisplay 0xf57d60 eglSurface 0xf7e970 (1920 x 1080, 7680)
Frame2Display: goto page_flip_osd
Frame2Display: SetPlane: osd->plane_id 34, crtc_id 40, fb_id 45, w 1920, h 1080
CodecVideoOpen: Codec V4L2 mem2mem H.264 decoder wrapper found
CodecVideoOpen: Parsed width 1280 height 720
CodecVideoOpen: decoder use 4 threads
[h264_v4l2m2m @ 0xe4f12130] level=-99
Video_get_format: PixelFormat drm_prime ctx_fmt (null) sw_pix_fmt yuv420p Codecname: h264_v4l2m2m
[h264_v4l2m2m @ 0xe4f12130] Using device /dev/video0
[h264_v4l2m2m @ 0xe4f12130] driver 'meson-vdec' on card 'Amlogic Video Decoder' in mplane mode
[h264_v4l2m2m @ 0xe4f12130] requesting formats: output=H264 capture=NM12
AudioPlayHandlerThread: nach pthread_cond_wait ----> 1824ms start
SetupFB: 1280 x 720 nb_objects 2 nb_layers 1 nb_planes 2 size 983040 pix_fmt NV12 modifier 0
SetupFB: plane 0 pitch 1280 offset 0
SetupFB: plane 1 pitch 1280 offset 0
Frame2Display: start PTS 6:04:35.862
AudioVideoReady: Audio is Running !!!???
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
CodecVideoSendPacket: send_packet ret: Resource temporarily unavailable
-
Ja so sieht es aus wenn das Schwarz Weiß Bild (Y) stimmt und die Farben (UV) falsch darüber liegen. Das liegt am nicht stimmendem Pixelformat.
-
Meine Wetek Play 2 ist angekommen, VDRSternElec ist drauf und läuft. Bild ist zwar flüssig aber mit den beschriebenen Farben... Werd mich wohl mal einlesen müssen.
-
Ich glaube, ich hätte einen Lösungsansatz. Lt. #linux-amlogic passt ein NV12M output für ein NV12 plane.
Das Problem ist, dass der aktuelle softhddevice-drm code nur mit NV12 umgehen kann, wenn die Daten direkt hintereinader liegen. NV12M ist multi-planar, d.h. die Daten liegen nicht zwingend direkt hintereinander.
softhddevice-drm behandelt primedata derzeit "am Stück", d.h. man müsste es so umschreiben, dass die beiden Bereiche getrennt behandelt werden, wie es z.B. mpv macht.
Was meinst du zillerbaer ?
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!