[NUT-devel] [RFC] FourCCs for rawvideo rgb4_byte / bgr4_byte

Stefano Sabatini stefasab at gmail.com
Thu May 27 12:14:24 CEST 2010


On date Thursday 2010-05-27 00:59:21 +0200, Stefano Sabatini wrote:
> On date Wednesday 2010-05-26 00:49:54 +0200, Stefano Sabatini wrote:
> > On date Sunday 2010-05-23 04:30:44 +0200, Michael Niedermayer wrote:
> > > On Fri, May 21, 2010 at 12:19:10AM +0200, Stefano Sabatini wrote:
> > > > Hi all, this follows a thread from ffmpeg-devel:
> > > > http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/109054/focus=109394
> > > > 
> > > > I proposed these names:
> > > > B4BY (bgr4_byte) Packed BGR 1:2:1,  8bpp, (msb)1B 2G 1R(lsb)
> > > > R4BY (rgb4_byte) Packed RGB 1:2:1,  8bpp, (msb)1R 2G 1B(lsb)
> > > > 
> > > > Other idea:
> > > > bgr4_byte => B[1][2][1]
> > > > rgb4_byte => R[1][2][1]
> > > > 
> > > 
> > > > Note that I'm very satisfied with these names, maybe someone can find
> > > > a better scheme.
> > > > 
> > > > What do you think?
> > > 
> > > i think you are missin a "not" in your sentance
> > 
> > Yes indeed.
> >  
> > > and iam not sure abut the fourccs here, this format is simply inefficient
> > > to store 4bit rgb, is it used in the wild?
> > 
> > I have not the faintest idea, and I couldn't even manage to understand
> > who introduced it, since it exists since the night of time of FFmpeg.
> > 
> > > if not (its just for ffmpegs test lavfi test system we can just pick any
> > > random fourcc and treat it like some ffmpeg internal thing)
> > > either of your choices would do for that
> > 
> > My problem is that I need to *write* such a format in NUT, so I need a
> > codec for that. Also to add such a tag shouldn't hurt anyway. If you
> > have an idea for avoiding to define a tag for it and still be able to
> > store such a format in NUT please tell (well an idea would be to make
> > possible to define the codec tag), as for me I prefer to add these two
> > rather than add exceptions/special cases to the FFmpeg code.
> > 
> > Patch updated, regards.
> 
> > Index: docs/nut4cc.txt
> > ===================================================================
> > --- docs/nut4cc.txt	(revision 669)
> > +++ docs/nut4cc.txt	(working copy)
> > @@ -96,6 +96,8 @@
> >  B0W1    black/white bitstream, 1bpp, 1 is white, 0 is black, in each byte pixels are ordered from the msb to the lsb [NOT in AVI]
> >  BGR[4]  Packed BGR 1:2:1 bitstream,  4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits [NOT in AVI]
> >  RGB[4]  Packed RGB 1:2:1 bitstream,  4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits [NOT in AVI]
> > +B4BY    Packed BGR 1:2:1,  8bpp, (msb)4X 1B 2G 1R(lsb), one pixel per byte, the 4 most significant bits are ignored
> > +R4BY    Packed RGB 1:2:1,  8bpp, (msb)4X 1R 2G 1B(lsb), one pixel per byte, the 4 most significant bits are ignored
> >  BGR[8]  Packed RGB 3:3:2,  8bpp, (msb)2B 3G 3R(lsb) [NOT in AVI]
> >  RGB[8]  Packed RGB 3:3:2,  8bpp, (msb)2R 3G 3B(lsb) [NOT in AVI]
> >  RGB[48] Packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]
> 
> I was almost committing, but since there are other formats I want to
> add support for, maybe someone can find out a scheme for all of them.
> 
> These are the format I want to add support for:
> bgr4_byte ->none
> rgb4_byte ->none
> rgb444be ->none
> rgb444le ->none
> bgr444be ->none
> bgr444le ->none
> 
> I propose this scheme.
> 
> First byte:
> b = BGR
> B = BGR+A
> r = RGB
> R = RGB+A
> a = ABGR
> A = ARGB
> 
> Second byte: the number of bytes of a pixel
> Third byte: a decimal composed by two digits, the first is the number
> of bits of the first component, the second is the number of bits of
> the second component
> Fourth byte: a decimal composed by two digits, the first is the number
> of bits of the third component, the second is the number of bits of
> the fourth component
> 
> If the order of pixels is inverted then the bytes have to be read
> as big-endian.
> 
> If the format has only three components, then the first component is
> supposed to be composed of the non-used pixels.
> 
> According to this scheme:
> bgr4_byte -> B1[41][21]
> rgb4_byte -> R1[41][21]
> rgb444be  -> [44][44]2R
> rgb444le  -> R2[44][44]
> bgr444be  -> [44][44]2B
> bgr444le  -> B2[44][44]

Ehm... s/R/r/, s/B/b/:
bgr4_byte -> b1[41][21]
rgb4_byte -> r1[41][21]
rgb444be  -> [44][44]2r
rgb444le  -> r2[44][44]
bgr444be  -> [44][44]2b
bgr444le  -> b2[44][44]

Regards.


More information about the NUT-devel mailing list