I wan to detect audio sources connected to Tx2 using program ioctl/gstreamer

aasim mdamirraza at gmail.com
Thu Feb 8 10:19:36 UTC 2018


Hi Experts,


I want to detect which all audio device connected to Tx2 BOARD, and which of
them are recording.
kindly any one can guide how to go about, i tried many thing but didn't
worked. Below are the details.

Kindly help ,thanks

I have done for video device connected like (HDMI input camera & USB camera)
using APIS.
But not able to do for audio status or audio capabilities. 


*1st Method *
int main ()
{
	GstDeviceMonitor *Monitor;
	GstCaps *caps;
	GstDevice *device;
	GList *devlist = NULL, *devIter;
	gchar *devString;
	int   n = 1; // Start input index is 1 for class 0.


	Monitor = gst_device_monitor_new ();
	printf("\n PTB-INFO: 1 \n");
	caps = gst_caps_new_empty_simple("audio/x-raw");
	printf("\n PTB-INFO: 2 \n");
	gst_device_monitor_add_filter(Monitor, "Audio/Source", NULL);
	printf("\n PTB-INFO: 3 \n");
	gst_caps_unref(caps);
	devlist = gst_device_monitor_get_devices (Monitor);
	printf("\n PTB-INFO:  \n");

	if (!gst_device_monitor_start(Monitor))
	{
		printf("\n PTB-INFO: GstDeviceMonitor unsupported. May not be able to
enumerate all video devices.\n");
	}
	else
	{
		devlist = gst_device_monitor_get_devices(Monitor);

		for (devIter = g_list_first(devlist); devIter != NULL; devIter =
g_list_next(devIter))
		{
			device = (GstDevice*) devIter->data;
			if (device == NULL)
				continue;
			// Probe all device properties and store them in internal global
videocapture device array:
			devString = gst_device_get_device_class(device);
			printf("\n  enumerate all audio  devices %s \n",devString);
			g_free(devString);

			// Increment count of detected devices for this plugin:
			n++;
                        // Increment count of total detected devices for all
plugins so far:
                        ntotal++;

                       if (ntotal >= PSYCH_MAX_VIDSRC - 2)
                      {
                              if (PsychPrefStateGet_Verbosity() > 1)
                                      printf("PTB-WARNING: Maximum number of
allowable video sources during enumeration %i r eached! Aborting
enumeration.\n", PSYCH_MAX_VIDSRC);
break;
		       }
		g_list_free(devlist);
		gst_device_monitor_stop(Monitor);
	}
	gst_object_unref(GST_OBJECT(Monitor));

	return 1;
}


*2nd Method*


for like Audio:I have tried using VIDIOC_ENUMAUDIO but getting this error.
: Inappropriate ioctl for devic


                            struct v4l2_audio audio;
                            
snprintf(cBuff,CAM_BUFF_LEN,"/dev/video%d",nVIdx);

    			if((nFd = open(cBuff, O_RDONLY)) == -1)
    			{
    				if(nVIdx == 0)
    				{
    					perror("\n No Cam device Found \n");
    				}
    				close(nFd);
    				break;
    			}

    			if (ioctl(nFd,VIDIOC_G_INPUT , &nIndex) == -1)
    			{
    				perror("\n VIDIOC_G_INPUT FAILURE \n");
    			}

    			memset(&audio, 0, sizeof(audio));
    			audio.index = nIndex;

    			//  VIDIOC_ENUMINPUT VIDIOC_ENUMAUDIO
    			if (ioctl(nFd, VIDIOC_ENUMAUDIO , &stInput) == -1)
    			{
    				perror("\n  VIDIOC_ENUMAUDIO FAILURE \n");
    			}






--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/


More information about the gstreamer-devel mailing list