~ubuntu-branches/ubuntu/maverick/vlc/maverick

« back to all changes in this revision

Viewing changes to include/audio_output.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2008-09-17 21:56:14 UTC
  • mfrom: (1.1.17 upstream)
  • Revision ID: james.westby@ubuntu.com-20080917215614-tj0vx8xzd57e52t8
Tags: 0.9.2-1ubuntu1
* New Upstream Release, exception granted by
    - dktrkranz, norsetto, Hobbsee (via irc). LP: #270404

Changes done in ubuntu:

* add libxul-dev to build-depends
* make sure that vlc is build against libxul in configure. This doesn't
  change anything in the package, but makes it more robust if building
  in an 'unclean' chroot or when modifying the package.
* debian/control: make Vcs-* fields point to the motumedia branch
* add libx264-dev and libass-dev to build-depends
  LP: #210354, #199870
* actually enable libass support by passing --enable-libass to configure
* enable libdca: add libdca-dev to build depends and --enable-libdca
* install the x264 plugin.

Changes already in the pkg-multimedia branch in debian:

* don't install usr/share/vlc/mozilla in debian/mozilla-plugin-vlc.install  
* new upstream .desktop file now registers flash video mimetype LP: #261567
* add Xb-Npp-Applications to mozilla-plugin-vlc
* remove duplicate entries in debian/vlc-nox.install

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
 * audio_output.h : audio output interface
3
 
 *****************************************************************************
4
 
 * Copyright (C) 2002-2005 the VideoLAN team
5
 
 * $Id: 4eef77635f46e97613819cbd18bf0fedcf39691c $
6
 
 *
7
 
 * Authors: Christophe Massiot <massiot@via.ecp.fr>
8
 
 *
9
 
 * This program is free software; you can redistribute it and/or modify
10
 
 * it under the terms of the GNU General Public License as published by
11
 
 * the Free Software Foundation; either version 2 of the License, or
12
 
 * (at your option) any later version.
13
 
 *
14
 
 * This program is distributed in the hope that it will be useful,
15
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 
 * GNU General Public License for more details.
18
 
 *
19
 
 * You should have received a copy of the GNU General Public License
20
 
 * along with this program; if not, write to the Free Software
21
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22
 
 *****************************************************************************/
23
 
#ifndef _VLC_AUDIO_OUTPUT_H
24
 
#define _VLC_AUDIO_OUTPUT_H 1
25
 
 
26
 
#include "vlc_es.h"
27
 
 
28
 
#define AOUT_FMTS_IDENTICAL( p_first, p_second ) (                          \
29
 
    ((p_first)->i_format == (p_second)->i_format)                           \
30
 
      && ((p_first)->i_rate == (p_second)->i_rate)                          \
31
 
      && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\
32
 
      && ((p_first)->i_original_channels == (p_second)->i_original_channels) )
33
 
 
34
 
/* Check if i_rate == i_rate and i_channels == i_channels */
35
 
#define AOUT_FMTS_SIMILAR( p_first, p_second ) (                            \
36
 
    ((p_first)->i_rate == (p_second)->i_rate)                               \
37
 
      && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\
38
 
      && ((p_first)->i_original_channels == (p_second)->i_original_channels) )
39
 
 
40
 
#ifdef WORDS_BIGENDIAN
41
 
#   define AOUT_FMT_S16_NE VLC_FOURCC('s','1','6','b')
42
 
#   define AOUT_FMT_U16_NE VLC_FOURCC('u','1','6','b')
43
 
#   define AOUT_FMT_S24_NE VLC_FOURCC('s','2','4','b')
44
 
#   define AOUT_FMT_SPDIF_NE VLC_FOURCC('s','p','d','b')
45
 
#else
46
 
#   define AOUT_FMT_S16_NE VLC_FOURCC('s','1','6','l')
47
 
#   define AOUT_FMT_U16_NE VLC_FOURCC('u','1','6','l')
48
 
#   define AOUT_FMT_S24_NE VLC_FOURCC('s','2','4','l')
49
 
#   define AOUT_FMT_SPDIF_NE VLC_FOURCC('s','p','d','i')
50
 
#endif
51
 
 
52
 
#define AOUT_FMT_NON_LINEAR( p_format )                                    \
53
 
    ( ((p_format)->i_format == VLC_FOURCC('s','p','d','i'))                \
54
 
       || ((p_format)->i_format == VLC_FOURCC('s','p','d','b'))            \
55
 
       || ((p_format)->i_format == VLC_FOURCC('a','5','2',' '))            \
56
 
       || ((p_format)->i_format == VLC_FOURCC('d','t','s',' ')) )
