X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavdevice%2Falsa-audio-enc.c;h=fd013160d6225b10a6537522b65bcb44c570e3b3;hb=39f59a8da7f024532b0d62ad429a7a8ffaa2d631;hp=0bc53b6f54fb61d0ba3ded32c7cc32386dd7dbaa;hpb=01a73d6cef70dfa90fdf79f7afd55b817b4c9342;p=ffmpeg diff --git a/libavdevice/alsa-audio-enc.c b/libavdevice/alsa-audio-enc.c index 0bc53b6f54f..fd013160d62 100644 --- a/libavdevice/alsa-audio-enc.c +++ b/libavdevice/alsa-audio-enc.c @@ -38,8 +38,9 @@ */ #include -#include "libavformat/avformat.h" +#include "libavformat/internal.h" +#include "avdevice.h" #include "alsa-audio.h" static av_cold int audio_write_header(AVFormatContext *s1) @@ -61,6 +62,7 @@ static av_cold int audio_write_header(AVFormatContext *s1) st->codec->sample_rate, sample_rate); goto fail; } + avpriv_set_pts_info(st, 64, 1, sample_rate); return res; @@ -101,16 +103,26 @@ static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt) return 0; } +static void +audio_get_output_timestamp(AVFormatContext *s1, int stream, + int64_t *dts, int64_t *wall) +{ + AlsaData *s = s1->priv_data; + snd_pcm_sframes_t delay = 0; + *wall = av_gettime(); + snd_pcm_delay(s->h, &delay); + *dts = s1->streams[0]->cur_dts - delay; +} + AVOutputFormat ff_alsa_muxer = { - "alsa", - NULL_IF_CONFIG_SMALL("ALSA audio output"), - "", - "", - sizeof(AlsaData), - DEFAULT_CODEC_ID, - CODEC_ID_NONE, - audio_write_header, - audio_write_packet, - ff_alsa_close, - .flags = AVFMT_NOFILE, + .name = "alsa", + .long_name = NULL_IF_CONFIG_SMALL("ALSA audio output"), + .priv_data_size = sizeof(AlsaData), + .audio_codec = DEFAULT_CODEC_ID, + .video_codec = CODEC_ID_NONE, + .write_header = audio_write_header, + .write_packet = audio_write_packet, + .write_trailer = ff_alsa_close, + .get_output_timestamp = audio_get_output_timestamp, + .flags = AVFMT_NOFILE, };