Something went wrong. Try again.
🎥 Command line media player
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285/* * TV interface * * Copyright (C) 2001 Alex Beregszászi * Copyright (C) 2007 Attila Ötvös * Copyright (C) 2007 Vladimir Voroshilov <voroshil@gmail.com> * * This file is part of mpv. * * mpv is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * mpv 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 General Public License along * with mpv. If not, see <http://www.gnu.org/licenses/>. */
#ifndef MPLAYER_TV_H#define MPLAYER_TV_H
#include "osdep/endian.h"
#include "config.h"#if !HAVE_GPL#error GPL only#endif
struct mp_log;
typedef struct tv_params { float freq; char *channel; char *chanlist; char *norm; int automute; int normid; char *device; char *driver; int width; int height; int input; int outfmt; float fps; char **channels; int audio; int immediate; int audiorate; int audio_id; int amode; int volume; int bass; int treble; int balance; int forcechan; int force_audio; int buffer_size; int mjpeg; int decimation; int quality; int alsa; char* adevice; int brightness; int contrast; int hue; int saturation; int gain;
int scan; int scan_threshold; float scan_period;} tv_param_t;
struct tv_stream_params { char *channel; int input;};
typedef struct tvi_info_s{ struct tvi_handle_s * (*tvi_init)(struct mp_log *log, tv_param_t* tv_param); const char *name; const char *short_name;} tvi_info_t;
struct priv;
typedef struct tvi_functions_s{ int (*init)(struct priv *priv); int (*uninit)(struct priv *priv); int (*control)(struct priv *priv, int cmd, void *arg); int (*start)(struct priv *priv); double (*grab_video_frame)(struct priv *priv, char *buffer, int len); int (*get_video_framesize)(struct priv *priv); double (*grab_audio_frame)(struct priv *priv, char *buffer, int len); int (*get_audio_framesize)(struct priv *priv);} tvi_functions_t;
typedef struct tvi_handle_s { struct mp_log *log; const tvi_functions_t *functions; void *priv; int seq; struct demuxer *demuxer;
/* specific */ int norm; int chanlist; const struct CHANLIST *chanlist_s; int channel; tv_param_t * tv_param; void * scan;
struct tv_channels_s *tv_channel_list; struct tv_channels_s *tv_channel_current, *tv_channel_last; char *tv_channel_last_real;} tvi_handle_t;
typedef struct tv_channels_s { int index; char number[5]; char name[20]; int norm; int freq; struct tv_channels_s *next; struct tv_channels_s *prev;} tv_channels_t;
typedef struct { unsigned int scan_timer; int channel_num; int new_channels;} tv_scan_t;
#define TVI_CONTROL_FALSE 0#define TVI_CONTROL_TRUE 1#define TVI_CONTROL_NA -1#define TVI_CONTROL_UNKNOWN -2
/* ======================== CONTROLS =========================== */
/* GENERIC controls */#define TVI_CONTROL_IS_AUDIO 0x1#define TVI_CONTROL_IS_VIDEO 0x2#define TVI_CONTROL_IS_TUNER 0x3#define TVI_CONTROL_IMMEDIATE 0x4
/* VIDEO controls */#define TVI_CONTROL_VID_GET_FPS 0x101#define TVI_CONTROL_VID_GET_PLANES 0x102#define TVI_CONTROL_VID_GET_BITS 0x103#define TVI_CONTROL_VID_CHK_BITS 0x104#define TVI_CONTROL_VID_SET_BITS 0x105#define TVI_CONTROL_VID_GET_FORMAT 0x106#define TVI_CONTROL_VID_CHK_FORMAT 0x107#define TVI_CONTROL_VID_SET_FORMAT 0x108#define TVI_CONTROL_VID_GET_WIDTH 0x109#define TVI_CONTROL_VID_CHK_WIDTH 0x110#define TVI_CONTROL_VID_SET_WIDTH 0x111#define TVI_CONTROL_VID_GET_HEIGHT 0x112#define TVI_CONTROL_VID_CHK_HEIGHT 0x113#define TVI_CONTROL_VID_SET_HEIGHT 0x114#define TVI_CONTROL_VID_GET_BRIGHTNESS 0x115#define TVI_CONTROL_VID_SET_BRIGHTNESS 0x116#define TVI_CONTROL_VID_GET_HUE 0x117#define TVI_CONTROL_VID_SET_HUE 0x118#define TVI_CONTROL_VID_GET_SATURATION 0x119#define TVI_CONTROL_VID_SET_SATURATION 0x11a#define TVI_CONTROL_VID_GET_CONTRAST 0x11b#define TVI_CONTROL_VID_SET_CONTRAST 0x11c#define TVI_CONTROL_VID_GET_PICTURE 0x11d#define TVI_CONTROL_VID_SET_PICTURE 0x11e#define TVI_CONTROL_VID_SET_GAIN 0x11f#define TVI_CONTROL_VID_GET_GAIN 0x120#define TVI_CONTROL_VID_SET_WIDTH_HEIGHT 0x121
/* TUNER controls */#define TVI_CONTROL_TUN_GET_FREQ 0x201#define TVI_CONTROL_TUN_SET_FREQ 0x202#define TVI_CONTROL_TUN_GET_TUNER 0x203 /* update priv->tuner struct for used input */#define TVI_CONTROL_TUN_SET_TUNER 0x204 /* update priv->tuner struct for used input */#define TVI_CONTROL_TUN_GET_NORM 0x205#define TVI_CONTROL_TUN_SET_NORM 0x206#define TVI_CONTROL_TUN_GET_SIGNAL 0x207
/* AUDIO controls */#define TVI_CONTROL_AUD_GET_FORMAT 0x301#define TVI_CONTROL_AUD_GET_SAMPLERATE 0x302#define TVI_CONTROL_AUD_GET_CHANNELS 0x304#define TVI_CONTROL_AUD_SET_SAMPLERATE 0x305
/* SPECIFIC controls */#define TVI_CONTROL_SPC_GET_INPUT 0x401 /* set input channel (tv,s-video,composite..) */#define TVI_CONTROL_SPC_SET_INPUT 0x402 /* set input channel (tv,s-video,composite..) */#define TVI_CONTROL_SPC_GET_NORMID 0x403 /* get normid from norm name */
int tv_set_color_options(tvi_handle_t *tvh, int opt, int val);int tv_get_color_options(tvi_handle_t *tvh, int opt, int* val);
int tv_step_channel_real(tvi_handle_t *tvh, int direction);int tv_step_channel(tvi_handle_t *tvh, int direction);#define TV_CHANNEL_LOWER 1#define TV_CHANNEL_HIGHER 2
int tv_last_channel(tvi_handle_t *tvh);
int tv_set_channel_real(tvi_handle_t *tvh, char *channel);int tv_set_channel(tvi_handle_t *tvh, char *channel);
int tv_step_norm(tvi_handle_t *tvh);int tv_step_chanlist(tvi_handle_t *tvh);
int tv_set_freq(tvi_handle_t *tvh, unsigned long freq);int tv_get_freq(tvi_handle_t *tvh, unsigned long *freq);int tv_get_signal(tvi_handle_t *tvh);int tv_step_freq(tvi_handle_t *tvh, float step_interval);
int tv_set_norm(tvi_handle_t *tvh, char* norm);
void tv_start_scan(tvi_handle_t *tvh, int start);
tvi_handle_t *tv_new_handle(int size, struct mp_log *log, const tvi_functions_t *functions);void tv_free_handle(tvi_handle_t *h);
#define TV_NORM_PAL 1#define TV_NORM_NTSC 2#define TV_NORM_SECAM 3#define TV_NORM_PALNC 4#define TV_NORM_PALM 5#define TV_NORM_PALN 6#define TV_NORM_NTSCJP 7
int tv_uninit(tvi_handle_t *tvh);void tv_scan(tvi_handle_t *tvh);int open_tv(tvi_handle_t *tvh);tvi_handle_t *tv_begin(tv_param_t* tv_param, struct mp_log *log);int tv_stream_control(tvi_handle_t *tvh, int cmd, void *arg);
extern const struct m_sub_options tv_params_conf;
#define MP_FOURCC(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((unsigned)(d)<<24))
#if BYTE_ORDER == BIG_ENDIAN#define MP_FOURCC_E(a,b,c,d) MP_FOURCC(a,b,c,d)#else#define MP_FOURCC_E(a,b,c,d) MP_FOURCC(d,c,b,a)#endif
#define MP_FOURCC_RGB8 MP_FOURCC_E(8, 'B', 'G', 'R')#define MP_FOURCC_RGB12 MP_FOURCC_E(12, 'B', 'G', 'R')#define MP_FOURCC_RGB15 MP_FOURCC_E(15, 'B', 'G', 'R')#define MP_FOURCC_RGB16 MP_FOURCC_E(16, 'B', 'G', 'R')#define MP_FOURCC_RGB24 MP_FOURCC_E(24, 'B', 'G', 'R')#define MP_FOURCC_RGB32 MP_FOURCC_E('A', 'B', 'G', 'R')
#define MP_FOURCC_BGR8 MP_FOURCC_E(8, 'R', 'G', 'B')#define MP_FOURCC_BGR12 MP_FOURCC_E(12, 'R', 'G', 'B')#define MP_FOURCC_BGR15 MP_FOURCC_E(15, 'R', 'G', 'B')#define MP_FOURCC_BGR16 MP_FOURCC_E(16, 'R', 'G', 'B')#define MP_FOURCC_BGR24 MP_FOURCC_E(24, 'R', 'G', 'B')#define MP_FOURCC_BGR32 MP_FOURCC_E('A', 'R', 'G', 'B')
#define MP_FOURCC_YVU9 MP_FOURCC('Y', 'U', 'V', '9')#define MP_FOURCC_YUV9 MP_FOURCC('Y', 'V', 'U', '9')#define MP_FOURCC_YV12 MP_FOURCC('Y', 'V', '1', '2')#define MP_FOURCC_I420 MP_FOURCC('I', '4', '2', '0')#define MP_FOURCC_IYUV MP_FOURCC('I', 'Y', 'U', 'V')#define MP_FOURCC_Y800 MP_FOURCC('Y', '8', '0', '0')#define MP_FOURCC_NV12 MP_FOURCC('N', 'V', '1', '2')#define MP_FOURCC_NV21 MP_FOURCC('N', 'V', '2', '1')
#define MP_FOURCC_UYVY MP_FOURCC('U', 'Y', 'V', 'Y')#define MP_FOURCC_YUY2 MP_FOURCC('Y', 'U', 'Y', '2')
#define MP_FOURCC_MJPEG MP_FOURCC('M', 'J', 'P', 'G')
#endif /* MPLAYER_TV_H */