vlc_es.h 5.95 KB
Newer Older
1
/*****************************************************************************
Gildas Bazin's avatar
 
Gildas Bazin committed
2
 * vlc_es.h: Elementary stream formats descriptions
3 4
 *****************************************************************************
 * Copyright (C) 1999-2001 VideoLAN
Gildas Bazin's avatar
 
Gildas Bazin committed
5
 * $Id: vlc_es.h,v 1.7 2004/01/25 21:39:37 gbazin Exp $
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 *
 * Authors: Laurent Aimar <fenrir@via.ecp.fr>
 *
 * This program 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.
 *
 * 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 General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
 *****************************************************************************/

#ifndef _VLC_ES_H
#define _VLC_ES_H 1

/**
Gildas Bazin's avatar
 
Gildas Bazin committed
28 29
 * \file
 * This file defines the elementary streams format types
30
 */
Gildas Bazin's avatar
 
Gildas Bazin committed
31 32 33 34 35 36 37

/**
 * video palette data
 * \see viedo_format_t
 * \see subs_format_t
 */
struct video_palette_t
38
{
Gildas Bazin's avatar
 
Gildas Bazin committed
39 40 41 42 43
    int i_dummy; /**< to keep the compatibility with ffmpeg's palette */

    uint32_t palette[256]; /**< 4-byte ARGB palette entries, stored in native
                            * byte order */
};
44

Gildas Bazin's avatar
 
Gildas Bazin committed
45 46 47 48 49 50 51
/**
 * audio format description
 */
struct audio_format_t
{
    vlc_fourcc_t i_format;                          /**< audio format fourcc */
    unsigned int i_rate;                              /**< audio sample-rate */
52 53 54

    /* Describes the channels configuration of the samples (ie. number of
     * channels which are available in the buffer, and positions). */
Gildas Bazin's avatar
 
Gildas Bazin committed
55
    uint32_t     i_physical_channels;
56 57 58

    /* Describes from which original channels, before downmixing, the
     * buffer is derived. */
Gildas Bazin's avatar
 
Gildas Bazin committed
59
    uint32_t     i_original_channels;
60 61 62

    /* Optional - for A/52, SPDIF and DTS types : */
    /* Bytes used by one compressed frame, depends on bitrate. */
Gildas Bazin's avatar
 
Gildas Bazin committed
63
    unsigned int i_bytes_per_frame;
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

    /* Number of sampleframes contained in one compressed frame. */
    unsigned int        i_frame_length;
    /* Please note that it may be completely arbitrary - buffers are not
     * obliged to contain a integral number of so-called "frames". It's
     * just here for the division :
     * buffer_size = i_nb_samples * i_bytes_per_frame / i_frame_length
     */

    /* FIXME ? (used by the codecs) */
    int i_channels;
    int i_blockalign;
    int i_bitspersample;
};

/**
Gildas Bazin's avatar
 
Gildas Bazin committed
80
 * video format description
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
 */
struct video_format_t
{
    vlc_fourcc_t i_chroma;                               /**< picture chroma */
    unsigned int i_aspect;                                 /**< aspect ratio */

    unsigned int i_width;                                 /**< picture width */
    unsigned int i_height;                               /**< picture height */
    unsigned int i_x_offset;               /**< start offset of visible area */
    unsigned int i_y_offset;               /**< start offset of visible area */
    unsigned int i_visible_width;                 /**< width of visible area */
    unsigned int i_visible_height;               /**< height of visible area */

    unsigned int i_bits_per_pixel;             /**< number of bits per pixel */

    unsigned int i_frame_rate;                     /**< frame rate numerator */
    unsigned int i_frame_rate_base;              /**< frame rate denominator */
Gildas Bazin's avatar
 
Gildas Bazin committed
98 99

    video_palette_t *p_palette;              /**< video palette from demuxer */
100 101 102
};

/**
Gildas Bazin's avatar
 
Gildas Bazin committed
103
 * subtitles format description
104
 */
105
struct subs_format_t
106 107 108
{
    char *psz_encoding;

109 110 111 112 113
    struct
    {
        /* FIXME */
        uint32_t palette[16+1];
    } spu;
114 115 116 117 118

    struct
    {
        int i_id;
    } dvb;
119
};
120 121 122 123

/**
 * ES definition
 */
124
struct es_format_t
125 126 127 128
{
    int             i_cat;
    vlc_fourcc_t    i_codec;

129 130
    int             i_id;       /* -1: let the core mark the right id
                                   >=0: valid id */
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
    int             i_group;    /* -1 : standalone
                                   >= 0 then a "group" (program) is created
                                        for each value */
    int             i_priority; /*  -2 : mean not selectable by the users
                                    -1 : mean not selected by default even
                                        when no other stream
                                    >=0: priority */
    char            *psz_language;
    char            *psz_description;

    audio_format_t audio;
    video_format_t video;
    subs_format_t  subs;

    int     i_bitrate;

    int     i_extra;
    void    *p_extra;

150
};
151

Gildas Bazin's avatar
 
Gildas Bazin committed
152 153 154 155 156 157 158
/* ES Categories */
#define UNKNOWN_ES      0x00
#define VIDEO_ES        0x01
#define AUDIO_ES        0x02
#define SPU_ES          0x03
#define NAV_ES          0x04

159 160 161 162 163
static inline void es_format_Init( es_format_t *fmt,
                                   int i_cat, vlc_fourcc_t i_codec )
{
    fmt->i_cat                  = i_cat;
    fmt->i_codec                = i_codec;
164
    fmt->i_id                   = -1;
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
    fmt->i_group                = 0;
    fmt->i_priority             = 0;
    fmt->psz_language           = NULL;
    fmt->psz_description        = NULL;

    memset( &fmt->audio, 0, sizeof(audio_format_t) );
    memset( &fmt->video, 0, sizeof(video_format_t) );
    memset( &fmt->subs, 0, sizeof(subs_format_t) );

    fmt->i_bitrate              = 0;
    fmt->i_extra                = 0;
    fmt->p_extra                = NULL;
}

static inline void es_format_Copy( es_format_t *dst, es_format_t *src )
{
    memcpy( dst, src, sizeof( es_format_t ) );
    if( src->i_extra > 0 )
    {
        dst->p_extra = malloc( src->i_extra );
        memcpy( dst->p_extra, src->p_extra,
                src->i_extra );
    }
    else
    {
        dst->i_extra = 0;
        dst->p_extra = NULL;
    }
}

#endif