11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * VIDEO MOTION CODECs internal API for video devices 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Interface for MJPEG (and maybe later MPEG/WAVELETS) codec's 51da177e4SLinus Torvalds * bound to a master device. 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * (c) 2002 Wolfgang Scherr <scherr@net4you.at> 81da177e4SLinus Torvalds * 91da177e4SLinus Torvalds * $Id: videocodec.h,v 1.1.2.4 2003/01/14 21:15:03 rbultje Exp $ 101da177e4SLinus Torvalds * 111da177e4SLinus Torvalds * ------------------------------------------------------------------------ 121da177e4SLinus Torvalds * 131da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify 141da177e4SLinus Torvalds * it under the terms of the GNU General Public License as published by 151da177e4SLinus Torvalds * the Free Software Foundation; either version 2 of the License, or 161da177e4SLinus Torvalds * (at your option) any later version. 171da177e4SLinus Torvalds * 181da177e4SLinus Torvalds * This program is distributed in the hope that it will be useful, 191da177e4SLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 201da177e4SLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 211da177e4SLinus Torvalds * GNU General Public License for more details. 221da177e4SLinus Torvalds * 231da177e4SLinus Torvalds * ------------------------------------------------------------------------ 241da177e4SLinus Torvalds */ 251da177e4SLinus Torvalds 261da177e4SLinus Torvalds /* =================== */ 271da177e4SLinus Torvalds /* general description */ 281da177e4SLinus Torvalds /* =================== */ 291da177e4SLinus Torvalds 301da177e4SLinus Torvalds /* Should ease the (re-)usage of drivers supporting cards with (different) 311da177e4SLinus Torvalds video codecs. The codecs register to this module their functionality, 321da177e4SLinus Torvalds and the processors (masters) can attach to them if they fit. 331da177e4SLinus Torvalds 341da177e4SLinus Torvalds The codecs are typically have a "strong" binding to their master - so I 351da177e4SLinus Torvalds don't think it makes sense to have a full blown interfacing as with e.g. 361da177e4SLinus Torvalds i2c. If you have an other opinion, let's discuss & implement it :-))) 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds Usage: 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds The slave has just to setup the videocodec structure and use two functions: 411da177e4SLinus Torvalds videocodec_register(codecdata); 421da177e4SLinus Torvalds videocodec_unregister(codecdata); 431da177e4SLinus Torvalds The best is just calling them at module (de-)initialisation. 441da177e4SLinus Torvalds 451da177e4SLinus Torvalds The master sets up the structure videocodec_master and calls: 461da177e4SLinus Torvalds codecdata=videocodec_attach(master_codecdata); 471da177e4SLinus Torvalds videocodec_detach(codecdata); 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds The slave is called during attach/detach via functions setup previously 501da177e4SLinus Torvalds during register. At that time, the master_data pointer is set up 511da177e4SLinus Torvalds and the slave can access any io registers of the master device (in the case 521da177e4SLinus Torvalds the slave is bound to it). Otherwise it doesn't need this functions and 531da177e4SLinus Torvalds therfor they may not be initialized. 541da177e4SLinus Torvalds 55eef35c2dSStefan Weil The other functions are just for convenience, as they are for sure used by 56*25985edcSLucas De Marchi most/all of the codecs. The last ones may be omitted, too. 571da177e4SLinus Torvalds 581da177e4SLinus Torvalds See the structure declaration below for more information and which data has 591da177e4SLinus Torvalds to be set up for the master and the slave. 601da177e4SLinus Torvalds 611da177e4SLinus Torvalds ---------------------------------------------------------------------------- 621da177e4SLinus Torvalds The master should have "knowledge" of the slave and vice versa. So the data 631da177e4SLinus Torvalds structures sent to/from slave via set_data/get_data set_image/get_image are 641da177e4SLinus Torvalds device dependent and vary between MJPEG/MPEG/WAVELET/... devices. (!!!!) 651da177e4SLinus Torvalds ---------------------------------------------------------------------------- 661da177e4SLinus Torvalds */ 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds 691da177e4SLinus Torvalds /* ========================================== */ 701da177e4SLinus Torvalds /* description of the videocodec_io structure */ 711da177e4SLinus Torvalds /* ========================================== */ 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds /* 741da177e4SLinus Torvalds ==== master setup ==== 751da177e4SLinus Torvalds name -> name of the device structure for reference and debugging 761da177e4SLinus Torvalds master_data -> data ref. for the master (e.g. the zr36055,57,67) 771da177e4SLinus Torvalds readreg -> ref. to read-fn from register (setup by master, used by slave) 781da177e4SLinus Torvalds writereg -> ref. to write-fn to register (setup by master, used by slave) 791da177e4SLinus Torvalds this two functions do the lowlevel I/O job 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds ==== slave functionality setup ==== 821da177e4SLinus Torvalds slave_data -> data ref. for the slave (e.g. the zr36050,60) 831da177e4SLinus Torvalds check -> fn-ref. checks availability of an device, returns -EIO on failure or 841da177e4SLinus Torvalds the type on success 851da177e4SLinus Torvalds this makes espcecially sense if a driver module supports more than 861da177e4SLinus Torvalds one codec which may be quite similar to access, nevertheless it 871da177e4SLinus Torvalds is good for a first functionality check 881da177e4SLinus Torvalds 891da177e4SLinus Torvalds -- main functions you always need for compression/decompression -- 901da177e4SLinus Torvalds 911da177e4SLinus Torvalds set_mode -> this fn-ref. resets the entire codec, and sets up the mode 921da177e4SLinus Torvalds with the last defined norm/size (or device default if not 931da177e4SLinus Torvalds available) - it returns 0 if the mode is possible 941da177e4SLinus Torvalds set_size -> this fn-ref. sets the norm and image size for 951da177e4SLinus Torvalds compression/decompression (returns 0 on success) 967f6adeafSHans Verkuil the norm param is defined in videodev2.h (V4L2_STD_*) 971da177e4SLinus Torvalds 981da177e4SLinus Torvalds additional setup may be available, too - but the codec should work with 991da177e4SLinus Torvalds some default values even without this 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds set_data -> sets device-specific data (tables, quality etc.) 1021da177e4SLinus Torvalds get_data -> query device-specific data (tables, quality etc.) 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds if the device delivers interrupts, they may be setup/handled here 1051da177e4SLinus Torvalds setup_interrupt -> codec irq setup (not needed for 36050/60) 1061da177e4SLinus Torvalds handle_interrupt -> codec irq handling (not needed for 36050/60) 1071da177e4SLinus Torvalds 1081da177e4SLinus Torvalds if the device delivers pictures, they may be handled here 1091da177e4SLinus Torvalds put_image -> puts image data to the codec (not needed for 36050/60) 1101da177e4SLinus Torvalds get_image -> gets image data from the codec (not needed for 36050/60) 1111da177e4SLinus Torvalds the calls include frame numbers and flags (even/odd/...) 1121da177e4SLinus Torvalds if needed and a flag which allows blocking until its ready 1131da177e4SLinus Torvalds */ 1141da177e4SLinus Torvalds 1151da177e4SLinus Torvalds /* ============== */ 1161da177e4SLinus Torvalds /* user interface */ 1171da177e4SLinus Torvalds /* ============== */ 1181da177e4SLinus Torvalds 1191da177e4SLinus Torvalds /* 1201da177e4SLinus Torvalds Currently there is only a information display planned, as the layer 1211da177e4SLinus Torvalds is not visible for the user space at all. 1221da177e4SLinus Torvalds 1231da177e4SLinus Torvalds Information is available via procfs. The current entry is "/proc/videocodecs" 1241da177e4SLinus Torvalds but it makes sense to "hide" it in the /proc/video tree of v4l(2) --TODO--. 1251da177e4SLinus Torvalds 1261da177e4SLinus Torvalds A example for such an output is: 1271da177e4SLinus Torvalds 1281da177e4SLinus Torvalds <S>lave or attached <M>aster name type flags magic (connected as) 1291da177e4SLinus Torvalds S zr36050 0002 0000d001 00000000 (TEMPLATE) 1301da177e4SLinus Torvalds M zr36055[0] 0001 0000c001 00000000 (zr36050[0]) 1311da177e4SLinus Torvalds M zr36055[1] 0001 0000c001 00000000 (zr36050[1]) 1321da177e4SLinus Torvalds 1331da177e4SLinus Torvalds */ 1341da177e4SLinus Torvalds 1351da177e4SLinus Torvalds 1361da177e4SLinus Torvalds /* =============================================== */ 1371da177e4SLinus Torvalds /* special defines for the videocodec_io structure */ 1381da177e4SLinus Torvalds /* =============================================== */ 1391da177e4SLinus Torvalds 1401da177e4SLinus Torvalds #ifndef __LINUX_VIDEOCODEC_H 1411da177e4SLinus Torvalds #define __LINUX_VIDEOCODEC_H 1421da177e4SLinus Torvalds 1437f6adeafSHans Verkuil #include <linux/videodev2.h> 1441da177e4SLinus Torvalds 1451da177e4SLinus Torvalds #define CODEC_DO_COMPRESSION 0 1461da177e4SLinus Torvalds #define CODEC_DO_EXPANSION 1 1471da177e4SLinus Torvalds 1481da177e4SLinus Torvalds /* this are the current codec flags I think they are needed */ 1491da177e4SLinus Torvalds /* -> type value in structure */ 1501da177e4SLinus Torvalds #define CODEC_FLAG_JPEG 0x00000001L // JPEG codec 1511da177e4SLinus Torvalds #define CODEC_FLAG_MPEG 0x00000002L // MPEG1/2/4 codec 1521da177e4SLinus Torvalds #define CODEC_FLAG_DIVX 0x00000004L // DIVX codec 1531da177e4SLinus Torvalds #define CODEC_FLAG_WAVELET 0x00000008L // WAVELET codec 1541da177e4SLinus Torvalds // room for other types 1551da177e4SLinus Torvalds 1561da177e4SLinus Torvalds #define CODEC_FLAG_MAGIC 0x00000800L // magic key must match 1571da177e4SLinus Torvalds #define CODEC_FLAG_HARDWARE 0x00001000L // is a hardware codec 1581da177e4SLinus Torvalds #define CODEC_FLAG_VFE 0x00002000L // has direct video frontend 1591da177e4SLinus Torvalds #define CODEC_FLAG_ENCODER 0x00004000L // compression capability 1601da177e4SLinus Torvalds #define CODEC_FLAG_DECODER 0x00008000L // decompression capability 1611da177e4SLinus Torvalds #define CODEC_FLAG_NEEDIRQ 0x00010000L // needs irq handling 1621da177e4SLinus Torvalds #define CODEC_FLAG_RDWRPIC 0x00020000L // handles picture I/O 1631da177e4SLinus Torvalds 1641da177e4SLinus Torvalds /* a list of modes, some are just examples (is there any HW?) */ 1651da177e4SLinus Torvalds #define CODEC_MODE_BJPG 0x0001 // Baseline JPEG 1661da177e4SLinus Torvalds #define CODEC_MODE_LJPG 0x0002 // Lossless JPEG 1671da177e4SLinus Torvalds #define CODEC_MODE_MPEG1 0x0003 // MPEG 1 1681da177e4SLinus Torvalds #define CODEC_MODE_MPEG2 0x0004 // MPEG 2 1691da177e4SLinus Torvalds #define CODEC_MODE_MPEG4 0x0005 // MPEG 4 1701da177e4SLinus Torvalds #define CODEC_MODE_MSDIVX 0x0006 // MS DivX 1711da177e4SLinus Torvalds #define CODEC_MODE_ODIVX 0x0007 // Open DivX 1721da177e4SLinus Torvalds #define CODEC_MODE_WAVELET 0x0008 // Wavelet 1731da177e4SLinus Torvalds 1741da177e4SLinus Torvalds /* this are the current codec types I want to implement */ 1751da177e4SLinus Torvalds /* -> type value in structure */ 1761da177e4SLinus Torvalds #define CODEC_TYPE_NONE 0 1771da177e4SLinus Torvalds #define CODEC_TYPE_L64702 1 1781da177e4SLinus Torvalds #define CODEC_TYPE_ZR36050 2 1791da177e4SLinus Torvalds #define CODEC_TYPE_ZR36016 3 1801da177e4SLinus Torvalds #define CODEC_TYPE_ZR36060 4 1811da177e4SLinus Torvalds 1821da177e4SLinus Torvalds /* the type of data may be enhanced by future implementations (data-fn.'s) */ 1831da177e4SLinus Torvalds /* -> used in command */ 1841da177e4SLinus Torvalds #define CODEC_G_STATUS 0x0000 /* codec status (query only) */ 1851da177e4SLinus Torvalds #define CODEC_S_CODEC_MODE 0x0001 /* codec mode (baseline JPEG, MPEG1,... */ 1861da177e4SLinus Torvalds #define CODEC_G_CODEC_MODE 0x8001 1871da177e4SLinus Torvalds #define CODEC_S_VFE 0x0002 /* additional video frontend setup */ 1881da177e4SLinus Torvalds #define CODEC_G_VFE 0x8002 1891da177e4SLinus Torvalds #define CODEC_S_MMAP 0x0003 /* MMAP setup (if available) */ 1901da177e4SLinus Torvalds 1911da177e4SLinus Torvalds #define CODEC_S_JPEG_TDS_BYTE 0x0010 /* target data size in bytes */ 1921da177e4SLinus Torvalds #define CODEC_G_JPEG_TDS_BYTE 0x8010 1931da177e4SLinus Torvalds #define CODEC_S_JPEG_SCALE 0x0011 /* scaling factor for quant. tables */ 1941da177e4SLinus Torvalds #define CODEC_G_JPEG_SCALE 0x8011 1951da177e4SLinus Torvalds #define CODEC_S_JPEG_HDT_DATA 0x0018 /* huffman-tables */ 1961da177e4SLinus Torvalds #define CODEC_G_JPEG_HDT_DATA 0x8018 1971da177e4SLinus Torvalds #define CODEC_S_JPEG_QDT_DATA 0x0019 /* quantizing-tables */ 1981da177e4SLinus Torvalds #define CODEC_G_JPEG_QDT_DATA 0x8019 1991da177e4SLinus Torvalds #define CODEC_S_JPEG_APP_DATA 0x001A /* APP marker */ 2001da177e4SLinus Torvalds #define CODEC_G_JPEG_APP_DATA 0x801A 2011da177e4SLinus Torvalds #define CODEC_S_JPEG_COM_DATA 0x001B /* COM marker */ 2021da177e4SLinus Torvalds #define CODEC_G_JPEG_COM_DATA 0x801B 2031da177e4SLinus Torvalds 2041da177e4SLinus Torvalds #define CODEC_S_PRIVATE 0x1000 /* "private" commands start here */ 2051da177e4SLinus Torvalds #define CODEC_G_PRIVATE 0x9000 2061da177e4SLinus Torvalds 2071da177e4SLinus Torvalds #define CODEC_G_FLAG 0x8000 /* this is how 'get' is detected */ 2081da177e4SLinus Torvalds 2091da177e4SLinus Torvalds /* types of transfer, directly user space or a kernel buffer (image-fn.'s) */ 2101da177e4SLinus Torvalds /* -> used in get_image, put_image */ 2111da177e4SLinus Torvalds #define CODEC_TRANSFER_KERNEL 0 /* use "memcopy" */ 2121da177e4SLinus Torvalds #define CODEC_TRANSFER_USER 1 /* use "to/from_user" */ 2131da177e4SLinus Torvalds 2141da177e4SLinus Torvalds 2151da177e4SLinus Torvalds /* ========================= */ 2161da177e4SLinus Torvalds /* the structures itself ... */ 2171da177e4SLinus Torvalds /* ========================= */ 2181da177e4SLinus Torvalds 2191da177e4SLinus Torvalds struct vfe_polarity { 2200a115373SRandy Dunlap unsigned int vsync_pol:1; 2210a115373SRandy Dunlap unsigned int hsync_pol:1; 2220a115373SRandy Dunlap unsigned int field_pol:1; 2230a115373SRandy Dunlap unsigned int blank_pol:1; 2240a115373SRandy Dunlap unsigned int subimg_pol:1; 2250a115373SRandy Dunlap unsigned int poe_pol:1; 2260a115373SRandy Dunlap unsigned int pvalid_pol:1; 2270a115373SRandy Dunlap unsigned int vclk_pol:1; 2281da177e4SLinus Torvalds }; 2291da177e4SLinus Torvalds 2301da177e4SLinus Torvalds struct vfe_settings { 2311da177e4SLinus Torvalds __u32 x, y; /* Offsets into image */ 2321da177e4SLinus Torvalds __u32 width, height; /* Area to capture */ 2331da177e4SLinus Torvalds __u16 decimation; /* Decimation divider */ 2341da177e4SLinus Torvalds __u16 flags; /* Flags for capture */ 2351da177e4SLinus Torvalds __u16 quality; /* quality of the video */ 2361da177e4SLinus Torvalds }; 2371da177e4SLinus Torvalds 2381da177e4SLinus Torvalds struct tvnorm { 2391da177e4SLinus Torvalds u16 Wt, Wa, HStart, HSyncStart, Ht, Ha, VStart; 2401da177e4SLinus Torvalds }; 2411da177e4SLinus Torvalds 2421da177e4SLinus Torvalds struct jpeg_com_marker { 2431da177e4SLinus Torvalds int len; /* number of usable bytes in data */ 2441da177e4SLinus Torvalds char data[60]; 2451da177e4SLinus Torvalds }; 2461da177e4SLinus Torvalds 2471da177e4SLinus Torvalds struct jpeg_app_marker { 2481da177e4SLinus Torvalds int appn; /* number app segment */ 2491da177e4SLinus Torvalds int len; /* number of usable bytes in data */ 2501da177e4SLinus Torvalds char data[60]; 2511da177e4SLinus Torvalds }; 2521da177e4SLinus Torvalds 2531da177e4SLinus Torvalds struct videocodec { 2541da177e4SLinus Torvalds struct module *owner; 2551da177e4SLinus Torvalds /* -- filled in by slave device during register -- */ 2561da177e4SLinus Torvalds char name[32]; 2571da177e4SLinus Torvalds unsigned long magic; /* may be used for client<->master attaching */ 2581da177e4SLinus Torvalds unsigned long flags; /* functionality flags */ 2591da177e4SLinus Torvalds unsigned int type; /* codec type */ 2601da177e4SLinus Torvalds 2611da177e4SLinus Torvalds /* -- these is filled in later during master device attach -- */ 2621da177e4SLinus Torvalds 2631da177e4SLinus Torvalds struct videocodec_master *master_data; 2641da177e4SLinus Torvalds 2651da177e4SLinus Torvalds /* -- these are filled in by the slave device during register -- */ 2661da177e4SLinus Torvalds 2671da177e4SLinus Torvalds void *data; /* private slave data */ 2681da177e4SLinus Torvalds 2691da177e4SLinus Torvalds /* attach/detach client functions (indirect call) */ 2701da177e4SLinus Torvalds int (*setup) (struct videocodec * codec); 2711da177e4SLinus Torvalds int (*unset) (struct videocodec * codec); 2721da177e4SLinus Torvalds 2731da177e4SLinus Torvalds /* main functions, every client needs them for sure! */ 2741da177e4SLinus Torvalds // set compression or decompression (or freeze, stop, standby, etc) 2751da177e4SLinus Torvalds int (*set_mode) (struct videocodec * codec, 2761da177e4SLinus Torvalds int mode); 2771da177e4SLinus Torvalds // setup picture size and norm (for the codec's video frontend) 2781da177e4SLinus Torvalds int (*set_video) (struct videocodec * codec, 2791da177e4SLinus Torvalds struct tvnorm * norm, 2801da177e4SLinus Torvalds struct vfe_settings * cap, 2811da177e4SLinus Torvalds struct vfe_polarity * pol); 2821da177e4SLinus Torvalds // other control commands, also mmap setup etc. 2831da177e4SLinus Torvalds int (*control) (struct videocodec * codec, 2841da177e4SLinus Torvalds int type, 2851da177e4SLinus Torvalds int size, 2861da177e4SLinus Torvalds void *data); 2871da177e4SLinus Torvalds 2881da177e4SLinus Torvalds /* additional setup/query/processing (may be NULL pointer) */ 2891da177e4SLinus Torvalds // interrupt setup / handling (for irq's delivered by master) 2901da177e4SLinus Torvalds int (*setup_interrupt) (struct videocodec * codec, 2911da177e4SLinus Torvalds long mode); 2921da177e4SLinus Torvalds int (*handle_interrupt) (struct videocodec * codec, 2931da177e4SLinus Torvalds int source, 2941da177e4SLinus Torvalds long flag); 2951da177e4SLinus Torvalds // picture interface (if any) 2961da177e4SLinus Torvalds long (*put_image) (struct videocodec * codec, 2971da177e4SLinus Torvalds int tr_type, 2981da177e4SLinus Torvalds int block, 2991da177e4SLinus Torvalds long *fr_num, 3001da177e4SLinus Torvalds long *flag, 3011da177e4SLinus Torvalds long size, 3021da177e4SLinus Torvalds void *buf); 3031da177e4SLinus Torvalds long (*get_image) (struct videocodec * codec, 3041da177e4SLinus Torvalds int tr_type, 3051da177e4SLinus Torvalds int block, 3061da177e4SLinus Torvalds long *fr_num, 3071da177e4SLinus Torvalds long *flag, 3081da177e4SLinus Torvalds long size, 3091da177e4SLinus Torvalds void *buf); 3101da177e4SLinus Torvalds }; 3111da177e4SLinus Torvalds 3121da177e4SLinus Torvalds struct videocodec_master { 3131da177e4SLinus Torvalds /* -- filled in by master device for registration -- */ 3141da177e4SLinus Torvalds char name[32]; 3151da177e4SLinus Torvalds unsigned long magic; /* may be used for client<->master attaching */ 3161da177e4SLinus Torvalds unsigned long flags; /* functionality flags */ 3171da177e4SLinus Torvalds unsigned int type; /* master type */ 3181da177e4SLinus Torvalds 3191da177e4SLinus Torvalds void *data; /* private master data */ 3201da177e4SLinus Torvalds 3211da177e4SLinus Torvalds __u32(*readreg) (struct videocodec * codec, 3221da177e4SLinus Torvalds __u16 reg); 3231da177e4SLinus Torvalds void (*writereg) (struct videocodec * codec, 3241da177e4SLinus Torvalds __u16 reg, 3251da177e4SLinus Torvalds __u32 value); 3261da177e4SLinus Torvalds }; 3271da177e4SLinus Torvalds 3281da177e4SLinus Torvalds 3291da177e4SLinus Torvalds /* ================================================= */ 3301da177e4SLinus Torvalds /* function prototypes of the master/slave interface */ 3311da177e4SLinus Torvalds /* ================================================= */ 3321da177e4SLinus Torvalds 3331da177e4SLinus Torvalds /* attach and detach commands for the master */ 3341da177e4SLinus Torvalds // * master structure needs to be kmalloc'ed before calling attach 3351da177e4SLinus Torvalds // and free'd after calling detach 3361da177e4SLinus Torvalds // * returns pointer on success, NULL on failure 3371da177e4SLinus Torvalds extern struct videocodec *videocodec_attach(struct videocodec_master *); 3381da177e4SLinus Torvalds // * 0 on success, <0 (errno) on failure 3391da177e4SLinus Torvalds extern int videocodec_detach(struct videocodec *); 3401da177e4SLinus Torvalds 3411da177e4SLinus Torvalds /* register and unregister commands for the slaves */ 3421da177e4SLinus Torvalds // * 0 on success, <0 (errno) on failure 3431da177e4SLinus Torvalds extern int videocodec_register(const struct videocodec *); 3441da177e4SLinus Torvalds // * 0 on success, <0 (errno) on failure 3451da177e4SLinus Torvalds extern int videocodec_unregister(const struct videocodec *); 3461da177e4SLinus Torvalds 3471da177e4SLinus Torvalds /* the other calls are directly done via the videocodec structure! */ 3481da177e4SLinus Torvalds 3491da177e4SLinus Torvalds #endif /*ifndef __LINUX_VIDEOCODEC_H */ 350