Skip to content

DEV NOTES

bill auger edited this page Dec 26, 2015 · 25 revisions

###DONE:

add chat feature (issue #30)

  • removed 32bit build and all packaging from travis
  • packaging migrated to openSUSE Build Service
  • added openSUSE Build Service support files
  • deleted fpm and packagecloud helper scripts
  • added correct md5sum to PKGBUILD
  • added IrcClient wrapper class and Chat , ChatList , ChatListItem GUI classes
  • added AvCaster::Irc static instance of libircclient wrapper
  • added AvCaster::AddChatLine() , AvCaster::SendChat() , AvCaster::GetVersionString() , AvCaster::UpdateChatNicks() , AvCaster::GetChatNicks()
  • moved AvCaster::SetConfig() to AvCasterStore->setConfig()
  • renamed AvCaster::GuiChanged() to AvCaster::SetConfig()
  • removed AvCasterStore->devicesNames()
  • added AvCasterStore->chatters store and MainContent->initialize() for chatters_store
  • removed Gstreamer::WindowHandle in favor of AvCaster::GetGuiXwinHandle()
  • added Gstreamer::GetVersionMajor(), Gstreamer::GetVersionMinor() , Gstreamer::IsSufficientVersion()
  • split AvCaster::HandleCliParams() into AvCaster::HandleCliParamsPreInit(), AvCaster::HandleCliParamsPostInit()
  • added PresetSeed->isAudioOn (and friends - no GUI support)

chat orphan stashes ab16e12 2015-12-05 | stash8 (HEAD -> chat) [bill auger] 44d564c 2015-12-05 | revertme [bill auger] 6aa0d6d 2015-12-02 | remove 32bit build and all packaging from travis (origin/travis, travis) [bill auger] c4d9818 2015-11-23 | stash5 [bill auger] 484644e 2015-11-22 | stash4 (origin/chat) [bill auger] 8d98fbd 2015-11-20 | stash3 [bill auger] a81f24e 2015-11-20 | stash2 [bill auger] ed2420b 2015-11-19 | stash [bill auger] 31d2629 2015-11-18 | testing [bill auger] 50612f8 2015-11-18 | testing (development) [bill auger] 86435d4 2015-11-16 | update project files [bill auger] ebb875a 2015-11-16 | update README.md (origin/master, origin/HEAD, master) [bill auger]

create storage for chat servers and nicks

  • added storage for IrcServerInfo persistence
  • refactored IrcClient to allow multiple networks
  • added AvCaster::RenameServer
  • renamed AvCasterStore->validateProperty() to AvCasterStore->verifyProperty()
  • renamed AvCasterStore->validateRootProperty() to AvCasterStore->verifyRootProperty()
  • renamed AvCasterStore->validatePresetProperty() to AvCasterStore->verifyPresetProperty()
  • added AvCasterStore->getOrCreatePresets() , AvCasterStore->getOrCreateServers()
  • renamed AvCasterStore->validatePreset() to AvCasterStore->verifyPreset()
  • renamed AvCasterStore->sanitizeConfig() to AvCasterStore->sanitizeRoot()
  • added AvCasterStore->verifyRoot() , AvCasterStore->verifyPresets() , AvCasterStore->sanitizePresets() , AvCasterStore->sanitizePreset()
  • moved AvCasterStore->chatters to child of each of AvCasterStore->servers
  • added IrcClient->serversStore

handle nick on IRC alias hosts properly

  • added AvCaster::UpdateIrcHost() , AvCasterStore::UpdateIrcHost()
  • added IrcClient->AddServerChat() , IrcClient->AddClientChat() , IrcClient->AddUserChat() helpers

refactor for new GUI layout

  • split Controls panel class into Controls and Presets
  • added Presets class
  • moved Controls::handlePresetCombo() to AvCaster::SetPreset()
  • moved Controls::rejectPresetChange() to AvCaster::RejectPresetChange()
  • moved Controls::setCreatePresetMode() to MainContent::setCreatePresetMode()
  • moved Controls::isCreatePresetMode() to MainContent::isCreatePresetMode()
  • moved Controls::configureCombobox() to MainContent::configureCombobox()
  • added MainContent::loadPresetsCombo()

add cli switch to disable chat (issue #34)

  • added cli switches for disabling chat , compositor (nyi) , preview (nyi)
  • filtered ANSI color codes from messages
  • tokenized LCTV message timestamps
  • added AvCaster::IsCompositorEnabled , AvCaster::IsPreviewEnabled , AvCaster::IsChatEnabled ;
  • added AvCasterStore->verifyServers() , AvCasterStore->verifyServer()
  • added ChatList->isChattersNode()
  • added IrcClient::OnNickChange() , IrcClient::ProcessTextMeta() , IrcClient::ProcessTimestamp()

add cli switches to disable media and preview (issue #34)

  • added AvCaster::IsMediaEnabled , AvCaster::GetIsMediaEnabled()
  • added AvCaster::GetIsCompositorEnabled() ,AvCaster::GetIsPreviewEnabled()

add cli switches to disable remaining media elements (issue #34)

  • added AvCaster::IsScreenEnabled , AvCaster::IsCameraEnabled , AvCaster::IsTextEnabled
  • added AvCaster::GetIsAudioEnabled() , AvCaster::GetIsScreenEnabled() , AvCaster::GetIsCameraEnabled() , AvCaster::GetIsTextEnabled() ,AvCaster::GetIsImageEnabled()

sort and separate chat nicks by network

  • added AvCasterStore::getChatNicks()
  • made Chat a ValueTree::Listener for add/remove servers/ChatLists
  • added Chat->refresh() , Chat->createChatList() , Chat->destroyChatList() , Chat->isServersNode()
  • instantiate multiple ChatLists as needed - passing chattersStore into ChatList constructor
  • ChatLists now listen only on their own chattersStore
  • renamed ChatList->serversStore to ChatList->chattersStore
  • removed ChatList->nicks , ChatList->reloadNicks () , ChatList->isChattersNode()

CURRENT: disable runtime features via cli args (issue #34) allow toggle devices, preview, and output via GUI (issue #21)

  • recovers gracefully from audio device init failures
  • fixed testaudio caps
  • added Controls->audioToggle
  • added AvCaster::HandleCliParamsTerminating()
  • merged AvCaster::HandleCliParamsPreInit() and AvCaster::HandleCliParamsPostInit() into AvCaster::ProcessCliParams()
  • added Gstreamer::RemoveElement() , Gstreamer::IsInBin()
  • added AvCaster::GetIsChatEnabled() , AvCaster::IsInitialized , AvCaster::GetIsInitialized()
  • removed AvCaster::GetGuiXwinHandle()
  • renamed AvCasterStore->toogleControl() to AvCasterStore->revertControl()
  • renamed Gstreamer::PreviewSink to Gstreamer::PreviewRealSink
  • added Gstreamer::PreviewQueue , Gstreamer::PreviewFauxSink
  • added Gstreamer::AudioAlsaSource , Gstreamer::AudioPulseSource , Gstreamer::AudioJackSource , Gstreamer::AudioTestSource , Gstreamer::AudioCaps
  • added Gstreamer::PreviewXwin
  • added Gstreamer::ReloadConfig()
  • renamed all Gstreamer::ConfigureBin() to Gstreamer::BuildBin()
  • renamed Gstreamer::ConfigureFauxVideo() to Gstreamer::ConfigureTestVideo()
  • renamed Gstreamer::ConfigureFauxAudio() to Gstreamer::ConfigureFauxSource()
  • removed Gstreamer::ConfigurePipeline() , Gstreamer::ReconfigureBin() , Gstreamer::RecreateBin()
  • added Gstreamer::SetMessageHandler() , Gstreamer::HandleMessage() , Gstreamer::HandleErrorMessage()
  • added Gstreamer::ConfigurePreview() , Gstreamer::ConfigureAudio()
  • removed Gstreamer::DeleteElement() , Gstreamer::DestroyBin() , Gstreamer::RecreateBin()
  • added Gstreamer::RemoveElement() , Gstreamer::DestroyElement()
  • added Gstreamer::GetElementId() , Gstreamer::GetPadId() , Gstreamer::IsInBin()
  • removed Gstreamer::GetVersionMajor() , Gstreamer::GetVersionMinor()

can you hear me speaking ? öäå ø æ

###TODO: IrcClient: eliminate IrcSServerInfo ??? eliminate host , port , nick globals eliminate RUN_NETWORK_AS_PROC ??? eliminate IRCCLIENT_HAS_MULTIPLE_SESSIONS ??? (perhaps as feature mutually exclusive with RUN_NETWORK_AS_PROC) freenode:#opensuse-buildservice:darix osc linkpac openSUSE:Factory/libircclient AvCaster: GetIsEnabled() functions and possibly IsEnabled vars are probably not needed - perhaps their semantic could be to set _ACTIVE_ID storeage false and disable the control buttons Gstreamer: ensure heed the semantics of is_enabled/AvCaster::IsEnabled() and is_active/AvCaster::Is*Active() eliminate DETACH_PREVIEW_BIN_INSTEAD_OF_RECREATE eliminate DETACH_OUTPUT_BIN_INSTEAD_OF_RECREATE eliminate RESIZE_PREVIEW_BIN_INSTEAD_OF_RECREATE eliminate DETACH_PREVIEW_BIN_INSTEAD_OF_RECREATE eliminate DETACH_OUTPUT_BIN_INSTEAD_OF_RECREATE eliminate NATIVE_CAMERA_RESOLUTION_ONLY eliminate SHOW_DISABLED_PREVIEW_TINY AvCasterStore: eliminate INJECT_DEFAULT_CAMERA_DEVICE_INFO ?? eliminate FIX_OUTPUT_RESOLUTION_TO_LARGEST_INPUT

more: bitlbee login fails if another client already logged in if IrcClient is not to be run in own thread remove Thread superclass RUN_NETWORK_AS_THREAD if multiple IrcClient instances then remove this->servers how to detect other mods in lctv chat re-configure media pipeline at runtime per control toggle buttons -> try make every bin robustly "pluggable" via cliargs=>storage to aid in debugging on various systems 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
  • add back codeblocks projects

// 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

$(if $(filter-out x86_64 , $(shell uname -m)) , -malign-double , -fPIC) (after upgrade) $ CONFIG=Release32 PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig/ make

// 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

define CONFIGURE_SCREENCAP_CHAIN 1

define CONFIGURE_CAMERA_CHAIN 1

define CONFIGURE_AUDIO_CHAIN 1

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN 1

define CONFIGURE_MUX_CHAIN 1

define CONFIGURE_OUTPUT_CHAIN 1

define CONFIGURE_TEES 0|1

define FAUX_SCREEN_SRC 0

define FAUX_CAMERA_SRC 0

define FAUX_AUDIO_SRC 0

define FAKE_MUX_ENCODER_SRC_AND_SINK 1

screen+camera+audio->comp->enc->mux->output master HEAD behaviour

define CONFIGURE_SCREENCAP_CHAIN 1

define CONFIGURE_CAMERA_CHAIN 1

define CONFIGURE_AUDIO_CHAIN 1

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN 1

define CONFIGURE_MUX_CHAIN 1

define CONFIGURE_OUTPUT_CHAIN 1

define CONFIGURE_TEES 0

define FAUX_SCREEN_SRC 0

define FAUX_CAMERA_SRC 0

define FAUX_AUDIO_SRC 0

define FAKE_MUX_ENCODER_SRC_AND_SINK 0

screen+camera+comp+tees

define CONFIGURE_SCREENCAP_CHAIN 1

define CONFIGURE_CAMERA_CHAIN 1

define CONFIGURE_AUDIO_CHAIN 0

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN 1

define CONFIGURE_MUX_CHAIN n/a

define CONFIGURE_OUTPUT_CHAIN n/a

define CONFIGURE_TEES 0|1

define FAUX_SCREEN_SRC 0

define FAUX_CAMERA_SRC 0

define FAUX_AUDIO_SRC 0

define FAKE_MUX_ENCODER_SRC_AND_SINK n/a

screen+audio->enc->mux->output

define CONFIGURE_SCREENCAP_CHAIN 1

define CONFIGURE_CAMERA_CHAIN 0

define CONFIGURE_AUDIO_CHAIN 1

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN n/a

define CONFIGURE_MUX_CHAIN 1

define CONFIGURE_OUTPUT_CHAIN 1

define CONFIGURE_TEES n/a

define FAUX_SCREEN_SRC 0

define FAUX_CAMERA_SRC 0

define FAUX_AUDIO_SRC 0

define FAKE_MUX_ENCODER_SRC_AND_SINK 0|1

camera+audio->enc->mux->output

define CONFIGURE_SCREENCAP_CHAIN 0

define CONFIGURE_CAMERA_CHAIN 1

define CONFIGURE_AUDIO_CHAIN 1

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN n/a

define CONFIGURE_MUX_CHAIN 1

define CONFIGURE_OUTPUT_CHAIN 1

define CONFIGURE_TEES n/a

define FAUX_SCREEN_SRC 0

define FAUX_CAMERA_SRC 0

define FAUX_AUDIO_SRC 0

define FAKE_MUX_ENCODER_SRC_AND_SINK 0|1

fakescreen+fakecamera->comp

define CONFIGURE_SCREENCAP_CHAIN 1

define CONFIGURE_CAMERA_CHAIN 1

define CONFIGURE_AUDIO_CHAIN 0

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN 1

define CONFIGURE_MUX_CHAIN n/a

define CONFIGURE_OUTPUT_CHAIN n/a

define CONFIGURE_TEES 1

define FAUX_SCREEN_SRC 1

define FAUX_CAMERA_SRC 1

define FAUX_AUDIO_SRC 0

define FAKE_MUX_ENCODER_SRC_AND_SINK 0|1

fakescreen+fakecamera+fakeaudio->comp->tees->fake fake->enc->mux->output

define CONFIGURE_SCREENCAP_CHAIN 1

define CONFIGURE_CAMERA_CHAIN 1

define CONFIGURE_AUDIO_CHAIN 1

define CONFIGURE_TEXT_CHAIN 0

define CONFIGURE_COMPOSITING_CHAIN 1

define CONFIGURE_MUX_CHAIN 1

define CONFIGURE_OUTPUT_CHAIN 0|1

define CONFIGURE_TEES 1

define FAUX_SCREEN_SRC 1

define FAUX_CAMERA_SRC 1

define FAUX_AUDIO_SRC 1

define FAKE_MUX_ENCODER_SRC_AND_SINK 1

arch package

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 ;
}

gst uninstalled --> sudo apt-get install pkg-config bison flex libglib2.0-dev liborc-0.4-dev autotools gtk-doc-tools wget http://cgit.freedesktop.org/gstreamer/gstreamer/plain/scripts/create-uninstalled-setup.sh ./create-uninstalled-setup.sh export PATH=$PATH:/pwd ./gst-master each of master/gstreamer master/gst-plugins-base master/gst-plugins-bad master/gst-plugins-good master/gst-plugins-ugly cd ea ./autogen.sh make

some plugins not bulit - maybe ok configure: No package 'xv' found configure: *** These plugins will not be built: xvimagesink

unknown type name 'GLuint' http://lists.freedesktop.org/archives/gstreamer-bugs/2014-October/134824.html

sudo apt-get install build-essential libfreetype6-dev libx11-dev libxcursor-dev libxinerama-dev sed s/trusty/wily/g /etc/apt/sources.list > sources.list sudo mv sources.list /etc/apt/sources.list sudo apt-get install libgstreamer-plugins-base1.0-dev

Clone this wiki locally