[MPlayer-G2-dev] MID proposal

D Richard Felker III dalias at aerifal.cx
Sun Nov 2 01:00:05 CET 2003


On Sat, Nov 01, 2003 at 04:38:14PM +0100, Alex Beregszaszi wrote:
> Hi,
> 
> Here's my idea of a IMGFMT replacement: MID stands for MPlayer Image
> Description.

Here's what I have so far:

// MPlayer Imageformat Description

#define MID_TYPE_YUV        1
#define MID_TYPE_RGB        2
#define MID_TYPE_PALETTE    3
#define MID_TYPE_SPECIAL    4

#define MID_FLAG_SWAPPED      0x1

typedef struct mid_s {
        int type;
        int flags;
        int bpp;
	int depth;
        int csh, csv; // chroma shift, horiz. and vert.
        int num_planes; // 0=packed, 1=gray, 2=semiplanar(nv12), 3=full planar
        int chan_bits[4]; // sizes and offsets of channels (in bits). order is:
        int chan_offs[4]; // R,G,B[,A] for RGB; Y1,Y2,U,V for packed YUV
        unsigned int imgfmt; // legacy "fourcc"
        char *name, *longname;
} mid_t;

Some comments:

Q: Why separate type and flags again?
A: if (mid.type==MID_TYPE_YUV) is cleaner than
   if ((mid.flags & MID_FLAG_TYPEMASK) == MID_TYPE_YUV).

Q: Why have flags if there's only one flag?
A: Good question.

Q: Should num_planes really be the determining factor for what type of
   planar arrangement we have? Or should it just tell how many
   pointers in the planes[] array are valid, and should be use flags
   or different basic types for different planar arrangements?
A: I'm not sure. I would consider something like the following but I
   don't know if I like it:

#define MID_YUV_PLANAR     1
#define MID_YUV_PACKED     2
#define MID_YUV_SEMIPLANAR 3
#define MID_RGB            4
#define MID_PALETTE        5
#define MID_SPECIAL        6

Q: Why is palette a type rather than a flag?
A: Type tells the filter what type of data is stored in the buffers
   which planes[] points to. Indexed (palette) images do not have data
   that can be treated as meaningful colors (RGB or YUV) here, so IMO
   it's a different type in itself. Also it doesn't make sense to
   consider indexed images as YUV or RGB in nature, since the
   colorspace is a property of the palette, not the data itself (in
   fact you can convert the colorspace of the palette at essentially
   no cost!).

Q: What is the "special" type?
A: Anything other than a standard-format YUV, RGB, or indexed image.
   Some examples are compressed images (for hardware decoder boards)
   and dct/mv data for xvmc. Normally filters will reject special type
   images.

Q: Doesn't storing arbitrary channel layout (chan_bits/chan_offs)
   force filters to handle any strange format and thus be slow?
A: No. In fact only standard formats should be supported. This data is
   just here for filters which are written in C, and don't want to
   special case 555/565 or RGB/BGR, but instead use the same generic
   code for all cases. The same information in chan_bits/chan_offs is
   already available via depth, bpp, and the status of the swapped
   flag.

Rich



More information about the MPlayer-G2-dev mailing list