mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-02 21:48:55 +00:00
Can you feel the nas tonight? Can you feel the NAS? hey, I am even better than Elton John at these songs
Original commit message from CVS: Can you feel the nas tonight? Can you feel the NAS? hey, I am even better than Elton John at these songs
This commit is contained in:
parent
956ab077d5
commit
e6fa7133c8
3 changed files with 63 additions and 11 deletions
|
@ -4,6 +4,12 @@
|
||||||
* gst-libs/gst/media-info/media-info.c: (gst_media_info_read):
|
* gst-libs/gst/media-info/media-info.c: (gst_media_info_read):
|
||||||
adding mime types, fixing the one-stop function
|
adding mime types, fixing the one-stop function
|
||||||
|
|
||||||
|
2004-03-08 Christian Schaller <Uraeus@gnome.org>
|
||||||
|
|
||||||
|
* ext/nas/nassink.c and /ext/nas/nassink.h:
|
||||||
|
More NAS love from Arwed von Merkatz
|
||||||
|
So lets all sing 'Can you feel the NAS tonight'
|
||||||
|
|
||||||
2004-03-08 Christian Schaller <Uraeus@gnome.org>
|
2004-03-08 Christian Schaller <Uraeus@gnome.org>
|
||||||
|
|
||||||
* tools/gst-launch-ext.in:
|
* tools/gst-launch-ext.in:
|
||||||
|
|
|
@ -56,13 +56,13 @@ GST_STATIC_PAD_TEMPLATE (
|
||||||
"signed = (boolean) TRUE, "
|
"signed = (boolean) TRUE, "
|
||||||
"width = (int) 16, "
|
"width = (int) 16, "
|
||||||
"depth = (int) 16, "
|
"depth = (int) 16, "
|
||||||
"rate = (int) [ 8000, 96000 ], "
|
"rate = (int) [ 1000, 96000 ], "
|
||||||
"channels = (int) [ 1, 2 ]; "
|
"channels = (int) [ 1, 2 ]; "
|
||||||
"audio/x-raw-int, "
|
"audio/x-raw-int, "
|
||||||
"signed = (boolean) FALSE, "
|
"signed = (boolean) FALSE, "
|
||||||
"width = (int) 8, "
|
"width = (int) 8, "
|
||||||
"depth = (int) 8, "
|
"depth = (int) 8, "
|
||||||
"rate = (int) [ 8000, 96000 ], "
|
"rate = (int) [ 1000, 96000 ], "
|
||||||
"channels = (int) [ 1, 2 ]"
|
"channels = (int) [ 1, 2 ]"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -74,6 +74,7 @@ static void gst_nassink_init (GstNassink *nassink);
|
||||||
static gboolean gst_nassink_open_audio (GstNassink *sink);
|
static gboolean gst_nassink_open_audio (GstNassink *sink);
|
||||||
static void gst_nassink_close_audio (GstNassink *sink);
|
static void gst_nassink_close_audio (GstNassink *sink);
|
||||||
static GstElementStateReturn gst_nassink_change_state (GstElement *element);
|
static GstElementStateReturn gst_nassink_change_state (GstElement *element);
|
||||||
|
static GstCaps* gst_nassink_getcaps (GstPad *pad);
|
||||||
static gboolean gst_nassink_sync_parms (GstNassink *nassink);
|
static gboolean gst_nassink_sync_parms (GstNassink *nassink);
|
||||||
static GstPadLinkReturn gst_nassink_sinkconnect (GstPad *pad, const GstCaps *caps);
|
static GstPadLinkReturn gst_nassink_sinkconnect (GstPad *pad, const GstCaps *caps);
|
||||||
|
|
||||||
|
@ -168,6 +169,7 @@ gst_nassink_init(GstNassink *nassink)
|
||||||
gst_element_add_pad(GST_ELEMENT(nassink), nassink->sinkpad);
|
gst_element_add_pad(GST_ELEMENT(nassink), nassink->sinkpad);
|
||||||
gst_pad_set_chain_function(nassink->sinkpad, GST_DEBUG_FUNCPTR(gst_nassink_chain));
|
gst_pad_set_chain_function(nassink->sinkpad, GST_DEBUG_FUNCPTR(gst_nassink_chain));
|
||||||
gst_pad_set_link_function(nassink->sinkpad, gst_nassink_sinkconnect);
|
gst_pad_set_link_function(nassink->sinkpad, gst_nassink_sinkconnect);
|
||||||
|
gst_pad_set_getcaps_function(nassink->sinkpad, gst_nassink_getcaps);
|
||||||
|
|
||||||
nassink->mute = FALSE;
|
nassink->mute = FALSE;
|
||||||
nassink->depth = 16;
|
nassink->depth = 16;
|
||||||
|
@ -184,6 +186,31 @@ gst_nassink_init(GstNassink *nassink)
|
||||||
nassink->buf = NULL;
|
nassink->buf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstCaps*
|
||||||
|
gst_nassink_getcaps (GstPad *pad)
|
||||||
|
{
|
||||||
|
GstNassink *nassink = GST_NASSINK(gst_pad_get_parent(pad));
|
||||||
|
GstCaps *templatecaps = gst_caps_copy(gst_pad_get_pad_template_caps(pad));
|
||||||
|
GstCaps *caps;
|
||||||
|
int i;
|
||||||
|
AuServer *server;
|
||||||
|
|
||||||
|
server = AuOpenServer(nassink->host, 0, NULL, 0, NULL, NULL);
|
||||||
|
if (!server)
|
||||||
|
return templatecaps;
|
||||||
|
|
||||||
|
for (i = 0; i < gst_caps_get_size (templatecaps); i++) {
|
||||||
|
GstStructure *structure = gst_caps_get_structure (templatecaps, i);
|
||||||
|
|
||||||
|
gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, AuServerMinSampleRate(server), AuServerMaxSampleRate(server), NULL);
|
||||||
|
}
|
||||||
|
caps = gst_caps_intersect(templatecaps, gst_pad_get_pad_template_caps(pad));
|
||||||
|
gst_caps_free(templatecaps);
|
||||||
|
|
||||||
|
return caps;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_nassink_sync_parms (GstNassink *nassink)
|
gst_nassink_sync_parms (GstNassink *nassink)
|
||||||
{
|
{
|
||||||
|
@ -373,6 +400,11 @@ gst_nassink_open_audio (GstNassink *sink)
|
||||||
sink->audio = AuOpenServer(sink->host, 0, NULL, 0, NULL, NULL);
|
sink->audio = AuOpenServer(sink->host, 0, NULL, 0, NULL, NULL);
|
||||||
if (sink->audio == NULL)
|
if (sink->audio == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
sink->device = NAS_getDevice(sink->audio, sink->tracks);
|
||||||
|
if (sink->device == AuNone) {
|
||||||
|
GST_CAT_DEBUG(NAS,"no device with %i tracks found", sink->tracks);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
sink->flow = AuNone;
|
sink->flow = AuNone;
|
||||||
sink->size = 0;
|
sink->size = 0;
|
||||||
|
@ -583,17 +615,9 @@ NAS_allocBuffer(GstNassink *sink)
|
||||||
static int
|
static int
|
||||||
NAS_createFlow(GstNassink *sink, unsigned char format, unsigned short rate, int numTracks)
|
NAS_createFlow(GstNassink *sink, unsigned char format, unsigned short rate, int numTracks)
|
||||||
{
|
{
|
||||||
AuDeviceID device;
|
|
||||||
AuElement elements[2];
|
AuElement elements[2];
|
||||||
AuUint32 buf_samples;
|
AuUint32 buf_samples;
|
||||||
|
|
||||||
GST_CAT_DEBUG(NAS,"getting device");
|
|
||||||
device = NAS_getDevice(sink->audio, numTracks);
|
|
||||||
if (device == AuNone) {
|
|
||||||
GST_CAT_DEBUG(NAS,"no device found");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sink->flow = AuGetScratchFlow(sink->audio, NULL);
|
sink->flow = AuGetScratchFlow(sink->audio, NULL);
|
||||||
if (sink->flow == 0) {
|
if (sink->flow == 0) {
|
||||||
GST_CAT_DEBUG(NAS,"couldn't get flow");
|
GST_CAT_DEBUG(NAS,"couldn't get flow");
|
||||||
|
@ -621,6 +645,27 @@ NAS_createFlow(GstNassink *sink, unsigned char format, unsigned short rate, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* free old Elements and reconnet to server, needed to change samplerate */
|
||||||
|
{
|
||||||
|
AuBool clocked;
|
||||||
|
int num_elements;
|
||||||
|
AuStatus status;
|
||||||
|
AuElement *oldelems;
|
||||||
|
oldelems = AuGetElements(sink->audio, sink->flow, &clocked, &num_elements, &status);
|
||||||
|
if (num_elements > 0) {
|
||||||
|
GST_CAT_DEBUG(NAS,"GetElements status: %i", status);
|
||||||
|
if (oldelems)
|
||||||
|
AuFreeElements(sink->audio, num_elements, oldelems);
|
||||||
|
gst_nassink_close_audio(sink);
|
||||||
|
gst_nassink_open_audio(sink);
|
||||||
|
sink->flow = AuGetScratchFlow(sink->audio, NULL);
|
||||||
|
if (sink->flow == 0) {
|
||||||
|
GST_CAT_DEBUG(NAS,"couldn't get flow");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buf_samples = rate * NAS_SOUND_PORT_DURATION;
|
buf_samples = rate * NAS_SOUND_PORT_DURATION;
|
||||||
|
|
||||||
|
|
||||||
|
@ -638,7 +683,7 @@ NAS_createFlow(GstNassink *sink, unsigned char format, unsigned short rate, int
|
||||||
|
|
||||||
AuMakeElementExportDevice( &elements[1], /* element */
|
AuMakeElementExportDevice( &elements[1], /* element */
|
||||||
0, /* input */
|
0, /* input */
|
||||||
device, /* device */
|
sink->device, /* device */
|
||||||
rate, /* rate */
|
rate, /* rate */
|
||||||
AuUnlimitedSamples, /* num samples */
|
AuUnlimitedSamples, /* num samples */
|
||||||
0, /* num actions */
|
0, /* num actions */
|
||||||
|
|
|
@ -64,6 +64,7 @@ struct _GstNassink {
|
||||||
|
|
||||||
AuServer *audio;
|
AuServer *audio;
|
||||||
AuFlowID flow;
|
AuFlowID flow;
|
||||||
|
AuDeviceID device;
|
||||||
|
|
||||||
/* buffer */
|
/* buffer */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue