summaryrefslogtreecommitdiff
path: root/src/video_out/vidix/vidix.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_out/vidix/vidix.txt')
-rw-r--r--src/video_out/vidix/vidix.txt247
1 files changed, 0 insertions, 247 deletions
diff --git a/src/video_out/vidix/vidix.txt b/src/video_out/vidix/vidix.txt
deleted file mode 100644
index e642147b4..000000000
--- a/src/video_out/vidix/vidix.txt
+++ /dev/null
@@ -1,247 +0,0 @@
- VIDIX - VIDeo Interface for *niX
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-This interface was designed and introduced as interface to userspace drivers
-to provide DGA everywhere where it's possible (unline X11).
-I hope that these drivers will be portable same as X11 (not only on *nix).
-
-What is it:
-- It's portable successor of mga_vid technology which is located in user-space.
-- Unlikely X11 it's provides DGA everywhere where it's possible.
-- Unlikely v4l it provides interface for video playback
-- Unlikely linux's drivers it uses mathematics library.
-
-Why it was developed:
-As said Vladimir Dergachev
-(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/gatos/km/km.rfc.txt):
-"0) Motivation
- v4l, v4l2 and Xv are all suffering from the same problem: attempt to fit
- existing multimedia devices into a fixed scheme."
-Well - I tried to implement something similar by motivation.
-
-How it works:
-~~~~~~~~~~~~~
-
-This interface is almost finished. But I guess it can be expanded by developer's
-requests.
-So any suggestions, reports, criticism are gladly accepted.
-
-1) APP calls vixGetVersion to check age of driver ;)
-2) APP calls vixProbe. Driver should return 0 if it can handle something in PC.
-3) APP calls vixGetCapability. Driver should return filled
- vidix_capability_t.type field at least.
-4) If above calls were succesful then APP calls vixInit function
- (Driver can have not exported this function in this case call will be
- skiped).
-5) After initializing of driver APP calls vixGetCapability again
- (In this case driver must fill every field of struct)
-6) APP calls vixQueryFourcc. Driver should answer - can it configure
- video memory for given fourcc or not.
-7) APP calls vixConfigPlayback. Driver should prepare BES on this call.
- APP pass to driver following info:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- vidix_playback_t.fourcc - contains fourcc of movie
- vidix_playback_t.capability - currently contsinas copy of vidix_capability_t.flags
- vidix_playback_t.blend_factor- currently unused
- vidix_playback_t.src - x,y,w,h fields contain original movie size
- (in pixels) x and y often are nulls.
- vidix_playback_t.src.pitch.y These fields contain source pitches
- vidix_playback_t.src.pitch.u - for each Y,U,V plane in bytes.
- vidix_playback_t.src.pitch.v (For packed fourcc only Y value is used)
- They are hints for driver to use same destinition
- pitches as in source memory (to speed up
- memcpy process).
- Note: when source pitches are unknown or
- variable these field will be filled into 0.
- vidix_playback_t.dest - x,y,w,h fields contains destinition rectange
- on the screen in pixels.
- vidix_playback_t.num_frames - maximal # of frames which can be used by APP.
- (Currently 10).
- Driver should fill following fields:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- vidix_playback_t.num_frames - real # of frames which will be used by driver.
- (Should be less or equal to app's num_frames).
-
- vidix_playback_t.dest.pitch.y These fields should contain alignment
- vidix_playback_t.dest.pitch.u - for each Y,U,V plane in bytes.
- vidix_playback_t.dest.pitch.v (For packed fourcc only Y value is used)
-
- vidix_playback_t.frame_size - Driver should tell to app which size of
- source frame (src.w and src.h) should
- use APP (according to pitches and offsets)
-
- vidix_playback_t.offsets - offsets from begin of BES memory for each frame
-
- vidix_playback_t.offset.y These field should contain offset
- vidix_playback_t.offset.u - for each Y,U,V plane within frame.
- vidix_playback_t.offset.v (For packed fourcc only Y value is used)
-
- vidix_playback_t.dga_addr - Address of BES memory.
-
-Also see this picture:
-
-VIDEO MEMORY layout:
- +----------- It's begin of video memory End of video memory--------------+
- | |
- v v
- [ RGB memory | YUV memory | UNDEF ]
- ^
- |
- +---- begin of BES memory
-
-BES MEMORY layout:
- +-------- begin of BES memory
- |
- v
- [ | | | | |
- ^ ^ ^ ^ ^
- | | | | + BEGIN of second frame
- | | | + BEGIN of V plane
- | | + BEGIN of U plane
- | +------- BEGIN of Y plane
- |
- +--------- BEGIN of first frame
-
-This means that in general case:
-offset of frame != offset of BES
-offset of Y plane != offset of first frame
-
-But often: vidix_playback_t.offsets[0] = vidix_playback_t.offset.y = 0;
-
-Formula: (For Y plane) copy source to:
- vidix_playback_t.dga_addr +
- vidix_playback_t.offsets[i] +
- vidix_playback_t.offset.y
-
-8) APP calls vixPlaybackOn. Driver should activate BES on this call.
-9) PLAYBACK. Driver should sleep here ;)
- But during playback can be called:
- vixFrameSelect (if this function is exported)
- Driver should prepare and activate corresponded frame.
- This function is used only for double and trilpe buffering and
- never used for single buffering playback.
- vixGet(Set)GrKeys (if this function is exported)
- This interface should be tuned but intriduced for overlapped playback
- and video effects (TYPE_FX)
- vixPlaybackGet(Set)Eq (if this function is exported)
- For color correction.
-10) APP calls vixPlaybackOff. Driver should deactivate BES on this call.
-11) If vixDestroy is defined APP calls this function before unloading driver
- from memory.
-
-
-What functions are mandatory:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-vixGetVersion
-vixProbe
-vixGetCapability
-vixQueryFourcc
-vixConfigPlayback
-vixPlaybackOn
-vixPlaybackOff
-
-All other functions are optionaly.
-
-BUSMASTERING
-************
-
-Busmastering is technique to implement data transfer through DMA.
-This technique is intended to free CPU for other useful work to
-speedup movie playback. The speedup will be different on different
-CPUs OSes and videocards. Only thing which SHOULD be implemented
-it's the fact that frame should be transfered faster than 1/fps.
-(I.e. faster than 33ms for 30 fps or faster than 40ms for 25 fps)
-VIDIX implementation of BM (busmastering) is slightly specific.
-During driver development you should keep in mind the next rules:
-1. BM is implemented as parallel process which should work
- simultaneously with frame decoding.
-2. To have possibility to use busmastering by non-ROOT users
- driver should rather call functions from libdha than from libc.
- (Example: driver should call bm_lock_mem instead of mlock)
-3. To speedup data transfer player will pass pointer to the DMA buffer
- which will have the same structure (planes and strides) as video memory
- (In this connexion driver should allocate frames in video memory
- same as if BM would not be implemented).
-
-Interface:
-~~~~~~~~~~
-
-The interface of BM is implemented through 2 functions:
- vixPlaybackCopyFrame
- vixQueryDMAStatus
-
-
-vixPlaybackCopyFrame
-
-should prepare engine to copy frame from
-system memory into video framebuffer. After that driver should
-send command into engine to start data transfer and return
-control immediatedly.
-
-The structure vidix_dma_s in details:
-
-typedef struct vidix_dma_s
-{
- /*
- app -> driver.
- Virtual address of source.
- Note: source buffer is allocated by using malloc
- or memalign();
- */
- void * src;
- /*
- app -> driver.
- Destinition offset within of video memory.
- It will point offset within of YUV memory where
- destinition data should be stored.
- */
- unsigned dest_offset;
- /* app -> driver. Size of data to be transfered in bytes. */
- unsigned size;
- /*
- can accept ORed values of BM_DMA* definitions
- BM_DMA_ASYNC - default value which indicates that transactiion
- should work asynchronously.
- BM_DMA_SYNC - may be ignored due speedup reasons
- BM_DMA_FIXED_BUFFS - indicates that player was started by ROOT
- and source DMA buffers were already locked in memory
- through mlock().
- /* app -> driver: idx of src buffer.
- if BM_DMA_FIXED_BUFFS flags is set then this field
- indicates which from buffers currently is passed
- into driver. This field maybe ignored by driver but
- it would be better to use that for minor speedup
- of engine preparing. */
- unsigned idx;
- /* for internal use by driver.
- Driver may use them on its opinion */
- void * internal[VID_PLAY_MAXFRAMES];
-}vidix_dma_t;
-
-
-vixQueryDMAStatus
-
-should check out DMA status and return 1 if BM is busy
-and 0 otherwise. Note: this function shouldn't wait any
-changes in DMA state.
-
-A few words about of non-linux systems
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Well, there is only one problem which stops us to use BM on
-nono-linux systems: it's lacking of possibility to perform
-convertion from virtual to physical address in user-space.
-This problem is sloved by so-called dhahelper driver for
-linux. What about of other OSes then this driver requires
-to be ported first. (Of course, except of DOS and DOS32
-where these convertions are unnecessary).
-
-Useful links:
-~~~~~~~~~~~~~
-Guide to DTV http://www.digitaltelevision.com/dtvbook/toc.shtml
-Fourcc http://www.webartz.com/fourcc/
-MPEG http://www.mpeg.org/MPEG/index.html
-Analog colors http://www.miranda.com/en/app_notes/TN/TN-05/TN-05.htm
-
-Please send your suggestions, reports, feedback to mplayerxp-general@lists.sourceforge.net
-
-Best regards! Nick Kurshev.