view libmpcodecs/dec_teletext.h @ 32489:d5dfda231e76

Make scale filter accept all non-hardware-acceleration input formats we know a PIX_FMT_* for. It is possible we will not have a conversion for some of these formats, but since it will just fail different this approach is better since it avoids having to expand the explicit list continuously.
author reimar
date Wed, 03 Nov 2010 16:42:24 +0000
parents b06429c8c104
children 99ac85950277
line wrap: on
line source

/*
 * Teletext support
 *
 * Copyright (C) 2007 Vladimir Voroshilov <voroshil@gmail.com>
 *
 * This file is part of MPlayer.
 *
 * MPlayer 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.
 *
 * MPlayer 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 MPlayer; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef MPLAYER_DEC_TELETEXT_H
#define MPLAYER_DEC_TELETEXT_H

struct tt_param {
    char *device;  ///< teletext device
    int format;    ///< teletext display format
    int page;      ///< start teletext page
    int lang;      ///< primary language code
};

#define VBI_CONTROL_FALSE              0
#define VBI_CONTROL_TRUE               1
#define VBI_CONTROL_UNKNOWN           -1

int teletext_control(void* p, int cmd, void *arg);

/*
  TELETEXT controls (through teletext_control() )
   NOTE:
    _SET_ should be _GET_ +1
   _STEP_ should be _GET_ +2
*/
#define TV_VBI_CONTROL_GET_MODE        0x510   ///< get current mode teletext
#define TV_VBI_CONTROL_SET_MODE        0x511   ///< on/off grab teletext

#define TV_VBI_CONTROL_GET_PAGE        0x513   ///< get grabbed teletext page
#define TV_VBI_CONTROL_SET_PAGE        0x514   ///< set grab teletext page number
#define TV_VBI_CONTROL_STEP_PAGE       0x515   ///< step grab teletext page number

#define TV_VBI_CONTROL_GET_SUBPAGE     0x516   ///< get grabbed teletext page
#define TV_VBI_CONTROL_SET_SUBPAGE     0x517   ///< set grab teletext page number

#define TV_VBI_CONTROL_GET_FORMAT      0x519   ///< get teletext format
#define TV_VBI_CONTROL_SET_FORMAT      0x51a   ///< set teletext format

#define TV_VBI_CONTROL_GET_HALF_PAGE   0x51c   ///< get current half page
#define TV_VBI_CONTROL_SET_HALF_PAGE   0x51d   ///< switch half page

#define TV_VBI_CONTROL_IS_CHANGED      0x540   ///< teletext page is changed
#define TV_VBI_CONTROL_MARK_UNCHANGED  0x541   ///< teletext page is changed

#define TV_VBI_CONTROL_ADD_DEC         0x550   ///< add page number with dec
#define TV_VBI_CONTROL_GO_LINK         0x551   ///< go link (1..6) NYI
#define TV_VBI_CONTROL_GET_VBIPAGE     0x552   ///< get vbi_image for grabbed teletext page
#define TV_VBI_CONTROL_RESET           0x553   ///< vbi reset
#define TV_VBI_CONTROL_START           0x554   ///< vbi start
#define TV_VBI_CONTROL_STOP            0x555   ///< vbi stop
#define TV_VBI_CONTROL_DECODE_PAGE     0x556   ///< decode vbi page
#define TV_VBI_CONTROL_GET_NETWORKNAME 0x557   ///< get current network name
#define TV_VBI_CONTROL_DECODE_DVB      0x558   ///< decode DVB teletext

#define VBI_TFORMAT_TEXT    0               ///< text mode
#define VBI_TFORMAT_BW      1               ///< black&white mode
#define VBI_TFORMAT_GRAY    2               ///< grayscale mode
#define VBI_TFORMAT_COLOR   3               ///< color mode (require color_spu patch!)

#define VBI_MAX_PAGES      0x800            ///< max sub pages number
#define VBI_MAX_SUBPAGES   64               ///< max sub pages number

#define VBI_ROWS    25                      ///< teletext page height in rows
#define VBI_COLUMNS 40                      ///< teletext page width in chars
#define VBI_TIME_LINEPOS    26              ///< time line pos in page header

typedef
enum{
    TT_FORMAT_OPAQUE=0,       ///< opaque
    TT_FORMAT_TRANSPARENT,    ///< transparent
    TT_FORMAT_OPAQUE_INV,     ///< opaque with inverted colors
    TT_FORMAT_TRANSPARENT_INV ///< transparent with inverted colors
} teletext_format;

typedef
enum{
    TT_ZOOM_NORMAL=0,
    TT_ZOOM_TOP_HALF,
    TT_ZOOM_BOTTOM_HALF
} teletext_zoom;

typedef struct tt_char_s{
    unsigned int unicode; ///< unicode (utf8) character
    unsigned char fg;  ///< foreground color
    unsigned char bg;  ///< background color
    unsigned char gfx; ///< 0-no gfx, 1-solid gfx, 2-separated gfx
    unsigned char flh; ///< 0-no flash, 1-flash
    unsigned char hidden; ///< char is hidden (for subtitle pages)
    unsigned char ctl; ///< control character
    unsigned char lng; ///< lang: 0-secondary language,1-primary language
    unsigned char raw; ///< raw character (as received from device)
} tt_char;

typedef struct tt_link_s{
    int pagenum;          ///< page number
    int subpagenum;       ///< subpage number
} tt_link_t;

typedef struct tt_page_s{
    int pagenum;          ///< page number
    int subpagenum;       ///< subpage number
    unsigned char primary_lang;   ///< primary language code
    unsigned char secondary_lang; ///< secondary language code
    unsigned char active; ///< page is complete and ready for rendering
    unsigned char flags;  ///< page flags
    unsigned char raw[VBI_ROWS*VBI_COLUMNS]; ///< page data
    struct tt_page_s* next_subpage;
    struct tt_link_s links[6];
}  tt_page;

#define TT_PGFL_SUPPRESS_HEADER  0x01
#define TT_PGFL_UPDATE_INDICATOR 0x02
#define TT_PGFL_INTERRUPTED_SEQ  0x04
#define TT_PGFL_INHIBIT_DISPLAY  0x08
#define TT_PGFL_NEWFLASH         0x10
#define TT_PGFL_SUBTITLE         0x20
#define TT_PGFL_ERASE_PAGE       0x40
#define TT_PGFL_MAGAZINE_SERIAL  0x80

typedef struct tt_stream_props_s{
    int sampling_rate;
    int samples_per_line;
    int offset;
    int count[2];     ///< number of lines in first and second fields
    int interlaced;   ///< vbi data are interlaced
    int bufsize;      ///< required buffer size
} tt_stream_props;

#endif /* MPLAYER_DEC_TELETEXT_H */