Em 24-11-2011 15:08, Andreas Oberritter escreveu: > Don't break existing Userspace APIs for no reason! It's OK to add the > new API, but - pretty please - don't just blindly remove audio.h and > video.h. They are in use since many years by av7110, out-of-tree drivers > *and more importantly* by applications. Yes, I know, you'd like to see > those out-of-tree drivers merged, but it isn't possible for many > reasons. And even if they were merged, you'd say "Port them and your > apps to V4L". No! That's not an option. Hi Andreas, Userspace applications that support av7110 can include the new linux/av7110.h header. Other applications that support out-of-tree drivers can just have their own copy of audio.h, osd.h and video.h. So, it won't break or prevent existing applications to keep working. The thing is that the media API presents two interfaces to control mpeg decoders. This is confusing, and, while one of them has active upstream developers working on it, adding new drivers and new features on it, the other API is not being updated accordingly, and no new upstream drivers use it. Worse than that, several ioctl's are there, with not a single in-kernel implementation, nor any documentation about how they are supposed to work. We noticed in Prague that new DVB developers got confused about what should be the proper implementation for new drivers, so marking it as deprecated is important, otherwise, we'll end by having different approaches for the same thing. Just to give you one example, newer DTV standards like ISDB-T and DVB-T2 now uses H.264 video streams. Support for H.264 were added recently at V4L2 API, but the dvb video API doesn't support it. What I'm saying is that this API is legacy, from kernel POV. So, let's freeze it to DVB v5.4 spec, and remove it from the official Kernel DVB API on future versions (yet, keeping it as a private API for av7110). It probably makes sense to increase the major version at DVB API, when this patches got merged, to indicate that DVB v6 and above doesn't have it anymore, while v5.4 and bellow has it. > > Regards, > Andreas > > On 24.11.2011 14:39, Hans Verkuil wrote: >> From: Hans Verkuil <hans.verkuil@xxxxxxxxx> >> >> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> >> --- >> fs/compat_ioctl.c | 41 +------- >> include/linux/dvb/Kbuild | 3 - >> include/linux/dvb/audio.h | 135 ---------------------- >> include/linux/dvb/osd.h | 144 ----------------------- >> include/linux/dvb/video.h | 276 --------------------------------------------- >> 5 files changed, 1 insertions(+), 598 deletions(-) >> delete mode 100644 include/linux/dvb/audio.h >> delete mode 100644 include/linux/dvb/osd.h >> delete mode 100644 include/linux/dvb/video.h >> >> diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c >> index 51352de..71adea1 100644 >> --- a/fs/compat_ioctl.c >> +++ b/fs/compat_ioctl.c >> @@ -105,10 +105,9 @@ >> >> #include <linux/hiddev.h> >> >> -#include <linux/dvb/audio.h> >> +#include <linux/av7110.h> >> #include <linux/dvb/dmx.h> >> #include <linux/dvb/frontend.h> >> -#include <linux/dvb/video.h> >> >> #include <linux/sort.h> >> >> @@ -196,32 +195,6 @@ static int do_video_stillpicture(unsigned int fd, unsigned int cmd, >> return err; >> } >> >> -struct compat_video_spu_palette { >> - int length; >> - compat_uptr_t palette; >> -}; >> - >> -static int do_video_set_spu_palette(unsigned int fd, unsigned int cmd, >> - struct compat_video_spu_palette __user *up) >> -{ >> - struct video_spu_palette __user *up_native; >> - compat_uptr_t palp; >> - int length, err; >> - >> - err = get_user(palp, &up->palette); >> - err |= get_user(length, &up->length); >> - >> - up_native = compat_alloc_user_space(sizeof(struct video_spu_palette)); >> - err = put_user(compat_ptr(palp), &up_native->palette); >> - err |= put_user(length, &up_native->length); >> - if (err) >> - return -EFAULT; >> - >> - err = sys_ioctl(fd, cmd, (unsigned long) up_native); >> - >> - return err; >> -} >> - >> #ifdef CONFIG_BLOCK >> typedef struct sg_io_hdr32 { >> compat_int_t interface_id; /* [i] 'S' for SCSI generic (required) */ >> @@ -1317,9 +1290,6 @@ COMPATIBLE_IOCTL(AUDIO_CLEAR_BUFFER) >> COMPATIBLE_IOCTL(AUDIO_SET_ID) >> COMPATIBLE_IOCTL(AUDIO_SET_MIXER) >> COMPATIBLE_IOCTL(AUDIO_SET_STREAMTYPE) >> -COMPATIBLE_IOCTL(AUDIO_SET_EXT_ID) >> -COMPATIBLE_IOCTL(AUDIO_SET_ATTRIBUTES) >> -COMPATIBLE_IOCTL(AUDIO_SET_KARAOKE) >> COMPATIBLE_IOCTL(DMX_START) >> COMPATIBLE_IOCTL(DMX_STOP) >> COMPATIBLE_IOCTL(DMX_SET_FILTER) >> @@ -1358,16 +1328,9 @@ COMPATIBLE_IOCTL(VIDEO_FAST_FORWARD) >> COMPATIBLE_IOCTL(VIDEO_SLOWMOTION) >> COMPATIBLE_IOCTL(VIDEO_GET_CAPABILITIES) >> COMPATIBLE_IOCTL(VIDEO_CLEAR_BUFFER) >> -COMPATIBLE_IOCTL(VIDEO_SET_ID) >> COMPATIBLE_IOCTL(VIDEO_SET_STREAMTYPE) >> COMPATIBLE_IOCTL(VIDEO_SET_FORMAT) >> -COMPATIBLE_IOCTL(VIDEO_SET_SYSTEM) >> -COMPATIBLE_IOCTL(VIDEO_SET_HIGHLIGHT) >> -COMPATIBLE_IOCTL(VIDEO_SET_SPU) >> -COMPATIBLE_IOCTL(VIDEO_GET_NAVI) >> -COMPATIBLE_IOCTL(VIDEO_SET_ATTRIBUTES) >> COMPATIBLE_IOCTL(VIDEO_GET_SIZE) >> -COMPATIBLE_IOCTL(VIDEO_GET_FRAME_RATE) >> >> /* joystick */ >> COMPATIBLE_IOCTL(JSIOCGVERSION) >> @@ -1468,8 +1431,6 @@ static long do_ioctl_trans(int fd, unsigned int cmd, >> return do_video_get_event(fd, cmd, argp); >> case VIDEO_STILLPICTURE: >> return do_video_stillpicture(fd, cmd, argp); >> - case VIDEO_SET_SPU_PALETTE: >> - return do_video_set_spu_palette(fd, cmd, argp); >> } >> >> /* >> diff --git a/include/linux/dvb/Kbuild b/include/linux/dvb/Kbuild >> index f4dba86..f5aa137 100644 >> --- a/include/linux/dvb/Kbuild >> +++ b/include/linux/dvb/Kbuild >> @@ -1,8 +1,5 @@ >> -header-y += audio.h >> header-y += ca.h >> header-y += dmx.h >> header-y += frontend.h >> header-y += net.h >> -header-y += osd.h >> header-y += version.h >> -header-y += video.h >> diff --git a/include/linux/dvb/audio.h b/include/linux/dvb/audio.h >> deleted file mode 100644 >> index d47bccd..0000000 >> --- a/include/linux/dvb/audio.h >> +++ /dev/null >> @@ -1,135 +0,0 @@ >> -/* >> - * audio.h >> - * >> - * Copyright (C) 2000 Ralph Metzler <ralph@xxxxxxxxxxxxxx> >> - * & Marcus Metzler <marcus@xxxxxxxxxxxxxx> >> - * for convergence integrated media GmbH >> - * >> - * This program is free software; you can redistribute it and/or >> - * modify it under the terms of the GNU General Lesser Public License >> - * as published by the Free Software Foundation; either version 2.1 >> - * of the License, or (at your option) any later version. >> - * >> - * This program is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> - * GNU General Public License for more details. >> - * >> - * You should have received a copy of the GNU Lesser General Public License >> - * along with this program; if not, write to the Free Software >> - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. >> - * >> - */ >> - >> -#ifndef _DVBAUDIO_H_ >> -#define _DVBAUDIO_H_ >> - >> -#include <linux/types.h> >> - >> -typedef enum { >> - AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */ >> - AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */ >> -} audio_stream_source_t; >> - >> - >> -typedef enum { >> - AUDIO_STOPPED, /* Device is stopped */ >> - AUDIO_PLAYING, /* Device is currently playing */ >> - AUDIO_PAUSED /* Device is paused */ >> -} audio_play_state_t; >> - >> - >> -typedef enum { >> - AUDIO_STEREO, >> - AUDIO_MONO_LEFT, >> - AUDIO_MONO_RIGHT, >> - AUDIO_MONO, >> - AUDIO_STEREO_SWAPPED >> -} audio_channel_select_t; >> - >> - >> -typedef struct audio_mixer { >> - unsigned int volume_left; >> - unsigned int volume_right; >> - // what else do we need? bass, pass-through, ... >> -} audio_mixer_t; >> - >> - >> -typedef struct audio_status { >> - int AV_sync_state; /* sync audio and video? */ >> - int mute_state; /* audio is muted */ >> - audio_play_state_t play_state; /* current playback state */ >> - audio_stream_source_t stream_source; /* current stream source */ >> - audio_channel_select_t channel_select; /* currently selected channel */ >> - int bypass_mode; /* pass on audio data to */ >> - audio_mixer_t mixer_state; /* current mixer state */ >> -} audio_status_t; /* separate decoder hardware */ >> - >> - >> -typedef >> -struct audio_karaoke { /* if Vocal1 or Vocal2 are non-zero, they get mixed */ >> - int vocal1; /* into left and right t at 70% each */ >> - int vocal2; /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/ >> - int melody; /* mixed into the left channel and */ >> - /* Vocal2 into the right channel at 100% each. */ >> - /* if Melody is non-zero, the melody channel gets mixed*/ >> -} audio_karaoke_t; /* into left and right */ >> - >> - >> -typedef __u16 audio_attributes_t; >> -/* bits: descr. */ >> -/* 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */ >> -/* 12 multichannel extension */ >> -/* 11-10 audio type (0=not spec, 1=language included) */ >> -/* 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) */ >> -/* 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, */ >> -/* 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */ >> -/* 2- 0 number of audio channels (n+1 channels) */ >> - >> - >> -/* for GET_CAPABILITIES and SET_FORMAT, the latter should only set one bit */ >> -#define AUDIO_CAP_DTS 1 >> -#define AUDIO_CAP_LPCM 2 >> -#define AUDIO_CAP_MP1 4 >> -#define AUDIO_CAP_MP2 8 >> -#define AUDIO_CAP_MP3 16 >> -#define AUDIO_CAP_AAC 32 >> -#define AUDIO_CAP_OGG 64 >> -#define AUDIO_CAP_SDDS 128 >> -#define AUDIO_CAP_AC3 256 >> - >> -#define AUDIO_STOP _IO('o', 1) >> -#define AUDIO_PLAY _IO('o', 2) >> -#define AUDIO_PAUSE _IO('o', 3) >> -#define AUDIO_CONTINUE _IO('o', 4) >> -#define AUDIO_SELECT_SOURCE _IO('o', 5) >> -#define AUDIO_SET_MUTE _IO('o', 6) >> -#define AUDIO_SET_AV_SYNC _IO('o', 7) >> -#define AUDIO_SET_BYPASS_MODE _IO('o', 8) >> -#define AUDIO_CHANNEL_SELECT _IO('o', 9) >> -#define AUDIO_GET_STATUS _IOR('o', 10, audio_status_t) >> - >> -#define AUDIO_GET_CAPABILITIES _IOR('o', 11, unsigned int) >> -#define AUDIO_CLEAR_BUFFER _IO('o', 12) >> -#define AUDIO_SET_ID _IO('o', 13) >> -#define AUDIO_SET_MIXER _IOW('o', 14, audio_mixer_t) >> -#define AUDIO_SET_STREAMTYPE _IO('o', 15) >> -#define AUDIO_SET_EXT_ID _IO('o', 16) >> -#define AUDIO_SET_ATTRIBUTES _IOW('o', 17, audio_attributes_t) >> -#define AUDIO_SET_KARAOKE _IOW('o', 18, audio_karaoke_t) >> - >> -/** >> - * AUDIO_GET_PTS >> - * >> - * Read the 33 bit presentation time stamp as defined >> - * in ITU T-REC-H.222.0 / ISO/IEC 13818-1. >> - * >> - * The PTS should belong to the currently played >> - * frame if possible, but may also be a value close to it >> - * like the PTS of the last decoded frame or the last PTS >> - * extracted by the PES parser. >> - */ >> -#define AUDIO_GET_PTS _IOR('o', 19, __u64) >> -#define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20) >> - >> -#endif /* _DVBAUDIO_H_ */ >> diff --git a/include/linux/dvb/osd.h b/include/linux/dvb/osd.h >> deleted file mode 100644 >> index 880e684..0000000 >> --- a/include/linux/dvb/osd.h >> +++ /dev/null >> @@ -1,144 +0,0 @@ >> -/* >> - * osd.h >> - * >> - * Copyright (C) 2001 Ralph Metzler <ralph@xxxxxxxxxxxxxx> >> - * & Marcus Metzler <marcus@xxxxxxxxxxxxxx> >> - * for convergence integrated media GmbH >> - * >> - * This program is free software; you can redistribute it and/or >> - * modify it under the terms of the GNU General Lesser Public License >> - * as published by the Free Software Foundation; either version 2.1 >> - * of the License, or (at your option) any later version. >> - * >> - * This program is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> - * GNU General Public License for more details. >> - * >> - * You should have received a copy of the GNU Lesser General Public License >> - * along with this program; if not, write to the Free Software >> - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. >> - * >> - */ >> - >> -#ifndef _DVBOSD_H_ >> -#define _DVBOSD_H_ >> - >> -#include <linux/compiler.h> >> - >> -typedef enum { >> - // All functions return -2 on "not open" >> - OSD_Close=1, // () >> - // Disables OSD and releases the buffers >> - // returns 0 on success >> - OSD_Open, // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0)) >> - // Opens OSD with this size and bit depth >> - // returns 0 on success, -1 on DRAM allocation error, -2 on "already open" >> - OSD_Show, // () >> - // enables OSD mode >> - // returns 0 on success >> - OSD_Hide, // () >> - // disables OSD mode >> - // returns 0 on success >> - OSD_Clear, // () >> - // Sets all pixel to color 0 >> - // returns 0 on success >> - OSD_Fill, // (color) >> - // Sets all pixel to color <col> >> - // returns 0 on success >> - OSD_SetColor, // (color,R{x0},G{y0},B{x1},opacity{y1}) >> - // set palette entry <num> to <r,g,b>, <mix> and <trans> apply >> - // R,G,B: 0..255 >> - // R=Red, G=Green, B=Blue >> - // opacity=0: pixel opacity 0% (only video pixel shows) >> - // opacity=1..254: pixel opacity as specified in header >> - // opacity=255: pixel opacity 100% (only OSD pixel shows) >> - // returns 0 on success, -1 on error >> - OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data) >> - // Set a number of entries in the palette >> - // sets the entries "firstcolor" through "lastcolor" from the array "data" >> - // data has 4 byte for each color: >> - // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel >> - OSD_SetTrans, // (transparency{color}) >> - // Sets transparency of mixed pixel (0..15) >> - // returns 0 on success >> - OSD_SetPixel, // (x0,y0,color) >> - // sets pixel <x>,<y> to color number <col> >> - // returns 0 on success, -1 on error >> - OSD_GetPixel, // (x0,y0) >> - // returns color number of pixel <x>,<y>, or -1 >> - OSD_SetRow, // (x0,y0,x1,data) >> - // fills pixels x0,y through x1,y with the content of data[] >> - // returns 0 on success, -1 on clipping all pixel (no pixel drawn) >> - OSD_SetBlock, // (x0,y0,x1,y1,increment{color},data) >> - // fills pixels x0,y0 through x1,y1 with the content of data[] >> - // inc contains the width of one line in the data block, >> - // inc<=0 uses blockwidth as linewidth >> - // returns 0 on success, -1 on clipping all pixel >> - OSD_FillRow, // (x0,y0,x1,color) >> - // fills pixels x0,y through x1,y with the color <col> >> - // returns 0 on success, -1 on clipping all pixel >> - OSD_FillBlock, // (x0,y0,x1,y1,color) >> - // fills pixels x0,y0 through x1,y1 with the color <col> >> - // returns 0 on success, -1 on clipping all pixel >> - OSD_Line, // (x0,y0,x1,y1,color) >> - // draw a line from x0,y0 to x1,y1 with the color <col> >> - // returns 0 on success >> - OSD_Query, // (x0,y0,x1,y1,xasp{color}}), yasp=11 >> - // fills parameters with the picture dimensions and the pixel aspect ratio >> - // returns 0 on success >> - OSD_Test, // () >> - // draws a test picture. for debugging purposes only >> - // returns 0 on success >> -// TODO: remove "test" in final version >> - OSD_Text, // (x0,y0,size,color,text) >> - OSD_SetWindow, // (x0) set window with number 0<x0<8 as current >> - OSD_MoveWindow, // move current window to (x0, y0) >> - OSD_OpenRaw, // Open other types of OSD windows >> -} OSD_Command; >> - >> -typedef struct osd_cmd_s { >> - OSD_Command cmd; >> - int x0; >> - int y0; >> - int x1; >> - int y1; >> - int color; >> - void __user *data; >> -} osd_cmd_t; >> - >> -/* OSD_OpenRaw: set 'color' to desired window type */ >> -typedef enum { >> - OSD_BITMAP1, /* 1 bit bitmap */ >> - OSD_BITMAP2, /* 2 bit bitmap */ >> - OSD_BITMAP4, /* 4 bit bitmap */ >> - OSD_BITMAP8, /* 8 bit bitmap */ >> - OSD_BITMAP1HR, /* 1 Bit bitmap half resolution */ >> - OSD_BITMAP2HR, /* 2 bit bitmap half resolution */ >> - OSD_BITMAP4HR, /* 4 bit bitmap half resolution */ >> - OSD_BITMAP8HR, /* 8 bit bitmap half resolution */ >> - OSD_YCRCB422, /* 4:2:2 YCRCB Graphic Display */ >> - OSD_YCRCB444, /* 4:4:4 YCRCB Graphic Display */ >> - OSD_YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */ >> - OSD_VIDEOTSIZE, /* True Size Normal MPEG Video Display */ >> - OSD_VIDEOHSIZE, /* MPEG Video Display Half Resolution */ >> - OSD_VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */ >> - OSD_VIDEODSIZE, /* MPEG Video Display Double Resolution */ >> - OSD_VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */ >> - OSD_VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/ >> - OSD_VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */ >> - OSD_VIDEONSIZE, /* Full Size MPEG Video Display */ >> - OSD_CURSOR /* Cursor */ >> -} osd_raw_window_t; >> - >> -typedef struct osd_cap_s { >> - int cmd; >> -#define OSD_CAP_MEMSIZE 1 /* memory size */ >> - long val; >> -} osd_cap_t; >> - >> - >> -#define OSD_SEND_CMD _IOW('o', 160, osd_cmd_t) >> -#define OSD_GET_CAPABILITY _IOR('o', 161, osd_cap_t) >> - >> -#endif >> diff --git a/include/linux/dvb/video.h b/include/linux/dvb/video.h >> deleted file mode 100644 >> index 1d750c0..0000000 >> --- a/include/linux/dvb/video.h >> +++ /dev/null >> @@ -1,276 +0,0 @@ >> -/* >> - * video.h >> - * >> - * Copyright (C) 2000 Marcus Metzler <marcus@xxxxxxxxxxxxxx> >> - * & Ralph Metzler <ralph@xxxxxxxxxxxxxx> >> - * for convergence integrated media GmbH >> - * >> - * This program is free software; you can redistribute it and/or >> - * modify it under the terms of the GNU Lesser General Public License >> - * as published by the Free Software Foundation; either version 2.1 >> - * of the License, or (at your option) any later version. >> - * >> - * This program is distributed in the hope that it will be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> - * GNU General Public License for more details. >> - * >> - * You should have received a copy of the GNU Lesser General Public License >> - * along with this program; if not, write to the Free Software >> - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. >> - * >> - */ >> - >> -#ifndef _DVBVIDEO_H_ >> -#define _DVBVIDEO_H_ >> - >> -#include <linux/types.h> >> -#ifdef __KERNEL__ >> -#include <linux/compiler.h> >> -#else >> -#include <stdint.h> >> -#include <time.h> >> -#endif >> - >> -typedef enum { >> - VIDEO_FORMAT_4_3, /* Select 4:3 format */ >> - VIDEO_FORMAT_16_9, /* Select 16:9 format. */ >> - VIDEO_FORMAT_221_1 /* 2.21:1 */ >> -} video_format_t; >> - >> - >> -typedef enum { >> - VIDEO_SYSTEM_PAL, >> - VIDEO_SYSTEM_NTSC, >> - VIDEO_SYSTEM_PALN, >> - VIDEO_SYSTEM_PALNc, >> - VIDEO_SYSTEM_PALM, >> - VIDEO_SYSTEM_NTSC60, >> - VIDEO_SYSTEM_PAL60, >> - VIDEO_SYSTEM_PALM60 >> -} video_system_t; >> - >> - >> -typedef enum { >> - VIDEO_PAN_SCAN, /* use pan and scan format */ >> - VIDEO_LETTER_BOX, /* use letterbox format */ >> - VIDEO_CENTER_CUT_OUT /* use center cut out format */ >> -} video_displayformat_t; >> - >> -typedef struct { >> - int w; >> - int h; >> - video_format_t aspect_ratio; >> -} video_size_t; >> - >> -typedef enum { >> - VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */ >> - VIDEO_SOURCE_MEMORY /* If this source is selected, the stream >> - comes from the user through the write >> - system call */ >> -} video_stream_source_t; >> - >> - >> -typedef enum { >> - VIDEO_STOPPED, /* Video is stopped */ >> - VIDEO_PLAYING, /* Video is currently playing */ >> - VIDEO_FREEZED /* Video is freezed */ >> -} video_play_state_t; >> - >> - >> -/* Decoder commands */ >> -#define VIDEO_CMD_PLAY (0) >> -#define VIDEO_CMD_STOP (1) >> -#define VIDEO_CMD_FREEZE (2) >> -#define VIDEO_CMD_CONTINUE (3) >> - >> -/* Flags for VIDEO_CMD_FREEZE */ >> -#define VIDEO_CMD_FREEZE_TO_BLACK (1 << 0) >> - >> -/* Flags for VIDEO_CMD_STOP */ >> -#define VIDEO_CMD_STOP_TO_BLACK (1 << 0) >> -#define VIDEO_CMD_STOP_IMMEDIATELY (1 << 1) >> - >> -/* Play input formats: */ >> -/* The decoder has no special format requirements */ >> -#define VIDEO_PLAY_FMT_NONE (0) >> -/* The decoder requires full GOPs */ >> -#define VIDEO_PLAY_FMT_GOP (1) >> - >> -/* The structure must be zeroed before use by the application >> - This ensures it can be extended safely in the future. */ >> -struct video_command { >> - __u32 cmd; >> - __u32 flags; >> - union { >> - struct { >> - __u64 pts; >> - } stop; >> - >> - struct { >> - /* 0 or 1000 specifies normal speed, >> - 1 specifies forward single stepping, >> - -1 specifies backward single stepping, >> - >1: playback at speed/1000 of the normal speed, >> - <-1: reverse playback at (-speed/1000) of the normal speed. */ >> - __s32 speed; >> - __u32 format; >> - } play; >> - >> - struct { >> - __u32 data[16]; >> - } raw; >> - }; >> -}; >> - >> -/* FIELD_UNKNOWN can be used if the hardware does not know whether >> - the Vsync is for an odd, even or progressive (i.e. non-interlaced) >> - field. */ >> -#define VIDEO_VSYNC_FIELD_UNKNOWN (0) >> -#define VIDEO_VSYNC_FIELD_ODD (1) >> -#define VIDEO_VSYNC_FIELD_EVEN (2) >> -#define VIDEO_VSYNC_FIELD_PROGRESSIVE (3) >> - >> -struct video_event { >> - __s32 type; >> -#define VIDEO_EVENT_SIZE_CHANGED 1 >> -#define VIDEO_EVENT_FRAME_RATE_CHANGED 2 >> -#define VIDEO_EVENT_DECODER_STOPPED 3 >> -#define VIDEO_EVENT_VSYNC 4 >> - __kernel_time_t timestamp; >> - union { >> - video_size_t size; >> - unsigned int frame_rate; /* in frames per 1000sec */ >> - unsigned char vsync_field; /* unknown/odd/even/progressive */ >> - } u; >> -}; >> - >> - >> -struct video_status { >> - int video_blank; /* blank video on freeze? */ >> - video_play_state_t play_state; /* current state of playback */ >> - video_stream_source_t stream_source; /* current source (demux/memory) */ >> - video_format_t video_format; /* current aspect ratio of stream*/ >> - video_displayformat_t display_format;/* selected cropping mode */ >> -}; >> - >> - >> -struct video_still_picture { >> - char __user *iFrame; /* pointer to a single iframe in memory */ >> - __s32 size; >> -}; >> - >> - >> -typedef >> -struct video_highlight { >> - int active; /* 1=show highlight, 0=hide highlight */ >> - __u8 contrast1; /* 7- 4 Pattern pixel contrast */ >> - /* 3- 0 Background pixel contrast */ >> - __u8 contrast2; /* 7- 4 Emphasis pixel-2 contrast */ >> - /* 3- 0 Emphasis pixel-1 contrast */ >> - __u8 color1; /* 7- 4 Pattern pixel color */ >> - /* 3- 0 Background pixel color */ >> - __u8 color2; /* 7- 4 Emphasis pixel-2 color */ >> - /* 3- 0 Emphasis pixel-1 color */ >> - __u32 ypos; /* 23-22 auto action mode */ >> - /* 21-12 start y */ >> - /* 9- 0 end y */ >> - __u32 xpos; /* 23-22 button color number */ >> - /* 21-12 start x */ >> - /* 9- 0 end x */ >> -} video_highlight_t; >> - >> - >> -typedef struct video_spu { >> - int active; >> - int stream_id; >> -} video_spu_t; >> - >> - >> -typedef struct video_spu_palette { /* SPU Palette information */ >> - int length; >> - __u8 __user *palette; >> -} video_spu_palette_t; >> - >> - >> -typedef struct video_navi_pack { >> - int length; /* 0 ... 1024 */ >> - __u8 data[1024]; >> -} video_navi_pack_t; >> - >> - >> -typedef __u16 video_attributes_t; >> -/* bits: descr. */ >> -/* 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */ >> -/* 13-12 TV system (0=525/60, 1=625/50) */ >> -/* 11-10 Aspect ratio (0=4:3, 3=16:9) */ >> -/* 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */ >> -/* 7 line 21-1 data present in GOP (1=yes, 0=no) */ >> -/* 6 line 21-2 data present in GOP (1=yes, 0=no) */ >> -/* 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */ >> -/* 2 source letterboxed (1=yes, 0=no) */ >> -/* 0 film/camera mode (0=camera, 1=film (625/50 only)) */ >> - >> - >> -/* bit definitions for capabilities: */ >> -/* can the hardware decode MPEG1 and/or MPEG2? */ >> -#define VIDEO_CAP_MPEG1 1 >> -#define VIDEO_CAP_MPEG2 2 >> -/* can you send a system and/or program stream to video device? >> - (you still have to open the video and the audio device but only >> - send the stream to the video device) */ >> -#define VIDEO_CAP_SYS 4 >> -#define VIDEO_CAP_PROG 8 >> -/* can the driver also handle SPU, NAVI and CSS encoded data? >> - (CSS API is not present yet) */ >> -#define VIDEO_CAP_SPU 16 >> -#define VIDEO_CAP_NAVI 32 >> -#define VIDEO_CAP_CSS 64 >> - >> - >> -#define VIDEO_STOP _IO('o', 21) >> -#define VIDEO_PLAY _IO('o', 22) >> -#define VIDEO_FREEZE _IO('o', 23) >> -#define VIDEO_CONTINUE _IO('o', 24) >> -#define VIDEO_SELECT_SOURCE _IO('o', 25) >> -#define VIDEO_SET_BLANK _IO('o', 26) >> -#define VIDEO_GET_STATUS _IOR('o', 27, struct video_status) >> -#define VIDEO_GET_EVENT _IOR('o', 28, struct video_event) >> -#define VIDEO_SET_DISPLAY_FORMAT _IO('o', 29) >> -#define VIDEO_STILLPICTURE _IOW('o', 30, struct video_still_picture) >> -#define VIDEO_FAST_FORWARD _IO('o', 31) >> -#define VIDEO_SLOWMOTION _IO('o', 32) >> -#define VIDEO_GET_CAPABILITIES _IOR('o', 33, unsigned int) >> -#define VIDEO_CLEAR_BUFFER _IO('o', 34) >> -#define VIDEO_SET_ID _IO('o', 35) >> -#define VIDEO_SET_STREAMTYPE _IO('o', 36) >> -#define VIDEO_SET_FORMAT _IO('o', 37) >> -#define VIDEO_SET_SYSTEM _IO('o', 38) >> -#define VIDEO_SET_HIGHLIGHT _IOW('o', 39, video_highlight_t) >> -#define VIDEO_SET_SPU _IOW('o', 50, video_spu_t) >> -#define VIDEO_SET_SPU_PALETTE _IOW('o', 51, video_spu_palette_t) >> -#define VIDEO_GET_NAVI _IOR('o', 52, video_navi_pack_t) >> -#define VIDEO_SET_ATTRIBUTES _IO('o', 53) >> -#define VIDEO_GET_SIZE _IOR('o', 55, video_size_t) >> -#define VIDEO_GET_FRAME_RATE _IOR('o', 56, unsigned int) >> - >> -/** >> - * VIDEO_GET_PTS >> - * >> - * Read the 33 bit presentation time stamp as defined >> - * in ITU T-REC-H.222.0 / ISO/IEC 13818-1. >> - * >> - * The PTS should belong to the currently played >> - * frame if possible, but may also be a value close to it >> - * like the PTS of the last decoded frame or the last PTS >> - * extracted by the PES parser. >> - */ >> -#define VIDEO_GET_PTS _IOR('o', 57, __u64) >> - >> -/* Read the number of displayed frames since the decoder was started */ >> -#define VIDEO_GET_FRAME_COUNT _IOR('o', 58, __u64) >> - >> -#define VIDEO_COMMAND _IOWR('o', 59, struct video_command) >> -#define VIDEO_TRY_COMMAND _IOWR('o', 60, struct video_command) >> - >> -#endif /*_DVBVIDEO_H_*/ > > -- > To unsubscribe from this list: send the line "unsubscribe linux-media" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html