Mercurial > mplayer.hg
view libmpdemux/aviheader.h @ 10743:3d1eab0d9c5a
* Add multi device support.
For the moment up to 16 cards are supported.
More can be added easily by changing 2 defines.
This makes 90% of the patch (mostly stupid s/$var/card->$var/)
The different devices can be accessed by different minor
numbers (0-15):
mknod /dev/mga_vid0 c 178 0
mknod /dev/mga_vid1 c 178 1
mknod /dev/mga_vid2 c 178 2
mknod /dev/mga_vid3 c 178 3
...
ln -s mga_vid /dev/mga_vid
* Change the devfs code to let the kernel assign us
a major and a minor number (what is the sense behind
using devfs anyways if we dont do that ?)
Subdevices for the different cards are created.
mga_vid uses the first card (for compatibility)
* Fix a possible error when mmap() is called before
the card is configured by a ioctl().
author | attila |
---|---|
date | Sun, 31 Aug 2003 20:57:34 +0000 |
parents | ae5a2ae1c349 |
children | 846ed866f86c |
line wrap: on
line source
#ifndef _aviheader_h #define _aviheader_h //#include "config.h" /* get correct definition WORDS_BIGENDIAN */ #include "bswap.h" /* * Some macros to swap little endian structures read from an AVI file * into machine endian format */ #ifdef WORDS_BIGENDIAN #define le2me_MainAVIHeader(h) { \ (h)->dwMicroSecPerFrame = le2me_32((h)->dwMicroSecPerFrame); \ (h)->dwMaxBytesPerSec = le2me_32((h)->dwMaxBytesPerSec); \ (h)->dwPaddingGranularity = le2me_32((h)->dwPaddingGranularity); \ (h)->dwFlags = le2me_32((h)->dwFlags); \ (h)->dwTotalFrames = le2me_32((h)->dwTotalFrames); \ (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \ (h)->dwStreams = le2me_32((h)->dwStreams); \ (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \ (h)->dwWidth = le2me_32((h)->dwWidth); \ (h)->dwHeight = le2me_32((h)->dwHeight); \ } #define le2me_AVIStreamHeader(h) { \ (h)->fccType = le2me_32((h)->fccType); \ (h)->fccHandler = le2me_32((h)->fccHandler); \ (h)->dwFlags = le2me_32((h)->dwFlags); \ (h)->wPriority = le2me_16((h)->wPriority); \ (h)->wLanguage = le2me_16((h)->wLanguage); \ (h)->dwInitialFrames = le2me_32((h)->dwInitialFrames); \ (h)->dwScale = le2me_32((h)->dwScale); \ (h)->dwRate = le2me_32((h)->dwRate); \ (h)->dwStart = le2me_32((h)->dwStart); \ (h)->dwLength = le2me_32((h)->dwLength); \ (h)->dwSuggestedBufferSize = le2me_32((h)->dwSuggestedBufferSize); \ (h)->dwQuality = le2me_32((h)->dwQuality); \ (h)->dwSampleSize = le2me_32((h)->dwSampleSize); \ le2me_RECT(&(h)->rcFrame); \ } #define le2me_RECT(h) { \ (h)->left = le2me_16((h)->left); \ (h)->top = le2me_16((h)->top); \ (h)->right = le2me_16((h)->right); \ (h)->bottom = le2me_16((h)->bottom); \ } #define le2me_BITMAPINFOHEADER(h) { \ (h)->biSize = le2me_32((h)->biSize); \ (h)->biWidth = le2me_32((h)->biWidth); \ (h)->biHeight = le2me_32((h)->biHeight); \ (h)->biPlanes = le2me_16((h)->biPlanes); \ (h)->biBitCount = le2me_16((h)->biBitCount); \ (h)->biCompression = le2me_32((h)->biCompression); \ (h)->biSizeImage = le2me_32((h)->biSizeImage); \ (h)->biXPelsPerMeter = le2me_32((h)->biXPelsPerMeter); \ (h)->biYPelsPerMeter = le2me_32((h)->biYPelsPerMeter); \ (h)->biClrUsed = le2me_32((h)->biClrUsed); \ (h)->biClrImportant = le2me_32((h)->biClrImportant); \ } #define le2me_WAVEFORMATEX(h) { \ (h)->wFormatTag = le2me_16((h)->wFormatTag); \ (h)->nChannels = le2me_16((h)->nChannels); \ (h)->nSamplesPerSec = le2me_32((h)->nSamplesPerSec); \ (h)->nAvgBytesPerSec = le2me_32((h)->nAvgBytesPerSec); \ (h)->nBlockAlign = le2me_16((h)->nBlockAlign); \ (h)->wBitsPerSample = le2me_16((h)->wBitsPerSample); \ (h)->cbSize = le2me_16((h)->cbSize); \ } #define le2me_AVIINDEXENTRY(h) { \ (h)->ckid = le2me_32((h)->ckid); \ (h)->dwFlags = le2me_32((h)->dwFlags); \ (h)->dwChunkOffset = le2me_32((h)->dwChunkOffset); \ (h)->dwChunkLength = le2me_32((h)->dwChunkLength); \ } #else #define le2me_MainAVIHeader(h) /**/ #define le2me_AVIStreamHeader(h) /**/ #define le2me_RECT(h) /**/ #define le2me_BITMAPINFOHEADER(h) /**/ #define le2me_WAVEFORMATEX(h) /**/ #define le2me_AVIINDEXENTRY(h) /**/ #endif #endif typedef struct { // index stuff: void* idx; int idx_size; off_t idx_pos; off_t idx_pos_a; off_t idx_pos_v; off_t idx_offset; // ennyit kell hozzaadni az index offset ertekekhez // bps-based PTS stuff: int video_pack_no; int audio_block_size; off_t audio_block_no; // interleaved PTS stuff: int skip_video_frames; int audio_streams; float avi_audio_pts; float avi_video_pts; float pts_correction; unsigned int pts_corr_bytes; unsigned char pts_corrected; unsigned char pts_has_video; unsigned int numberofframes; } avi_priv_t; #define AVI_PRIV ((avi_priv_t*)(demuxer->priv))