diff --git a/veejay-current/README b/veejay-current/README index 0f6246a7..ef010437 100644 --- a/veejay-current/README +++ b/veejay-current/README @@ -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 -H -R - + veejay -d -W -H CONTACT / FEEDBACK & HELP ========================= diff --git a/veejay-current/configure.ac b/veejay-current/configure.ac index 50058c9e..72420a4c 100644 --- a/veejay-current/configure.ac +++ b/veejay-current/configure.ac @@ -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]) diff --git a/veejay-current/doc/NET.txt b/veejay-current/doc/NET.txt index e9d0f100..f6e841a8 100644 --- a/veejay-current/doc/NET.txt +++ b/veejay-current/doc/NET.txt @@ -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 -H -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 diff --git a/veejay-current/doc/VIMS.txt b/veejay-current/doc/VIMS.txt index 7bbb3560..e4abecc0 100644 --- a/veejay-current/doc/VIMS.txt +++ b/veejay-current/doc/VIMS.txt @@ -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> | | + <501 - 599> | | 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 ;" - 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' @@ -113,15 +136,15 @@ Some reserved numbers: clip id 0 : select currently playing clip clip id -1 : select highest clip number - chain entry -1 : select current chain entry + chain entry -1 : select current chain entry stream id 0 : select currently playing stream stream id -1 : select highest stream number - key modifier : 0 = normal, 1= alt , 2 = ctrl, 3 = shift + key modifier : 0 = normal, 1= alt , 2 = ctrl, 3 = shift frame -1 : use highest possible frame number (usually num video frames) playback mode : 0 = clip, 1 = stream, 2 = plain data format : yv16 (yuv 4:2:2 raw) , mpeg4, divx, msmpeg4v3, div3, dvvideo, dvsd, mjpeg, i420 and yv12 (yuv 4:2:0 raw) - loop type : 0 = no looping, 1 = normal loop, 2 = pingpong (bounce) loop + loop type : 0 = no looping, 1 = normal loop, 2 = pingpong (bounce) loop What follows now is a general description of argument formatting and its ordering. @@ -129,10 +152,10 @@ 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 + 021:10 100; will copy frames 10-100 into a temporary buffer 020:100; will insert the frames 10-100 from the temporary buffer on frame 100 @@ -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) + + + + 3490 + + 352 + 288 + + + + 1 + + 2 + + 3 + + 0 + 0 + + 1 + + 0 + + 1 + + 352 + 288 + + 0.000000 + 0 + 0 + 0 + + 0 + + 0 + + + + + + +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. diff --git a/veejay-current/doc/veejay-HOWTO.html b/veejay-current/doc/veejay-HOWTO.html index 6ff4173b..8892bbcf 100644 --- a/veejay-current/doc/veejay-HOWTO.html +++ b/veejay-current/doc/veejay-HOWTO.html @@ -16,6 +16,7 @@ v1.3, 9 November 2003
v1.4, 24 May 2004
v2.0, 25 July 2004
v2.1 27 January 2005
+v2.2 22 April 2005

This document describes how to use veejay, a visual 'music' instrument for Linux/GNU

@@ -107,6 +108,8 @@ This document is targeted at the Linux user interested in learning a bit about v
Partial re-write to match version 0.6
Version 2.1
Updated Howto to match version 0.7.2
+Version 2.2 +
Updated Howto to match version 0.8

1.5 New versions of this document

@@ -137,40 +140,23 @@ with no Front-Cover Texts , and with no Back-Cover Texts. A copy of this license

2. About Veejay

-Veejay is a 'visual' instrument and realtime video sampler, featuring simple non-linear - editing and mixing from multiple sources.
-You can load multiple video files, cut and paste portion -s of video/audio and save it as an Edit Decision List.
Also, you can record new clips from - existing clips or (live) streams.
With these clips you can change playback speed - (slow motion/acceleration), change the looptype and set markers.

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

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

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

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

-Veejay can be remotely controled through using OSC (Open Sound Control) or via -its own internal message system 'VIMS'.
'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.

-Finally, you can stream (uncompressed) video over the network from peer to peer over TCP -or by using multicast over UDP (one to many).
+Veejay is a visual instrument and realtime video sampler. +It allows you to 'play' the video like you would play a Piano +and it allows you to record the resulting video directly to disk for +immediate playback (video sampling).

- +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).

+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.
+
+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.
+Use GVeejay to customize keyboard mappings and save the configuration file.

2.1 Features

@@ -178,13 +164,14 @@ or by using multicast over UDP (one to many).

General

  • Free Software (GNU GPL) -
  • Realtime video sampling from multiple sources -
  • Native YUV processing -
  • XML formatted Sample Lists and Effect Templates +
  • Realtime video mixing from multiple sources +
  • Native YUV processing +
  • XML configuration file - and cliplists
  • JACK (low latency audio server) support
  • SDL video output
  • DirectFB secundary head (TV-Out) video output
  • Man pages +
  • Graphical User Interface 'GVeejay'

Media

    @@ -196,29 +183,33 @@ or by using multicast over UDP (one to many).
  • Video4Linux support (only Input)
  • unicast/multicast video streaming
-

Editing

+

Editing/Mixing

    -
  • Clip based (purely virtual,also called 'Sample' like in Audio Samplers) +
  • Clip based (purely virtual,also called 'Sample')
  • Non descructive (Edit Decision List) +
  • Chained FX Editing (can hold up to 20 effects)
  • Over 40 different types of blending
  • Chroma / Luma keying -
  • 103 image/video effects +
  • 110+ image/video effects
  • No undo/redo
  • Frame accurate navigation/editing
  • Cut/Copy/Paste/Crop/Delete editlist portions +
  • Chainable Veejay's +
  • Support for trickplay, jamming and jittering

Interaction

    -
  • VIMS (over TCP/IP) +
  • VIMS (over TCP/IP unicast and UDP multicast)
  • sayVIMS (command line utility) -
  • SDL Keybindings +
  • Dynamic keyboard mappings +
  • Programmable User Events (Bundled VIMS)
  • OSC (over UDP, both unicast and multicast)

-

2.2Hardware configuration

+

2.2 Hardware configuration

