[vlc-devel] Re: Fwd: [Possible endian bug in video_chrome/video_output]

Derk-Jan Hartman hartman at videolan.org
Wed Mar 1 14:56:50 CET 2006


I have entered this bug in https://trac.videolan.org/vlc/ticket/571
Since i'm not sure if this is the correct fix.

If anyone with a bit of knowledge of RGB and endianness could please  
take a look at it?

DJ


On 23-feb-2006, at 9:59, Alexander Gall wrote:

> I have sent the attached mail to vlc at videolan.org (twice, actually),
> but it never appeared there.  I'm trying my luck on the devel list.
>
> --
> Alex
>
>
> From: Alexander Gall <gall at switch.ch>
> Date: 20 februari 2006 11:08:00 GMT+01:00
> To: vlc at videolan.org
> Subject: Possible endian bug in video_chrome/video_output
>
>
> I have built the vlc svn snapshot 20060217 for Solaris 11 on SPARC.
> It mostly works but the video output (x11 and opengl) is broken.  With
> x11, the display is monochrome black/red and with opengl it looks like
> some colors are missing or swapped.  The visual I'm using is 24
> planes/32bpp, see attached output of xdpyinfo (screen #0).  Note that
> the "image byte order" is big endian (MSBFirst).
>
> I experimented a bit and found that the colours look ok with opengl
> when I reverse the byte ordering of the 32 bit word in the macro
> CONVERT_Y_PIXEL in modules/video_chroma/i420_rgb.h (see attached
> patch).  I have attached the output of vlc run with -vvv as well.
>
> I can't say whether this is a genuine bug or whether vlc just fails to
> detect the properties of my display correctly.  The videou output and
> chroma code never seems to check the image byte order of the display
> (i.e. there's no reference to the symbols MSBFirst/LSBFirst), which
> seems a bit surprising to me. In any case, I hope that my hack is
> enough to track down the source of the problem.
>
> BTW, the mpeg2dec utility that comes with the mpeg2dec library
> displays video correctly with both x11 and opengl output using the
> libmpeg2convert library.  This library also has the advantage to
> support the SPARC VIS instruction set.  Maybe it would make sense for
> vlc to use it as well.
>
> Thanks,
> Alex
>
> name of display:    :0.0
> version number:    11.0
> vendor string:    Sun Microsystems, Inc.
> vendor release number:    6620
> maximum request size:  262140 bytes
> motion buffer size:  256
> bitmap unit, bit order, padding:    32, MSBFirst, 32
> image byte order:    MSBFirst
> number of supported pixmap formats:    4
> supported pixmap formats:
>     depth 1, bits_per_pixel 1, scanline_pad 32
>     depth 8, bits_per_pixel 8, scanline_pad 32
>     depth 16, bits_per_pixel 16, scanline_pad 32
>     depth 24, bits_per_pixel 32, scanline_pad 32
> keycode range:    minimum 8, maximum 254
> focus:  window 0x1480009, revert to PointerRoot
> number of extensions:    34
>     AccessX
>     Adobe-DPS-Extension
>     DAMAGE
>     DOUBLE-BUFFER
>     DPMS
>     DPSExtension
>     Extended-Visual-Information
>     FBPM
>     GLX
>     LBX
>     MIT-SCREEN-SAVER
>     MIT-SHM
>     MIT-SUNDRY-NONSTANDARD
>     Multi-Buffering
>     RECORD
>     SECURITY
>     SHAPE
>     ST
>     SUN_ALLPLANES
>     SUN_DGA
>     SUN_OVL
>     SUN_SME
>     SYNC
>     SolarisIA
>     TOG-CUP
>     X-Resource
>     XC-APPGROUP
>     XC-MISC
>     XEVIE
>     XFIXES
>     XIE
>     XInputDeviceEvents
>     XInputExtension
>     XTEST
> default screen number:    0
> number of screens:    2
>
> screen #0:
>   dimensions:    1280x1024 pixels (361x288 millimeters)
>   resolution:    90x90 dots per inch
>   depths (3):    1, 8, 24
>   root window id:    0x4a
>   depth of root window:    24 planes
>   number of colormaps:    minimum 1, maximum 2
>   default colormap:    0x34
>   default number of colormap cells:    256
>   preallocated pixels:    black 0, white 16777215
>   options:    backing-store YES, save-unders YES
>   largest cursor:    32x32
>   current input event mask:    0xfa2033
>     KeyPressMask             KeyReleaseMask           EnterWindowMask
>     LeaveWindowMask          ButtonMotionMask          
> StructureNotifyMask
>     SubstructureNotifyMask   SubstructureRedirectMask FocusChangeMask
>     PropertyChangeMask       ColormapChangeMask
>   number of visuals:    17
>   default visual id:  0x27
>   visual:
>     visual id:    0x20
>     class:    PseudoColor
>     depth:    8 planes
>     available colormap entries:    256
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x21
>     class:    PseudoColor
>     depth:    8 planes
>     available colormap entries:    256
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x22
>     class:    StaticColor
>     depth:    8 planes
>     available colormap entries:    256
>     red, green, blue masks:    0x7, 0x38, 0xc0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x23
>     class:    StaticGray
>     depth:    8 planes
>     available colormap entries:    256
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x24
>     class:    GrayScale
>     depth:    8 planes
>     available colormap entries:    256
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x25
>     class:    TrueColor
>     depth:    8 planes
>     available colormap entries:    8 per subfield
>     red, green, blue masks:    0x7, 0x38, 0xc0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x26
>     class:    StaticGray
>     depth:    8 planes
>     available colormap entries:    256
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x2f
>     class:    PseudoColor
>     depth:    8 planes
>     available colormap entries:    255
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x30
>     class:    PseudoColor
>     depth:    8 planes
>     available colormap entries:    255
>     red, green, blue masks:    0x0, 0x0, 0x0
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x27
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x28
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x29
>     class:    DirectColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x2a
>     class:    DirectColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x2b
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x2c
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x2d
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>   visual:
>     visual id:    0x2e
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff, 0xff00, 0xff0000
>     significant bits in color specification:    8 bits
>
> screen #1:
>   dimensions:    1280x1024 pixels (361x289 millimeters)
>   resolution:    90x90 dots per inch
>   depths (2):    1, 24
>   root window id:    0x4c
>   depth of root window:    24 planes
>   number of colormaps:    minimum 1, maximum 1
>   default colormap:    0x35
>   default number of colormap cells:    256
>   preallocated pixels:    black 0, white 16777215
>   options:    backing-store YES, save-unders YES
>   largest cursor:    64x64
>   current input event mask:    0xfa2033
>     KeyPressMask             KeyReleaseMask           EnterWindowMask
>     LeaveWindowMask          ButtonMotionMask          
> StructureNotifyMask
>     SubstructureNotifyMask   SubstructureRedirectMask FocusChangeMask
>     PropertyChangeMask       ColormapChangeMask
>   number of visuals:    1
>   default visual id:  0x36
>   visual:
>     visual id:    0x36
>     class:    TrueColor
>     depth:    24 planes
>     available colormap entries:    256 per subfield
>     red, green, blue masks:    0xff0000, 0xff00, 0xff
>     significant bits in color specification:    8 bits
> diff -Naur vlc-0.8.5-20060217.orig/modules/video_chroma/i420_rgb.h  
> vlc-0.8.5-20060217/modules/video_chroma/i420_rgb.h
> --- vlc-0.8.5-20060217.orig/modules/video_chroma/i420_rgb.h	 
> 2006-02-17 00:00:28.000000000 +0100
> +++ vlc-0.8.5-20060217/modules/video_chroma/i420_rgb.h	2006-02-19  
> 14:42:32.667710000 +0100
> @@ -73,9 +73,9 @@
>  #define CONVERT_Y_PIXEL 
> ( BPP )                                                \
>      /* Only Y sample is present  
> */                                            \
>      p_ybase = p_yuv + *p_y+ 
> +;                                                 \
> -    *p_buffer++ = p_ybase[RED_OFFSET-((V_RED_COEF*128)>>SHIFT) +  
> i_red] |     \
> +    *p_buffer++ = p_ybase[RED_OFFSET-((V_RED_COEF*128)>>SHIFT) +  
> i_red] <<24 |     \
>          p_ybase[GREEN_OFFSET-(((U_GREEN_COEF+V_GREEN_COEF)*128) 
> >>SHIFT)       \
> -        + i_green ] | p_ybase[BLUE_OFFSET-((U_BLUE_COEF*128) 
> >>SHIFT) + i_blue];
> +        + i_green ] <<8 | p_ybase[BLUE_OFFSET-((U_BLUE_COEF*128) 
> >>SHIFT) + i_blue] >>8;
>
>  #define CONVERT_YUV_PIXEL 
> ( BPP )                                              \
>      /* Y, U and V samples are present  
> */                                      \
> VLC media player 0.8.5-svn Janus
> [00000001] main vlc debug: opening config file /home/gall/.vlc/vlcrc
> [00000001] main vlc debug: checking builtin modules
> [00000001] main vlc debug: checking plugin modules
> [00000001] main vlc debug: loading plugins cache file /home/ 
> gall/.vlc/cache/plugins-0404be.dat
> [00000001] main vlc debug: recursively browsing `modules'
> [00000001] main vlc debug: recursively browsing `/usr/local/lib/vlc'
> [00000001] main vlc debug: recursively browsing `plugins'
> [00000001] main vlc debug: module bank initialized, found 196 modules
> [00000001] main vlc debug: opening config file /home/gall/.vlc/vlcrc
> [00000001] main vlc debug: CPU has capabilities FPU
> [00000001] main vlc debug: looking for memcpy module: 1 candidate
> [00000001] main vlc debug: using memcpy module "memcpy"
> [00000254] main playlist debug: waiting for thread completion
> [00000254] main playlist debug: thread 2 (playlist) created at  
> priority 0 (src/playlist/playlist.c:184)
> [00000255] main private debug: waiting for thread completion
> [00000255] main private debug: thread 3 (preparser) created at  
> priority 0 (src/playlist/playlist.c:210)
> [00000256] main interface debug: looking for interface module: 1  
> candidate
> [00000256] main interface debug: using interface module "hotkeys"
> [00000256] main interface debug: thread 4 (interface) created at  
> priority 0 (src/interface/interface.c:229)
> [00000258] main interface debug: looking for interface module: 5  
> candidates
> [00000258] main interface debug: using interface module "screensaver"
> [00000258] main interface debug: thread 5 (interface) created at  
> priority 0 (src/interface/interface.c:229)
> [00000260] main interface debug: looking for interface module: 4  
> candidates
> [00000260] main interface debug: using interface module "wxwidgets"
> [00000260] main interface debug: thread 6 (manager) created at  
> priority 0 (src/interface/interface.c:214)
> [00000260] wxwidgets interface debug: Using last windows config  
> '(-1,0,0,1280,1024)(6,0,0,-1,150)'
> [00000260] wxwidgets interface debug: id=6 p=(0,0) s=(-1,150)
> [00000260] wxwidgets interface debug: last windows config is  
> invalid (ignored)
> [00000254] main playlist debug: adding playlist item `dvdsimple:/// 
> vol/dev/aliases/cdrom0' ( dvdsimple:///vol/dev/aliases/cdrom0 )
> [00000254] main playlist debug: creating statistics handler
> [00000254] main playlist debug: creating new input thread
> [00000264] main input debug: waiting for thread completion
> [00000264] main input debug: `dvdsimple:///vol/dev/aliases/cdrom0'  
> gives access `dvdsimple' demux `' path `/vol/dev/aliases/cdrom0'
> [00000264] main input debug: creating demux: access='dvdsimple'  
> demux='' path='/vol/dev/aliases/cdrom0'
> [00000265] main demuxer debug: looking for access_demux module: 1  
> candidate
> [00000264] main input debug: thread 7 (input) created at priority 0  
> (src/input/input.c:260)
> [00000265] dvdread demuxer debug: VMG opened
> [00000265] dvdread demuxer debug: number of titles: 4
> [00000265] dvdread demuxer debug: title 0 has 23 chapters
> [00000265] dvdread demuxer debug: title 1 has 23 chapters
> [00000265] dvdread demuxer debug: title 2 has 2 chapters
> [00000265] dvdread demuxer debug: title 3 has 2 chapters
> [00000265] dvdread demuxer debug: open VTS 4, for title 1
> [00000265] dvdread demuxer debug: title 1 vts_title 1 pgc 1 pgn 1  
> start 0 end 1863688 blocks: 1863689
> [00000264] main input debug: selecting program id=0
> [00000265] dvdread demuxer debug: audio position  0
> [00000265] dvdread demuxer debug: spu 1 0x80000200
> [00000265] dvdread demuxer debug: spu 2 0x80010300
> [00000265] main demuxer debug: using access_demux module "dvdread"
> [00000267] main decoder debug: looking for decoder module: 23  
> candidates
> [00000267] main decoder debug: using decoder module "libmpeg2"
> [00000267] main decoder debug: thread 8 (decoder) created at  
> priority 0 (src/input/decoder.c:159)
> [00000272] main decoder debug: looking for decoder module: 23  
> candidates
> [00000272] main decoder debug: using decoder module "a52"
> [00000272] main decoder debug: thread 9 (decoder) created at  
> priority 0 (src/input/decoder.c:159)
> [00000264] main input debug: `dvdsimple:///vol/dev/aliases/cdrom0'  
> successfully opened
> [00000267] libmpeg2 decoder debug: 720x480 (display 720,480),  
> aspect 768000, sar 32:27, 29.971 fps
> [00000267] main decoder debug: no usable vout present, spawning one
> [00000275] main video output debug: window size: 853x480
> [00000275] main video output debug: looking for video output  
> module: 5 candidates
> [00000276] main private debug: Registering subpicture channel, ID: 2
> [00000276] main private debug: Registering subpicture channel, ID: 3
> [00000276] main private debug: Registering subpicture channel, ID: 4
> [00000276] main private debug: Registering subpicture channel, ID: 5
> [00000275] opengl video output debug: Texture size: 1024x512
> [00000278] main private debug: looking for opengl provider module:  
> 1 candidate
> [00000278] glx private debug: Using GLX 1.3 API
> [00000278] main private debug: window size: 853x480
> [00000278] main private error: option glx-shm does not exist
> [00000278] glx private debug: Window manager supports NetWM
> [00000272] a52 decoder: A/52 channels:6 samplerate:48000 bitrate: 
> 384000
> [00000272] main decoder debug: no aout present, spawning one
> [00000280] main audio output debug: looking for audio output  
> module: 2 candidates
> [00000280] main audio output debug: using audio output module  
> "aout_sdl"
> [00000280] main audio output debug: output 's16b' 48000 Hz Stereo  
> frame=1 samples/4 bytes
> [00000280] main audio output debug: mixer 'fl32' 48000 Hz Stereo  
> frame=1 samples/8 bytes
> [00000280] main audio output debug: filter(s) 'fl32'->'s16b' 48000  
> Hz->48000 Hz Stereo->Stereo
> [00000282] main private debug: looking for audio filter module: 23  
> candidates
> [00000282] main private debug: using audio filter module  
> "float32tos16"
> [00000280] main audio output debug: found a filter for the whole  
> conversion
> [00000280] main audio output debug: looking for audio mixer module:  
> 3 candidates
> [00000280] main audio output debug: using audio mixer module  
> "float32_mixer"
> [00000280] main audio output debug: input 'a52 ' 48000 Hz 3F2R/LFE  
> frame=1536 samples/1536 bytes
> [00000280] main audio output debug: filter(s) 'a52 '->'fl32' 48000  
> Hz->48000 Hz 3F2R/LFE->Stereo
> [00000300] main private debug: looking for audio filter module: 23  
> candidates
> No accelerated IMDCT transform found
> [00000300] main private debug: using audio filter module  
> "a52tofloat32"
> [00000280] main audio output debug: found a filter for the whole  
> conversion
> [00000280] main audio output debug: filter(s) 'fl32'->'fl32' 52800  
> Hz->48000 Hz Stereo->Stereo
> [00000301] main private debug: looking for audio filter module: 23  
> candidates
> [00000301] main private debug: using audio filter module  
> "bandlimited_resampler"
> [00000280] main audio output debug: found a filter for the whole  
> conversion
> [00000278] glx private debug: Window manager supports  
> _NET_WM_STATE_FULLSCREEN
> [00000278] glx private debug: Window manager supports  
> _NET_WM_STATE_ABOVE
> [00000278] glx private debug: Window manager supports  
> _NET_WM_STATE_BELOW
> [00000278] main private debug: using opengl provider module "glx"
> [00000275] main video output debug: using video output module "opengl"
> [00000275] main video output debug: waiting for thread completion
> [00000275] main video output debug: got 1 direct buffer(s)
> [00000275] main video output debug: picture in 720x480  
> (0,0,720x480), chroma I420, ar 16:9, sar 32:27
> [00000275] main video output debug: picture user 720x480  
> (0,0,720x480), chroma I420, ar 16:9, sar 32:27
> [00000275] main video output debug: picture out 720x480  
> (0,0,720x480), chroma RV32, ar 16:9, sar 32:27
> [00000275] main video output debug: looking for chroma module: 5  
> candidates
> [00000275] main video output debug: using chroma module "i420_rgb"
> [00000275] main video output debug: indirect render, mapping render  
> pictures 0-7 to system pictures 1-8
> [00000275] main video output debug: thread 11 (video output)  
> created at priority 0 (src/video_output/video_output.c:421)
> [00000303] main private warning: dts != current_pts (617028)
> [00000303] main private warning: backward_pts != current_pts (-33366)
> [00000275] main video output warning: late picture skipped (310287)
> [00000275] main video output warning: late picture skipped (72724)
> [00000275] main video output warning: late picture skipped (23098)
> [00000275] main video output warning: late picture skipped (-10165)
> [00000275] main video output warning: late picture skipped (-60126)
> [00000264] main input debug: control type=0
> [00000264] main input debug: control: stopping input
> [00000264] main input debug: closing input
> [00000267] main decoder debug: removing module "libmpeg2"
> [00000267] main decoder debug: thread 8 joined (src/input/decoder.c: 
> 191)
> [00000267] main decoder debug: killing decoder fourcc `mpgv', 118  
> PES in FIFO
> [00000272] main decoder debug: removing module "a52"
> [00000272] main decoder debug: thread 9 joined (src/input/decoder.c: 
> 191)
> [00000272] main decoder debug: killing decoder fourcc `a52 ', 0 PES  
> in FIFO
> [00000300] main private debug: removing module "a52tofloat32"
> [00000301] main private debug: removing module "bandlimited_resampler"
> [00000280] main audio output debug: removing module "aout_sdl"
> [00000282] main private debug: removing module "float32tos16"
> [00000280] main audio output debug: removing module "float32_mixer"
> [00000264] main input debug: Program doesn't contain anymore ES
> [00000265] main demuxer debug: removing module "dvdread"
> [00000264] main input debug: thread 7 joined (src/input/input.c:402)
> [00000254] main playlist debug: garbage collector destroying 1 vout
> [00000275] main video output debug: removing module "i420_rgb"
> [00000278] main private debug: removing module "glx"
> [00000275] main video output debug: removing module "opengl"
> [00000275] main video output debug: thread 11 joined (src/ 
> video_output/video_output.c:461)
>
> (:25683): Gtk-CRITICAL **: file gtkwidget.c: line 5916: assertion  
> `GTK_IS_WIDGET (widget)' failed
>
> (:25683): GLib-GObject-CRITICAL **: file gobject.c: line 1222:  
> assertion `G_IS_OBJECT (object)' failed
> [00000001] main vlc debug: removing all interfaces
> [00000260] main interface debug: thread 6 joined (src/interface/ 
> interface.c:256)
> [00000260] main interface debug: removing module "wxwidgets"
> [00000258] main interface debug: thread 5 joined (src/interface/ 
> interface.c:256)
> [00000258] main interface debug: removing module "screensaver"
> [00000256] main interface debug: thread 4 joined (src/interface/ 
> interface.c:256)
> [00000256] main interface debug: removing module "hotkeys"
> [00000001] main vlc debug: removing playlist handler
> [00000255] main private debug: thread 3 joined (src/playlist/ 
> playlist.c:247)
> [00000254] main playlist debug: thread 2 joined (src/playlist/ 
> playlist.c:248)
> [00000254] main playlist: stopping playback
> [00000254] main playlist debug: deleting playlist item  
> `dvdsimple:///vol/dev/aliases/cdrom0'
> [00000001] main vlc debug: removing all video outputs
> [00000001] main vlc debug: removing all audio outputs
> [00000001] main vlc debug: TIMER Playlist walk : Total 0.010 ms / 1  
> intvls (Avg 0.010 ms)
> [00000001] main vlc debug: removing module "memcpy"
> [00000001] main vlc debug: opening config file /home/gall/.vlc/vlcrc
> [00000001] main vlc debug: saving plugins cache file /home/ 
> gall/.vlc/cache/plugins-0404be.dat
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20060301/0c254f48/attachment.html>


More information about the vlc-devel mailing list