X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavdevice%2Falsa-audio-enc.c;h=83e1d2f85f0b83cafcd011557c04b17cb87f31ba;hb=d67d3e29779ac113fbf806754ef9398e52cd288b;hp=0f4e4a2c7a402d1bd006816ddae0d98dfb6717d1;hpb=382545ae62ca2cd5ae75b4e951e7ad659e3cc5fb;p=ffmpeg diff --git a/libavdevice/alsa-audio-enc.c b/libavdevice/alsa-audio-enc.c index 0f4e4a2c7a4..83e1d2f85f0 100644 --- a/libavdevice/alsa-audio-enc.c +++ b/libavdevice/alsa-audio-enc.c @@ -47,12 +47,17 @@ static av_cold int audio_write_header(AVFormatContext *s1) { AlsaData *s = s1->priv_data; - AVStream *st; + AVStream *st = NULL; unsigned int sample_rate; enum AVCodecID codec_id; int res; + if (s1->nb_streams != 1 || s1->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO) { + av_log(s1, AV_LOG_ERROR, "Only a single audio stream is supported.\n"); + return AVERROR(EINVAL); + } st = s1->streams[0]; + sample_rate = st->codec->sample_rate; codec_id = st->codec->codec_id; res = ff_alsa_open(s1, SND_PCM_STREAM_PLAYBACK, &sample_rate, @@ -80,6 +85,10 @@ static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt) uint8_t *buf = pkt->data; size /= s->frame_size; + if (pkt->dts != AV_NOPTS_VALUE) + s->timestamp = pkt->dts; + s->timestamp += pkt->duration ? pkt->duration : size; + if (s->reorder_func) { if (size > s->reorder_buf_size) if (ff_alsa_extend_reorder_buf(s, size)) @@ -112,7 +121,7 @@ audio_get_output_timestamp(AVFormatContext *s1, int stream, snd_pcm_sframes_t delay = 0; *wall = av_gettime(); snd_pcm_delay(s->h, &delay); - *dts = s1->streams[0]->cur_dts - delay; + *dts = s->timestamp - delay; } AVOutputFormat ff_alsa_muxer = {