[Mplayer-cvslog] CVS: main/libvo jpeg_enc.c,1.17,1.18

Alex Beregszaszi alex at fsn.hu
Sat Nov 1 16:21:57 CET 2003


> Moving jpeg_enc to the filter layer is doable. Two new IMGFMT's will
> be needed, like
> IMGFMT_ZRMJPEG (YUV422, width%16==0, height%8==0)
> IMGFMT_ZRMJPEG_INTERLACED (two concatenated JPEG images of halve
> height)
Imho IMGFMT_MJPEG is ok for it (mpi can/should handle interlacing flag),
and the filter should handle different styles of mjpeg. So for example
-vf lavc=format=mjpeg:favor=zoran should do the job.

> The ZR is there to signify that the JPEG images need to have special 
> properties, ordinary MJPEG streams from webcams for example, won't
> work with zoran boards because the colorspace is wrong (YUV420). 
For that imgfmt=yuv422 should do the job.

> 1. Add new zr driver (vo_zr2.c, for example), which only accepts 
> IMGFMT_ZRMJPEG* (and complies with the 'multiple config calls are 
> alllowed'-rule (vo_zr still doesn't...))
> 2. Add passthrough driver (analogous to vd_mpegpes) (for quick
> testing, passthrough will also be useful because mplayer will then be
> able to emulate the behavour of lavplay from the mjpegtools)
That already exists in my 'implementation'
> 3. Add vf_zrmjpeg.c, at first it will be jpeg_enc.c including a
> vf_wrapper. 
Better would be copying jpeg_enc.c to vf_zrmjpeg.c and later remove
> 4. Remove vo_zr.c if vo_zr2.c is better in every way.
> One major obstacle is cinerama support. (which is broken at this time 
> though, but can be fixed by moving the -zr* options to the subdevice)
> Ideally the -vf layer will allow multiple output devices, and multiple
> instances of the same output device (where possible).
>                              crop=left_part:vo=x11,display=localhost:0
>                            /
> movie -> scale=bla:split -
>                            \
>                            crop=right_part:vo=x11,display=otherhost:0
> The current cinerama functionality of the zr driver could then be
> replaced by doing vo=zr2,dev=/dev/video0 and vo=zr2,dev=/dev/video1 in
> the example.(also the crop filter could be enhanced to accept
> IMGFMT_ZRMJPEG* data; JPEG files can be easily cropped at macroblock
> boundaries)
Maybe we should start the whole work in G2? G2 has plans for this
multiple output support.
> > Or better, backport your improvements to ffmpeg.
> There are a few things which need to be added (in some way) to
> libavcodec:
> -support for black and white encoding (is already implemented for
> other codecs), will probably be easy.
> -support for the creation of YUV422 jpeg from YUV420 and YUV422 data.
> If agreement is reached about in which way this will fit in the
> current libavcodec, it will probably be doable.
i planned that since ages, as lot of windows mjpeg decoders only support
> -support for very generic buffer specification of the source image to
> facilitate horizontal decimation. (hard, the functionality could be 
> replaced by a filter in the -vf chain, but at a performance loss)
> (the workings of the 'very generic buffer specification' in
> jpeg_enc.c, are explained in the comment preceding jpeg_enc_init)
will have a look at it
> -support for creating interlaced ZRMJPEG from non-interlaced YUV420
> data with the following optimalisation (this optimalisation currently
> does not exist in jpeg_enc.c): the JPEGs of the odd and even frame
> will be created in parallel so that the U and V planes only need to be
> encoded once. This should give a 33% performance increase. (now, the
> first and second field also have the same UV data, but it is encoded
> twice because the fields are encoded seperately). The source needs to
> be non-interlaced to make sure that the color on the first U and V
> line matches with the first two lines of Y.
generic interlaced encoding support into lavc
> I am, however, interested starting to create a new, clean vo_zr2.c and
> corresponding filters. Alex, do you agree with the 'four step plan' 
> presented above?
yes with my changes :)

Alex Beregszaszi <alex at fsn.hu>
(MPlayer Core Developer -- http://www.mplayerhq.hu/)

More information about the MPlayer-cvslog mailing list