~ubuntu-branches/ubuntu/edgy/gstreamer0.10-ffmpeg/edgy

« back to all changes in this revision

Viewing changes to gst-libs/ext/ffmpeg/libavformat/audio.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2006-04-01 16:13:43 UTC
  • mto: This revision was merged to the branch mainline in revision 5.
  • Revision ID: james.westby@ubuntu.com-20060401161343-n621cgjlujio0otg
Tags: upstream-0.10.1
Import upstream version 0.10.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
 *
15
15
 * You should have received a copy of the GNU Lesser General Public
16
16
 * License along with this library; if not, write to the Free Software
17
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
 */
19
19
#include "avformat.h"
20
20
 
54
54
    /* open linux audio device */
55
55
    if (!audio_device)
56
56
#ifdef __OpenBSD__
57
 
        audio_device = "/dev/sound";
 
57
        audio_device = "/dev/sound";
58
58
#else
59
59
        audio_device = "/dev/dsp";
60
60
#endif
87
87
 
88
88
    /* select format : favour native format */
89
89
    err = ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &tmp);
90
 
    
 
90
 
91
91
#ifdef WORDS_BIGENDIAN
92
92
    if (tmp & AFMT_S16_BE) {
93
93
        tmp = AFMT_S16_BE;
123
123
        perror("SNDCTL_DSP_SETFMT");
124
124
        goto fail;
125
125
    }
126
 
    
 
126
 
127
127
    tmp = (s->channels == 2);
128
128
    err = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp);
129
129
    if (err < 0) {
132
132
    }
133
133
    if (tmp)
134
134
        s->channels = 2;
135
 
    
 
135
 
136
136
    tmp = s->sample_rate;
137
137
    err = ioctl(audio_fd, SNDCTL_DSP_SPEED, &tmp);
138
138
    if (err < 0) {
239
239
    st->codec->sample_rate = s->sample_rate;
240
240
    st->codec->channels = s->channels;
241
241
 
242
 
    av_set_pts_info(st, 48, 1, 1000000);  /* 48 bits pts in us */
 
242
    av_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
243
243
    return 0;
244
244
}
245
245
 
249
249
    int ret, bdelay;
250
250
    int64_t cur_time;
251
251
    struct audio_buf_info abufi;
252
 
    
 
252
 
253
253
    if (av_new_packet(pkt, s->frame_size) < 0)
254
254
        return AVERROR_IO;
255
255
    for(;;) {
271
271
        if (ret == -1 && (errno == EAGAIN || errno == EINTR)) {
272
272
            av_free_packet(pkt);
273
273
            pkt->size = 0;
274
 
            pkt->pts = av_gettime() & ((1LL << 48) - 1);
 
274
            pkt->pts = av_gettime();
275
275
            return 0;
276
276
        }
277
277
        if (!(ret == 0 || (ret == -1 && (errno == EAGAIN || errno == EINTR)))) {
291
291
    cur_time -= (bdelay * 1000000LL) / (s->sample_rate * s->channels);
292
292
 
293
293
    /* convert to wanted units */
294
 
    pkt->pts = cur_time & ((1LL << 48) - 1);
 
294
    pkt->pts = cur_time;
295
295
 
296
296
    if (s->flip_left && s->channels == 2) {
297
297
        int i;