Skip to content

DEV NOTES

bill-auger edited this page Sep 26, 2016 · 25 revisions

DONE:

housekeeping and refactoring

  • factored Alert class out of main controller and into main GUI
  • factored Irc pump out of main controller and into chat controller
  • added Alert::Initialize(), Alert::Push(), Alert::AreAnyPending()
  • moved AvCaster::Alerts, AvCaster::IsAlertModal to Alert::Alerts, Alert::IsAlertModal
  • moved AvCaster::DisplayAlert() to Alert::Display()
  • moved AvCaster::OnModalDismissed() to Alert::OnModalDismissed()
  • removed AvCaster::GetModalCb()
  • renamed AvCaster::InitFail() to AvCaster::PumpThreads()
  • added Trace::EnableTracing() and Trace::*Enabled to allow runtime toggle of logging
  • removed AvCaster::GstVersionMsg(), AvCaster::PumpIrcClient()
  • added AvCaster::VersionMsg()
  • added IrcClient::VersionMsg(), IrcClient->pump()
  • added AvCasterStore::shutdown()

CURRENT:

TODO:

Packaging:

Jucer:

  • change listeners of old form SliderListener to new form Slider::Listener AvCaster:
  • GetIsEnabled() functions and possibly IsEnabled vars are probably not needed - perhaps their semantic could be to set *_ACTIVE_ID storage false and disable the control buttons AvCasterStore:
  • eliminate FIX_OUTPUT_RESOLUTION_TO_LARGEST_INPUT
  • consider the ApplicationProperties class
  • it may possible to use verify*/sanitize* to eliminate Seeds class IrcClient:
  • bitlbee login fails if another client already logged in
  • how to detect other mods in lctv chat
  • implemenet chatlist kick button Gstreamer:
  • eliminate NATIVE_CAMERA_RESOLUTION_ONLY
  • eliminate AvCaster::GetVolatileStore(), Gstreamer::ReloadConfig(), AvCaster::GetIsPreviewActive() by passing Store->config into Config, Controls, Gstreamer
  • implement text (partially implemented but disabled)
  • implement interstitial (currently implemented as fauxsrc)
  • replace testvideos with alpha img or fakesrc
  • verify the runtime dependencies
  • connect remaining config GUI controls
  • sanity checks/validations
  • test for device/screen existence
  • detect camera resolutions and implement device storage (moving CAMERA_RES_ID out of main store)
  • scale inputs to fill compositor output
  • consider URL::isWellFormed() Gui:
  • styling
  • tooltips
  • translations "audio" button does not turn green "preview" button gets enabled and turns green via stream select even if --no-preview "record" button does not change to "stream" via stream select misc: -Wunused-function -Wunused-variable MessageManagerLock mml (this); if (mml.lockWasGained())

NOTES:

detect camera resolutions

$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.100s (10.000 fps)

        Index       : 1
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : Motion-JPEG
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)

or:

#include <sys/ioctl.h>
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
struct v4l2_fmtdesc fmt;
struct v4l2_frmsizeenum frmsize;
struct v4l2_frmivalenum frmival;

fmt.index = 0;
fmt.type = type;
while (ioctl(fd, VIDIOC_ENUM_FMT, &fmt) >= 0)
{
  frmsize.pixel_format = fmt.pixelformat;
  frmsize.index = 0;
  while (ioctl(fd , VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0)
  {
    if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE)
      printf("%dx%d\n" , frmsize.discrete.width , frmsize.discrete.height) ;
    else if (frmsize.type == V4L2_FRMSIZE_TYPE_STEPWISE)
      printf("%dx%d\n" , frmsize.stepwise.max_width , frmsize.stepwise.max_height) ;
    frmsize.index++;
  }
  ++fmt.index ;
}
Clone this wiki locally