-
Notifications
You must be signed in to change notification settings - Fork 15
DEV NOTES
bill-auger edited this page Sep 26, 2016
·
25 revisions
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()
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())
$ 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 ;
}