57
 
 
58
 
/* This is heavily borrowed from libmad, by Robert Leslie <rob@mars.org> */
59
 
/*
60
 
 * Fixed-point format: 0xABBBBBBB
61
 
 * A == whole part      (sign + 3 bits)
62
 
 * B == fractional part (28 bits)
63
 
 *
64
 
 * Values are signed two's complement, so the effective range is:
65
 
 * 0x80000000 to 0x7fffffff
66
 
 *       -8.0 to +7.9999999962747097015380859375
67
 
 *
68
 
 * The smallest representable value is:
69
 
 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
70
 
 *
71
 
 * 28 bits of fractional accuracy represent about
72
 
 * 8.6 digits of decimal accuracy.
73
 
 *
74
 
 * Fixed-point numbers can be added or subtracted as normal
75
 
 * integers, but multiplication requires shifting the 64-bit result
76
 
 * from 56 fractional bits back to 28 (and rounding.)
77
 
 */
78
 
typedef int32_t vlc_fixed_t;
79
 
#define FIXED32_FRACBITS 28
80
 
#define FIXED32_MIN ((vlc_fixed_t) -0x80000000L)
81
 
#define FIXED32_MAX ((vlc_fixed_t) +0x7fffffffL)
82
 
#define FIXED32_ONE ((vlc_fixed_t) 0x10000000)
83
 
 
84
 
 
85
 
/*
86
 
 * Channels descriptions
87
 
 */
88
 
 
89
 
/* Values available for physical and original channels */
90
 
#define AOUT_CHAN_CENTER            0x1
91
 
#define AOUT_CHAN_LEFT              0x2
92
 
#define AOUT_CHAN_RIGHT             0x4
93
 
#define AOUT_CHAN_REARCENTER        0x10
94
 
#define AOUT_CHAN_REARLEFT          0x20
95
 
#define AOUT_CHAN_REARRIGHT         0x40
96
 
#define AOUT_CHAN_MIDDLELEFT        0x100
97
 
#define AOUT_CHAN_MIDDLERIGHT       0x200
98
 
#define AOUT_CHAN_LFE               0x1000
99
 
 
100
 
/* Values available for original channels only */
101
 
#define AOUT_CHAN_DOLBYSTEREO       0x10000
102
 
#define AOUT_CHAN_DUALMONO          0x20000
103
 
#define AOUT_CHAN_REVERSESTEREO     0x40000
104
 
 
105
 
#define AOUT_CHAN_PHYSMASK          0xFFFF
106
 
#define AOUT_CHAN_MAX               9
107
 
 
108
 
/* Values used for the audio-device and audio-channels object variables */
109
 
#define AOUT_VAR_MONO               1
110
 
#define AOUT_VAR_STEREO             2
111
 
#define AOUT_VAR_2F2R               4
112
 
#define AOUT_VAR_3F2R               5
113
 
#define AOUT_VAR_5_1                6
114
 
#define AOUT_VAR_6_1                7
115
 
#define AOUT_VAR_7_1                8
116
 
#define AOUT_VAR_SPDIF              10
117
 
 
118
 
#define AOUT_VAR_CHAN_STEREO        1
119
 
#define AOUT_VAR_CHAN_RSTEREO       2
120
 
#define AOUT_VAR_CHAN_LEFT          3
121
 
#define AOUT_VAR_CHAN_RIGHT         4
122
 
#define AOUT_VAR_CHAN_DOLBYS        5
123
 
 
124
 
/*****************************************************************************
125
 
 * aout_buffer_t : audio output buffer
126
 
 *****************************************************************************/
127
 
struct aout_buffer_t
128
 
{
129
 
    byte_t *                p_buffer;
130
 
    int                     i_alloc_type;
131
 
    /* i_size is the real size of the buffer (used for debug ONLY), i_nb_bytes
132
 
     * is the number of significative bytes in it. */
133
 
    size_t                  i_size, i_nb_bytes;
134
 
    unsigned int            i_nb_samples;
135
 
    mtime_t                 start_date, end_date;
136
 
 
137
 
    struct aout_buffer_t *  p_next;
138
 
 
139
 
    /** Private data (aout_buffer_t will disappear soon so no need for an
140
 
     * aout_buffer_sys_t type) */
141
 
    void * p_sys;
142
 
 
143
 
    /** This way the release can be overloaded */
144
 
    void (*pf_release)( aout_buffer_t * );
145
 
};
146
 
 
147
 
/* Size of a frame for S/PDIF output. */
148
 
