mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-07-27 08:48:19 +00:00
configure.ac: Fix configure check for mpeg2enc. We need 1.6.1.93 instead of 1.6.1.92, since the pkg-config file of 1....
Original commit message from CVS: 2004-01-01 Ronald Bultje <rbultje@ronald.bitfreak.net> * configure.ac: Fix configure check for mpeg2enc. We need 1.6.1.93 instead of 1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and it therefore uses the wrong include paths. Too bad... Note that 1.6.1.93 is not release yet. ;). Also add a check for mplex, which is now using the lib'ified mplex from mjpegtools, too. * ext/ffmpeg/gstffmpegcodecmap.c: Add codec_tag for 3ivx/xvid. For xvid, this should fix playback issues. I don't think ffmpeg handles 3ivx correctly, so this probably won't work. But it won't hurt either. * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect), (gst_ffmpegdec_chain): * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect), (gst_ffmpegenc_chain_audio): Fix memleak in audio encoding. Close codec if open fails, this calls the cleanup routines so we can re-use the context. * ext/mpeg2enc/gstmpeg2enc.cc: Fix pad template names/types, fix memory issue with getcaps(). * ext/mpeg2enc/gstmpeg2encoder.cc: * ext/mpeg2enc/gstmpeg2encoder.hh: Fix compile issue with new caps system (const thingy). * ext/mpeg2enc/gstmpeg2encpicturereader.cc: * ext/mpeg2enc/gstmpeg2encpicturereader.hh: We read a first frame right on initing, so that we have a caps when we init the output. This caps is cached in padprivate and read as first frame. * ext/mplex/Makefile.am: * ext/mplex/gstmplex.cc: * ext/mplex/gstmplex.h: * ext/mplex/gstmplex.hh: * ext/mplex/gstmplexibitstream.cc: * ext/mplex/gstmplexibitstream.hh: * ext/mplex/gstmplexjob.cc: * ext/mplex/gstmplexjob.hh: * ext/mplex/gstmplexoutputstream.cc: * ext/mplex/gstmplexoutputstream.hh: We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin had issues, didn't do capsnego, supported only a subset of the mplex features and required a mplex fork in our local CVS. Plus that it worked agaist a very old mplex version. Rewriting was faster than updating it. * gst-libs/ext/Makefile.am: * gst-libs/ext/mplex/INSTRUCT: * gst-libs/ext/mplex/Makefile.am: * gst-libs/ext/mplex/README: * gst-libs/ext/mplex/TODO: * gst-libs/ext/mplex/ac3strm_in.cc: * gst-libs/ext/mplex/audiostrm.hh: * gst-libs/ext/mplex/audiostrm_out.cc: * gst-libs/ext/mplex/aunit.hh: * gst-libs/ext/mplex/bits.cc: * gst-libs/ext/mplex/bits.hh: * gst-libs/ext/mplex/buffer.cc: * gst-libs/ext/mplex/buffer.hh: * gst-libs/ext/mplex/fastintfns.h: * gst-libs/ext/mplex/format_codes.h: * gst-libs/ext/mplex/inputstrm.cc: * gst-libs/ext/mplex/inputstrm.hh: * gst-libs/ext/mplex/lpcmstrm_in.cc: * gst-libs/ext/mplex/mjpeg_logging.cc: * gst-libs/ext/mplex/mjpeg_logging.h: * gst-libs/ext/mplex/mjpeg_types.h: * gst-libs/ext/mplex/mpastrm_in.cc: * gst-libs/ext/mplex/mpegconsts.cc: * gst-libs/ext/mplex/mpegconsts.h: * gst-libs/ext/mplex/mplexconsts.hh: * gst-libs/ext/mplex/multplex.cc: * gst-libs/ext/mplex/outputstream.hh: * gst-libs/ext/mplex/padstrm.cc: * gst-libs/ext/mplex/padstrm.hh: * gst-libs/ext/mplex/stillsstream.cc: * gst-libs/ext/mplex/stillsstream.hh: * gst-libs/ext/mplex/systems.cc: * gst-libs/ext/mplex/systems.hh: * gst-libs/ext/mplex/vector.cc: * gst-libs/ext/mplex/vector.hh: * gst-libs/ext/mplex/videostrm.hh: * gst-libs/ext/mplex/videostrm_in.cc: * gst-libs/ext/mplex/videostrm_out.cc: * gst-libs/ext/mplex/yuv4mpeg.cc: * gst-libs/ext/mplex/yuv4mpeg.h: * gst-libs/ext/mplex/yuv4mpeg_intern.h: * gst-libs/ext/mplex/yuv4mpeg_ratio.cc: We don't fork mjpegtools' mplex in our CVS anymore. * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps), (gst_avi_demux_add_stream): * gst/avi/gstavidemux.h: Add getcaps() function for proper caps nego. This makes some parts of AVI playback/reading work. * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect): Resize window on new capsnego. This is probably wrong, but I'm still committing it because with current capsnego, the first successfull capsnego is auto-fixated, therefore rounded down to the lowest values in the caps. this results in a 16x16 XWindow that is not reized when real capsnego finishes. Dave, I see more cases of this, do you know a proper solution? * tools/gst-launch-ext.in: Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline.
This commit is contained in:
parent
079a91cc80
commit
39a338d51c
102
ChangeLog
102
ChangeLog
|
@ -1,3 +1,105 @@
|
||||||
|
2004-01-01 Ronald Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
||||||
|
* configure.ac:
|
||||||
|
Fix configure check for mpeg2enc. We need 1.6.1.93 instead of
|
||||||
|
1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and
|
||||||
|
it therefore uses the wrong include paths. Too bad... Note
|
||||||
|
that 1.6.1.93 is not release yet. ;).
|
||||||
|
Also add a check for mplex, which is now using the lib'ified
|
||||||
|
mplex from mjpegtools, too.
|
||||||
|
* ext/ffmpeg/gstffmpegcodecmap.c:
|
||||||
|
Add codec_tag for 3ivx/xvid. For xvid, this should fix playback
|
||||||
|
issues. I don't think ffmpeg handles 3ivx correctly, so this
|
||||||
|
probably won't work. But it won't hurt either.
|
||||||
|
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect),
|
||||||
|
(gst_ffmpegdec_chain):
|
||||||
|
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect),
|
||||||
|
(gst_ffmpegenc_chain_audio):
|
||||||
|
Fix memleak in audio encoding. Close codec if open fails, this
|
||||||
|
calls the cleanup routines so we can re-use the context.
|
||||||
|
* ext/mpeg2enc/gstmpeg2enc.cc:
|
||||||
|
Fix pad template names/types, fix memory issue with getcaps().
|
||||||
|
* ext/mpeg2enc/gstmpeg2encoder.cc:
|
||||||
|
* ext/mpeg2enc/gstmpeg2encoder.hh:
|
||||||
|
Fix compile issue with new caps system (const thingy).
|
||||||
|
* ext/mpeg2enc/gstmpeg2encpicturereader.cc:
|
||||||
|
* ext/mpeg2enc/gstmpeg2encpicturereader.hh:
|
||||||
|
We read a first frame right on initing, so that we have a caps
|
||||||
|
when we init the output. This caps is cached in padprivate and
|
||||||
|
read as first frame.
|
||||||
|
* ext/mplex/Makefile.am:
|
||||||
|
* ext/mplex/gstmplex.cc:
|
||||||
|
* ext/mplex/gstmplex.h:
|
||||||
|
* ext/mplex/gstmplex.hh:
|
||||||
|
* ext/mplex/gstmplexibitstream.cc:
|
||||||
|
* ext/mplex/gstmplexibitstream.hh:
|
||||||
|
* ext/mplex/gstmplexjob.cc:
|
||||||
|
* ext/mplex/gstmplexjob.hh:
|
||||||
|
* ext/mplex/gstmplexoutputstream.cc:
|
||||||
|
* ext/mplex/gstmplexoutputstream.hh:
|
||||||
|
We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin
|
||||||
|
had issues, didn't do capsnego, supported only a subset of the
|
||||||
|
mplex features and required a mplex fork in our local CVS. Plus
|
||||||
|
that it worked agaist a very old mplex version. Rewriting was
|
||||||
|
faster than updating it.
|
||||||
|
* gst-libs/ext/Makefile.am:
|
||||||
|
* gst-libs/ext/mplex/INSTRUCT:
|
||||||
|
* gst-libs/ext/mplex/Makefile.am:
|
||||||
|
* gst-libs/ext/mplex/README:
|
||||||
|
* gst-libs/ext/mplex/TODO:
|
||||||
|
* gst-libs/ext/mplex/ac3strm_in.cc:
|
||||||
|
* gst-libs/ext/mplex/audiostrm.hh:
|
||||||
|
* gst-libs/ext/mplex/audiostrm_out.cc:
|
||||||
|
* gst-libs/ext/mplex/aunit.hh:
|
||||||
|
* gst-libs/ext/mplex/bits.cc:
|
||||||
|
* gst-libs/ext/mplex/bits.hh:
|
||||||
|
* gst-libs/ext/mplex/buffer.cc:
|
||||||
|
* gst-libs/ext/mplex/buffer.hh:
|
||||||
|
* gst-libs/ext/mplex/fastintfns.h:
|
||||||
|
* gst-libs/ext/mplex/format_codes.h:
|
||||||
|
* gst-libs/ext/mplex/inputstrm.cc:
|
||||||
|
* gst-libs/ext/mplex/inputstrm.hh:
|
||||||
|
* gst-libs/ext/mplex/lpcmstrm_in.cc:
|
||||||
|
* gst-libs/ext/mplex/mjpeg_logging.cc:
|
||||||
|
* gst-libs/ext/mplex/mjpeg_logging.h:
|
||||||
|
* gst-libs/ext/mplex/mjpeg_types.h:
|
||||||
|
* gst-libs/ext/mplex/mpastrm_in.cc:
|
||||||
|
* gst-libs/ext/mplex/mpegconsts.cc:
|
||||||
|
* gst-libs/ext/mplex/mpegconsts.h:
|
||||||
|
* gst-libs/ext/mplex/mplexconsts.hh:
|
||||||
|
* gst-libs/ext/mplex/multplex.cc:
|
||||||
|
* gst-libs/ext/mplex/outputstream.hh:
|
||||||
|
* gst-libs/ext/mplex/padstrm.cc:
|
||||||
|
* gst-libs/ext/mplex/padstrm.hh:
|
||||||
|
* gst-libs/ext/mplex/stillsstream.cc:
|
||||||
|
* gst-libs/ext/mplex/stillsstream.hh:
|
||||||
|
* gst-libs/ext/mplex/systems.cc:
|
||||||
|
* gst-libs/ext/mplex/systems.hh:
|
||||||
|
* gst-libs/ext/mplex/vector.cc:
|
||||||
|
* gst-libs/ext/mplex/vector.hh:
|
||||||
|
* gst-libs/ext/mplex/videostrm.hh:
|
||||||
|
* gst-libs/ext/mplex/videostrm_in.cc:
|
||||||
|
* gst-libs/ext/mplex/videostrm_out.cc:
|
||||||
|
* gst-libs/ext/mplex/yuv4mpeg.cc:
|
||||||
|
* gst-libs/ext/mplex/yuv4mpeg.h:
|
||||||
|
* gst-libs/ext/mplex/yuv4mpeg_intern.h:
|
||||||
|
* gst-libs/ext/mplex/yuv4mpeg_ratio.cc:
|
||||||
|
We don't fork mjpegtools' mplex in our CVS anymore.
|
||||||
|
* gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps),
|
||||||
|
(gst_avi_demux_add_stream):
|
||||||
|
* gst/avi/gstavidemux.h:
|
||||||
|
Add getcaps() function for proper caps nego. This makes some
|
||||||
|
parts of AVI playback/reading work.
|
||||||
|
* sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
|
||||||
|
Resize window on new capsnego. This is probably wrong, but
|
||||||
|
I'm still committing it because with current capsnego, the
|
||||||
|
first successfull capsnego is auto-fixated, therefore rounded
|
||||||
|
down to the lowest values in the caps. this results in a 16x16
|
||||||
|
XWindow that is not reized when real capsnego finishes.
|
||||||
|
Dave, I see more cases of this, do you know a proper solution?
|
||||||
|
* tools/gst-launch-ext.in:
|
||||||
|
Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline.
|
||||||
|
|
||||||
2003-12-31 David Schleef <ds@schleef.org>
|
2003-12-31 David Schleef <ds@schleef.org>
|
||||||
|
|
||||||
* gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get):
|
* gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get):
|
||||||
|
|
59
configure.ac
59
configure.ac
|
@ -1084,7 +1084,7 @@ GST_CHECK_FEATURE(MPEG2ENC, [mpeg2enc], mpeg2enc, [
|
||||||
dnl libmpeg2enc was first included in mjpegtools-1.6.2-rc3 (1.6.1.92)
|
dnl libmpeg2enc was first included in mjpegtools-1.6.2-rc3 (1.6.1.92)
|
||||||
dnl since many distros include mjpegtools specifically without mplex
|
dnl since many distros include mjpegtools specifically without mplex
|
||||||
dnl and mpeg2enc, we check for mpeg2enc on its own, too.
|
dnl and mpeg2enc, we check for mpeg2enc on its own, too.
|
||||||
PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.92, [
|
PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.93, [
|
||||||
dnl switch over to c++ to test things
|
dnl switch over to c++ to test things
|
||||||
AC_LANG_CPLUSPLUS
|
AC_LANG_CPLUSPLUS
|
||||||
OLD_CPPFLAGS="$CPPFLAGS"
|
OLD_CPPFLAGS="$CPPFLAGS"
|
||||||
|
@ -1123,7 +1123,61 @@ main (int argc,
|
||||||
|
|
||||||
dnl *** mplex ***
|
dnl *** mplex ***
|
||||||
translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true)
|
translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true)
|
||||||
GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [HAVE_MPLEX=$HAVE_CXX])
|
GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [
|
||||||
|
HAVE_MPLEX="no"
|
||||||
|
dnl we require a c++ compiler for this one
|
||||||
|
if [ test x$HAVE_CXX = xyes ]; then
|
||||||
|
dnl libmplex was first included in mjpegtools-1.6.2-rc4 (1.6.1.93)
|
||||||
|
dnl since many distros include mjpegtools specifically without mplex
|
||||||
|
dnl and mpeg2enc, we check for mplex on its own, too.
|
||||||
|
PKG_CHECK_MODULES(MPLEX, mjpegtools >= 1.6.1.93, [
|
||||||
|
dnl switch over to c++ to test things
|
||||||
|
AC_LANG_CPLUSPLUS
|
||||||
|
OLD_CPPFLAGS="$CPPFLAGS"
|
||||||
|
CPPFLAGS="$CPPFLAGS $MPLEX_CFLAGS"
|
||||||
|
AC_CHECK_HEADER(interact.hpp, [
|
||||||
|
MPLEX_LIBS="$MPLEX_LIBS -lmplex2 -lm"
|
||||||
|
OLD_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS $MPLEX_LIBS"
|
||||||
|
AC_MSG_CHECKING([for valid mplex objects])
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <interact.hpp>
|
||||||
|
#include <outputstrm.hpp>
|
||||||
|
#include <multiplexor.hpp>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc,
|
||||||
|
char *argv[])
|
||||||
|
{
|
||||||
|
class TestOutputStream : public OutputStream {
|
||||||
|
public:
|
||||||
|
TestOutputStream () : OutputStream () { }
|
||||||
|
void Write (uint8_t *a, unsigned int b) { }
|
||||||
|
void NextSegment () { }
|
||||||
|
off_t SegmentSize () { }
|
||||||
|
void Close () { }
|
||||||
|
int Open () { }
|
||||||
|
};
|
||||||
|
MultiplexJob *job = new MultiplexJob ();
|
||||||
|
vector<IBitStream *> inputs;
|
||||||
|
job->SetupInputStreams (inputs);
|
||||||
|
TestOutputStream *out = new TestOutputStream ();
|
||||||
|
Multiplexor mux (*job, *out);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],[
|
||||||
|
HAVE_MPLEX="yes"
|
||||||
|
AC_SUBST(MPLEX_CFLAGS)
|
||||||
|
AC_SUBST(MPLEX_LIBS)
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
], AC_MSG_RESULT(no))
|
||||||
|
LIBS="$OLD_LIBS"
|
||||||
|
])
|
||||||
|
CPPFLAGS="$OLD_CPPFLAGS"
|
||||||
|
AC_LANG_C
|
||||||
|
], HAVE_MPLEX="no")
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
dnl *** pango ***
|
dnl *** pango ***
|
||||||
translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true)
|
translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true)
|
||||||
|
@ -1588,7 +1642,6 @@ gst-libs/gst/xoverlay/Makefile
|
||||||
gst-libs/gst/xwindowlistener/Makefile
|
gst-libs/gst/xwindowlistener/Makefile
|
||||||
gst-libs/ext/Makefile
|
gst-libs/ext/Makefile
|
||||||
gst-libs/ext/ffmpeg/Makefile
|
gst-libs/ext/ffmpeg/Makefile
|
||||||
gst-libs/ext/mplex/Makefile
|
|
||||||
examples/dynparams/Makefile
|
examples/dynparams/Makefile
|
||||||
examples/capsfilter/Makefile
|
examples/capsfilter/Makefile
|
||||||
examples/seeking/Makefile
|
examples/seeking/Makefile
|
||||||
|
|
|
@ -497,6 +497,14 @@ gst_avi_demux_handle_src_query (GstPad *pad,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstCaps *
|
||||||
|
gst_avi_demux_src_getcaps (GstPad *pad)
|
||||||
|
{
|
||||||
|
avi_stream_context *stream = gst_pad_get_element_private (pad);
|
||||||
|
|
||||||
|
return gst_caps_copy (stream->caps);
|
||||||
|
}
|
||||||
|
|
||||||
static gint32
|
static gint32
|
||||||
gst_avi_demux_sync_streams (GstAviDemux *avi,
|
gst_avi_demux_sync_streams (GstAviDemux *avi,
|
||||||
guint64 time)
|
guint64 time)
|
||||||
|
@ -884,8 +892,6 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
|
||||||
/* set proper settings and add it */
|
/* set proper settings and add it */
|
||||||
pad = gst_pad_new_from_template (templ, padname);
|
pad = gst_pad_new_from_template (templ, padname);
|
||||||
g_free (padname);
|
g_free (padname);
|
||||||
if (caps != NULL)
|
|
||||||
gst_pad_try_set_caps (pad, caps);
|
|
||||||
|
|
||||||
gst_pad_set_formats_function (pad, gst_avi_demux_get_src_formats);
|
gst_pad_set_formats_function (pad, gst_avi_demux_get_src_formats);
|
||||||
gst_pad_set_event_mask_function (pad, gst_avi_demux_get_event_mask);
|
gst_pad_set_event_mask_function (pad, gst_avi_demux_get_event_mask);
|
||||||
|
@ -893,8 +899,10 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
|
||||||
gst_pad_set_query_type_function (pad, gst_avi_demux_get_src_query_types);
|
gst_pad_set_query_type_function (pad, gst_avi_demux_get_src_query_types);
|
||||||
gst_pad_set_query_function (pad, gst_avi_demux_handle_src_query);
|
gst_pad_set_query_function (pad, gst_avi_demux_handle_src_query);
|
||||||
gst_pad_set_convert_function (pad, gst_avi_demux_src_convert);
|
gst_pad_set_convert_function (pad, gst_avi_demux_src_convert);
|
||||||
|
gst_pad_set_getcaps_function (pad, gst_avi_demux_src_getcaps);
|
||||||
|
|
||||||
stream = &avi->stream[avi->num_streams];
|
stream = &avi->stream[avi->num_streams];
|
||||||
|
stream->caps = caps ? caps : gst_caps_new_empty ();
|
||||||
stream->pad = pad;
|
stream->pad = pad;
|
||||||
stream->strh = strh;
|
stream->strh = strh;
|
||||||
stream->num = avi->num_streams;
|
stream->num = avi->num_streams;
|
||||||
|
@ -908,6 +916,7 @@ gst_avi_demux_add_stream (GstAviDemux *avi)
|
||||||
gst_pad_set_element_private (pad, stream);
|
gst_pad_set_element_private (pad, stream);
|
||||||
avi->num_streams++;
|
avi->num_streams++;
|
||||||
|
|
||||||
|
/* auto-negotiates */
|
||||||
gst_element_add_pad (GST_ELEMENT (avi), pad);
|
gst_element_add_pad (GST_ELEMENT (avi), pad);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -61,6 +61,7 @@ typedef struct {
|
||||||
|
|
||||||
/* pad, strh */
|
/* pad, strh */
|
||||||
GstPad *pad;
|
GstPad *pad;
|
||||||
|
GstCaps *caps;
|
||||||
gst_riff_strh *strh;
|
gst_riff_strh *strh;
|
||||||
|
|
||||||
/* current position (byte, frame, time) */
|
/* current position (byte, frame, time) */
|
||||||
|
|
|
@ -109,7 +109,7 @@ read_config ($0);
|
||||||
"fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}",
|
"fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}",
|
||||||
"m1v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",
|
"m1v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",
|
||||||
"m2v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",
|
"m2v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",
|
||||||
"m4a", "qtdemux ! { queue .audio_00! faad ! $cfg{AUDIOSINK} }",
|
"m4a", "qtdemux .audio_00 ! { queue ! faad ! $cfg{AUDIOSINK} }",
|
||||||
"mod", "modplug ! $cfg{AUDIOSINK}",
|
"mod", "modplug ! $cfg{AUDIOSINK}",
|
||||||
"mp2", "mad ! $cfg{AUDIOSINK}",
|
"mp2", "mad ! $cfg{AUDIOSINK}",
|
||||||
"mp3", "mad ! $cfg{AUDIOSINK}",
|
"mp3", "mad ! $cfg{AUDIOSINK}",
|
||||||
|
|
Loading…
Reference in a new issue