This is an automatic generated email to let you know that the following patch were queued at the http://git.linuxtv.org/v4l-utils.git tree:
Subject: v4l2-ctl: Add support for dv preset API. Author: Mats Randgaard <mats.randga...@tandberg.com> Date: Fri Apr 30 14:41:15 2010 +0200 note: Custom timings are not yet implemented. Signed-off-by: Mats Randgaard <mats.randga...@tandberg.com> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl> utils/v4l2-ctl/v4l2-ctl.cpp | 119 ++++++++++++++++++++++++++++++++++++------- 1 files changed, 100 insertions(+), 19 deletions(-) --- http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=7f5222493a825dd845284be27235b535ce977f3d diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp index 925d305..2522693 100644 --- a/utils/v4l2-ctl/v4l2-ctl.cpp +++ b/utils/v4l2-ctl/v4l2-ctl.cpp @@ -144,6 +144,10 @@ enum Option { OptQueryStandard, OptPollForEvent, OptWaitForEvent, + OptListDvPresets, + OptSetDvPreset, + OptGetDvPreset, + OptQueryDvPreset, OptLast = 256 }; @@ -284,6 +288,10 @@ static struct option long_options[] = { {"poll-for-event", required_argument, 0, OptPollForEvent}, {"overlay", required_argument, 0, OptOverlay}, {"list-devices", no_argument, 0, OptListDevices}, + {"list-dv-presets", no_argument, 0, OptListDvPresets}, + {"set-dv-presets", required_argument, 0, OptSetDvPreset}, + {"get-dv-presets", no_argument, 0, OptGetDvPreset}, + {"query-dv-presets", no_argument, 0, OptQueryDvPreset}, {0, 0, 0, 0} }; @@ -324,7 +332,7 @@ static void usage(void) " secam-X (X = B/G/H/D/K/L/Lc) or just 'secam' (V4L2_STD_SECAM)\n" " --list-standards display supported video standards [VIDIOC_ENUMSTD]\n" " --get-detected-standard\n" - " display video detected input video standard [VIDIOC_QUERYSTD]\n" + " display detected input video standard [VIDIOC_QUERYSTD]\n" " -P, --get-parm display video parameters [VIDIOC_G_PARM]\n" " -p, --set-parm=<fps>\n" " set video framerate in <fps> [VIDIOC_S_PARM]\n" @@ -464,6 +472,11 @@ static void usage(void) " --poll-for-event=<event>\n" " poll for an event [VIDIOC_DQEVENT]\n" " see --wait-for-event for possible events\n" + " --list-dv-presets list supported digital video presets [VIDIOC_ENUM_DV_PRESETS]\n" + " --set-dv-preset=<num>\n" + " set the digital video preset to <num> [VIDIOC_S_DV_PRESET]\n" + " --get-dv-preset query the digital video preset in use [VIDIOC_G_DV_PRESET]\n" + " --query-dv-preset query the detected digital video preset [VIDIOC_QUERY_DV_PRESET]\n" "\n"); printf("Expert options:\n" " --streamoff turn the stream off [VIDIOC_STREAMOFF]\n" @@ -575,14 +588,14 @@ static std::string flags2s(unsigned val, const flag_def *def) while (def->flag) { if (val & def->flag) { - if (s.length()) s += " "; + if (s.length()) s += ", "; s += def->str; val &= ~def->flag; } def++; } if (val) { - if (s.length()) s += " "; + if (s.length()) s += ", "; s += num2s(val); } return s; @@ -611,6 +624,30 @@ static std::string status2s(__u32 status) } +static const flag_def input_cap_def[] = { + {V4L2_IN_CAP_PRESETS, "DV presets" }, + {V4L2_IN_CAP_CUSTOM_TIMINGS, "custom DV timings" }, + {V4L2_IN_CAP_STD, "SD presets" }, + { 0, NULL } +}; + +static std::string input_cap2s(__u32 capabilities) +{ + return capabilities ? flags2s(capabilities, input_cap_def) : "not defined"; +} + +static const flag_def output_cap_def[] = { + {V4L2_OUT_CAP_PRESETS, "DV presets" }, + {V4L2_OUT_CAP_CUSTOM_TIMINGS, "custom DV timings" }, + {V4L2_OUT_CAP_STD, "SD presets" }, + { 0, NULL } +}; + +static std::string output_cap2s(__u32 capabilities) +{ + return capabilities ? flags2s(capabilities, output_cap_def) : "not defined"; +} + static void print_sliced_vbi_cap(struct v4l2_sliced_vbi_cap &cap) { printf("\tType : %s\n", buftype2s(cap.type).c_str()); @@ -1739,6 +1776,8 @@ int main(int argc, char **argv) struct v4l2_framebuffer fbuf; /* fbuf */ struct v4l2_jpegcompression jpegcomp; /* jpeg compression */ struct v4l2_streamparm parm; /* get/set parm */ + struct v4l2_dv_enum_preset dv_enum_preset; /* list_dv_preset */ + struct v4l2_dv_preset dv_preset; /* set_dv_preset/get_dv_preset/query_dv_preset */ int input; /* set_input/get_input */ int output; /* set_output/get_output */ int txsubchans = 0; /* set_modulator */ @@ -1782,6 +1821,8 @@ int main(int argc, char **argv) memset(&vs, 0, sizeof(vs)); memset(&fbuf, 0, sizeof(fbuf)); memset(&jpegcomp, 0, sizeof(jpegcomp)); + memset(&dv_preset, 0, sizeof(dv_preset)); + memset(&dv_enum_preset, 0, sizeof(dv_enum_preset)); if (argc == 1) { usage(); @@ -2243,6 +2284,9 @@ int main(int argc, char **argv) case OptListDevices: list_devices(); break; + case OptSetDvPreset: + dv_preset.preset = atoi(optarg); + break; case ':': fprintf(stderr, "Option `%s' requires a value\n", argv[optind]); @@ -2312,6 +2356,7 @@ int main(int argc, char **argv) options[OptGetCropCap] = 1; options[OptGetOutputCropCap] = 1; options[OptGetJpegComp] = 1; + options[OptGetDvPreset] = 1; options[OptSilent] = 1; } @@ -2366,6 +2411,11 @@ int main(int argc, char **argv) printf("Standard set to %08llx\n", (unsigned long long)std); } + if (options[OptSetDvPreset]){ + if (doioctl(fd, VIDIOC_S_DV_PRESET, &dv_preset, "VIDIOC_S_DV_PRESET") >= 0) { + printf("Preset set: %d\n", dv_preset.preset); + } + } if (options[OptSetParm]) { memset(&parm, 0, sizeof(parm)); @@ -2860,14 +2910,29 @@ int main(int argc, char **argv) } } - if (options[OptQueryStandard]) { + if (options[OptGetDvPreset]) { + if (doioctl(fd, VIDIOC_G_DV_PRESET, &dv_preset, "VIDIOC_G_DV_PRESET") >= 0) { + printf("Preset: %d\n", dv_preset.preset); + } + } + + if (options[OptQueryStandard]) { if (doioctl(fd, VIDIOC_QUERYSTD, &std, "VIDIOC_QUERYSTD") == 0) { printf("Video Standard = 0x%08llx\n", (unsigned long long)std); print_v4lstd((unsigned long long)std); } } - if (options[OptGetParm]) { + if (options[OptQueryDvPreset]) { + doioctl(fd, VIDIOC_QUERY_DV_PRESET, &dv_preset, "VIDIOC_QUERY_DV_PRESET"); + if (dv_preset.preset != V4L2_DV_INVALID) { + printf("Preset: %d\n", dv_preset.preset); + } else { + fprintf(stderr, "No active input detected\n"); + } + } + + if (options[OptGetParm]) { memset(&parm, 0, sizeof(parm)); parm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (doioctl(fd, VIDIOC_G_PARM, &parm, "VIDIOC_G_PARM") == 0) { @@ -3038,16 +3103,17 @@ int main(int argc, char **argv) while (ioctl(fd, VIDIOC_ENUMINPUT, &vin) >= 0) { if (vin.index) printf("\n"); - printf("\tInput : %d\n", vin.index); - printf("\tName : %s\n", vin.name); - printf("\tType : 0x%08X\n", vin.type); - printf("\tAudioset: 0x%08X\n", vin.audioset); - printf("\tTuner : 0x%08X\n", vin.tuner); - printf("\tStandard: 0x%016llX (%s)\n", (unsigned long long)vin.std, + printf("\tInput : %d\n", vin.index); + printf("\tName : %s\n", vin.name); + printf("\tType : 0x%08X\n", vin.type); + printf("\tAudioset : 0x%08X\n", vin.audioset); + printf("\tTuner : 0x%08X\n", vin.tuner); + printf("\tStandard : 0x%016llX (%s)\n", (unsigned long long)vin.std, std2s(vin.std).c_str()); - printf("\tStatus : 0x%08X (%s)\n", vin.status, status2s(vin.status).c_str()); - vin.index++; - } + printf("\tStatus : 0x%08X (%s)\n", vin.status, status2s(vin.status).c_str()); + printf("\tCapabilities: 0x%08X (%s)\n", vin.capabilities, input_cap2s(vin.capabilities).c_str()); + vin.index++; + } } if (options[OptListOutputs]) { @@ -3056,12 +3122,13 @@ int main(int argc, char **argv) while (ioctl(fd, VIDIOC_ENUMOUTPUT, &vout) >= 0) { if (vout.index) printf("\n"); - printf("\tOutput : %d\n", vout.index); - printf("\tName : %s\n", vout.name); - printf("\tType : 0x%08X\n", vout.type); - printf("\tAudioset: 0x%08X\n", vout.audioset); - printf("\tStandard: 0x%016llX (%s)\n", (unsigned long long)vout.std, + printf("\tOutput : %d\n", vout.index); + printf("\tName : %s\n", vout.name); + printf("\tType : 0x%08X\n", vout.type); + printf("\tAudioset : 0x%08X\n", vout.audioset); + printf("\tStandard : 0x%016llX (%s)\n", (unsigned long long)vout.std, std2s(vout.std).c_str()); + printf("\tCapabilities: 0x%08X (%s)\n", vout.capabilities, output_cap2s(vout.capabilities).c_str()); vout.index++; } } @@ -3171,6 +3238,20 @@ int main(int argc, char **argv) list_controls(fd, 0); } + if (options[OptListDvPresets]) { + dv_enum_preset.index = 0; + printf("ioctl: VIDIOC_ENUM_FRAMEINTERVALS\n"); + while (ioctl(fd, VIDIOC_ENUM_DV_PRESETS, &dv_enum_preset) >= 0) { + if (dv_enum_preset.index) + printf("\n"); + printf("\tIndex : %d\n", dv_enum_preset.index); + printf("\tPreset : %d\n", dv_enum_preset.preset); + printf("\tName : %s\n", dv_enum_preset.name); + printf("\tWidth : %d\n", dv_enum_preset.width); + printf("\tHeight : %d\n", dv_enum_preset.height); + dv_enum_preset.index++; + } + } if (options[OptStreamOn]) { int dummy = 0; doioctl(fd, VIDIOC_STREAMON, &dummy, "VIDIOC_STREAMON"); _______________________________________________ linuxtv-commits mailing list linuxtv-commits@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits