summaryrefslogtreecommitdiff
path: root/samples/nv-control-gvi.c
diff options
context:
space:
mode:
Diffstat (limited to 'samples/nv-control-gvi.c')
-rw-r--r--samples/nv-control-gvi.c873
1 files changed, 0 insertions, 873 deletions
diff --git a/samples/nv-control-gvi.c b/samples/nv-control-gvi.c
deleted file mode 100644
index 7b12b3c..0000000
--- a/samples/nv-control-gvi.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/*
- * Copyright (c) 2006-2007 NVIDIA, Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-
-/*
- * nv-control-gvi.c - NV-CONTROL client that demonstrates how to
- * interact with the GVI capabilities on an X Server.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <X11/Xlib.h>
-
-#include "NVCtrl.h"
-#include "NVCtrlLib.h"
-
-
-/* Used to stringify NV_CTRL_XXX #defines */
-
-#define ADD_NVCTRL_CASE(FMT) \
-case (FMT): \
- return #FMT;
-
-
-/*
- * Decode provided signal format.
- */
-
-static char *VideoFormatName(int value)
-{
- switch(value) {
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_NONE);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_576I_50_00_SMPTE259_PAL);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_59_94_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_60_00_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1035I_59_94_SMPTE260);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1035I_60_00_SMPTE260);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_50_00_SMPTE295);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_50_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_59_94_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_60_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_23_976_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_24_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_25_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_29_97_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_30_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_50_00_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_48_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_47_96_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_30_00_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_29_97_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_25_00_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_24_00_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_720P_23_98_SMPTE296);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_25_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_29_97_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_30_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_24_00_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_23_98_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_30_00_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_29_97_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_60_00_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_59_94_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_25_00_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_50_00_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_24_00_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_23_98_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_48_00_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_47_96_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_50_00_3G_LEVEL_A_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_59_94_3G_LEVEL_A_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_60_00_3G_LEVEL_A_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_60_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_60_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_60_00_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_50_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_50_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_50_00_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_30_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_30_00_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_25_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_25_00_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_24_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_24_00_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_48_00_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_48_00_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_59_94_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_59_94_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_59_94_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_29_97_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_29_97_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080P_23_98_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048P_23_98_3G_LEVEL_B_SMPTE372);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_1080I_47_96_3G_LEVEL_B_SMPTE274);
- ADD_NVCTRL_CASE(NV_CTRL_GVIO_VIDEO_FORMAT_2048I_47_96_3G_LEVEL_B_SMPTE372);
- default:
- return "Invalid Value";
- }
-}
-
-static const char *SamplingName(int value)
-{
- switch (value) {
- ADD_NVCTRL_CASE(NV_CTRL_GVI_COMPONENT_SAMPLING_UNKNOWN);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_COMPONENT_SAMPLING_4444);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_COMPONENT_SAMPLING_4224);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_COMPONENT_SAMPLING_444);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_COMPONENT_SAMPLING_422);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_COMPONENT_SAMPLING_420);
- default:
- return "Invalid Value";
- }
-}
-
-static const char *BPCName(int value)
-{
- switch (value) {
- ADD_NVCTRL_CASE(NV_CTRL_GVI_BITS_PER_COMPONENT_UNKNOWN);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_BITS_PER_COMPONENT_8);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_BITS_PER_COMPONENT_10);
- ADD_NVCTRL_CASE(NV_CTRL_GVI_BITS_PER_COMPONENT_12);
- default:
- return "Invalid Value";
- }
-}
-
-
-
-/*
- * do_help()
- *
- * Prints some help on how to use this app.
- *
- */
-static void do_help(void)
-{
- printf("usage:\n");
- printf("-q: query system GVI information.\n");
- printf("-c <TOPOLOGY>: configure default GVI system topology.\n");
- printf("-g #: Operate on specific GVI device.\n");
- printf("-l: List GVI configuration space.\n");
- printf("\n");
-
-} /* do_help()*/
-
-
-
-/*
- * do_query()
- *
- * Prints information for all GVI devices found on
- * the given X server.
- *
- */
-static void do_query(Display *dpy, int use_gvi)
-{
- Bool ret;
- int num_gvi;
- int gvi;
- int last_gvi;
-
- int value;
- int num_jacks;
- int jack;
- int max_channels_per_jack;
- int channel;
-
- char *pOut;
-
-
- /* Query the number of GVI devices on the server */
-
- ret = XNVCTRLQueryTargetCount(dpy, NV_CTRL_TARGET_TYPE_GVI,
- &num_gvi);
- if (!ret) {
- printf("Failed to query number of GVI devices!\n");
- return;
- }
- printf("Found %d GVI device(s) on server.\n", num_gvi);
- if ( !num_gvi ) {
- return;
- }
-
- if (use_gvi >= 0 && use_gvi < num_gvi) {
- /* Only display information about 1 GVI device/ */
- printf("Querying GVI device %d...\n", use_gvi);
- gvi = use_gvi;
- last_gvi = use_gvi;
- } else {
- /* Display all GVI devices */
- printf("Querying all GVI devices...\n");
- gvi = 0;
- last_gvi = num_gvi-1;
- }
-
- /* Display information about the GVI(s) */
-
- for (; gvi <= last_gvi; gvi++) {
-
- printf("\n");
- printf("- GVI Board %d :\n", gvi);
-
- ret = XNVCTRLQueryTargetStringAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_STRING_GVIO_FIRMWARE_VERSION,
- &pOut);
- if (!ret) {
- printf(" - Failed to query firmware version of GVI %d.\n", gvi);
- continue;
- }
- printf(" - Firmware Version: %s\n", pOut);
- XFree(pOut);
- pOut = NULL;
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVI_GLOBAL_IDENTIFIER,
- &value);
- if (!ret) {
- printf(" - Failed to query global ID of GVI %d.\n", gvi);
- continue;
- }
- printf(" - Global ID: %d\n", value);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVI_NUM_CAPTURE_SURFACES,
- &value);
- if (!ret) {
- printf(" - Failed to number of capture surfaces of GVI %d.\n", gvi);
- continue;
- }
- printf(" - Number of capture surfaces: %d\n", value);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT,
- &value);
- if (!ret) {
- printf(" - Failed to query requested video format on "
- "GVI %d.\n", gvi);
- continue;
- }
- printf(" - Requested video format: %d (%s)\n", value,
- VideoFormatName(value));
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVI_MAX_STREAMS,
- &value);
- if (!ret) {
- printf(" - Failed to query max number of streams on "
- "GVI %d.\n", gvi);
- continue;
- }
- printf(" - Max number of configurable streams: %d\n", value);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVI_MAX_LINKS_PER_STREAM,
- &value);
- if (!ret) {
- printf(" - Failed to query max number of links per stream on "
- "GVI %d.\n", gvi);
- continue;
- }
- printf(" - Max number of links per stream: %d\n", value);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVI_NUM_JACKS,
- &num_jacks);
- if (!ret) {
- printf(" - Failed to query number of input jacks on GVI "
- "%d.\n", gvi);
- continue;
- }
- printf(" - Number of input jacks on device: %d\n", num_jacks);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_GVI_MAX_CHANNELS_PER_JACK,
- &max_channels_per_jack);
- if (!ret) {
- printf(" - Failed to query maximum number of channels per "
- "jack on GVI %d.\n", gvi);
- continue;
- }
- printf(" - Maximum number of channels per jack on device: %d\n",
- max_channels_per_jack);
-
- /* Display per-jack/channel information */
-
- for (jack = 0; jack < num_jacks; jack++) {
- printf(" - Jack %d\n", jack);
-
- for (channel = 0; channel < max_channels_per_jack; channel++) {
- unsigned int link_definition = ((channel & 0xFFFF)<<16);
-
- printf(" - Channel %d\n", channel);
-
- link_definition |= (jack & 0xFFFF);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- link_definition, // display_mask
- NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT,
- &value);
- if (!ret) {
- printf(" - Failed to query detected video format "
- "on jack %d, channel %d of GVI %d.\n",
- jack, channel, gvi);
- continue;
- }
- printf(" - Detected Video Format: %d (%s)\n", value,
- VideoFormatName(value)
- );
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- link_definition, // display_mask
- NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER,
- &value);
- if (!ret) {
- printf(" - Failed to query detected SMPTE352 "
- "Identifier on jack %d, channel %d of GVI %d.\n",
- jack, channel, gvi);
- continue;
- }
- printf(" - Detected SMPTE352 Identifier: 0x%08x\n",
- value);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- link_definition, // display_mask
- NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT,
- &value);
- if (!ret) {
- printf(" - Failed to query detected bits per "
- "component on jack %d, channel %d of GVI %d.\n",
- jack, channel, gvi);
- continue;
- }
- printf(" - Detected bits per component: ");
- switch (value) {
- case NV_CTRL_GVI_BITS_PER_COMPONENT_8: printf("8"); break;
- case NV_CTRL_GVI_BITS_PER_COMPONENT_10: printf("10"); break;
- case NV_CTRL_GVI_BITS_PER_COMPONENT_12: printf("12"); break;
- case NV_CTRL_GVI_BITS_PER_COMPONENT_UNKNOWN: /* Fall Through */
- default:
- printf("Unknown");
- break;
- }
- printf("\n");
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- link_definition, // display_mask
- NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING,
- &value);
- if (!ret) {
- printf(" - Failed to query detected component "
- "sampling on jack %d, channel %d of GVI %d.\n",
- jack, channel, gvi);
- continue;
- }
- printf(" - Detected component sampling: ");
- switch (value) {
- case NV_CTRL_GVI_COMPONENT_SAMPLING_4444: printf("4:4:4:4"); break;
- case NV_CTRL_GVI_COMPONENT_SAMPLING_4224: printf("4:2:2:4"); break;
- case NV_CTRL_GVI_COMPONENT_SAMPLING_444: printf("4:4:4"); break;
- case NV_CTRL_GVI_COMPONENT_SAMPLING_422: printf("4:2:2"); break;
- case NV_CTRL_GVI_COMPONENT_SAMPLING_420: printf("4:2:0"); break;
- case NV_CTRL_GVI_COMPONENT_SAMPLING_UNKNOWN: /* Fall Through */
- default:
- printf("Unknown");
- break;
- }
- printf("\n");
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- link_definition, // display_mask
- NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE,
- &value);
- if (!ret) {
- printf(" - Failed to query detected color space on "
- "jack %d, channel %d of GVI %d.\n",
- jack, channel, gvi);
- continue;
- }
- printf(" - Detected color space: ");
- switch (value) {
- case NV_CTRL_GVI_COLOR_SPACE_GBR: printf("GBR"); break;
- case NV_CTRL_GVI_COLOR_SPACE_GBRA: printf("GBRA"); break;
- case NV_CTRL_GVI_COLOR_SPACE_GBRD: printf("GBRD"); break;
- case NV_CTRL_GVI_COLOR_SPACE_YCBCR: printf("YCbCr"); break;
- case NV_CTRL_GVI_COLOR_SPACE_YCBCRA: printf("YCbCrA"); break;
- case NV_CTRL_GVI_COLOR_SPACE_YCBCRD: printf("YCbCrD"); break;
- case NV_CTRL_GVI_COLOR_SPACE_UNKNOWN: /* Fall Through */
- default:
- printf("Unknown");
- break;
- }
- printf("\n");
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- link_definition, // display_mask
- NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID,
- &value);
- if (!ret) {
- printf(" - Failed to query detected link ID on "
- "jack %d, channel %d of GVI %d.\n",
- jack, channel, gvi);
- continue;
- }
- printf(" - Detected Link ID: Link %d", value);
- if (value == NV_CTRL_GVI_LINK_ID_UNKNOWN) {
- printf(" (Unknown)");
- } else if (value < 26) {
- printf(" (Link%c)", (int)('A')+value);
- }
- printf("\n");
-
- } /* Done querying per-channel information */
- } /* Done querying per-jack information */
-
-
- /* Query stream (link to jack+channel) topology */
- ret = XNVCTRLStringOperation(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS,
- NULL, // pIn
- &pOut);
- if (!ret) {
- printf(" - Failed to query stream topology configuration of "
- "GVI %d.\n", gvi);
- continue;
- }
- printf(" - Topology:\n");
- printf("\n %s\n\n", pOut ? pOut : "No streams are configured.");
-
-
- /* Query per-stream settings */
- if (pOut) {
- char *str = pOut;
- int i = 0;
-
- while ( (str = strstr(str, "stream=")) )
- {
- printf(" - Stream %d\n", i);
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- i, // display_mask (stream #)
- NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT,
- &value);
- if (!ret) {
- printf(" - Failed to query requested stream bits per component "
- "for stream %d of GVI %d.\n",
- i, gvi);
- continue;
- }
- printf(" - Requested bits per component: %d (%s)\n", value,
- BPCName(value));
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- i, // display_mask (stream #)
- NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING,
- &value);
- if (!ret) {
- printf(" - Failed to query requested stream component sampling "
- "for stream %d of GVI %d.\n",
- i, gvi);
- continue;
- }
- printf(" - Requested component sampling: %d (%s)\n", value,
- SamplingName(value));
-
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- i, // display_mask (stream #)
- NV_CTRL_GVI_REQUESTED_STREAM_CHROMA_EXPAND,
- &value);
- if (!ret) {
- printf(" - Failed to query requested stream chroma expand "
- "for stream %d of GVI %d.\n",
- i, gvi);
- continue;
- }
- printf(" - Requested chroma expand: %s\n",
- value ? "Enabled" : "Disabled");
-
- i++;
- str++;
- }
- XFree(pOut);
- pOut = NULL;
- }
-
- } /* Done Querying information about GVI devices */
-
-} /* do_query() */
-
-
-
-static unsigned int firstbit (unsigned int mask)
-{
- return mask ^ ((mask - 1) & mask);
-}
-
-// List the configuration space of the GVI device.
-static void do_listconfig(Display *dpy, int gvi)
-{
- NVCTRLAttributeValidValuesRec values;
-
- unsigned int fmts[3];
- int i;
- char *pOut = NULL;
- Bool ret;
-
- // Assume GVI device has been configured already.
- if (gvi < 0) {
- gvi = 0;
- }
-
- printf("Querying Valid Configuring Space of GVI device %d:\n\n", gvi);
-
- /* Query stream (link to jack+channel) topology */
- ret = XNVCTRLStringOperation(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi, // target_id
- 0, // display_mask
- NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS,
- NULL, // pIn
- &pOut);
- if (!ret) {
- printf(" - Failed to query stream topology configuration of "
- "GVI %d.\n", gvi);
- return;
- }
- printf("- Current Topology:\n\n");
- printf(" %s\n\n", pOut ? pOut : "No streams are configured.");
- if (pOut) {
- XFree(pOut);
- pOut = NULL;
- }
-
- ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // display_mask
- NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT,
- &values);
- if (!ret) {
- printf("- Failed to query valid video format values(1) of "
- "GVI %d.\n", gvi);
- return;
- }
- fmts[0] = values.u.bits.ints;
-
- ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // display_mask
- NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT2,
- &values);
- if (!ret) {
- printf("- Failed to query valid video format values(2) of "
- "GVI %d.\n", gvi);
- return;
- }
- fmts[1] = values.u.bits.ints;
-
- ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // display_mask
- NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT3,
- &values);
- if (!ret) {
- printf("- Failed to query valid video format values(3) of "
- "GVI %d.\n", gvi);
- return;
- }
- fmts[2] = values.u.bits.ints;
-
-
-
- printf("- Valid Formats (NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT): %08x\n", fmts[0]);
- printf("- Valid Formats (NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT2): %08x\n", fmts[1]);
- printf("- Valid Formats (NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT3): %08x\n", fmts[2]);
-
- printf("\n");
- for (i = 0; i < 3; i++) {
- unsigned int fmt_list = fmts[i];
- unsigned int fmt_bit;
- unsigned int fmt;
- unsigned int fmt_flags;
-
- unsigned int bpcs;
- unsigned int bpc_bit;
- unsigned int bpc;
-
- unsigned int samplings;
- unsigned int smp_bit;
- unsigned int sampling;
-
-
- while (fmt_list) {
- fmt_bit = firstbit(fmt_list);
- fmt_list &= (~fmt_bit);
- fmt = ffs(fmt_bit) - 1 + (32*i);
-
- printf("\n%s", VideoFormatName(fmt));
- ret = XNVCTRLQueryTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- fmt, // display_mask
- NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS,
- (int *)&fmt_flags);
- if (!ret) {
- printf(" - Failed to query flag bits for video format for "
- "GVI %d.\n", gvi);
- } else if (fmt_flags == NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_NONE) {
- printf(" (No flags set): \n");
- } else {
- printf(" (Flags:");
- printf("%c", (fmt_flags & NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_INTERLACED) ? 'I' : '_');
- printf("%c", (fmt_flags & NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_PROGRESSIVE) ? 'P' : '_');
- printf("%c", (fmt_flags & NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_PSF) ? 'F' : '_');
- printf("%c", (fmt_flags & NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_LEVEL_A) ? 'A' : '_');
- printf("%c", (fmt_flags & NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_LEVEL_B) ? 'B' : '_');
- printf("%c", (fmt_flags & NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_1080P_NO_12BPC) ? 'N' : '_');
- printf("):\n");
- }
-
-
- // Set the video format
- XNVCTRLSetTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // display_mask
- NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT,
- fmt);
-
- // Get all bits per component (on first jack/channel)
- ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // jack 0, channel 0
- NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT,
- &values);
- if (!ret) {
- printf(" - Failed to query valid bits per component "
- "of GVI %d.\n", gvi);
- continue;
- }
-
- bpcs = values.u.bits.ints;
- while (bpcs) {
- bpc_bit = firstbit(bpcs);
- bpcs &= (~bpc_bit);
- bpc = ffs(bpc_bit) -1;
-
- printf(" %s:\n", BPCName(bpc));
-
- // Set the bits per component
- XNVCTRLSetTargetAttribute(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // jack 0, channel 0
- NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT,
- bpc);
-
-
- // Get all component samplings (on first jack/channel)
- ret = XNVCTRLQueryValidTargetAttributeValues(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- gvi,
- 0, // display_mask
- NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING,
- &values);
- if (!ret) {
- printf(" - Failed to query valid component sampling "
- "values of GVI %d.\n", gvi);
- continue;
- }
-
- samplings = values.u.bits.ints;
- while (samplings) {
- smp_bit = firstbit(samplings);
- samplings &= (~smp_bit);
- sampling = ffs(smp_bit) -1;
-
- printf(" %s\n", SamplingName(sampling));
-
- } // All component samplings
- } // Add BPC
- } // All formats
- } // All format lists
-
-} /* do_listconfig() */
-
-
-
-static void do_configure(Display *dpy, int use_gvi, char *pIn)
-{
- Bool ret;
- char *pOut = NULL;
-
-
- if (use_gvi < 0) {
- use_gvi = 0;
- }
-
- printf("Configuring GVI device %d:\n\n", use_gvi);
- printf("Setting ");
- if (!pIn) {
- pIn = "stream=0, link0=jack0.0; "
- "stream=1, link0=jack1.0; "
- "stream=2, link0=jack2.0; "
- "stream=3, link0=jack3.0";
- printf("default");
- } else {
- printf("custom");
- }
- printf(" configuration:\n\n");
- printf(" \"%s\"\n\n", pIn);
-
- ret = XNVCTRLStringOperation(dpy,
- NV_CTRL_TARGET_TYPE_GVI,
- use_gvi, // target_id
- 0, // display_mask
- NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS,
- pIn,
- &pOut);
- if (!ret) {
- printf(" - Failed to configure stream topology of GVI %d.\n",
- use_gvi);
- return;
- }
- printf("Topology:\n\n");
- printf(" %s\n\n", pOut ? pOut : "No streams are configured.");
- if (pOut) {
- XFree(pOut);
- pOut = NULL;
- }
-}
-
-
-
-int main(int argc, char *argv[])
-{
- Display *dpy;
- Bool ret;
- int major, minor;
- int use_gvi = -1;
- int i;
- char *topology_str = NULL;
-
- /*
- * Open a display connection, and make sure the NV-CONTROL X
- * extension is present on the screen we want to use.
- */
-
- dpy = XOpenDisplay(NULL);
- if (!dpy) {
- printf("Cannot open display '%s'.\n", XDisplayName(NULL));
- return 1;
- }
-
- /* Query the NV-CONTROL version */
-
- ret = XNVCTRLQueryVersion(dpy, &major, &minor);
- if (ret != True) {
- printf("The NV-CONTROL X extension does not exist on '%s'.\n",
- XDisplayName(NULL));
- return 1;
- }
-
- /* Print some information */
-
- printf("Using NV-CONTROL extension %d.%d on %s\n\n",
- major, minor, XDisplayName(NULL));
-
- /* See if user wants a specific GVI device */
-
- for (i = 0; i < argc; i++) {
- if ((strcmp(argv[i], "-g") == 0) && ((i+1) < argc)) {
- use_gvi = strtol(argv[i+1], NULL, 10);
- }
- if ((strcmp(argv[i], "-c") == 0) && ((i+1) < argc)) {
- topology_str = argv[i+1];
- }
- }
-
- /* Do what the user wants */
-
- ret = 0;
- for (i = 0; i < argc; i++) {
- if (strcmp(argv[i], "-q") == 0) {
- do_query(dpy, use_gvi);
- ret = 1;
- break;
- } else if (strcmp(argv[i], "-c") == 0) {
- do_configure(dpy, use_gvi, topology_str);
- ret = 1;
- break;
- } else if (strcmp(argv[i], "-l") == 0) {
- do_listconfig(dpy, use_gvi);
- ret = 1;
- }
- }
- if (!ret) {
- do_help();
- }
-
- return 0;
-}