1*793e52d4SMauro Carvalho Chehab.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 2*793e52d4SMauro Carvalho Chehab 3*793e52d4SMauro Carvalho Chehab.. _video_types: 4*793e52d4SMauro Carvalho Chehab 5*793e52d4SMauro Carvalho Chehab**************** 6*793e52d4SMauro Carvalho ChehabVideo Data Types 7*793e52d4SMauro Carvalho Chehab**************** 8*793e52d4SMauro Carvalho Chehab 9*793e52d4SMauro Carvalho Chehab 10*793e52d4SMauro Carvalho Chehab.. _video-format-t: 11*793e52d4SMauro Carvalho Chehab 12*793e52d4SMauro Carvalho Chehabvideo_format_t 13*793e52d4SMauro Carvalho Chehab============== 14*793e52d4SMauro Carvalho Chehab 15*793e52d4SMauro Carvalho ChehabThe ``video_format_t`` data type defined by 16*793e52d4SMauro Carvalho Chehab 17*793e52d4SMauro Carvalho Chehab 18*793e52d4SMauro Carvalho Chehab.. code-block:: c 19*793e52d4SMauro Carvalho Chehab 20*793e52d4SMauro Carvalho Chehab typedef enum { 21*793e52d4SMauro Carvalho Chehab VIDEO_FORMAT_4_3, /* Select 4:3 format */ 22*793e52d4SMauro Carvalho Chehab VIDEO_FORMAT_16_9, /* Select 16:9 format. */ 23*793e52d4SMauro Carvalho Chehab VIDEO_FORMAT_221_1 /* 2.21:1 */ 24*793e52d4SMauro Carvalho Chehab } video_format_t; 25*793e52d4SMauro Carvalho Chehab 26*793e52d4SMauro Carvalho Chehabis used in the VIDEO_SET_FORMAT function (??) to tell the driver which 27*793e52d4SMauro Carvalho Chehabaspect ratio the output hardware (e.g. TV) has. It is also used in the 28*793e52d4SMauro Carvalho Chehabdata structures video_status (??) returned by VIDEO_GET_STATUS (??) 29*793e52d4SMauro Carvalho Chehaband video_event (??) returned by VIDEO_GET_EVENT (??) which report 30*793e52d4SMauro Carvalho Chehababout the display format of the current video stream. 31*793e52d4SMauro Carvalho Chehab 32*793e52d4SMauro Carvalho Chehab 33*793e52d4SMauro Carvalho Chehab.. _video-displayformat-t: 34*793e52d4SMauro Carvalho Chehab 35*793e52d4SMauro Carvalho Chehabvideo_displayformat_t 36*793e52d4SMauro Carvalho Chehab===================== 37*793e52d4SMauro Carvalho Chehab 38*793e52d4SMauro Carvalho ChehabIn case the display format of the video stream and of the display 39*793e52d4SMauro Carvalho Chehabhardware differ the application has to specify how to handle the 40*793e52d4SMauro Carvalho Chehabcropping of the picture. This can be done using the 41*793e52d4SMauro Carvalho ChehabVIDEO_SET_DISPLAY_FORMAT call (??) which accepts 42*793e52d4SMauro Carvalho Chehab 43*793e52d4SMauro Carvalho Chehab 44*793e52d4SMauro Carvalho Chehab.. code-block:: c 45*793e52d4SMauro Carvalho Chehab 46*793e52d4SMauro Carvalho Chehab typedef enum { 47*793e52d4SMauro Carvalho Chehab VIDEO_PAN_SCAN, /* use pan and scan format */ 48*793e52d4SMauro Carvalho Chehab VIDEO_LETTER_BOX, /* use letterbox format */ 49*793e52d4SMauro Carvalho Chehab VIDEO_CENTER_CUT_OUT /* use center cut out format */ 50*793e52d4SMauro Carvalho Chehab } video_displayformat_t; 51*793e52d4SMauro Carvalho Chehab 52*793e52d4SMauro Carvalho Chehabas argument. 53*793e52d4SMauro Carvalho Chehab 54*793e52d4SMauro Carvalho Chehab 55*793e52d4SMauro Carvalho Chehab.. _video-stream-source-t: 56*793e52d4SMauro Carvalho Chehab 57*793e52d4SMauro Carvalho Chehabvideo_stream_source_t 58*793e52d4SMauro Carvalho Chehab===================== 59*793e52d4SMauro Carvalho Chehab 60*793e52d4SMauro Carvalho ChehabThe video stream source is set through the VIDEO_SELECT_SOURCE call 61*793e52d4SMauro Carvalho Chehaband can take the following values, depending on whether we are replaying 62*793e52d4SMauro Carvalho Chehabfrom an internal (demuxer) or external (user write) source. 63*793e52d4SMauro Carvalho Chehab 64*793e52d4SMauro Carvalho Chehab 65*793e52d4SMauro Carvalho Chehab.. code-block:: c 66*793e52d4SMauro Carvalho Chehab 67*793e52d4SMauro Carvalho Chehab typedef enum { 68*793e52d4SMauro Carvalho Chehab VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */ 69*793e52d4SMauro Carvalho Chehab VIDEO_SOURCE_MEMORY /* If this source is selected, the stream 70*793e52d4SMauro Carvalho Chehab comes from the user through the write 71*793e52d4SMauro Carvalho Chehab system call */ 72*793e52d4SMauro Carvalho Chehab } video_stream_source_t; 73*793e52d4SMauro Carvalho Chehab 74*793e52d4SMauro Carvalho ChehabVIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the 75*793e52d4SMauro Carvalho Chehabfrontend or the DVR device) as the source of the video stream. If 76*793e52d4SMauro Carvalho ChehabVIDEO_SOURCE_MEMORY is selected the stream comes from the application 77*793e52d4SMauro Carvalho Chehabthrough the **write()** system call. 78*793e52d4SMauro Carvalho Chehab 79*793e52d4SMauro Carvalho Chehab 80*793e52d4SMauro Carvalho Chehab.. _video-play-state-t: 81*793e52d4SMauro Carvalho Chehab 82*793e52d4SMauro Carvalho Chehabvideo_play_state_t 83*793e52d4SMauro Carvalho Chehab================== 84*793e52d4SMauro Carvalho Chehab 85*793e52d4SMauro Carvalho ChehabThe following values can be returned by the VIDEO_GET_STATUS call 86*793e52d4SMauro Carvalho Chehabrepresenting the state of video playback. 87*793e52d4SMauro Carvalho Chehab 88*793e52d4SMauro Carvalho Chehab 89*793e52d4SMauro Carvalho Chehab.. code-block:: c 90*793e52d4SMauro Carvalho Chehab 91*793e52d4SMauro Carvalho Chehab typedef enum { 92*793e52d4SMauro Carvalho Chehab VIDEO_STOPPED, /* Video is stopped */ 93*793e52d4SMauro Carvalho Chehab VIDEO_PLAYING, /* Video is currently playing */ 94*793e52d4SMauro Carvalho Chehab VIDEO_FREEZED /* Video is freezed */ 95*793e52d4SMauro Carvalho Chehab } video_play_state_t; 96*793e52d4SMauro Carvalho Chehab 97*793e52d4SMauro Carvalho Chehab 98*793e52d4SMauro Carvalho Chehab.. c:type:: video_command 99*793e52d4SMauro Carvalho Chehab 100*793e52d4SMauro Carvalho Chehabstruct video_command 101*793e52d4SMauro Carvalho Chehab==================== 102*793e52d4SMauro Carvalho Chehab 103*793e52d4SMauro Carvalho ChehabThe structure must be zeroed before use by the application This ensures 104*793e52d4SMauro Carvalho Chehabit can be extended safely in the future. 105*793e52d4SMauro Carvalho Chehab 106*793e52d4SMauro Carvalho Chehab 107*793e52d4SMauro Carvalho Chehab.. code-block:: c 108*793e52d4SMauro Carvalho Chehab 109*793e52d4SMauro Carvalho Chehab struct video_command { 110*793e52d4SMauro Carvalho Chehab __u32 cmd; 111*793e52d4SMauro Carvalho Chehab __u32 flags; 112*793e52d4SMauro Carvalho Chehab union { 113*793e52d4SMauro Carvalho Chehab struct { 114*793e52d4SMauro Carvalho Chehab __u64 pts; 115*793e52d4SMauro Carvalho Chehab } stop; 116*793e52d4SMauro Carvalho Chehab 117*793e52d4SMauro Carvalho Chehab struct { 118*793e52d4SMauro Carvalho Chehab /* 0 or 1000 specifies normal speed, 119*793e52d4SMauro Carvalho Chehab 1 specifies forward single stepping, 120*793e52d4SMauro Carvalho Chehab -1 specifies backward single stepping, 121*793e52d4SMauro Carvalho Chehab >>1: playback at speed/1000 of the normal speed, 122*793e52d4SMauro Carvalho Chehab <-1: reverse playback at (-speed/1000) of the normal speed. */ 123*793e52d4SMauro Carvalho Chehab __s32 speed; 124*793e52d4SMauro Carvalho Chehab __u32 format; 125*793e52d4SMauro Carvalho Chehab } play; 126*793e52d4SMauro Carvalho Chehab 127*793e52d4SMauro Carvalho Chehab struct { 128*793e52d4SMauro Carvalho Chehab __u32 data[16]; 129*793e52d4SMauro Carvalho Chehab } raw; 130*793e52d4SMauro Carvalho Chehab }; 131*793e52d4SMauro Carvalho Chehab }; 132*793e52d4SMauro Carvalho Chehab 133*793e52d4SMauro Carvalho Chehab 134*793e52d4SMauro Carvalho Chehab.. _video-size-t: 135*793e52d4SMauro Carvalho Chehab 136*793e52d4SMauro Carvalho Chehabvideo_size_t 137*793e52d4SMauro Carvalho Chehab============ 138*793e52d4SMauro Carvalho Chehab 139*793e52d4SMauro Carvalho Chehab 140*793e52d4SMauro Carvalho Chehab.. code-block:: c 141*793e52d4SMauro Carvalho Chehab 142*793e52d4SMauro Carvalho Chehab typedef struct { 143*793e52d4SMauro Carvalho Chehab int w; 144*793e52d4SMauro Carvalho Chehab int h; 145*793e52d4SMauro Carvalho Chehab video_format_t aspect_ratio; 146*793e52d4SMauro Carvalho Chehab } video_size_t; 147*793e52d4SMauro Carvalho Chehab 148*793e52d4SMauro Carvalho Chehab 149*793e52d4SMauro Carvalho Chehab.. c:type:: video_event 150*793e52d4SMauro Carvalho Chehab 151*793e52d4SMauro Carvalho Chehabstruct video_event 152*793e52d4SMauro Carvalho Chehab================== 153*793e52d4SMauro Carvalho Chehab 154*793e52d4SMauro Carvalho ChehabThe following is the structure of a video event as it is returned by the 155*793e52d4SMauro Carvalho ChehabVIDEO_GET_EVENT call. 156*793e52d4SMauro Carvalho Chehab 157*793e52d4SMauro Carvalho Chehab 158*793e52d4SMauro Carvalho Chehab.. code-block:: c 159*793e52d4SMauro Carvalho Chehab 160*793e52d4SMauro Carvalho Chehab struct video_event { 161*793e52d4SMauro Carvalho Chehab __s32 type; 162*793e52d4SMauro Carvalho Chehab #define VIDEO_EVENT_SIZE_CHANGED 1 163*793e52d4SMauro Carvalho Chehab #define VIDEO_EVENT_FRAME_RATE_CHANGED 2 164*793e52d4SMauro Carvalho Chehab #define VIDEO_EVENT_DECODER_STOPPED 3 165*793e52d4SMauro Carvalho Chehab #define VIDEO_EVENT_VSYNC 4 166*793e52d4SMauro Carvalho Chehab long timestamp; 167*793e52d4SMauro Carvalho Chehab union { 168*793e52d4SMauro Carvalho Chehab video_size_t size; 169*793e52d4SMauro Carvalho Chehab unsigned int frame_rate; /* in frames per 1000sec */ 170*793e52d4SMauro Carvalho Chehab unsigned char vsync_field; /* unknown/odd/even/progressive */ 171*793e52d4SMauro Carvalho Chehab } u; 172*793e52d4SMauro Carvalho Chehab }; 173*793e52d4SMauro Carvalho Chehab 174*793e52d4SMauro Carvalho Chehab 175*793e52d4SMauro Carvalho Chehab.. c:type:: video_status 176*793e52d4SMauro Carvalho Chehab 177*793e52d4SMauro Carvalho Chehabstruct video_status 178*793e52d4SMauro Carvalho Chehab=================== 179*793e52d4SMauro Carvalho Chehab 180*793e52d4SMauro Carvalho ChehabThe VIDEO_GET_STATUS call returns the following structure informing 181*793e52d4SMauro Carvalho Chehababout various states of the playback operation. 182*793e52d4SMauro Carvalho Chehab 183*793e52d4SMauro Carvalho Chehab 184*793e52d4SMauro Carvalho Chehab.. code-block:: c 185*793e52d4SMauro Carvalho Chehab 186*793e52d4SMauro Carvalho Chehab struct video_status { 187*793e52d4SMauro Carvalho Chehab int video_blank; /* blank video on freeze? */ 188*793e52d4SMauro Carvalho Chehab video_play_state_t play_state; /* current state of playback */ 189*793e52d4SMauro Carvalho Chehab video_stream_source_t stream_source; /* current source (demux/memory) */ 190*793e52d4SMauro Carvalho Chehab video_format_t video_format; /* current aspect ratio of stream */ 191*793e52d4SMauro Carvalho Chehab video_displayformat_t display_format;/* selected cropping mode */ 192*793e52d4SMauro Carvalho Chehab }; 193*793e52d4SMauro Carvalho Chehab 194*793e52d4SMauro Carvalho ChehabIf video_blank is set video will be blanked out if the channel is 195*793e52d4SMauro Carvalho Chehabchanged or if playback is stopped. Otherwise, the last picture will be 196*793e52d4SMauro Carvalho Chehabdisplayed. play_state indicates if the video is currently frozen, 197*793e52d4SMauro Carvalho Chehabstopped, or being played back. The stream_source corresponds to the 198*793e52d4SMauro Carvalho Chehabselected source for the video stream. It can come either from the 199*793e52d4SMauro Carvalho Chehabdemultiplexer or from memory. The video_format indicates the aspect 200*793e52d4SMauro Carvalho Chehabratio (one of 4:3 or 16:9) of the currently played video stream. 201*793e52d4SMauro Carvalho ChehabFinally, display_format corresponds to the selected cropping mode in 202*793e52d4SMauro Carvalho Chehabcase the source video format is not the same as the format of the output 203*793e52d4SMauro Carvalho Chehabdevice. 204*793e52d4SMauro Carvalho Chehab 205*793e52d4SMauro Carvalho Chehab 206*793e52d4SMauro Carvalho Chehab.. c:type:: video_still_picture 207*793e52d4SMauro Carvalho Chehab 208*793e52d4SMauro Carvalho Chehabstruct video_still_picture 209*793e52d4SMauro Carvalho Chehab========================== 210*793e52d4SMauro Carvalho Chehab 211*793e52d4SMauro Carvalho ChehabAn I-frame displayed via the VIDEO_STILLPICTURE call is passed on 212*793e52d4SMauro Carvalho Chehabwithin the following structure. 213*793e52d4SMauro Carvalho Chehab 214*793e52d4SMauro Carvalho Chehab 215*793e52d4SMauro Carvalho Chehab.. code-block:: c 216*793e52d4SMauro Carvalho Chehab 217*793e52d4SMauro Carvalho Chehab /* pointer to and size of a single iframe in memory */ 218*793e52d4SMauro Carvalho Chehab struct video_still_picture { 219*793e52d4SMauro Carvalho Chehab char *iFrame; /* pointer to a single iframe in memory */ 220*793e52d4SMauro Carvalho Chehab int32_t size; 221*793e52d4SMauro Carvalho Chehab }; 222*793e52d4SMauro Carvalho Chehab 223*793e52d4SMauro Carvalho Chehab 224*793e52d4SMauro Carvalho Chehab.. _video_caps: 225*793e52d4SMauro Carvalho Chehab 226*793e52d4SMauro Carvalho Chehabvideo capabilities 227*793e52d4SMauro Carvalho Chehab================== 228*793e52d4SMauro Carvalho Chehab 229*793e52d4SMauro Carvalho ChehabA call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the 230*793e52d4SMauro Carvalho Chehabfollowing bits set according to the hardwares capabilities. 231*793e52d4SMauro Carvalho Chehab 232*793e52d4SMauro Carvalho Chehab 233*793e52d4SMauro Carvalho Chehab.. code-block:: c 234*793e52d4SMauro Carvalho Chehab 235*793e52d4SMauro Carvalho Chehab /* bit definitions for capabilities: */ 236*793e52d4SMauro Carvalho Chehab /* can the hardware decode MPEG1 and/or MPEG2? */ 237*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_MPEG1 1 238*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_MPEG2 2 239*793e52d4SMauro Carvalho Chehab /* can you send a system and/or program stream to video device? 240*793e52d4SMauro Carvalho Chehab (you still have to open the video and the audio device but only 241*793e52d4SMauro Carvalho Chehab send the stream to the video device) */ 242*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_SYS 4 243*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_PROG 8 244*793e52d4SMauro Carvalho Chehab /* can the driver also handle SPU, NAVI and CSS encoded data? 245*793e52d4SMauro Carvalho Chehab (CSS API is not present yet) */ 246*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_SPU 16 247*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_NAVI 32 248*793e52d4SMauro Carvalho Chehab #define VIDEO_CAP_CSS 64 249