Opened 5 years ago

Closed 3 years ago

#9141 closed bug (fixed)

10bit mkv videos black video

Reported by: leszek Owned by: Nobody
Priority: normal Milestone: R1
Component: Audio & Video Version: R1/alpha4
Keywords: Cc:
Blocked By: Blocking: #9280
Has a Patch: no Platform: All


10bit mkv h264 videos will playback but only show a black video output in media player. See sample file from here:

The output I get is (on alpha 4):

~/Desktop> MediaPlayer 10bit-eldorado.mkv 
open playlist item: 10bit-eldorado.mkv
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2.
Do not report crashes to FFmpeg developers.
No BE API colorspace definition for pixel format "(unknown)".
CPU is capable of running MMX SSE1 SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 
resolve_colorspace: PIX_FMT_NONE => B_YCbCr422: NULL
BMediaEventLooper: SchedulingLatency is 750
BMediaEventLooper: SchedulingLatency is 3000
VideoConsumer::CreateBuffers - ERROR CREATING VIDEO RING BUFFER (Index 0 Width 608 Height 480 Colorspace 16384: Out of memory
VideoConsumer::Connected - COULDN'T CREATE BUFFERS
BMediaRoster::Connect: aborting after BBufferConsumer::Connected, status = 0x80000000
VideoProducer::Connect() - consumer error: Out of memory
BMediaRoster::Connect: aborted
Can't connect the video source to the video window... trying without overlays, error: Out of memory
NodeManager::_SetupVideoNodes() - falling back to B_RGB32
BMediaRoster::Connect connection established!
running without audio node
BMediaRoster::ReleaseNode, trying to release reference counting disabled timesource, node 1, port 282, team 8067
CPU is capable of running MMX SSE1 SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 
resolve_colorspace: PIX_FMT_NONE => B_RGB32: NULL

Change History (3)

comment:1 Changed 3 years ago by PulkoMandy

Blocking: 9280 added

comment:2 Changed 3 years ago by PulkoMandy

So, this is not related to mkv (which is only a container) but to the format used inside it. In the case of the attached video this is h264 using the "high 10" profile, which is decoded with a pixel format of yuv420p10le. This means:

  • It is an YUV format
  • There are 4 Y samples for one U and V (in a 2x2 grid)
  • It is planar: all Y data comes first, followed by U, then V
  • Each sample is stored on 10 bits (but it seems this is padded to 16-bits?)
  • The bytes are in little endian order

There is not (yet) a colorspace in Haiku matching this, and there is also not yet a converter to RGB32.

comment:3 Changed 3 years ago by PulkoMandy

Resolution: fixed
Status: newclosed

Implemented in hrev48484. The sample file has some problem on first play because the initial frame is not properly decoded, but stopping MediaPlayer and pressing Play again makes it work.

Note: See TracTickets for help on using tickets.