diff options
Diffstat (limited to 'chromium/third_party/ffmpeg/libavdevice/alsa-audio-enc.c')
-rw-r--r-- | chromium/third_party/ffmpeg/libavdevice/alsa-audio-enc.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/chromium/third_party/ffmpeg/libavdevice/alsa-audio-enc.c b/chromium/third_party/ffmpeg/libavdevice/alsa-audio-enc.c index 83e1d2f85f0..e42cc8f5186 100644 --- a/chromium/third_party/ffmpeg/libavdevice/alsa-audio-enc.c +++ b/chromium/third_party/ffmpeg/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) @@ -124,6 +142,13 @@ audio_get_output_timestamp(AVFormatContext *s1, int stream, *dts = s->timestamp - delay; } +static const AVClass alsa_muxer_class = { + .class_name = "ALSA muxer", + .item_name = av_default_item_name, + .version = LIBAVUTIL_VERSION_INT, + .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, +}; + AVOutputFormat ff_alsa_muxer = { .name = "alsa", .long_name = NULL_IF_CONFIG_SMALL("ALSA audio output"), @@ -133,6 +158,8 @@ 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, + .priv_class = &alsa_muxer_class, }; |