-
Notifications
You must be signed in to change notification settings - Fork 15
DEV NOTES
###DONE: build and package for 32-bit debian
- factored fpm command out of .travis.yml into Builds/fpm-build.sh
- build and package 32-bit artifact for debian
- added Builds/arch/PKGBUILD
- moved Builds/LinuxMakefile/debian to Builds/debian
- added Builds/debian/push-package.sh
implement interstitial source
- allows bypassing of screencap and/or camera
- factored gStreamer functinoality out of AvCaster class and into new Gstreamer class
- renamed AvCaster::InitGstreamer() to Gstremer::Initialize()
- renamed AvCaster::SetGstreamerState() to Gstremer::SetState()
- added Gstreamer::InterstitialBin and Gstreamer::ConfigureInterstitial() (snow only)
- added Gstreamer::AddBin() Gstreamer::RemoveBin() Gstreamer::IsInPipeline() helpers
redesign GUI and refactor storage
- added Preview GUI
- moved Config::setConfig() to AvCaster::SetConfig()
- added AvCaster::ToggleOutput(), AvCaster::TogglePreview(), AvCaster::ToggleScreencap(), AvCaster::ToggleCamera(), AvCaster::ToggleText(), AvCaster::ToggleConfig(), AvCaster::TogglePreview()
- added AvCasterConfig->setCurrentConfig() and MainContent->reloadConfig()
- refactored config store into list of semi-static presets and one analogous volatile config
- changed semantics of AvCasterConfig->configStore from root node to volatile GUI config
- added AvCasterConfig->configRoot and AvCasterConfig->configPresets
- added AvCasterConfig::validatePreset()
- added AvCasterConfig->validateRootProperty(), AvCasterConfig->validatePresetProperty(), AvCasterConfig->sanitizeRootComboProperty(), AvCasterConfig->sanitizePresetComboProperty() helpers
- added AvCasterConfig::presetNames() and AvCaster::PresetNames()
- added AvCasterConfig::storePreset() and AvCaster::StorePreset()
- added AvCasterConfig::deletePreset() and AvCaster::DeletePreset()
- added Gstreamer::Configure() (currently noop)
implement config presets (closes #20)
- added PresetSeed class for creating default static presets via PresetSeed::NewPreset()
- Config GUI reloads each time brought to front
- consolidated Config::populateComboboxes() into Config::loadConfig()
- consolidated Gstreamer::Configure* methods into Gstreamer::ConfigureTodo()
- removed model handles fropm Config and Controls GUI classes in favor of controller getters/setters
- added AvCaster::GetConfigStore(), AvCaster::GetPresetIdx(), AvCaster::GetIsConfigPending(), AvCaster::GetPresetName(), AvCaster::GetPresetsNames(), AvCaster::GetCameraNames(), AvCaster::GetAudioNames(), AvCaster::GetCameraConfig(), AvCaster::GetCameraResolutions(), AvCaster::GetCameraResolution(), AvCaster::GetCameraPath(), AvCaster::GetCameraRate()
- added AvCaster::StorePreset(), AvCaster::RenamePreset(), AvCaster::DeletePreset(), AvCasterStore::storePreset(), AvCasterStore::renamePreset(), AvCasterStore::deletePreset()
- added AvCasterStore::loadPreset(), AvCasterStore::presetsNames(), AvCasterStore::cameraNames(), AvCasterStore::audioNames(), AvCasterStore::getCameraConfig(), AvCasterStore::getCameraResolutions()
- added Controls::rejectPresetChange(), Controls::setCreatePresetMode(), Controls::isCreatePresetMode()
- added Config::configureSlider(), Config::configureTextEditor(), Config::configureCombobox(), Config::enableComponents()
- added Controls::configureCombobox(), Controls::handleSaveButton(), Controls::handleNewButton(), Controls::handleDeleteButton(), Controls::handlePresetCombo(), Controls::toggleControls(), Controls::loadConfig(), Controls::rejectPresetChange()
- added AvCaster::IsEnvironmentSane(), AvCaster::IsMutablePreset()
- renamed AvCaster::ToggleConfig() to AvCaster::RefreshGui()
handle command line arguments
- renamed AvCaster::IsEnvironmentSane() to AvCaster::ValidateEnvironment()
- added AvCaster::HandleCliParams()
- renamed AvCasterStore->createPresets() to AvCasterStore->verifyPresets()
- refactored PresetSeed class
###CURRENT: allow toggle devices, preview, and output via GUI (issue #21)
refactor Gstreamer class to be more modular
- Gstreamer Bins provide their own fake sources/sinks when disabled
- removed input tees, queues, and sinks from CompositorBin
- CompositeSink is now much larger single preview
- toggle devices, preview, and output via GUI requires restart (issue #21)
- added Gstreamer::MakeLctvUrl(), Gstreamer::MakeVideoCapsString()
- removed Gstreamer::FullscreenSink, Gstreamer::OverlaySink, Gstreamer::CompositeSink
- added Gstreamer::WindowHandle
- removed Gstreamer::MakeRequestSrcPad(), Gstreamer::MakeRequestSinkPad(), Gstreamer::MakeRequestGhostPad()
- removed AvCaster::ToggleOutput(), AvCaster::ToggleInterstitial(), AvCaster::ToggleScreencap(), AvCaster::ToggleCamera(), AvCaster::ToggleText(), AvCaster::TogglePreview()
- added Gstreamer::ReconfigureOutput(), Gstreamer::ReconfigureInterstitial(), Gstreamer::ReconfigureScreencap() Gstreamer::ReconfigureCamera(), Gstreamer::ReconfigureText(), Gstreamer::ReconfigurePreview()
- renamed Config->outputStreamCombo() to Config->outputSinkCombo()
- renamed PresetSeed->containerIdx to PresetSeed->muxerIdx and PresetSeed->streamIdx to PresetSeed->sinkIdx
- removed Gstreamer::TogglePreview(), removed Gstreamer::ToggleOutput()
- added Gstreamer::NewPipeline(), Gstreamer::NewBin()
- renamed Gstreamer::MakeElement(), Gstreamer::MakeCaps() to Gstreamer::NewElement(), Gstreamer::NewCaps()
- renamed Gstreamer::MakeGhostSrcPad(), Gstreamer::MakeGhostSinkPad(), Gstreamer::MakeGhostPad() to Gstreamer::NewGhostSrcPad(), Gstreamer::NewGhostSinkPad(), Gstreamer::NewGhostPad()
initialize media pipeline per initial control toggle buttons
- removed Gstreamer::ConfigureTodo()
- renamed Gstreamer::Configure() to Gstreamer::ConfigurePipeline()
- detached presets from main store until marshalled to disk
- added Gstreamer::IsPlaying(), Gstreamer::IsInPipeline()
- added AvCasterStore->toogleControl()
- factored out the remaining gStreamer C lib calls into wrappers
- added Gstreamer::NewPipeline(), Gstreamer::NewBin(), Gstreamer::RecreateBin()
- consolidated explicit caps strings Gstreamer::Make*CapsString()
- added Gstreamer::MakeVideoCapsString(), Gstreamer::MakeScreenCapsString(), Gstreamer::MakeCameraCapsString(), Gstreamer::MakeAudioCapsString(), Gstreamer::MakeH264CapsString(), Gstreamer::MakeMp3CapsString()
- all bins now are capable of linking themselves to other bins on re-configure
- consolidated Gstreamer::ReconfigureOutput(), Gstreamer::ReconfigureInterstitial(), Gstreamer::ReconfigureScreencap() Gstreamer::ReconfigureCamera(), Gstreamer::ReconfigureText(), Gstreamer::ReconfigurePreview() into Gstreamer::Reconfigure()
- renamed all Gstreamer::AddGhostPad() to Gstreamer::NewGhostPad()
- added Gstreamer::DestroyBin() (may remove in favor of disabled Gstreamer::ReconfigureBin())
toggle preview and output at runtime per control buttons
- all positioning except for the gstreamer overlay is now done by the jucey bits
- added MainContent class to jucer project and removed most positioning constants
- added Preview GUI class
- added bulid helper scripts to repo at Build/Scripts
- added AvCaster::GuiChanged()
- added AvCasterStore->getKeyNode(), AvCasterStore->isControlKey(), AvCasterStore->listen()
- added Gstreamer::IsInitialized()
- added MainContent::getPreviewBounds() and AvCaster::GetPreviewBounds()
- added AvCaster::SetStatusL()
- added Gstreamer::ConfigureCaps() , Gstreamer::ConfigureQueue() , Gstreamer::ConfigureScreen(), Gstreamer::ConfigureCamera(), Gstreamer::ConfigureFauxVideo(), Gstreamer::ConfigureText(), Gstreamer::ConfigureFile(), Gstreamer::ConfigureCompositor(), Gstreamer::ConfigureCompositorSink(), Gstreamer::ConfigureFauxAudio(), Gstreamer::ConfigureX264Encoder(), Gstreamer::ConfigureLameEncoder(), Gstreamer::ConfigureFlvmux()
housekeeping
- updated CodeBlocksLinux project
- updated changelog, version numbers, and READMEs
- added Builds/Scripts/cppcheck-filtered.sh
- addresssed some lint issues
- added AvCaster::SetWindowTitle()
- removed MainContent::instantiate(), MainContent::setTitle()
- removed AvCasterApplication param from MainWindow constructor
- removed MainWindow param from MainContent constructor
###TODO re-configure media pipeline at runtime per control toggle buttons implement interstitial 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)
- GUI styling
- GUI tooltips
- translations
- scale inputs to fill compositor output
TODO: after JUCE upgrade
- change listeners of old form SliderListener to new form Slider::Listener
// useful snippets GstElement* GetElement(GstBin* a_bin , String element_id) { return gst_bin_get_by_name(a_bin , CHARSTAR(element_id)) ; }
git add Source/ && git add Builds/ && git add AvCaster.jucer && git add .travis.yml git s | grep -v JuceLibraryCode git co HEAD JuceLibraryCode && rm JuceLibraryCode/modules/juce_core/native/juce_curl_Network.cpp JuceLibraryCode/modules/juce_core/text/juce_Base64.cpp JuceLibraryCode/modules/juce_core/text/juce_Base64.h JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp JuceLibraryCode/modules/juce_data_structures/values/juce_ValueTreeSynchroniser.h git add Builds/GnuMakefile/Makefile AvCaster.jucer Builds/GnuMakefile/Makefile Builds/MacOSX/AvCaster.xcodeproj/project.pbxproj Builds/MacOSX/Info.plist Builds/VisualStudio2008/AvCaster.vcproj Builds/VisualStudio2008/resources.rc Builds/VisualStudio2015/AvCaster.vcxproj Builds/VisualStudio2015/AvCaster.vcxproj.filters Builds/VisualStudio2015/resources.rc Source/AvCaster.cpp Source/AvCasterConfig.h Source/Config.cpp Source/Config.h Source/Trace/TraceAvCaster.h
// debootstrap sudo apt-get install debootstrap schroot sudo echo " [stable-i386] description=Debian stable (i386) directory=/srv/chroot/stable_i386 personality=linux32 root-users=travis type=directory users=travis " >> /etc/schroot/schroot.conf sudo debootstrap --variant=buildd --arch i386 stable /srv/chroot/stable_i386 http://ftp.de.debian.org/debian/ schroot -c stable-i386 -u root apt-get install -y --force-yes apt-get install libfreetype6-dev libgstreamer-plugins-base1.0-dev libx11-dev libxcursor-dev libxinerama-dev schroot -c stable-i386
// orphaned refs
- 55707f2 2015-10-22 | release build (HEAD -> rebase, origin/gstreamer, gstreamer) [bill auger]
- 887ae62 2015-10-22 | start all cameras without specifying caps (origin/travis, origin/master, origin/HEAD, travis, master) [bill auger]
- bdabf7d 2015-10-21 | add .travis.yml [bill auger]
- 3b2e26d 2015-10-16 | implement video tees (closes #12) (closes #18) [bill auger]
- fdb42db 2015-10-15 | Update README.md [bill auger]
###some usefulk links
https://packages.qa.debian.org/g/gstreamermm-1.0.html
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html
###WARNINGS: v4l2bufferpool libv4l2 converter detected, disabling CREATE_BUFS
###NOTES: currently locked at 3.1.1 because of scaled resolutions bug
screen+camera+audio->comp+tees->fake fake->enc->mux->output gstreamer HEAD behaviour
screen+camera+audio->comp->enc->mux->output master HEAD behaviour
screen+camera+comp+tees
screen+audio->enc->mux->output
camera+audio->enc->mux->output
fakescreen+fakecamera->comp
fakescreen+fakecamera+fakeaudio->comp->tees->fake fake->enc->mux->output
https://gist.github.com/0c69dd2072891af0e06f.git names
freeglut3-dev = freeglut
g++
libasound2-dev = alsa-lib 1.0.29-1
libcurl4-openssl-dev = curl 7.45.0-1
libfreetype6-dev = freetype2 2.6.1-1
libjack-jackd2-dev
libx11-dev = libx11 1.6.3-1
libxcomposite-dev = libxcomposite 0.4.4-2
libxcursor-dev = libxcursor 1.1.14-2
libxinerama-dev libxinerama 1.1.3-2
libxrandr-dev = libxrandr / libxrandr-git 1.5.0-1
mesa-common-dev = mesa 11.0.3-1
arch additional reqs
libgstopencv.so
libgstopenal.so
####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 ;
}