Veejay requires at least a linux kernel 2.4.x, 2.6.x or later, a lot of diskspace and a fast CPU. Depending on the speed of your machine, your milage may vary. See the list below for @@ -232,24 +223,26 @@ a few systems veejay was reported to work on:

  • An Athlon XP 1600 Mhz and Matrox G550 Dualhead( TVout support through DirectFB)
  • A Pentium 4 2.2 Ghz and Matrox G550 Dualhead( TVout support through DirectFB)
  • A Pentium 4 3.0 Ghz and ATI Radeon 9600 XT/ (no TVout yet) -
  • Sony Playstation 2 (MIPS, little endian) (but runs very slow, doesnt use PS/2 hardware features) +
  • Sony Playstation 2 (MIPS, little endian) (but runs very slow +/- 20 fps)
    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 all your resources.
    +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)

    3. Installation

    3.1 Dependencies

    -Before you install Veejay, make sure you have the following dependencies installed:
    +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.

      -
    • (optional) libdv >= 0.99 -
    • (recommended) The SDL library >= 1.2.3 +
    • (optional) libdv >= 1.02 +
    • (optional) The SDL library >= 1.2.3
    • (optional) The XML C library 2 for gnome >=2.5.4
    • (optional) JACK low latency audio server >= 0.98.1
    • (optional) DirectFB >= 0.9.17 -
    • (optional) FreeType >= 2.1.9 +
    • (optional) FreeType >= 2.1.9 +
    • (optional) GTK >= 2.6.0

    On newer distributions, some of the listed software is already installed but you may be missing the -devel- packages! (especially on redhat, suse and debdian systems!!)

    @@ -266,48 +259,52 @@ $ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig Decompress and untar the file by typing:
    -$ tar -jxvf veejay-0.7.x.tar.bz2
    +$ tar -jxvf veejay-0.8.x.tar.bz2
     
    Change to the directory containing veejay's source's:
    -$ cd veejay-0.7.x
    +$ cd veejay-0.8.x
     
     $ ./configure
     
    On completion it will summarize the results of the ./configure script, which could look like this:
    -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
    -
    +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
     
     
    -Dont worry if you dont have 'Veejay Video Objects support' ; it is still in development. Now, you can start building veejay
     $ make
    @@ -318,23 +315,24 @@ Followed by
     

    -

    3.3 Setting up streams

    -First of all, you need to have Video For Linux enabled in your kernel configuration. -Make sure that V4L information in proc filesystem is enabled; veejay uses the proc file -system to find out what devices can be used to read from. -
    -Secondly, in order to use multicast streaming, you must have the option IP multicast -enabled in your kernel configuration. Also, you need to add a multicast route : -

    -$ route add -net 224.0.0.0 netmask 255.255.255.0 dev eth0
    -
    +

    3.3 Setting up multicast

    -Chapter 4.2 sayVIMS includes examples to create several -types of input streams +Multicast is a technology that reduces network traffic by +simultaneously delivering a single stream of information +to any interested recipient.

    -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 -or more of these options.
    +To enable multicast in Veejay, you must have enabled IP multicast +in your kernel configuration. +

    +Finally you need to add a multicast route : +

    +  $ route add -net 224.0.0.0 netmask 255.255.255.0 dev eth0
    +
    +
    +Next, Veejay can be started with the commandline flags +-M/--multicast-osc and/or -V/--multicast-vims +
    +

    4. Using Veejay

    @@ -402,7 +400,7 @@ This limitation is also valid when streaming video from veejay to another veejay

    4.2 sayVIMS

    sayVIMS is a commandline utility distributed with the veejay package, -it allows you to give short commands in interactive mode
    +it allows you to give short commands in interactive mode

    $ sayVIMS -i -h localhost -p 3490

    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:
     Also, you can send messages in VIMS format (or files, containing VIMS messages )

    For example, add the Pixelate effect on the Effect Chain of the current playing stream or clip:
    -sayVIMS -h localhost -p 3490 "182:0 0 150 3;"
    +sayVIMS -h localhost -p 3490 "361:0 0 150 3;"
     
    -See the VIMS document in the source package for a more detailed (but not yet complete) overview.

    -
    -For example, you can open /dev/video0, channel 0 (composite port) by giving the VIMS message:
    +Last but not least, sayVIMS can parse files containing VIMS messages.
    +See the test/examples directory of the package for a list of perl +scripts that output a VIMS script.
    -$ sayVIMS -h localhost -p 3490 "144:0 0;"
    +sayVIMS -f advocate.vims -h localhost -p 3490
     
    +See the VIMS.txt file in the source package for a more detailed (but not yet complete) overview.
    +
    Alternativly, you can start a secundary veejay and stream from peer to peer in uncompressed video:
     $ veejay -d -p 5000
     
    -$ sayVIMS -h localhost -p 5000 "165:localhost 3490;"
    +$ 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 -d -$ sayVIMS -h localhost -p 3490 "166:224.0.0.50 5000;" +$ sayVIMS -h localhost -p 3490 "246:224.0.0.50 5000;" $ veejay -d -p 4000 -$ sayVIMS -h localhost -p 4000 "166:224.0.0.50 5000;" +$ sayVIMS -h localhost -p 4000 "246:224.0.0.50 5000;"
    Or, if you want to play a XVID movie (or any other compressed format that is not I frame only):
    -$ sayVIMS -h localhost -p 3490 "149:/tmp/my-XVID-movie.avi;"
    +$ sayVIMS -h localhost -p 3490 "244:/tmp/my-XVID-movie.avi;"
     

    4.3 The keyboard interface

    -The keyboard interface takes keypresses (events) from SDL, almost all keys on -your keyboard have a function in veejay.

    - -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).

    -The keys a,s,d,f, -g,h,j,k and l can be used to increase speed from 1 (normal) to -9 (fast)

    - -Here is a quick overview for the most commonly used keys, if applied in order you will end up +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)


    @@ -556,10 +547,10 @@ The function keys F1...F12 can be used to select sample 1 . use the keys 1...9 to select a sample range 1-12 ... 108-120 and press one of the F-keys to play that sample.

    -Use ESC 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 ESC to switch back to the sample playmode
    -You can create Tags using the console interface; a new Tag will use the first available entry so the -first Tag you create can be played by pressing the F1 key. +Use ESC to switch between samples and streams. +Press ESC again to switch back to the sample playmode
    +You can create new input streams by using the console interface or by using GVeejay.
    +All new input streams (and samples) are auto numbered.


    @@ -567,7 +558,7 @@ first Tag you create can be played by pressing the F1 key. You can record video to a new clip , by using the stream- or clip recorder functions.
    For example, to record a new clip from a playing clip in MJPG format:
    -010:mjpg;
    +302:mjpg;
     
    Record 100 frames and start playing new clip when ready:
    @@ -586,7 +577,7 @@ Refer to chapter 5.3 for some examples.
    <

    4.5 Other utilities

    -Currently there are 4 extra utilities yuv2rawdv , rawdv2yuv , sendVIMS and any2yuv included in the veejay package for encoding +Currently there are 4 extra utilities yuv2rawdv , rawdv2yuv , sayVIMS and any2yuv included in the veejay package for encoding a Y'CBCR 4:2:0 stream to raw DV and vice versa.

    diff --git a/veejay-current/gveejay/callback.c b/veejay-current/gveejay/callback.c index c9e6f38c..65d288f0 100644 --- a/veejay-current/gveejay/callback.c +++ b/veejay-current/gveejay/callback.c @@ -1,4 +1,21 @@ - +/* gveejay - Linux VeeJay - GVeejay GTK+-2/Glade User Interface + * (C) 2002-2005 Niels Elburg + * + * + * 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,7 +122,8 @@ 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]); - info->uc.reload_hint[HINT_SLIST] = 1; + if(info->status_tokens[PLAY_MODE] == MODE_PLAIN ) + info->uc.reload_hint[HINT_SLIST] = 1; } void on_button_veejay_clicked(GtkWidget *widget, gpointer user_data) @@ -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) ); - multi_vims( VIMS_CLIP_CLEAR_MARKER, "%d", 0 ); + 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; + } diff --git a/veejay-current/gveejay/vj-api.c b/veejay-current/gveejay/vj-api.c index 9c0b7e67..b285c5be 100644 --- a/veejay-current/gveejay/vj-api.c +++ b/veejay-current/gveejay/vj-api.c @@ -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(); } diff --git a/veejay-current/gveejay/vj-api.h b/veejay-current/gveejay/vj-api.h index 3f11ffa8..4e29fbcf 100644 --- a/veejay-current/gveejay/vj-api.h +++ b/veejay-current/gveejay/vj-api.h @@ -1,3 +1,21 @@ +/* gveejay - Linux VeeJay - GVeejay GTK+-2/Glade User Interface + * (C) 2002-2005 Niels Elburg + * + * + * 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 diff --git a/veejay-current/libstream/vj-tag.c b/veejay-current/libstream/vj-tag.c index d31e0880..c117f32c 100644 --- a/veejay-current/libstream/vj-tag.c +++ b/veejay-current/libstream/vj-tag.c @@ -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 -void vj_tag_get_descriptive(int id, char *description) + +void vj_tag_get_by_type(int type, char *description ) { - vj_tag *tag = vj_tag_get(id); - if(!tag) {sprintf(description, "invalid");return;} - - int type = tag->source_type; - switch (type) { + 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 */ diff --git a/veejay-current/share/gveejay.glade b/veejay-current/share/gveejay.glade index 865f31d8..ee61d78c 100644 --- a/veejay-current/share/gveejay.glade +++ b/veejay-current/share/gveejay.glade @@ -1265,26 +1265,6 @@ 0 0 - - - True - True - True - GTK_POS_BOTTOM - 2 - GTK_UPDATE_CONTINUOUS - True - 0 0 1 0.0500000007451 0.10000000149 0.20000000298 - - - - 0 - 1 - 0 - 1 - - - True @@ -1302,6 +1282,30 @@ 2 0 1 + 5 + 1 + + + + + + True + True + True + GTK_POS_BOTTOM + 2 + GTK_UPDATE_CONTINUOUS + True + 0 0 1 0.0500000007451 0.10000000149 0.20000000298 + + + + 0 + 1 + 0 + 1 + 5 + 1 @@ -1601,60 +1605,6 @@ - - - True - Refresh EditList - True - GTK_RELIEF_NORMAL - True - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - icon_refresh.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - - - - 0 - False - False - - - True @@ -1793,7 +1743,7 @@ True - icon_save.png + icon_newclip.png 0.5 0.5 0 @@ -7238,7 +7188,7 @@ YV16 True - icon_clear.png + icon_keydetach.png 0.5 0.5 0 @@ -8622,7 +8572,7 @@ YV16 True True 0 - 255:; + 600:; True * False diff --git a/veejay-current/share/icon_keydetach.png b/veejay-current/share/icon_keydetach.png new file mode 100644 index 00000000..69af5bc1 Binary files /dev/null and b/veejay-current/share/icon_keydetach.png differ diff --git a/veejay-current/share/icon_newclip.png b/veejay-current/share/icon_newclip.png new file mode 100644 index 00000000..560bf4e6 Binary files /dev/null and b/veejay-current/share/icon_newclip.png differ diff --git a/veejay-current/veejay/vj-event.c b/veejay-current/veejay/vj-event.c index 3b3706c3..236d55b6 100644 --- a/veejay-current/veejay/vj-event.c +++ b/veejay-current/veejay/vj-event.c @@ -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; } @@ -2297,9 +2297,13 @@ void vj_event_send_vimslist(void *ptr, const char format[], va_list ap) for( i = 1; vj_event_list[i].name != NULL ; i ++ ) { - 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) */ + // 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) @@ -2312,24 +2316,26 @@ void vj_event_send_vimslist(void *ptr, const char format[], va_list ap) for( i = 1; vj_event_list[i].name != NULL ; i ++ ) { - char tmp[12]; - bzero(tmp,12); - int event_id = vj_event_list[i].event_id; - char *description = (char*) vj_event_list[i].name; - char *format = (char*) vj_event_list[i].format; - int format_len = ( vj_event_list[i].format == NULL ? 0:strlen( vj_event_list[i].format )); - int descr_len = strlen(description); - - sprintf(tmp, "%04d%02d%03d%03d", - event_id, vj_event_list[i].num_params , format_len, descr_len ); + if( vj_event_list[i].event_id < 400 || vj_event_list[i].event_id > 599 ) + { + char tmp[12]; + bzero(tmp,12); + int event_id = vj_event_list[i].event_id; + char *description = (char*) vj_event_list[i].name; + char *format = (char*) vj_event_list[i].format; + int format_len = ( vj_event_list[i].format == NULL ? 0:strlen( vj_event_list[i].format )); + int descr_len = strlen(description); + + sprintf(tmp, "%04d%02d%03d%03d", + event_id, vj_event_list[i].num_params , format_len, descr_len ); - strncat( buf, tmp, 12 ); - if(format != NULL) - strncat( buf, format, format_len ); - strncat( buf, description, descr_len ); + strncat( buf, tmp, 12 ); + if(format != NULL) + strncat( buf, format, format_len ); + strncat( buf, description, descr_len ); + } } - SEND_MSG(v,buf); if(buf) free(buf); }