You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
Remove all output devices
The libavformat API is not suitable for exporting output devices as muxers. Some practical problems are e.g. lack of timing/synchronization mechanisms or interaction with output-specific features.
This commit is contained in:
22
configure
vendored
22
configure
vendored
@@ -73,7 +73,6 @@ Help options:
|
|||||||
--list-protocols show all available protocols
|
--list-protocols show all available protocols
|
||||||
--list-bsfs show all available bitstream filters
|
--list-bsfs show all available bitstream filters
|
||||||
--list-indevs show all available input devices
|
--list-indevs show all available input devices
|
||||||
--list-outdevs show all available output devices
|
|
||||||
--list-filters show all available filters
|
--list-filters show all available filters
|
||||||
|
|
||||||
Standard options:
|
Standard options:
|
||||||
@@ -163,9 +162,6 @@ Individual component options:
|
|||||||
--enable-indev=NAME enable input device NAME
|
--enable-indev=NAME enable input device NAME
|
||||||
--disable-indev=NAME disable input device NAME
|
--disable-indev=NAME disable input device NAME
|
||||||
--disable-indevs disable input devices
|
--disable-indevs disable input devices
|
||||||
--enable-outdev=NAME enable output device NAME
|
|
||||||
--disable-outdev=NAME disable output device NAME
|
|
||||||
--disable-outdevs disable output devices
|
|
||||||
--disable-devices disable all devices
|
--disable-devices disable all devices
|
||||||
--enable-filter=NAME enable filter NAME
|
--enable-filter=NAME enable filter NAME
|
||||||
--disable-filter=NAME disable filter NAME
|
--disable-filter=NAME disable filter NAME
|
||||||
@@ -1224,7 +1220,6 @@ AVCODEC_COMPONENTS="
|
|||||||
|
|
||||||
AVDEVICE_COMPONENTS="
|
AVDEVICE_COMPONENTS="
|
||||||
indevs
|
indevs
|
||||||
outdevs
|
|
||||||
"
|
"
|
||||||
AVFILTER_COMPONENTS="
|
AVFILTER_COMPONENTS="
|
||||||
filters
|
filters
|
||||||
@@ -2433,9 +2428,8 @@ wtv_demuxer_select="mpegts_demuxer riffdec"
|
|||||||
xmv_demuxer_select="riffdec"
|
xmv_demuxer_select="riffdec"
|
||||||
xwma_demuxer_select="riffdec"
|
xwma_demuxer_select="riffdec"
|
||||||
|
|
||||||
# indevs / outdevs
|
# indevs
|
||||||
alsa_indev_deps="alsa"
|
alsa_indev_deps="alsa"
|
||||||
alsa_outdev_deps="alsa"
|
|
||||||
avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
|
avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
|
||||||
avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
|
avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
|
||||||
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
|
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
|
||||||
@@ -2447,10 +2441,8 @@ jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
|
|||||||
libcdio_indev_deps="libcdio"
|
libcdio_indev_deps="libcdio"
|
||||||
libdc1394_indev_deps="libdc1394"
|
libdc1394_indev_deps="libdc1394"
|
||||||
oss_indev_deps_any="sys_soundcard_h"
|
oss_indev_deps_any="sys_soundcard_h"
|
||||||
oss_outdev_deps_any="sys_soundcard_h"
|
|
||||||
pulse_indev_deps="libpulse"
|
pulse_indev_deps="libpulse"
|
||||||
sndio_indev_deps="sndio"
|
sndio_indev_deps="sndio"
|
||||||
sndio_outdev_deps="sndio"
|
|
||||||
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
|
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
|
||||||
vfwcap_indev_deps="vfw32 vfwcap_defines"
|
vfwcap_indev_deps="vfw32 vfwcap_defines"
|
||||||
xcbgrab_indev_deps="libxcb libxcb_shape"
|
xcbgrab_indev_deps="libxcb libxcb_shape"
|
||||||
@@ -2715,7 +2707,6 @@ HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
|
|||||||
PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
|
PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
|
||||||
MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
|
MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
|
||||||
DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
|
DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
|
||||||
OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
|
|
||||||
INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
|
INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
|
||||||
FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
|
FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
|
||||||
|
|
||||||
@@ -2739,7 +2730,6 @@ AVCODEC_COMPONENTS_LIST="
|
|||||||
|
|
||||||
AVDEVICE_COMPONENTS_LIST="
|
AVDEVICE_COMPONENTS_LIST="
|
||||||
$INDEV_LIST
|
$INDEV_LIST
|
||||||
$OUTDEV_LIST
|
|
||||||
"
|
"
|
||||||
|
|
||||||
AVFILTER_COMPONENTS_LIST="
|
AVFILTER_COMPONENTS_LIST="
|
||||||
@@ -2800,7 +2790,7 @@ for opt do
|
|||||||
add_extralibs $optval
|
add_extralibs $optval
|
||||||
;;
|
;;
|
||||||
--disable-devices)
|
--disable-devices)
|
||||||
disable $INDEV_LIST $OUTDEV_LIST
|
disable $INDEV_LIST
|
||||||
;;
|
;;
|
||||||
--enable-debug=*)
|
--enable-debug=*)
|
||||||
debuglevel="$optval"
|
debuglevel="$optval"
|
||||||
@@ -3906,7 +3896,6 @@ case $target_os in
|
|||||||
netbsd)
|
netbsd)
|
||||||
disable symver
|
disable symver
|
||||||
oss_indev_extralibs="-lossaudio"
|
oss_indev_extralibs="-lossaudio"
|
||||||
oss_outdev_extralibs="-lossaudio"
|
|
||||||
;;
|
;;
|
||||||
openbsd|bitrig)
|
openbsd|bitrig)
|
||||||
disable symver
|
disable symver
|
||||||
@@ -3914,7 +3903,6 @@ case $target_os in
|
|||||||
SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
|
SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
|
||||||
SLIB_INSTALL_LINKS=
|
SLIB_INSTALL_LINKS=
|
||||||
oss_indev_extralibs="-lossaudio"
|
oss_indev_extralibs="-lossaudio"
|
||||||
oss_outdev_extralibs="-lossaudio"
|
|
||||||
;;
|
;;
|
||||||
dragonfly)
|
dragonfly)
|
||||||
disable symver
|
disable symver
|
||||||
@@ -4789,13 +4777,13 @@ check_header "dev/bktr/ioctl_meteor.h dev/bktr/ioctl_bt848.h"
|
|||||||
|
|
||||||
check_header sys/soundcard.h
|
check_header sys/soundcard.h
|
||||||
|
|
||||||
enabled_any alsa_indev alsa_outdev &&
|
enabled alsa_indev &&
|
||||||
check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
|
check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
|
||||||
|
|
||||||
enabled libjack &&
|
enabled libjack &&
|
||||||
require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
|
require_pkg_config libjack jack jack/jack.h jack_port_get_latency_range
|
||||||
|
|
||||||
enabled_any sndio_indev sndio_outdev && check_lib sndio sndio.h sio_open -lsndio
|
enabled sndio_indev && check_lib sndio sndio.h sio_open -lsndio
|
||||||
|
|
||||||
if enabled libcdio; then
|
if enabled libcdio; then
|
||||||
check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
|
check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
|
||||||
@@ -5252,7 +5240,7 @@ echo "Programs:"
|
|||||||
print_enabled '' $PROGRAM_LIST | print_3_columns
|
print_enabled '' $PROGRAM_LIST | print_3_columns
|
||||||
echo
|
echo
|
||||||
|
|
||||||
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
|
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev; do
|
||||||
echo "Enabled ${type}s:"
|
echo "Enabled ${type}s:"
|
||||||
eval list=\$$(toupper $type)_LIST
|
eval list=\$$(toupper $type)_LIST
|
||||||
print_enabled '_*' $list | print_3_columns
|
print_enabled '_*' $list | print_3_columns
|
||||||
|
@@ -1264,7 +1264,6 @@ avconv -i src.ext -lmax 21*QP2LAMBDA dst.ext
|
|||||||
@include demuxers.texi
|
@include demuxers.texi
|
||||||
@include muxers.texi
|
@include muxers.texi
|
||||||
@include indevs.texi
|
@include indevs.texi
|
||||||
@include outdevs.texi
|
|
||||||
@include protocols.texi
|
@include protocols.texi
|
||||||
@include bitstream_filters.texi
|
@include bitstream_filters.texi
|
||||||
@include filters.texi
|
@include filters.texi
|
||||||
|
@@ -164,7 +164,6 @@ Seek to percentage in file corresponding to fraction of width.
|
|||||||
@include demuxers.texi
|
@include demuxers.texi
|
||||||
@include muxers.texi
|
@include muxers.texi
|
||||||
@include indevs.texi
|
@include indevs.texi
|
||||||
@include outdevs.texi
|
|
||||||
@include protocols.texi
|
@include protocols.texi
|
||||||
@include filters.texi
|
@include filters.texi
|
||||||
|
|
||||||
|
@@ -1,33 +0,0 @@
|
|||||||
@chapter Output Devices
|
|
||||||
@c man begin OUTPUT DEVICES
|
|
||||||
|
|
||||||
Output devices are configured elements in Libav which allow to write
|
|
||||||
multimedia data to an output device attached to your system.
|
|
||||||
|
|
||||||
When you configure your Libav build, all the supported output devices
|
|
||||||
are enabled by default. You can list all available ones using the
|
|
||||||
configure option "--list-outdevs".
|
|
||||||
|
|
||||||
You can disable all the output devices using the configure option
|
|
||||||
"--disable-outdevs", and selectively enable an output device using the
|
|
||||||
option "--enable-outdev=@var{OUTDEV}", or you can disable a particular
|
|
||||||
input device using the option "--disable-outdev=@var{OUTDEV}".
|
|
||||||
|
|
||||||
The option "-formats" of the av* tools will display the list of
|
|
||||||
enabled output devices (amongst the muxers).
|
|
||||||
|
|
||||||
A description of the currently available output devices follows.
|
|
||||||
|
|
||||||
@section alsa
|
|
||||||
|
|
||||||
ALSA (Advanced Linux Sound Architecture) output device.
|
|
||||||
|
|
||||||
@section oss
|
|
||||||
|
|
||||||
OSS (Open Sound System) output device.
|
|
||||||
|
|
||||||
@section sndio
|
|
||||||
|
|
||||||
sndio audio output device.
|
|
||||||
|
|
||||||
@c man end OUTPUT DEVICES
|
|
@@ -9,19 +9,16 @@ OBJS = alldevices.o \
|
|||||||
|
|
||||||
OBJS-$(HAVE_LIBC_MSVCRT) += file_open.o
|
OBJS-$(HAVE_LIBC_MSVCRT) += file_open.o
|
||||||
|
|
||||||
# input/output devices
|
# input devices
|
||||||
OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o
|
OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o
|
||||||
OBJS-$(CONFIG_ALSA_OUTDEV) += alsa_enc.o alsa.o
|
|
||||||
OBJS-$(CONFIG_AVFOUNDATION_INDEV) += avfoundation_dec.o
|
OBJS-$(CONFIG_AVFOUNDATION_INDEV) += avfoundation_dec.o
|
||||||
OBJS-$(CONFIG_BKTR_INDEV) += bktr.o
|
OBJS-$(CONFIG_BKTR_INDEV) += bktr.o
|
||||||
OBJS-$(CONFIG_DV1394_INDEV) += dv1394.o
|
OBJS-$(CONFIG_DV1394_INDEV) += dv1394.o
|
||||||
OBJS-$(CONFIG_FBDEV_INDEV) += fbdev.o
|
OBJS-$(CONFIG_FBDEV_INDEV) += fbdev.o
|
||||||
OBJS-$(CONFIG_JACK_INDEV) += jack.o timefilter.o
|
OBJS-$(CONFIG_JACK_INDEV) += jack.o timefilter.o
|
||||||
OBJS-$(CONFIG_OSS_INDEV) += oss_dec.o oss.o
|
OBJS-$(CONFIG_OSS_INDEV) += oss_dec.o oss.o
|
||||||
OBJS-$(CONFIG_OSS_OUTDEV) += oss_enc.o oss.o
|
|
||||||
OBJS-$(CONFIG_PULSE_INDEV) += pulse.o
|
OBJS-$(CONFIG_PULSE_INDEV) += pulse.o
|
||||||
OBJS-$(CONFIG_SNDIO_INDEV) += sndio_dec.o sndio.o
|
OBJS-$(CONFIG_SNDIO_INDEV) += sndio_dec.o sndio.o
|
||||||
OBJS-$(CONFIG_SNDIO_OUTDEV) += sndio_enc.o sndio.o
|
|
||||||
OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o
|
OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o
|
||||||
OBJS-$(CONFIG_VFWCAP_INDEV) += vfwcap.o
|
OBJS-$(CONFIG_VFWCAP_INDEV) += vfwcap.o
|
||||||
OBJS-$(CONFIG_XCBGRAB_INDEV) += xcbgrab.o
|
OBJS-$(CONFIG_XCBGRAB_INDEV) += xcbgrab.o
|
||||||
|
@@ -22,13 +22,6 @@
|
|||||||
#include "libavformat/avformat.h"
|
#include "libavformat/avformat.h"
|
||||||
#include "avdevice.h"
|
#include "avdevice.h"
|
||||||
|
|
||||||
#define REGISTER_OUTDEV(X, x) \
|
|
||||||
{ \
|
|
||||||
extern AVOutputFormat ff_##x##_muxer; \
|
|
||||||
if (CONFIG_##X##_OUTDEV) \
|
|
||||||
av_register_output_format(&ff_##x##_muxer); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define REGISTER_INDEV(X, x) \
|
#define REGISTER_INDEV(X, x) \
|
||||||
{ \
|
{ \
|
||||||
extern AVInputFormat ff_##x##_demuxer; \
|
extern AVInputFormat ff_##x##_demuxer; \
|
||||||
@@ -36,8 +29,6 @@
|
|||||||
av_register_input_format(&ff_##x##_demuxer); \
|
av_register_input_format(&ff_##x##_demuxer); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define REGISTER_INOUTDEV(X, x) REGISTER_OUTDEV(X, x); REGISTER_INDEV(X, x)
|
|
||||||
|
|
||||||
void avdevice_register_all(void)
|
void avdevice_register_all(void)
|
||||||
{
|
{
|
||||||
static int initialized;
|
static int initialized;
|
||||||
@@ -46,21 +37,21 @@ void avdevice_register_all(void)
|
|||||||
return;
|
return;
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
|
|
||||||
/* devices */
|
/* input devices */
|
||||||
REGISTER_INOUTDEV(ALSA, alsa);
|
REGISTER_INDEV(ALSA, alsa);
|
||||||
REGISTER_INDEV (AVFOUNDATION, avfoundation);
|
REGISTER_INDEV(AVFOUNDATION, avfoundation);
|
||||||
REGISTER_INDEV (BKTR, bktr);
|
REGISTER_INDEV(BKTR, bktr);
|
||||||
REGISTER_INDEV (DV1394, dv1394);
|
REGISTER_INDEV(DV1394, dv1394);
|
||||||
REGISTER_INDEV (FBDEV, fbdev);
|
REGISTER_INDEV(FBDEV, fbdev);
|
||||||
REGISTER_INDEV (JACK, jack);
|
REGISTER_INDEV(JACK, jack);
|
||||||
REGISTER_INOUTDEV(OSS, oss);
|
REGISTER_INDEV(OSS, oss);
|
||||||
REGISTER_INDEV (PULSE, pulse);
|
REGISTER_INDEV(PULSE, pulse);
|
||||||
REGISTER_INOUTDEV(SNDIO, sndio);
|
REGISTER_INDEV(SNDIO, sndio);
|
||||||
REGISTER_INDEV (V4L2, v4l2);
|
REGISTER_INDEV(V4L2, v4l2);
|
||||||
REGISTER_INDEV (VFWCAP, vfwcap);
|
REGISTER_INDEV(VFWCAP, vfwcap);
|
||||||
REGISTER_INDEV (XCBGRAB, xcbgrab);
|
REGISTER_INDEV(XCBGRAB, xcbgrab);
|
||||||
|
|
||||||
/* external libraries */
|
/* external libraries */
|
||||||
REGISTER_INDEV (LIBCDIO, libcdio);
|
REGISTER_INDEV(LIBCDIO, libcdio);
|
||||||
REGISTER_INDEV (LIBDC1394, libdc1394);
|
REGISTER_INDEV(LIBDC1394, libdc1394);
|
||||||
}
|
}
|
||||||
|
@@ -344,19 +344,3 @@ int ff_alsa_xrun_recover(AVFormatContext *s1, int err)
|
|||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_alsa_extend_reorder_buf(AlsaData *s, int min_size)
|
|
||||||
{
|
|
||||||
int size = s->reorder_buf_size;
|
|
||||||
void *r;
|
|
||||||
|
|
||||||
av_assert0(size != 0);
|
|
||||||
while (size < min_size)
|
|
||||||
size *= 2;
|
|
||||||
r = av_realloc(s->reorder_buf, size * s->frame_size);
|
|
||||||
if (!r)
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
s->reorder_buf = r;
|
|
||||||
s->reorder_buf_size = size;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
@@ -91,6 +91,4 @@ int ff_alsa_close(AVFormatContext *s1);
|
|||||||
*/
|
*/
|
||||||
int ff_alsa_xrun_recover(AVFormatContext *s1, int err);
|
int ff_alsa_xrun_recover(AVFormatContext *s1, int err);
|
||||||
|
|
||||||
int ff_alsa_extend_reorder_buf(AlsaData *s, int size);
|
|
||||||
|
|
||||||
#endif /* AVDEVICE_ALSA_H */
|
#endif /* AVDEVICE_ALSA_H */
|
||||||
|
@@ -1,117 +0,0 @@
|
|||||||
/*
|
|
||||||
* ALSA input and output
|
|
||||||
* Copyright (c) 2007 Luca Abeni ( lucabe72 email it )
|
|
||||||
* Copyright (c) 2007 Benoit Fouet ( benoit fouet free fr )
|
|
||||||
*
|
|
||||||
* This file is part of Libav.
|
|
||||||
*
|
|
||||||
* Libav is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Libav is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with Libav; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* ALSA input and output: output
|
|
||||||
* @author Luca Abeni ( lucabe72 email it )
|
|
||||||
* @author Benoit Fouet ( benoit fouet free fr )
|
|
||||||
*
|
|
||||||
* This avdevice encoder allows to play audio to an ALSA (Advanced Linux
|
|
||||||
* Sound Architecture) device.
|
|
||||||
*
|
|
||||||
* The filename parameter is the name of an ALSA PCM device capable of
|
|
||||||
* capture, for example "default" or "plughw:1"; see the ALSA documentation
|
|
||||||
* for naming conventions. The empty string is equivalent to "default".
|
|
||||||
*
|
|
||||||
* The playback period is set to the lower value available for the device,
|
|
||||||
* which gives a low latency suitable for real-time playback.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <alsa/asoundlib.h>
|
|
||||||
|
|
||||||
#include "libavutil/internal.h"
|
|
||||||
|
|
||||||
#include "libavformat/avformat.h"
|
|
||||||
|
|
||||||
#include "alsa.h"
|
|
||||||
|
|
||||||
static av_cold int audio_write_header(AVFormatContext *s1)
|
|
||||||
{
|
|
||||||
AlsaData *s = s1->priv_data;
|
|
||||||
AVStream *st;
|
|
||||||
unsigned int sample_rate;
|
|
||||||
enum AVCodecID codec_id;
|
|
||||||
int res;
|
|
||||||
|
|
||||||
st = s1->streams[0];
|
|
||||||
sample_rate = st->codecpar->sample_rate;
|
|
||||||
codec_id = st->codecpar->codec_id;
|
|
||||||
res = ff_alsa_open(s1, SND_PCM_STREAM_PLAYBACK, &sample_rate,
|
|
||||||
st->codecpar->channels, &codec_id);
|
|
||||||
if (sample_rate != st->codecpar->sample_rate) {
|
|
||||||
av_log(s1, AV_LOG_ERROR,
|
|
||||||
"sample rate %d not available, nearest is %d\n",
|
|
||||||
st->codecpar->sample_rate, sample_rate);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
snd_pcm_close(s->h);
|
|
||||||
return AVERROR(EIO);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt)
|
|
||||||
{
|
|
||||||
AlsaData *s = s1->priv_data;
|
|
||||||
int res;
|
|
||||||
int size = pkt->size;
|
|
||||||
uint8_t *buf = pkt->data;
|
|
||||||
|
|
||||||
size /= s->frame_size;
|
|
||||||
if (s->reorder_func) {
|
|
||||||
if (size > s->reorder_buf_size)
|
|
||||||
if (ff_alsa_extend_reorder_buf(s, size))
|
|
||||||
return AVERROR(ENOMEM);
|
|
||||||
s->reorder_func(buf, s->reorder_buf, size);
|
|
||||||
buf = s->reorder_buf;
|
|
||||||
}
|
|
||||||
while ((res = snd_pcm_writei(s->h, buf, size)) < 0) {
|
|
||||||
if (res == -EAGAIN) {
|
|
||||||
|
|
||||||
return AVERROR(EAGAIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ff_alsa_xrun_recover(s1, res) < 0) {
|
|
||||||
av_log(s1, AV_LOG_ERROR, "ALSA write error: %s\n",
|
|
||||||
snd_strerror(res));
|
|
||||||
|
|
||||||
return AVERROR(EIO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AVOutputFormat ff_alsa_muxer = {
|
|
||||||
.name = "alsa",
|
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("ALSA audio output"),
|
|
||||||
.priv_data_size = sizeof(AlsaData),
|
|
||||||
.audio_codec = DEFAULT_CODEC_ID,
|
|
||||||
.video_codec = AV_CODEC_ID_NONE,
|
|
||||||
.write_header = audio_write_header,
|
|
||||||
.write_packet = audio_write_packet,
|
|
||||||
.write_trailer = ff_alsa_close,
|
|
||||||
.flags = AVFMT_NOFILE,
|
|
||||||
};
|
|
@@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
* Linux audio grab interface
|
|
||||||
* Copyright (c) 2000, 2001 Fabrice Bellard
|
|
||||||
*
|
|
||||||
* This file is part of Libav.
|
|
||||||
*
|
|
||||||
* Libav is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Libav is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with Libav; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#if HAVE_SOUNDCARD_H
|
|
||||||
#include <soundcard.h>
|
|
||||||
#else
|
|
||||||
#include <sys/soundcard.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
#include "libavutil/internal.h"
|
|
||||||
|
|
||||||
#include "libavcodec/avcodec.h"
|
|
||||||
|
|
||||||
#include "libavformat/avformat.h"
|
|
||||||
#include "libavformat/internal.h"
|
|
||||||
|
|
||||||
#include "oss.h"
|
|
||||||
|
|
||||||
static int audio_write_header(AVFormatContext *s1)
|
|
||||||
{
|
|
||||||
OSSAudioData *s = s1->priv_data;
|
|
||||||
AVStream *st;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
st = s1->streams[0];
|
|
||||||
s->sample_rate = st->codecpar->sample_rate;
|
|
||||||
s->channels = st->codecpar->channels;
|
|
||||||
ret = ff_oss_audio_open(s1, 1, s1->filename);
|
|
||||||
if (ret < 0) {
|
|
||||||
return AVERROR(EIO);
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt)
|
|
||||||
{
|
|
||||||
OSSAudioData *s = s1->priv_data;
|
|
||||||
int len, ret;
|
|
||||||
int size= pkt->size;
|
|
||||||
uint8_t *buf= pkt->data;
|
|
||||||
|
|
||||||
while (size > 0) {
|
|
||||||
len = FFMIN(OSS_AUDIO_BLOCK_SIZE - s->buffer_ptr, size);
|
|
||||||
memcpy(s->buffer + s->buffer_ptr, buf, len);
|
|
||||||
s->buffer_ptr += len;
|
|
||||||
if (s->buffer_ptr >= OSS_AUDIO_BLOCK_SIZE) {
|
|
||||||
for(;;) {
|
|
||||||
ret = write(s->fd, s->buffer, OSS_AUDIO_BLOCK_SIZE);
|
|
||||||
if (ret > 0)
|
|
||||||
break;
|
|
||||||
if (ret < 0 && (errno != EAGAIN && errno != EINTR))
|
|
||||||
return AVERROR(EIO);
|
|
||||||
}
|
|
||||||
s->buffer_ptr = 0;
|
|
||||||
}
|
|
||||||
buf += len;
|
|
||||||
size -= len;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int audio_write_trailer(AVFormatContext *s1)
|
|
||||||
{
|
|
||||||
OSSAudioData *s = s1->priv_data;
|
|
||||||
|
|
||||||
ff_oss_audio_close(s);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AVOutputFormat ff_oss_muxer = {
|
|
||||||
.name = "oss",
|
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("OSS (Open Sound System) playback"),
|
|
||||||
.priv_data_size = sizeof(OSSAudioData),
|
|
||||||
/* XXX: we make the assumption that the soundcard accepts this format */
|
|
||||||
/* XXX: find better solution with "preinit" method, needed also in
|
|
||||||
other formats */
|
|
||||||
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
|
|
||||||
.video_codec = AV_CODEC_ID_NONE,
|
|
||||||
.write_header = audio_write_header,
|
|
||||||
.write_packet = audio_write_packet,
|
|
||||||
.write_trailer = audio_write_trailer,
|
|
||||||
.flags = AVFMT_NOFILE,
|
|
||||||
};
|
|
@@ -1,95 +0,0 @@
|
|||||||
/*
|
|
||||||
* sndio play and grab interface
|
|
||||||
* Copyright (c) 2010 Jacob Meuser
|
|
||||||
*
|
|
||||||
* This file is part of Libav.
|
|
||||||
*
|
|
||||||
* Libav is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Libav is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with Libav; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <sndio.h>
|
|
||||||
|
|
||||||
#include "libavutil/internal.h"
|
|
||||||
|
|
||||||
#include "libavformat/avformat.h"
|
|
||||||
|
|
||||||
#include "libavdevice/sndio.h"
|
|
||||||
|
|
||||||
static av_cold int audio_write_header(AVFormatContext *s1)
|
|
||||||
{
|
|
||||||
SndioData *s = s1->priv_data;
|
|
||||||
AVStream *st;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
st = s1->streams[0];
|
|
||||||
s->sample_rate = st->codecpar->sample_rate;
|
|
||||||
s->channels = st->codecpar->channels;
|
|
||||||
|
|
||||||
ret = ff_sndio_open(s1, 1, s1->filename);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt)
|
|
||||||
{
|
|
||||||
SndioData *s = s1->priv_data;
|
|
||||||
uint8_t *buf= pkt->data;
|
|
||||||
int size = pkt->size;
|
|
||||||
int len, ret;
|
|
||||||
|
|
||||||
while (size > 0) {
|
|
||||||
len = FFMIN(s->buffer_size - s->buffer_offset, size);
|
|
||||||
memcpy(s->buffer + s->buffer_offset, buf, len);
|
|
||||||
buf += len;
|
|
||||||
size -= len;
|
|
||||||
s->buffer_offset += len;
|
|
||||||
if (s->buffer_offset >= s->buffer_size) {
|
|
||||||
ret = sio_write(s->hdl, s->buffer, s->buffer_size);
|
|
||||||
if (ret == 0 || sio_eof(s->hdl))
|
|
||||||
return AVERROR(EIO);
|
|
||||||
s->softpos += ret;
|
|
||||||
s->buffer_offset = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int audio_write_trailer(AVFormatContext *s1)
|
|
||||||
{
|
|
||||||
SndioData *s = s1->priv_data;
|
|
||||||
|
|
||||||
sio_write(s->hdl, s->buffer, s->buffer_offset);
|
|
||||||
|
|
||||||
ff_sndio_close(s);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AVOutputFormat ff_sndio_muxer = {
|
|
||||||
.name = "sndio",
|
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("sndio audio playback"),
|
|
||||||
.priv_data_size = sizeof(SndioData),
|
|
||||||
/* XXX: we make the assumption that the soundcard accepts this format */
|
|
||||||
/* XXX: find better solution with "preinit" method, needed also in
|
|
||||||
other formats */
|
|
||||||
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
|
|
||||||
.video_codec = AV_CODEC_ID_NONE,
|
|
||||||
.write_header = audio_write_header,
|
|
||||||
.write_packet = audio_write_packet,
|
|
||||||
.write_trailer = audio_write_trailer,
|
|
||||||
.flags = AVFMT_NOFILE,
|
|
||||||
};
|
|
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
#define LIBAVDEVICE_VERSION_MAJOR 57
|
#define LIBAVDEVICE_VERSION_MAJOR 57
|
||||||
#define LIBAVDEVICE_VERSION_MINOR 0
|
#define LIBAVDEVICE_VERSION_MINOR 0
|
||||||
#define LIBAVDEVICE_VERSION_MICRO 0
|
#define LIBAVDEVICE_VERSION_MICRO 1
|
||||||
|
|
||||||
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
|
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
|
||||||
LIBAVDEVICE_VERSION_MINOR, \
|
LIBAVDEVICE_VERSION_MINOR, \
|
||||||
|
Reference in New Issue
Block a user