From 62106fcc23cf52f8e44be572b58c3bb50f598763 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Tue, 31 Dec 2013 14:09:15 +0100 Subject: lavd/alsa: preliminary support of uncoded frame. --- libavdevice/alsa-audio-enc.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'libavdevice') diff --git a/libavdevice/alsa-audio-enc.c b/libavdevice/alsa-audio-enc.c index 83e1d2f85f..bf56fc46d7 100644 --- a/libavdevice/alsa-audio-enc.c +++ b/libavdevice/alsa-audio-enc.c @@ -113,6 +113,24 @@ static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt) return 0; } +static int audio_write_frame(AVFormatContext *s1, int stream_index, + AVFrame **frame, unsigned flags) +{ + AlsaData *s = s1->priv_data; + AVPacket pkt; + + /* ff_alsa_open() should have accepted only supported formats */ + if ((flags & AV_WRITE_UNCODED_FRAME_QUERY)) + return av_sample_fmt_is_planar(s1->streams[stream_index]->codec->sample_fmt) ? + AVERROR(EINVAL) : 0; + /* set only used fields */ + pkt.data = (*frame)->data[0]; + pkt.size = (*frame)->nb_samples * s->frame_size; + pkt.dts = (*frame)->pkt_dts; + pkt.duration = av_frame_get_pkt_duration(*frame); + return audio_write_packet(s1, &pkt); +} + static void audio_get_output_timestamp(AVFormatContext *s1, int stream, int64_t *dts, int64_t *wall) @@ -133,6 +151,7 @@ AVOutputFormat ff_alsa_muxer = { .write_header = audio_write_header, .write_packet = audio_write_packet, .write_trailer = ff_alsa_close, + .write_uncoded_frame = audio_write_frame, .get_output_timestamp = audio_get_output_timestamp, .flags = AVFMT_NOFILE, }; -- cgit v1.2.3