#define AOUT_SPDIF_SIZE 6144
149
 
 
150
 
/* Number of samples in an A/52 frame. */
151
 
#define A52_FRAME_NB 1536
152
 
 
153
 
/*****************************************************************************
154
 
 * audio_date_t : date incrementation without long-term rounding errors
155
 
 *****************************************************************************/
156
 
struct audio_date_t
157
 
{
158
 
    mtime_t  date;
159
 
    uint32_t i_divider;
160
 
    uint32_t i_remainder;
161
 
};
162
 
 
163
 
/*****************************************************************************
164
 
 * Prototypes
165
 
 *****************************************************************************/
166
 
/* From common.c : */
167
 
#define aout_New(a) __aout_New(VLC_OBJECT(a))
168
 
VLC_EXPORT( aout_instance_t *, __aout_New, ( vlc_object_t * ) );
169
 
VLC_EXPORT( void, aout_Delete, ( aout_instance_t * ) );
170
 
VLC_EXPORT( void, aout_DateInit, ( audio_date_t *, uint32_t ) );
171
 
VLC_EXPORT( void, aout_DateSet, ( audio_date_t *, mtime_t ) );
172
 
VLC_EXPORT( void, aout_DateMove, ( audio_date_t *, mtime_t ) );
173
 
VLC_EXPORT( mtime_t, aout_DateGet, ( const audio_date_t * ) );
174
 
VLC_EXPORT( mtime_t, aout_DateIncrement, ( audio_date_t *, uint32_t ) );
175
 
 
176
 
VLC_EXPORT( int, aout_CheckChannelReorder, ( const uint32_t *, const uint32_t *, uint32_t, int, int * ) );
177
 
VLC_EXPORT( void, aout_ChannelReorder, ( uint8_t *, int, int, const int *, int ) );
178
 
 
179
 
/* From dec.c : */
180
 
#define aout_DecNew(a, b, c) __aout_DecNew(VLC_OBJECT(a), b, c)
181
 
VLC_EXPORT( aout_input_t *, __aout_DecNew, ( vlc_object_t *, aout_instance_t **, audio_sample_format_t * ) );
182
 
VLC_EXPORT( int, aout_DecDelete, ( aout_instance_t *, aout_input_t * ) );
183
 
VLC_EXPORT( aout_buffer_t *, aout_DecNewBuffer, ( aout_instance_t *, aout_input_t *, size_t ) );
184
 
VLC_EXPORT( void, aout_DecDeleteBuffer, ( aout_instance_t *, aout_input_t *, aout_buffer_t * ) );
185
 
VLC_EXPORT( int, aout_DecPlay, ( aout_instance_t *, aout_input_t *, aout_buffer_t * ) );
186
 
 
187
 
/* From intf.c : */
188
 
#define aout_VolumeGet(a, b) __aout_VolumeGet(VLC_OBJECT(a), b)
189
 
VLC_EXPORT( int, __aout_VolumeGet, ( vlc_object_t *, audio_volume_t * ) );
190
 
#define aout_VolumeSet(a, b) __aout_VolumeSet(VLC_OBJECT(a), b)
191
 
VLC_EXPORT( int, __aout_VolumeSet, ( vlc_object_t *, audio_volume_t ) );
192
 
#define aout_VolumeInfos(a, b) __aout_VolumeInfos(VLC_OBJECT(a), b)
193
 
VLC_EXPORT( int, __aout_VolumeInfos, ( vlc_object_t *, audio_volume_t * ) );
194
 
#define aout_VolumeUp(a, b, c) __aout_VolumeUp(VLC_OBJECT(a), b, c)
195
 
VLC_EXPORT( int, __aout_VolumeUp, ( vlc_object_t *, int, audio_volume_t * ) );
196
 
#define aout_VolumeDown(a, b, c) __aout_VolumeDown(VLC_OBJECT(a), b, c)
197
 
VLC_EXPORT( int, __aout_VolumeDown, ( vlc_object_t *, int, audio_volume_t * ) );
198
 
#define aout_VolumeMute(a, b) __aout_VolumeMute(VLC_OBJECT(a), b)
199
 
VLC_EXPORT( int, __aout_VolumeMute, ( vlc_object_t *, audio_volume_t * ) );
200
 
VLC_EXPORT( int, aout_Restart, ( aout_instance_t * p_aout ) );
201
 
VLC_EXPORT( int, aout_FindAndRestart, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) );
202
 
VLC_EXPORT( int, aout_ChannelsRestart, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) );
203
 
 
204
 
#endif /* _VLC_AUDIO_OUTPUT_H */