Nano Hash - криптовалюты, майнинг, программирование

Получение значения логического элемента управления в v4l2

Я пытаюсь настроить яркость камеры. Перед установкой яркости я пытаюсь проверить, находится ли яркость в автоматическом режиме или нет. Мы можем сделать это, проверив флаг volatile, но я использую версию ядра 2.6.32, которая не имеет этой функции. Итак, другой вариант — проверить V4L2_CID_AUTOBRIGHTNESS, что я и делаю, но он возвращает EINVAL.

Я использую следующий код для получения значения:

struct v4l2_control control;

control.id = V4L2_CID_BRIGHTNESS;       // This is working fine
//control.id = V4L2_CID_AUTOBRIGHTNESS; // This is giving EINVAL in ioctl


if (-1 == ioctl(camDesc, VIDIOC_G_CTRL, &control))
   cerr << "VIDIOC_G_CTRL" << "   ::  " << errno << endl ;
else
   cout << "Successfully got property. Value :: " << control.value << endl;

Возможно, V4L2_CID_AUTOBRIGHTNESS является логическим свойством, поэтому оно выдает EINVAL, но тогда я не могу найти какой-либо другой метод, с помощью которого я могу получить значение логического свойства.


Ответы:


1

В V4L2 набор IOCTL в основном реализован (или не реализован) на стороне самого датчика. Этот не исключение. Таким образом, у вас есть две потенциальные проблемы: а) драйвер фактического датчика не реализует конкретный IOCTL, б) IOCTL предназначен только для установки свойства, хотя я думаю, что вы все равно можете прочитать последнее установленное значение.

25.03.2015
  • Спасибо за ответ. Вы упомянули в пункте (b), что IOCTL предназначен только для установки свойства, но вы также можете использовать IOCTL для получения свойства. Он определяется значением request. Как и в моем случае, если вы передадите VIDIOC_G_CTRL, вы получите свойство, а в случае VIDIOC_S_CTRL вы получите свойство. 27.03.2015
  • Да, потому что обычно свойство кэшируется во внутренних структурах (что может быть не так с некоторыми драйверами). 27.03.2015

  • 2

    Некоторые свойства (пользовательские элементы управления) могут быть отключены, поэтому, если мы будем напрямую изменять их значение с помощью v4l2_control, это может привести к некоторой ошибке.

    Лучший способ сделать это — проверить соответствующие флаги с помощью queryctrl, а затем установить фактическое значение.

    struct v4l2_queryctrl queryctrl;
    queryctrl.id = V4L2_CID_BRIGHTNESS;  // V4L2_CID_AUTOBRIGHTNESS i.e. any user ctrl
    
    if (-1 == ioctl(camDesc, VIDIOC_QUERYCTRL, &queryctrl))
    {
       if (errno != EINVAL)
          exit(EXIT_FAILURE);
       else
       {
          cerr << "ERROR :: Unable to set property (NOT SUPPORTED)\n";
          exit(EXIT_FAILURE);
        }
    }
    else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
    {
       cout << "ERROR :: Unable to set property (DISABLED).\n";
       exit(EXIT_FAILURE);
    }
    else
    {
      struct v4l2_control control;
      control.id = queryctrl.id;
      control.value = eValue;      // Any value
    
      if (-1 == ioctl(camDesc, VIDIOC_S_CTRL, &control))
         exit(EXIT_FAILURE);
      cout << "Successfully set property." << endl;
    
    }
    
    30.03.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..