mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-19 22:30:06 +01:00
updated documentation (partly), some bugfixes, cleanup and general improvements in gveejay
git-svn-id: svn://code.dyne.org/veejay/trunk@300 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
@@ -2,6 +2,10 @@
|
||||
Veejay - Video Mixing/Editing Instrument
|
||||
========================================
|
||||
|
||||
Important:
|
||||
----------
|
||||
This version of veejay is not compatible with any earlier versions.
|
||||
|
||||
|
||||
See:
|
||||
README.quickstart
|
||||
@@ -15,7 +19,7 @@ See:
|
||||
Tips:
|
||||
=====
|
||||
|
||||
To see a list of key events, type 'man veejay' in your shell or try
|
||||
To see a list of all default keyboard events, type 'man veejay' in your shell or try
|
||||
'cat veejay/vj-event.c |grep SDLK' for a more up to date version.
|
||||
|
||||
For users with Intel Pentium 4 processors with Hyper Threading, benefit
|
||||
@@ -25,6 +29,10 @@ Since version 0.6.3, veejay doesnt have a console interface anymore!!!
|
||||
Use 'sayVIMS -i' to enter interactive mode and give '?' or 'h'
|
||||
to see a list of commands, or simply type VIMS style messages.
|
||||
|
||||
Starting of version 0.8, Veejay has a graphical user interface GVeejay
|
||||
which is distributed with this package.
|
||||
The quickest way to start with Veejay is by launching gveejay.
|
||||
(No user manual on Gveejay yet).
|
||||
|
||||
PLUGINS
|
||||
=======
|
||||
@@ -63,8 +71,7 @@ examples:
|
||||
|
||||
2. run veejay without a video file
|
||||
|
||||
veejay -d -W <width> -H <height> -R <framerate>
|
||||
|
||||
veejay -d -W <width> -H <height>
|
||||
|
||||
CONTACT / FEEDBACK & HELP
|
||||
=========================
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl AC_INIT
|
||||
AC_INIT([veejay],[0.7.3],[veejay-users@lissts.sourceforge.net])
|
||||
AC_INIT([veejay],[0.8.0],[veejay-users@lissts.sourceforge.net])
|
||||
AC_PREREQ(2.57)
|
||||
AC_CONFIG_SRCDIR([veejay/veejay.c])
|
||||
|
||||
VEEJAY_MAJOR_VERSION=0
|
||||
VEEJAY_MINOR_VERSION=7
|
||||
VEEJAY_MICRO_VERSION=3
|
||||
VEEJAY_MINOR_VERSION=8
|
||||
VEEJAY_MICRO_VERSION=0
|
||||
VEEJAY_VERSION=$VEEJAY_MAJOR_VERSION.$VEEJAY_MINOR_VERSION.$VEEJAY_MICRO_VERSION
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
@@ -13,7 +13,7 @@ How to activate:
|
||||
|
||||
veejay 2 makes a connection with veejay 1
|
||||
|
||||
3. sayVIMS "165:localhost 3490;" -p 5000 -h localhost
|
||||
3. sayVIMS "245:localhost 3490;" -p 5000 -h localhost
|
||||
|
||||
4. move mouse to veejay2 video window and press 'ESC'
|
||||
|
||||
@@ -35,7 +35,7 @@ How to activate:
|
||||
1. veejay -V 224.0.0.50 -p 5000 -v movie1.avi
|
||||
2. veejay -d -W <movie1 width> -H <movie1 height>
|
||||
|
||||
3. sayVIMS -h localhost -p 3490 "166:224.0.0.50 5000;"
|
||||
3. sayVIMS -h localhost -p 3490 "246:224.0.0.50 5000;"
|
||||
4. press F7 to activate newest created stream
|
||||
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ which describes the number and type of arguments to be used.
|
||||
The semicolon must be given to indicate the end of this message
|
||||
|
||||
|
||||
|
||||
1.2 Bundled Messages
|
||||
====================
|
||||
|
||||
@@ -62,9 +63,9 @@ A message bundle is a special message that contains an ordered list of at least
|
||||
|
||||
Example:
|
||||
|
||||
5032|BUN:004{084:0;175:;182:0 3 56 230 93 0;182:0 4 1 7;}|
|
||||
5033|BUN:005{084:0;175:;182:0 3 56 230 93 0;182:0 4 1 7;182:0 5 1 7;}|
|
||||
5034|BUN:005{084:0;175:;182:0 3 56 230 93 0;182:0 4 1 7;182:0 5 1 8;}|
|
||||
5032|BUN:002{361:0 3 56 230 93 0;361:0 4 1 7;}|
|
||||
5033|BUN:003{361:0 3 56 230 93 0;361:0 4 1 7;361:0 5 1 7;}|
|
||||
5034|BUN:003{361:0 3 56 230 93 0;361:0 4 1 7;361:0 5 1 8;}|
|
||||
|
||||
|
||||
A message bundle is described as:
|
||||
@@ -83,25 +84,47 @@ The token 'BUN:' indicates the start of a messaage bundle, the first 3 digit num
|
||||
1.3 Format of an Action File/Attaching Keys to Bundles
|
||||
======================================================
|
||||
|
||||
<5001 - 5999> | <message bundle> |
|
||||
<501 - 599> | <message bundle> |
|
||||
|
||||
The contents of some action file can be :
|
||||
|
||||
5016|BUN:002{175:;178:0 100;}|
|
||||
516|BUN:001{355:;}|
|
||||
|
||||
|
||||
|
||||
The message bundle BUN ... specifies 2 messages to be sent, namely 175 (enable chain) and 178 (fade to effect chain).
|
||||
This message bundle is attached to action identifier 5002 and can be invoked on sending
|
||||
The message bundle BUN sends '355' for clear effect chain.
|
||||
This message bundle is attached to action identifier 516.
|
||||
|
||||
A key is attached to this function trough using the GUI (GVeejay)
|
||||
or by using:
|
||||
|
||||
|
||||
DYNAMIC KEYMAPPING:
|
||||
==================
|
||||
|
||||
"083:516 <sdl symbol> <modifier> <optional arguments>;"
|
||||
|
||||
050:5002;
|
||||
|
||||
The message bundle can be attached to a key , for example 'SHIFT + A' by sending
|
||||
|
||||
053:5016 97 3;
|
||||
083:516 97 3;
|
||||
|
||||
Which attaches bundle '5016' to SDL key '97' using a modifier '3', which is SHIFT.
|
||||
Which attaches bundle '516' to SDL key '97' using a modifier '3', which is SHIFT.
|
||||
|
||||
Modifiers: 0 = none, 1 = alt , 2 = ctrl, 3 = shift
|
||||
Keys : see SDLkeysym.h somewhere in include/SDL/
|
||||
|
||||
If the number 0 is used for an event number, a given key combination can be
|
||||
unset (wiped) :
|
||||
|
||||
083:0 97 3;
|
||||
|
||||
Alternativly, you can bind keys to any action identifier. The complete
|
||||
list can be viewd by typing veejay -u |less or with Gveejay.
|
||||
|
||||
083:20 97 0 4;
|
||||
|
||||
The example above sets key 'a' to 'change video speed to 4'
|
||||
|
||||
|
||||
|
||||
@@ -129,7 +152,7 @@ In the future, veejay -u will describe all VIMS arguments as well.
|
||||
I wont put it into this document, since auto documentation will work much better
|
||||
(eliminating the need to update this documentation when things change).
|
||||
|
||||
For all EditList commands, the arguments represent frame numbers (from 0 - max frames)
|
||||
all EditList commands, the arguments represent frame numbers (from 0 - max frames)
|
||||
|
||||
For example;
|
||||
021:10 100; will copy frames 10-100 into a temporary buffer
|
||||
@@ -234,5 +257,62 @@ all instances of veejay listening on the given multicast address.
|
||||
(One tool to rule all).
|
||||
|
||||
|
||||
SAVING/RESTORING Veejay states
|
||||
===============================
|
||||
Example configuration file (with most options)
|
||||
|
||||
<config>
|
||||
<run_settings>
|
||||
<port_num>3490</port_num>
|
||||
<!- the port number veejay listens on ->
|
||||
<SDLwidth>352</SDLwidth>
|
||||
<SDLheight>288</SDLheight>
|
||||
<!- SDL video window dimensions ->
|
||||
<audio>1</audio>
|
||||
<!- Start with audio turned on ->
|
||||
<sync>1</sync>
|
||||
<!- Try to keep in sync ->
|
||||
<timer>2</timer>
|
||||
<!- Use system clock ->
|
||||
<output_fps>3</output_fps>
|
||||
<!- Set a different output framerate (only affects playback) ->
|
||||
<Xgeom_x>0</Xgeom_x>
|
||||
<Xgeom_y>0</Xgeom_y>
|
||||
<!- Use X geometry offset (from root window) ->
|
||||
<bezerk>1</bezerk>
|
||||
<!- Bezerk is enabled by default ->
|
||||
<nocolor>0</nocolor>
|
||||
<!- No colored console output ->
|
||||
<chrominance_level>1</chrominance_level>
|
||||
<!- YUV 4:2:2 ->
|
||||
<output_width>352</output_width>
|
||||
<output_height>288</output_height>
|
||||
<!- Output video dimensions (real width and height) ->
|
||||
<dummy_fps>0.000000</dummy_fps>
|
||||
<video_norm>0</video_norm>
|
||||
<dummy>0</dummy>
|
||||
<mcast_osc>0</mcast_osc>
|
||||
<!- Dont use OSC multicast send/receive ->
|
||||
<mcast_vims>0</mcast_vims>
|
||||
<!- Dont use VIMS multicast send/receive ->
|
||||
<output_scaler>0</output_scaler>
|
||||
<!- Dont use the software output scaler (depends on output_widhth ->
|
||||
<!- and output_height ) ->
|
||||
</run_settings>
|
||||
</config>
|
||||
|
||||
|
||||
Initially, you can setup veejay on the commandline and tell it to save
|
||||
its settings in a configuration file.
|
||||
|
||||
veejay -z 1 -W 720 -H 576 /tmp/videofile.avi -p 5000
|
||||
|
||||
(in another terminal)
|
||||
|
||||
sayVIMS -h localhost -p 5000 "084:/tmp/config.tmp 1;"
|
||||
|
||||
In this file, not only the configuration is stored :
|
||||
Bundled VIMS events, valid VIMS identifiers and Keymappings are
|
||||
stored here.
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ v1.3, 9 November 2003<br>
|
||||
v1.3, 9 November 2003<br>
|
||||
v1.4, 24 May 2004<br>
|
||||
v2.0, 25 July 2004<br>
|
||||
v2.1 27 January 2005<br>
|
||||
v2.2 22 April 2005<br>
|
||||
<hr><i>
|
||||
This document describes how to use <b>veejay</b>, a visual 'music' instrument for Linux/GNU </i>
|
||||
@@ -107,6 +108,8 @@ This document is targeted at the Linux user interested in learning a bit about v
|
||||
<b>Version 2.0</b>
|
||||
<dd><dl><dt>Partial re-write to match version 0.6</dd></dl></dt>
|
||||
<b>Version 2.1</b>
|
||||
<dd><dl><dt>Updated Howto to match version 0.7.2</dd></dl></dt>
|
||||
<b>Version 2.2</b>
|
||||
<dd><dl><dt>Updated Howto to match version 0.8</dd></dl></dt>
|
||||
</p>
|
||||
|
||||
@@ -137,40 +140,23 @@ with no Front-Cover Texts , and with no Back-Cover Texts. A copy of this license
|
||||
|
||||
|
||||
|
||||
<h2><a name="2">2. About Veejay</a></h2><p>
|
||||
Veejay is a 'visual' instrument and realtime video sampler, featuring simple non-linear
|
||||
editing and mixing from multiple sources.<br>
|
||||
You can load multiple video files, cut and paste portion
|
||||
s of video/audio and save it as an Edit Decision List.<br> Also, you can record new clips from
|
||||
existing clips or (live) streams. <br>With these clips you can change playback speed
|
||||
(slow motion/acceleration), change the looptype and set markers.<br><br>
|
||||
|
||||
With both clips and streams you can edit the effect chain and mix from multiple
|
||||
sources to one. Veejay currently has 94 effects, divided into two categories: Image and
|
||||
Video Effects, only with Video Effects you can select a channel to mix in.<br><br>
|
||||
|
||||
Veejay has many frame blending methods, some of these are: Additive,Substractive
|
||||
,Difference Negate, Relative Addition and Selective Replacement. Next to blendin
|
||||
g, you can key on Luma and Chroma seperatly or combined or simply use Transitions
|
||||
or other effects. Veejay has over 100 original video effects, most of them you will
|
||||
not find anywhere else (except those few ported from EffecTV, Mplayer, The Demo Effect Collection)
|
||||
<br><br>
|
||||
|
||||
Most edit and navigation commands are mapped to single key press commands, this
|
||||
allows you to control, depending on the playback mode, video navigation, the eff
|
||||
ect chain, effect parameters and other properties at playback time.
|
||||
<br><br>
|
||||
Also, you can record a new clip on the fly from a live feed or from the video cl
|
||||
ip you are playing. If requested, the recorded videofile will be added to the ed
|
||||
it descision list and activated as a new video clip. This is particular usefull
|
||||
for time-looping,rebouncing and rough clip scratching/editing. <br><br>
|
||||
Veejay can be remotely controled through using OSC (Open Sound Control) or via
|
||||
its own internal message system 'VIMS'.<br> 'VIMS' allows you to create/load/save
|
||||
effect chain templates and to add customized events which can be triggered by a
|
||||
keypress or by a remote message.<br><br>
|
||||
Finally, you can stream (uncompressed) video over the network from peer to peer over TCP
|
||||
<h2><a name="2">2. About Veejay</a></h2><p>
|
||||
Veejay is a <b>visual instrument</b> and <b>realtime video sampler</b>.
|
||||
It allows you to 'play' the video like you would play <b>a Piano</b>
|
||||
and it allows you to record the resulting video directly to disk for
|
||||
immediate playback (video sampling).<br>
|
||||
<br>
|
||||
<br>
|
||||
Thus, Veejay can be operated live by using the keyboard (which is 100%
|
||||
user definable) and remotely over network (both unicast and multicast)
|
||||
using an inhouse message system that allows mapping of various protocols
|
||||
on top of it, like OSC (OpenSoundControl). <br><br>
|
||||
Veejay is beeing developed in the hope it will be usefull for VJ's,
|
||||
media artists and other interested users that want to use Free Software
|
||||
for their performances and/or video installations.<br>
|
||||
<br>
|
||||
As of version 0.8 Veejay comes with a graphical user interface GVeejay.
|
||||
You can use GVeejay to connect (and switch) to any Veejay on the network , alternativly
|
||||
it can launch a veejay locally on your machine.<br>
|
||||
Use GVeejay to customize keyboard mappings and save the configuration file.<br>
|
||||
</p>
|
||||
|
||||
@@ -178,13 +164,14 @@ or by using multicast over UDP (one to many).<br>
|
||||
|
||||
<h3>General</h3>
|
||||
<ul>
|
||||
<li> Free Software (GNU GPL)
|
||||
<li> Free Software (GNU GPL)
|
||||
<li> Realtime video mixing from multiple sources
|
||||
<li> Native YUV processing
|
||||
<li> Native YUV processing
|
||||
<li> XML configuration file - and cliplists
|
||||
<li> JACK (low latency audio server) support
|
||||
<li> SDL video output
|
||||
<li> DirectFB secundary head (TV-Out) video output
|
||||
<li> Man pages
|
||||
<li> Graphical User Interface 'GVeejay'
|
||||
</ul>
|
||||
<h3>Media</h3>
|
||||
@@ -196,29 +183,33 @@ or by using multicast over UDP (one to many).<br>
|
||||
<li> YUV4MPEG streams
|
||||
<li> Video4Linux support (only Input)
|
||||
<li> unicast/multicast video streaming
|
||||
</ul>
|
||||
</ul>
|
||||
<h3>Editing/Mixing</h3>
|
||||
<ul>
|
||||
<ul>
|
||||
<li> Clip based (purely virtual,also called 'Sample')
|
||||
<li> Non descructive (Edit Decision List)
|
||||
<li> Chained FX Editing (can hold up to 20 effects)
|
||||
<li> Over 40 different types of blending
|
||||
<li> Chroma / Luma keying
|
||||
<li> Chroma / Luma keying
|
||||
<li> 110+ image/video effects
|
||||
<li> No undo/redo
|
||||
<li> Frame accurate navigation/editing
|
||||
<li> Cut/Copy/Paste/Crop/Delete editlist portions
|
||||
<li> Chainable Veejay's
|
||||
<li> Support for trickplay, jamming and jittering
|
||||
</ul>
|
||||
|
||||
<h3>Interaction</h3>
|
||||
<ul>
|
||||
<ul>
|
||||
<li> VIMS (over TCP/IP unicast and UDP multicast)
|
||||
<li> sayVIMS (command line utility)
|
||||
<li> sayVIMS (command line utility)
|
||||
<li> Dynamic keyboard mappings
|
||||
<li> Programmable User Events (Bundled VIMS)
|
||||
<li> OSC (over UDP, both unicast and multicast)
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<h2><a name="2.2">2.2</a> Hardware configuration</h2><p>
|
||||
|
||||
Veejay requires at least a linux kernel 2.4.x, 2.6.x or later, a lot of diskspace and a fast CPU.
|
||||
@@ -232,24 +223,26 @@ a few systems veejay was reported to work on:<br>
|
||||
<li>An Athlon 850 Mhz and Matrox G550 Dualhead( TVout support through DirectFB)
|
||||
<li>An Athlon XP 1600 Mhz and Matrox G550 Dualhead( TVout support through DirectFB)
|
||||
<li>A Pentium 4 2.2 Ghz and Matrox G550 Dualhead( TVout support through DirectFB)
|
||||
<li>A Pentium 4 3.0 Ghz and ATI Radeon 9600 XT/ (no TVout yet)
|
||||
<li>A Pentium 4 3.0 Ghz and ATI Radeon 9600 XT/ (no TVout yet)
|
||||
<li>Sony Playstation 2 (MIPS, little endian) (but runs very slow +/- 20 fps)
|
||||
</ul><br>
|
||||
Video Editing requires a lot of diskspace, make sure you you have enough diskspace available for
|
||||
Video Editing requires a lot of diskspace, make sure you you have enough diskspace available for
|
||||
your project. If you are going to use the recording functions, make sure you have sufficient free disk space available.Otherwise you are quite safe, veejay does not change your original video or fill your harddisk with needless temporary files. Neither does it waste your resources (unless you fill the effect chain with a lot of effects)<br>
|
||||
</p>
|
||||
|
||||
<h2><a name="3">3. Installation</a></h2><p>
|
||||
</p>
|
||||
|
||||
<h2><a name="3.1">3.1 Dependencies</a></h2><p>
|
||||
<h2><a name="3.1">3.1 Dependencies</a></h2><p>
|
||||
Before you install Veejay, you should install the following software packages.
|
||||
Although none of them is required, Veejay will be much less usable without them.<br>
|
||||
<ul>
|
||||
<li>(optional) libdv >= 0.99
|
||||
<ul>
|
||||
<li>(optional) libdv >= 1.02
|
||||
<li>(optional) The SDL library >= 1.2.3
|
||||
<li>(optional) The XML C library 2 for gnome >=2.5.4
|
||||
<li>(optional) JACK low latency audio server >= 0.98.1
|
||||
<li>(optional) DirectFB >= 0.9.17
|
||||
<li>(optional) FreeType >= 2.1.9
|
||||
<li>(optional) GTK >= 2.6.0
|
||||
</ul>
|
||||
<br>
|
||||
@@ -266,48 +259,52 @@ $ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||
</pre>
|
||||
Decompress and untar the file by typing:
|
||||
<pre>
|
||||
<pre>
|
||||
$ tar -jxvf veejay-0.8.x.tar.bz2
|
||||
</pre>
|
||||
Change to the directory containing veejay's source's:
|
||||
<pre>
|
||||
<pre>
|
||||
$ cd veejay-0.8.x
|
||||
|
||||
$ ./configure
|
||||
</pre>
|
||||
On completion it will summarize the results of the ./configure script, which could look like this:
|
||||
<pre>
|
||||
veejay 0.7.2 build configuration :
|
||||
|
||||
Compiler flags: -mcpu=i686 -march=i686 -Wall -Wunused -g
|
||||
|
||||
Build configuration:
|
||||
x86 Architecture : true
|
||||
MMX enabled : true
|
||||
MMX2 enabled : false
|
||||
SSE enabled : true
|
||||
3DNow enabled : false
|
||||
CMOV enabled : true
|
||||
glibc support for >2GB files : true
|
||||
|
||||
Required dependencies:
|
||||
POSIX Threads (pthread) : true
|
||||
video4linux recording/playback : true
|
||||
libJPEG : true
|
||||
|
||||
Optional dependencies:
|
||||
libDV (digital video) : true
|
||||
Jack Audio Connection Kit : false
|
||||
DirectFB support : false
|
||||
Simple Direct Media Layer : true
|
||||
XML C library for Gnome libxml2 : true
|
||||
|
||||
Plugin dependencies:
|
||||
FreeType support : true
|
||||
Veejay Video Objects support : true
|
||||
<pre>
|
||||
configure:
|
||||
configure: Veejay 0.8.0 build configuration :
|
||||
configure:
|
||||
configure: Compiler flags: -march=pentium4 -mcpu=pentium4 -fno-common -O2 -fomi
|
||||
t-frame-pointer -malign-double -mfpmath=sse -Wall -Wunused
|
||||
configure:
|
||||
configure: Architecture: i686
|
||||
configure:
|
||||
configure: x86
|
||||
configure: MMX enabled : true
|
||||
configure: MMX2 enabled : false
|
||||
configure: SSE enabled : true
|
||||
configure: SSE2 enabled : true
|
||||
configure: 3DNOW enabled : false
|
||||
configure: CMOV enabled : true
|
||||
configure: Nasm enabled : true
|
||||
configure:
|
||||
configure: Platform: Linux
|
||||
configure:
|
||||
configure: Required dependencies:
|
||||
configure: - POSIX Threads (pthread) : true
|
||||
configure: Optional dependencies
|
||||
configure: - video4linux : true
|
||||
configure: - SDL support : true
|
||||
configure: - DirectFB support : false
|
||||
configure: - AVI MJPEG playback/recording : true (always)
|
||||
configure: - libDV (digital video) support : true
|
||||
configure: - JPEG support : true
|
||||
configure: - jack : false
|
||||
configure: - xml c library for gnome : true
|
||||
configure: - freetype support : true
|
||||
configure:
|
||||
configure: - GVeejay UI
|
||||
configure: share : ${prefix}/share/veejay
|
||||
|
||||
</pre>
|
||||
</pre>
|
||||
Now, you can start building veejay
|
||||
<pre>
|
||||
@@ -318,23 +315,24 @@ Followed by
|
||||
# make install
|
||||
</pre>
|
||||
</p>
|
||||
|
||||
<h2><a name="3.3">3.3 Setting up streams</a></h2><p>
|
||||
First of all, you need to have <i>Video For Linux</i> enabled in your kernel configuration.
|
||||
Make sure that <i>V4L information in proc filesystem</i> is enabled; veejay uses the proc file
|
||||
system to find out what devices can be used to read from.
|
||||
<br>
|
||||
Secondly, in order to use multicast streaming, you must have the option <i>IP multicast</i>
|
||||
enabled in your kernel configuration. Also, you need to add a multicast route :
|
||||
<pre>
|
||||
$ route add -net 224.0.0.0 netmask 255.255.255.0 dev eth0
|
||||
|
||||
<h2><a name="3.3">3.3 Setting up multicast</h2><p>
|
||||
|
||||
Chapter <a href="veejay-HOWTO.html#4.2">4.2 sayVIMS</a> includes examples to create several
|
||||
|
||||
Multicast is a technology that reduces network traffic by
|
||||
simultaneously delivering a single stream of information
|
||||
to any interested recipient.
|
||||
<br><br>
|
||||
Veejay can stream out to SDL (video window), to STDOUT (in yuv4mpeg) , to DirectFB secundary head (TV-Out)
|
||||
and it can stream over the network (all is uncompressed video). See the man page on how to activate one
|
||||
<br><br>
|
||||
To enable multicast in Veejay, you must have enabled <i>IP multicast</i>
|
||||
in your kernel configuration.
|
||||
<br><br>
|
||||
Finally you need to add a multicast route :
|
||||
<pre>
|
||||
$ route add -net 224.0.0.0 netmask 255.255.255.0 dev eth0
|
||||
</pre>
|
||||
<br>
|
||||
Next, Veejay can be started with the commandline flags
|
||||
<b>-M/--multicast-osc</b> and/or <b>-V/--multicast-vims</b>
|
||||
<br>
|
||||
|
||||
</p>
|
||||
|
||||
@@ -402,7 +400,7 @@ This limitation is also valid when streaming video from veejay to another veejay
|
||||
</p>
|
||||
|
||||
<h2><a name="4.2">4.2 sayVIMS</a></h2><p>
|
||||
sayVIMS is a commandline utility distributed with the veejay package,
|
||||
sayVIMS is a commandline utility distributed with the veejay package,
|
||||
it allows you to give short commands in interactive mode<br><br>
|
||||
<i>$ sayVIMS -i -h localhost -p 3490</i><br><br>
|
||||
Typing '?' followed by pressing ENTER gives the list of command below:
|
||||
@@ -431,21 +429,23 @@ Typing '?' followed by pressing ENTER gives the list of command below:
|
||||
</pre>
|
||||
Also, you can send messages in VIMS format (or files, containing VIMS messages )<br><br>
|
||||
For example, add the Pixelate effect on the Effect Chain of the current playing stream or clip:
|
||||
<pre>
|
||||
<pre>
|
||||
sayVIMS -h localhost -p 3490 "361:0 0 150 3;"
|
||||
</pre>
|
||||
</pre>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
Last but not least, sayVIMS can parse files containing VIMS messages.<br>
|
||||
See the test/examples directory of the package for a list of perl
|
||||
scripts that output a VIMS script.<br>
|
||||
<pre>
|
||||
<pre>
|
||||
sayVIMS -f advocate.vims -h localhost -p 3490
|
||||
</pre>
|
||||
See the VIMS.txt file in the source package for a more detailed (but not yet complete) overview.<br>
|
||||
<br>
|
||||
Alternativly, you can start a secundary veejay and stream from peer to peer in uncompressed video:
|
||||
<br>
|
||||
<pre>
|
||||
$ veejay -d -p 5000
|
||||
|
||||
|
||||
$ sayVIMS -h localhost -p 5000 "245:localhost 3490;"
|
||||
|
||||
(press 'F7' in veejay to display the stream, prob. stream 7)
|
||||
@@ -455,30 +455,21 @@ $ veejay -V 224.0.0.50 -p 5000 -n -L movie1.avi
|
||||
$ veejay -V 224.0.0.50 -p 5000 -n -L movie1.avi
|
||||
|
||||
$ veejay -d
|
||||
|
||||
|
||||
$ sayVIMS -h localhost -p 3490 "246:224.0.0.50 5000;"
|
||||
|
||||
$ veejay -d -p 4000
|
||||
|
||||
|
||||
$ sayVIMS -h localhost -p 4000 "246:224.0.0.50 5000;"
|
||||
|
||||
</pre>
|
||||
|
||||
Or, if you want to play a XVID movie (or any other compressed format that is not I frame only):
|
||||
<pre>
|
||||
<pre>
|
||||
$ sayVIMS -h localhost -p 3490 "244:/tmp/my-XVID-movie.avi;"
|
||||
</pre>
|
||||
|
||||
<h2><a name="4.3">4.3 The keyboard interface</a></h2><p>
|
||||
The keyboard interface takes keypresses (events) from SDL, almost all keys on
|
||||
your keyboard have a function in veejay.<br><br>
|
||||
|
||||
Typically, the keys on your numeric keypad can be used for navigation (play forward, play backward,
|
||||
skip frames, skip to end , skip to start , etc). <br><br>
|
||||
The keys <b>a</b>,<b>s</b>,<b>d</b>,<b>f</b>,
|
||||
<b>g</b>,<b>h</b>,<b>j</b>,<b>k</b> and <b>l</b> can be used to increase speed from 1 (normal) to
|
||||
9 (fast)<br><br>
|
||||
|
||||
<h2><a name="4.3">4.3 The keyboard interface</a></h2><p>
|
||||
Here is a quick overview for the most used default keys, if applied in order you will end up
|
||||
with a newly created video sample looping in some way (depending on how many times you press the asterix key)<br>
|
||||
<br><br>
|
||||
@@ -556,10 +547,10 @@ The function keys <b>F1</b>...<b>F12</b> can be used to select sample <b>1</b> .
|
||||
The function keys <b>F1</b>...<b>F12</b> can be used to select sample <b>1</b> ... <b>12</b>,
|
||||
use the keys <b>1</b>...<b>9</b> to select a sample range <b>1-12</b> ... <b>108-120</b> and press
|
||||
one of the <b>F</b>-keys to play that sample.<br>
|
||||
<br>
|
||||
Use <b>ESC</b> to switch between samples and tags, as samples and tags are closely related, you
|
||||
can use the function keys to select Tags when playing in this mode. Press <b>ESC</b> to switch back to the sample playmode<br>
|
||||
You can create Tags using the console interface; a new Tag will use the first available entry so the
|
||||
<br>
|
||||
Use <b>ESC</b> to switch between samples and streams.
|
||||
Press <b>ESC</b> again to switch back to the sample playmode<br>
|
||||
You can create new input streams by using the console interface or by using GVeejay.<br>
|
||||
All new input streams (and samples) are auto numbered.<br>
|
||||
<br><br>
|
||||
</p>
|
||||
@@ -567,7 +558,7 @@ first Tag you create can be played by pressing the <b>F1</b> key.
|
||||
<h2><a name="4.4">4.4 Recording video</a></h2><p>
|
||||
You can record video to a new clip , by using the stream- or clip recorder functions.<br>
|
||||
For example, to record a new clip from a playing clip in MJPG format:<br>
|
||||
<pre>
|
||||
<pre>
|
||||
302:mjpg;
|
||||
</pre>
|
||||
Record 100 frames and start playing new clip when ready:
|
||||
@@ -586,7 +577,7 @@ Refer to chapter <a href="veejay-HOWTO.html#5.3">5.3</a> for some examples.<br><
|
||||
Refer to chapter <a href="veejay-HOWTO.html#5.3">5.3</a> for some examples.<br><br>
|
||||
|
||||
<h2><a name="4.5">4.5 Other utilities</a></h2><p>
|
||||
|
||||
|
||||
Currently there are 4 extra utilities <b>yuv2rawdv</b> , <b>rawdv2yuv</b> , <b>sayVIMS</b> and <b>any2yuv</b> included in the veejay package for encoding
|
||||
a Y'C<sub>B</sub>C<sub>R</sub> 4:2:0 stream to raw DV and vice versa.
|
||||
<br><br>
|
||||
|
||||
@@ -1,4 +1,21 @@
|
||||
|
||||
/* gveejay - Linux VeeJay - GVeejay GTK+-2/Glade User Interface
|
||||
* (C) 2002-2005 Niels Elburg <nelburg@looze.net>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#define DBG_C() { vj_msg(VEEJAY_MSG_DEBUG, "Implement %s", __FUNCTION__ ); }
|
||||
|
||||
void on_button_085_clicked(GtkWidget *widget, gpointer user_data)
|
||||
@@ -71,6 +88,10 @@ void on_button_001_clicked(GtkWidget *widget, gpointer user_data)
|
||||
void on_button_252_clicked( GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
single_vims( VIMS_DEBUG_LEVEL );
|
||||
if(is_button_toggled( "button_252" ))
|
||||
vims_verbosity = 1;
|
||||
else
|
||||
vims_verbosity = 0;
|
||||
}
|
||||
|
||||
void on_button_251_clicked( GtkWidget *widget, gpointer user_data)
|
||||
@@ -101,6 +122,7 @@ void on_button_sampleend_clicked(GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
info->sample[1] = info->status_tokens[FRAME_NUM];
|
||||
multi_vims( VIMS_CLIP_NEW, "%d %d", info->sample[0],info->sample[1]);
|
||||
if(info->status_tokens[PLAY_MODE] == MODE_PLAIN )
|
||||
info->uc.reload_hint[HINT_SLIST] = 1;
|
||||
}
|
||||
|
||||
@@ -825,7 +847,7 @@ void on_loop_pingpong_clicked(GtkWidget *widget, gpointer user_data)
|
||||
|
||||
#define atom_marker(name,value) {\
|
||||
info->uc.marker.lock=1;\
|
||||
update_slider_value("slider_m1", info->uc.marker.start+1,0);\
|
||||
update_slider_value(name, info->uc.marker.start+1,0);\
|
||||
info->uc.marker.lock=0;\
|
||||
}
|
||||
|
||||
@@ -890,9 +912,12 @@ void on_button_clearmarker_clicked(GtkWidget *widget, gpointer user_data)
|
||||
{
|
||||
info->uc.marker.start = 0;
|
||||
info->uc.marker.end = 0;
|
||||
atom_marker( "slider_m0", 0 );
|
||||
atom_marker( "slider_m1", (info->uc.marker.upper_bound - info->uc.marker.lower_bound) );
|
||||
atom_marker( "slider_m0", info->uc.marker.lower_bound );
|
||||
atom_marker( "slider_m1", info->uc.marker.upper_bound );
|
||||
multi_vims( VIMS_CLIP_CLEAR_MARKER, "%d", 0 );
|
||||
|
||||
info->uc.reload_hint[ HINT_MARKER ] = 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -131,7 +131,8 @@ enum
|
||||
HINT_RGBSOLID = 9,
|
||||
HINT_BUNDLES = 10,
|
||||
HINT_HISTORY = 11,
|
||||
NUM_HINTS = 12
|
||||
HINT_MARKER = 12,
|
||||
NUM_HINTS = 13
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -250,6 +251,7 @@ typedef struct
|
||||
} vims_t;
|
||||
|
||||
static vims_t vj_event_list[VIMS_MAX];
|
||||
static vims_verbosity = 0;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -1210,6 +1212,11 @@ static void vj_msg(int type, const char format[], ...)
|
||||
GtkWidget *view = glade_xml_get_widget( info->main_window,(type==4 ? "veejaytext": "gveejaytext"));
|
||||
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
|
||||
GtkTextIter iter;
|
||||
|
||||
|
||||
if( type == VEEJAY_MSG_DEBUG && vims_verbosity == 0 )
|
||||
return;
|
||||
|
||||
char tmp[1024];
|
||||
char buf[1024];
|
||||
char prefix[20];
|
||||
@@ -1858,25 +1865,26 @@ static void update_globalinfo()
|
||||
if( history[SAMPLE_START] != info->status_tokens[SAMPLE_START] )
|
||||
{
|
||||
update_spin_value( "spin_samplestart", info->status_tokens[SAMPLE_START]);
|
||||
info->uc.marker.lower_bound = 0;
|
||||
sample_changed = 1;
|
||||
update_slider_range("slider_m0", 0,
|
||||
info->status_tokens[SAMPLE_END]-info->status_tokens[SAMPLE_START],
|
||||
0,
|
||||
0 );
|
||||
//info->uc.marker.lower_bound = info->status_tokens[SAMPLE_START];
|
||||
info->uc.marker.lower_bound = 0;
|
||||
}
|
||||
|
||||
if( history[SAMPLE_END] != info->status_tokens[SAMPLE_END])
|
||||
{
|
||||
update_spin_value( "spin_sampleend", info->status_tokens[SAMPLE_END]);
|
||||
info->uc.marker.upper_bound = (info->status_tokens[SAMPLE_END] -
|
||||
info->status_tokens[SAMPLE_START]);
|
||||
|
||||
update_slider_range("slider_m1", 0,
|
||||
info->status_tokens[SAMPLE_END]-info->status_tokens[SAMPLE_START],
|
||||
info->status_tokens[SAMPLE_END]-info->status_tokens[SAMPLE_START],
|
||||
info->uc.marker.upper_bound,
|
||||
info->uc.marker.lower_bound,
|
||||
0);
|
||||
|
||||
sample_changed = 1;
|
||||
// info->uc.marker.upper_bound = info->status_tokens[SAMPLE_END];
|
||||
info->uc.marker.upper_bound = info->status_tokens[SAMPLE_END] - info->status_tokens[SAMPLE_START];
|
||||
}
|
||||
if( history[SAMPLE_LOOP] != info->status_tokens[SAMPLE_LOOP])
|
||||
{
|
||||
@@ -2110,6 +2118,14 @@ static void update_globalinfo()
|
||||
reload_bundles();
|
||||
}
|
||||
|
||||
if(info->uc.reload_hint[HINT_MARKER] == 1 )
|
||||
{
|
||||
info->uc.marker.lower_bound = 0;
|
||||
info->uc.marker.upper_bound = 0;
|
||||
update_slider_value( "slider_m0", info->uc.marker.lower_bound, 0);
|
||||
update_slider_value( "slider_m1", info->uc.marker.upper_bound, 0 );
|
||||
}
|
||||
|
||||
|
||||
memset( info->uc.reload_hint, 0, sizeof(info->uc.reload_hint ));
|
||||
info->uc.previous_playmode = pm;
|
||||
@@ -2562,13 +2578,8 @@ gboolean
|
||||
|
||||
if (!path_currently_selected)
|
||||
{
|
||||
g_print ("%d is going to be selected.\n", name);
|
||||
info->uc.selected_effect_id = name;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_print ("%d is going to be unselected.\n", name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3143,7 +3154,7 @@ on_vims_row_activated(GtkTreeView *treeview,
|
||||
|
||||
if(sscanf( vimsid, "%d", &event_id ))
|
||||
{
|
||||
if(event_id > VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END)
|
||||
if(event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END)
|
||||
{
|
||||
multi_vims( VIMS_BUNDLE, "%d", event_id );
|
||||
info->uc.reload_hint[HINT_CHAIN] = 1;
|
||||
@@ -3439,6 +3450,15 @@ static void setup_vimslist()
|
||||
setup_tree_text_column( "tree_vims", VIMS_ID, "VIMS ID");
|
||||
setup_tree_text_column( "tree_vims", VIMS_DESCR, "Description" );
|
||||
|
||||
GtkTreeSortable *sortable = GTK_TREE_SORTABLE(store);
|
||||
|
||||
gtk_tree_sortable_set_sort_func(
|
||||
sortable, VIMS_ID, sort_vims_func,
|
||||
GINT_TO_POINTER(VIMS_ID),NULL);
|
||||
|
||||
gtk_tree_sortable_set_sort_column_id(
|
||||
sortable, VIMS_ID, GTK_SORT_ASCENDING);
|
||||
|
||||
g_signal_connect( tree, "row-activated",
|
||||
(GCallback) on_vimslist_row_activated, NULL );
|
||||
|
||||
@@ -3721,7 +3741,7 @@ static void reload_bundles()
|
||||
offset += val[3];
|
||||
}
|
||||
|
||||
if( val[0] < 400 || val[0] > 500 )
|
||||
if( val[0] < 400 || val[0] >= VIMS_BUNDLE_START )
|
||||
{ // query VIMS ! (ignore in userlist)
|
||||
|
||||
gchar *content = (message == NULL ? NULL : _utf8str( message ));
|
||||
@@ -3733,7 +3753,7 @@ static void reload_bundles()
|
||||
bzero(vimsid,5);
|
||||
sprintf(vimsid, "%03d", val[0]);
|
||||
|
||||
if( val[0] > VIMS_BUNDLE_START && val[0] < VIMS_BUNDLE_END )
|
||||
if( val[0] >= VIMS_BUNDLE_START && val[0] < VIMS_BUNDLE_END )
|
||||
{
|
||||
if( vj_event_list[ val[0] ].event_id != val[0] && vj_event_list[val[0]].event_id != 0)
|
||||
{
|
||||
@@ -4186,7 +4206,11 @@ static gboolean update_sample_record_timeout(gpointer data)
|
||||
if(info->uc.render_record)
|
||||
{
|
||||
info->uc.reload_hint[HINT_HISTORY]=1;
|
||||
info->uc.render_record = 0;
|
||||
info->uc.render_record = 0; // render list has private edl
|
||||
}
|
||||
else
|
||||
{
|
||||
info->uc.reload_hint[HINT_EL] = 1;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -4213,6 +4237,7 @@ static gboolean update_stream_record_timeout(gpointer data)
|
||||
gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR(w), 0.0);
|
||||
info->streamrecording = 0;
|
||||
info->uc.recording[MODE_STREAM] = 0;
|
||||
info->uc.reload_hint[HINT_EL] = 1; // recording finished, reload edl
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
@@ -4617,9 +4642,14 @@ gui_client_event_signal(GtkWidget *widget, GdkEventClient *event,
|
||||
void vj_gui_set_debug_level(int level)
|
||||
{
|
||||
veejay_set_debug_level( level );
|
||||
|
||||
vims_verbosity = level;
|
||||
if(level)
|
||||
veejay_msg(VEEJAY_MSG_INFO, "Be verbose");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void vj_gui_init(char *glade_file)
|
||||
{
|
||||
char path[MAX_PATH_LEN];
|
||||
@@ -4699,6 +4729,9 @@ void vj_gui_init(char *glade_file)
|
||||
setup_colorselection();
|
||||
setup_rgbkey();
|
||||
setup_bundles();
|
||||
|
||||
set_toggle_button( "button_252", vims_verbosity );
|
||||
|
||||
vj_gui_disable();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
/* gveejay - Linux VeeJay - GVeejay GTK+-2/Glade User Interface
|
||||
* (C) 2002-2005 Niels Elburg <nelburg@looze.net>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#ifndef VJAPI_H
|
||||
#define VJAPI_H
|
||||
|
||||
|
||||
@@ -565,8 +565,7 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el,
|
||||
}
|
||||
|
||||
|
||||
sprintf( tag->descr, "%s", tag->source_name );
|
||||
|
||||
vj_tag_get_by_type( tag->source_type, tag->descr);
|
||||
|
||||
/* effect chain is empty */
|
||||
for (i = 0; i < CLIP_MAX_EFFECTS; i++)
|
||||
@@ -1718,29 +1717,24 @@ void vj_tag_get_source_name(int t1, char *dst)
|
||||
sprintf(dst, "error in tag %d", t1);
|
||||
}
|
||||
}
|
||||
#include <valgrind/memcheck.h>
|
||||
void vj_tag_get_descriptive(int id, char *description)
|
||||
{
|
||||
vj_tag *tag = vj_tag_get(id);
|
||||
if(!tag) {sprintf(description, "invalid");return;}
|
||||
|
||||
int type = tag->source_type;
|
||||
void vj_tag_get_by_type(int type, char *description )
|
||||
{
|
||||
switch (type) {
|
||||
case VJ_TAG_TYPE_COLOR:
|
||||
sprintf(description, "Solid {R=%d,G=%d,B=%d}",
|
||||
tag->color_r,tag->color_g,tag->color_b);
|
||||
sprintf(description, "Solid" );
|
||||
break;
|
||||
case VJ_TAG_TYPE_NONE:
|
||||
sprintf(description, "%s", "EditList");
|
||||
break;
|
||||
case VJ_TAG_TYPE_MCAST:
|
||||
sprintf(description, "%s", "Multicast layer");
|
||||
sprintf(description, "%s", "Multicast");
|
||||
break;
|
||||
case VJ_TAG_TYPE_NET:
|
||||
sprintf(description, "%s", "Network layer");
|
||||
sprintf(description, "%s", "Unicast");
|
||||
break;
|
||||
case VJ_TAG_TYPE_AVFORMAT:
|
||||
sprintf(description, "%s", "FFmpeg layer");
|
||||
sprintf(description, "%s", "AVFormat");
|
||||
break;
|
||||
#ifdef HAVE_V4L
|
||||
case VJ_TAG_TYPE_V4L:
|
||||
@@ -1749,7 +1743,7 @@ void vj_tag_get_descriptive(int id, char *description)
|
||||
#endif
|
||||
#ifdef SUPPORT_READ_DV2
|
||||
case VJ_TAG_TYPE_DV1394:
|
||||
sprintf(description, "%s", "dv1394");
|
||||
sprintf(description, "%s", "DV1394");
|
||||
break;
|
||||
#endif
|
||||
case VJ_TAG_TYPE_YUV4MPEG:
|
||||
@@ -1759,6 +1753,20 @@ void vj_tag_get_descriptive(int id, char *description)
|
||||
sprintf(description, "%s","SHM");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void vj_tag_get_descriptive(int id, char *description)
|
||||
{
|
||||
vj_tag *tag = vj_tag_get(id);
|
||||
if(!tag)
|
||||
{
|
||||
sprintf(description, "invalid");
|
||||
}
|
||||
else
|
||||
{
|
||||
vj_tag_get_by_type( tag->source_type, description );
|
||||
}
|
||||
}
|
||||
|
||||
/* this method tries to find a tag of given type */
|
||||
|
||||
@@ -1265,26 +1265,6 @@
|
||||
<property name="row_spacing">0</property>
|
||||
<property name="column_spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVScale" id="audiovolume">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="draw_value">True</property>
|
||||
<property name="value_pos">GTK_POS_BOTTOM</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
|
||||
<property name="inverted">True</property>
|
||||
<property name="adjustment">0 0 1 0.0500000007451 0.10000000149 0.20000000298</property>
|
||||
<signal name="value_changed" handler="on_audiovolume_value_changed" last_modification_time="Mon, 21 Mar 2005 01:00:16 GMT"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVScale" id="manualopacity">
|
||||
<property name="visible">True</property>
|
||||
@@ -1302,6 +1282,30 @@
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="x_padding">5</property>
|
||||
<property name="y_padding">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVScale" id="audiovolume">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="draw_value">True</property>
|
||||
<property name="value_pos">GTK_POS_BOTTOM</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
|
||||
<property name="inverted">True</property>
|
||||
<property name="adjustment">0 0 1 0.0500000007451 0.10000000149 0.20000000298</property>
|
||||
<signal name="value_changed" handler="on_audiovolume_value_changed" last_modification_time="Mon, 21 Mar 2005 01:00:16 GMT"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="x_padding">5</property>
|
||||
<property name="y_padding">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
@@ -1601,60 +1605,6 @@
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button106">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Refresh EditList</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal name="clicked" handler="on_button_el_addclip_clicked" last_modification_time="Tue, 05 Apr 2005 02:02:25 GMT"/>
|
||||
|
||||
<child>
|
||||
<widget class="GtkAlignment" id="alignment192">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xscale">0</property>
|
||||
<property name="yscale">0</property>
|
||||
<property name="top_padding">0</property>
|
||||
<property name="bottom_padding">0</property>
|
||||
<property name="left_padding">0</property>
|
||||
<property name="right_padding">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox380">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">2</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImage" id="image276">
|
||||
<property name="visible">True</property>
|
||||
<property name="pixbuf">icon_refresh.png</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="button104">
|
||||
<property name="visible">True</property>
|
||||
@@ -1793,7 +1743,7 @@
|
||||
<child>
|
||||
<widget class="GtkImage" id="image306">
|
||||
<property name="visible">True</property>
|
||||
<property name="pixbuf">icon_save.png</property>
|
||||
<property name="pixbuf">icon_newclip.png</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
@@ -7238,7 +7188,7 @@ YV16</property>
|
||||
<child>
|
||||
<widget class="GtkImage" id="image305">
|
||||
<property name="visible">True</property>
|
||||
<property name="pixbuf">icon_clear.png</property>
|
||||
<property name="pixbuf">icon_keydetach.png</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
@@ -8622,7 +8572,7 @@ YV16</property>
|
||||
<property name="editable">True</property>
|
||||
<property name="visibility">True</property>
|
||||
<property name="max_length">0</property>
|
||||
<property name="text" translatable="yes">255:;</property>
|
||||
<property name="text" translatable="yes">600:;</property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
|
||||
BIN
veejay-current/share/icon_keydetach.png
Normal file
BIN
veejay-current/share/icon_keydetach.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 885 B |
BIN
veejay-current/share/icon_newclip.png
Normal file
BIN
veejay-current/share/icon_newclip.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 407 B |
@@ -1284,7 +1284,7 @@ int vj_event_parse_msg(veejay_t *v, char *msg)
|
||||
net_id, i , (i < 2 ? vj_event_list[id].args[i]: num_array[i]));
|
||||
if(i<2) vims_arguments[i].value = (void*) &(vj_event_list[id].args[i]);
|
||||
else
|
||||
vims_arguments[i].value = (void*) &(num_array[i]);
|
||||
vims_arguments[i].value = NULL;
|
||||
}
|
||||
fmt_offset += 3;
|
||||
}
|
||||
@@ -2296,11 +2296,15 @@ void vj_event_send_vimslist(void *ptr, const char format[], va_list ap)
|
||||
// send event list seperatly
|
||||
|
||||
for( i = 1; vj_event_list[i].name != NULL ; i ++ )
|
||||
{
|
||||
// dont include bundles or query messages
|
||||
if( vj_event_list[i].event_id < 400 || vj_event_list[i].event_id > 599 )
|
||||
{
|
||||
len += strlen( vj_event_list[i].name );
|
||||
len += (vj_event_list[i].format == NULL ? 0 : strlen(vj_event_list[i].format) );
|
||||
len += 12; /* event_id: 4, num_params: 2 , format:3 (strlen), descr: 3 (strlen) */
|
||||
}
|
||||
}
|
||||
|
||||
if(len > 1)
|
||||
{
|
||||
@@ -2311,6 +2315,8 @@ void vj_event_send_vimslist(void *ptr, const char format[], va_list ap)
|
||||
|
||||
|
||||
for( i = 1; vj_event_list[i].name != NULL ; i ++ )
|
||||
{
|
||||
if( vj_event_list[i].event_id < 400 || vj_event_list[i].event_id > 599 )
|
||||
{
|
||||
char tmp[12];
|
||||
bzero(tmp,12);
|
||||
@@ -2328,7 +2334,7 @@ void vj_event_send_vimslist(void *ptr, const char format[], va_list ap)
|
||||
strncat( buf, format, format_len );
|
||||
strncat( buf, description, descr_len );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
SEND_MSG(v,buf);
|
||||
if(buf) free(buf);
|
||||
|
||||
Reference in New Issue
Block a user