]> git.pld-linux.org Git - packages/cinelerra.git/commitdiff
- removed mpeg2 patch (not needed with libmpeg3 >= 1.5.0-2)
authorJakub Bogusz <qboosh@pld-linux.org>
Mon, 24 Mar 2003 17:30:25 +0000 (17:30 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- changed system-libs patch to use only system quicktime headers (BR: 1.6.1-2)
- added lame patch to use system libmp3lame (contains lame frontend update)
- strip theme plugins before "bootstrap" (strip patch), the rest in install
- changed font search path to /usr/share/fonts (fontsdir patch)

Changed files:
    cinelerra-fontsdir.patch -> 1.1
    cinelerra-lame.patch -> 1.1
    cinelerra-mpeg2.patch -> 1.2
    cinelerra-strip.patch -> 1.1
    cinelerra-system-libs.patch -> 1.3
    cinelerra.spec -> 1.3

cinelerra-fontsdir.patch [new file with mode: 0644]
cinelerra-lame.patch [new file with mode: 0644]
cinelerra-mpeg2.patch [deleted file]
cinelerra-strip.patch [new file with mode: 0644]
cinelerra-system-libs.patch
cinelerra.spec

diff --git a/cinelerra-fontsdir.patch b/cinelerra-fontsdir.patch
new file mode 100644 (file)
index 0000000..764b442
--- /dev/null
@@ -0,0 +1,11 @@
+--- cinelerra-1.1.5/plugins/titler/title.C.orig        Mon Nov 11 06:19:10 2002
++++ cinelerra-1.1.5/plugins/titler/title.C     Mon Mar 24 10:30:30 2003
+@@ -14,7 +14,7 @@
+ #include <string.h>
+-#define FONT_SEARCHPATH "/usr/lib/cinelerra/fonts"
++#define FONT_SEARCHPATH "/usr/share/fonts"
+ //#define FONT_SEARCHPATH "/usr/X11R6/lib/X11/fonts"
diff --git a/cinelerra-lame.patch b/cinelerra-lame.patch
new file mode 100644 (file)
index 0000000..ff16d12
--- /dev/null
@@ -0,0 +1,2218 @@
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/brhist.c cinelerra-1.1.5/plugins/lame/frontend/brhist.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/brhist.c        Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/brhist.c     Sun Oct 27 15:02:05 2002
+@@ -53,12 +53,13 @@
+ #endif
+-#if defined(HAVE_TERMCAP)
+-#if defined(HAVE_TERMCAP_H)
+-# include <termcap.h>
+-#elif defined(HAVE_NCURSES_TERMCAP_H)
++#if defined(HAVE_NCURSES_TERMCAP_H)
+ # include <ncurses/termcap.h>
+-#endif
++#elif defined(HAVE_TERMCAP_H)
++# include <termcap.h>
++#elif defined(HAVE_TERMCAP)
++#include <curses.h>
++#include <term.h>
+ #endif
+ #include "brhist.h"
+@@ -310,12 +311,15 @@
+     int i;
+     int br_hist [BRHIST_WIDTH];
+     int st_mode [4];
++    int bl_type [6];
+     int st_frames = 0;
+     int br_frames = 0;
+     double sum = 0.;
++    extern int silent;
+     
+     lame_stereo_mode_hist ( gf, st_mode );
+     lame_bitrate_hist     ( gf, br_hist );
++    lame_block_type_hist  ( gf, bl_type );
+     
+     for (i = 0; i < BRHIST_WIDTH; i++) {
+         br_frames += br_hist[i];
+@@ -340,6 +344,24 @@
+             fprintf ( Console_IO.Console_fp, "   MS: %d (%#5.4g%%)", st_mode[MS], 100. * st_mode[MS] / st_frames );
+     }
+     fprintf ( Console_IO.Console_fp, "\n" );
++
++    if (bl_type[5] > 0 && silent <= -5 && silent > -10) {
++        fprintf ( Console_IO.Console_fp, "block type");
++        fprintf ( Console_IO.Console_fp,  " long: %#4.3f", 100. * bl_type[0] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, " start: %#4.3f", 100. * bl_type[1] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, " short: %#4.3f", 100. * bl_type[2] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp,  " stop: %#4.3f", 100. * bl_type[3] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, " mixed: %#4.3f", 100. * bl_type[4] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, " (%%)\n" );
++    }
++    else if (bl_type[5] > 0 && silent <= -10) {
++        fprintf ( Console_IO.Console_fp, "block types   granules   percent\n" );
++        fprintf ( Console_IO.Console_fp, "      long: % 10d  % 8.3f%%\n", bl_type[0], 100. * bl_type[0] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, "     start: % 10d  % 8.3f%%\n", bl_type[1], 100. * bl_type[1] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, "     short: % 10d  % 8.3f%%\n", bl_type[2], 100. * bl_type[2] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, "      stop: % 10d  % 8.3f%%\n", bl_type[3], 100. * bl_type[3] / bl_type[5] );
++        fprintf ( Console_IO.Console_fp, "     mixed: % 10d  % 8.3f%%\n", bl_type[4], 100. * bl_type[4] / bl_type[5] );
++    }
+     fflush  ( Console_IO.Console_fp );
+ }
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/console.c cinelerra-1.1.5/plugins/lame/frontend/console.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/console.c       Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/console.c    Tue Sep  3 13:31:39 2002
+@@ -19,8 +19,14 @@
+ #include "console.h"
+-#if defined(TERMCAP_AVAILABLE)
++#if defined(HAVE_TERMCAP)
++#include <curses.h> 
++#include <term.h>
++#if defined(HAVE_TERMCAP_H)
+ # include <termcap.h>
++#elif defined(HAVE_NCURSES_TERMCAP_H)
++# include <ncurses/termcap.h>
++#endif
+ #endif
+ #ifdef WITH_DMALLOC
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/get_audio.c cinelerra-1.1.5/plugins/lame/frontend/get_audio.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/get_audio.c     Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/get_audio.c  Thu Oct 17 14:38:32 2002
+@@ -49,12 +49,18 @@
+ # endif
+ #endif
++
+ #define         MAX_U_32_NUM            0xFFFFFFFF
+ #include <math.h>
+ #include <sys/stat.h>
++#ifdef __sun__
++/* woraround for SunOS 4.x, it has SEEK_* defined here */
++#include <unistd.h>
++#endif
++
+ #include "lame.h"
+ #include "main.h"
+ #include "get_audio.h"
+@@ -78,7 +84,7 @@
+ int     lame_decode_initfile(const char *fullname,
+                              mp3data_struct * const mp3data);
+ #else
+-int     lame_decode_initfile(FILE * const fd, mp3data_struct * const mp3data);
++int     lame_decode_initfile(FILE * fd, mp3data_struct * mp3data);
+ #endif
+ /* read mp3 file until mpglib returns one frame of PCM data */
+@@ -98,10 +104,10 @@
+ static int read_samples_pcm(FILE * musicin, int sample_buffer[2304],
+                             int frame_size, int samples_to_read);
+-static int read_samples_mp3(lame_global_flags * gfp, FILE * musicin,
+-                            short int mpg123pcm[2][1152], int num_chan);
+-static int read_samples_ogg(lame_global_flags * gfp, FILE * musicin,
++static int read_samples_mp3(lame_global_flags * const gfp, FILE * const musicin,
+                             short int mpg123pcm[2][1152], int num_chan);
++static int read_samples_ogg(lame_global_flags * const gfp, FILE * const musicin,
++                            short int mpg123pcm[2][1152], const int num_chan);
+ void    CloseSndFile(sound_file_format input, FILE * musicin);
+ FILE   *OpenSndFile(lame_global_flags * gfp, char *);
+@@ -182,7 +188,7 @@
+     /* open the input file */
+     count_samples_carefully = 0;
+     num_samples_read=0;
+-    pcmbitwidth = 16;
++    pcmbitwidth=in_bitwidth;
+     musicin = OpenSndFile(gfp, inPath);
+ }
+@@ -379,10 +385,9 @@
+       }
+     }
++    /* LAME mp3 and ogg output 16bit -  convert to int, if necessary */
+     if( input_format == sf_mp1 || input_format == sf_mp2 || 
+         input_format == sf_mp3 || input_format == sf_ogg ) {
+-                              /* LAME mp3 and ogg input routines currently */
+-                              /*  only accept up to 16 bit samples */
+       if( buffer != NULL ) {
+           for( i = samples_read; --i >= 0; )
+               buffer[0][i] = buf_tmp16[0][i] << (8 * sizeof(int) - 16);
+@@ -857,8 +862,10 @@
+         for (i = 0; i < samples_read; i++)
+             sample_buffer[i] <<= (8 * sizeof(int) - 24);
+       break;
++    case 32:
++      break;
+     default:
+-        fprintf(stderr, "Only 8, 16, and 24 bit input files supported \n");
++        fprintf(stderr, "Only 8, 16, 24 and 32 bit input files supported \n");
+         exit(1);
+     }
+@@ -925,11 +932,15 @@
+           *--op = ip[i]<<(b-16) | ip[i+1]<<(b-8); 
+       GA_URS_IFLOOP( 3 )
+           *--op = ip[i]<<(b-24) | ip[i+1]<<(b-16) | ip[i+2]<<(b-8);
++      GA_URS_IFLOOP( 4 )
++          *--op = ip[i]<<(b-32) | ip[i+1]<<(b-24) | ip[i+2]<<(b-16) | ip[i+3] << (b-8);
+     } else {
+       GA_URS_IFLOOP( 2 )
+           *--op = ip[i]<<(b-8) | ip[i+1]<<(b-16); 
+       GA_URS_IFLOOP( 3 )
+           *--op = ip[i]<<(b-8) | ip[i+1]<<(b-16) | ip[i+2]<<(b-24);
++      GA_URS_IFLOOP( 4 )
++          *--op = ip[i]<<(b-8) | ip[i+1]<<(b-16) | ip[i+2]<<(b-24) | ip[i+3]<<(b-32);
+     }
+ #undef GA_URS_IFLOOP
+     return( samples_read );
+@@ -957,21 +968,18 @@
+     int     iswav = (input_format == sf_wave);
+     int     hi_lo_order;      /* byte order of input stream */
+-    if( (24 == pcmbitwidth) || (16 == pcmbitwidth) ) {
++    if( (32 == pcmbitwidth) || (24 == pcmbitwidth) || (16 == pcmbitwidth) ) {
+                               /* assume only recognized wav files are */
+                               /*  in little endian byte order */
+       hi_lo_order = (!iswav == !swapbytes);
+-      if( 16 == pcmbitwidth )
+-          samples_read = unpack_read_samples(samples_to_read, 2, hi_lo_order,
+-                                             sample_buffer, musicin );
+-      else                    /* ( 24 == pcmbitwidth ) */
+-          samples_read = unpack_read_samples(samples_to_read, 3, hi_lo_order,
+-                                             sample_buffer, musicin );
++        samples_read = unpack_read_samples(samples_to_read, pcmbitwidth/8, 
++                                           hi_lo_order,sample_buffer, musicin );
++       
+     } else if( 8 == pcmbitwidth ) {
+       samples_read = unpack_read_samples( samples_to_read, 1, 0,
+                                           sample_buffer, musicin );
+     } else {
+-        fprintf(stderr, "Only 8, 16, and 24 bit input files supported \n");
++        fprintf(stderr, "Only 8, 16, 24 and 32 bit input files supported \n");
+         exit(1);
+     }
+     if (ferror(musicin)) {
+@@ -1501,6 +1509,7 @@
+     int     ret;
+     int     len, aid_header;
+     short int pcm_l[1152], pcm_r[1152];
++    
+     memset(mp3data, 0, sizeof(mp3data_struct));
+     lame_decode_init();
+@@ -1541,7 +1550,7 @@
+     // so mp3data->bitrate will be 0 until we have decoded the first
+     // frame.  Cannot decode first frame here because we are not
+     // yet prepared to handle the output.
+-    ret = lame_decode1_headers(buf, len, pcm_l, pcm_r, mp3data);
++    ret = lame_decode1_headersB(buf, len, pcm_l, pcm_r, mp3data,&enc_delay,&enc_padding);
+     if (-1 == ret)
+         return -1;
+@@ -1550,7 +1559,7 @@
+         len = fread(buf, 1, sizeof(buf), fd);
+         if (len != sizeof(buf))
+             return -1;
+-        ret = lame_decode1_headers(buf, len, pcm_l, pcm_r, mp3data);
++        ret = lame_decode1_headersB(buf, len, pcm_l, pcm_r, mp3data,&enc_delay,&enc_padding);
+         if (-1 == ret)
+             return -1;
+     }
+@@ -1612,12 +1621,18 @@
+         if (len == 0) {
+           /* we are done reading the file, but check for buffered data */
+           ret = lame_decode1_headers(buf, len, pcm_l, pcm_r, mp3data);
+-          if (ret<=0) return -1;  // done with file
++          if (ret<=0) {
++                lame_decode_exit(); // release mp3decoder memory
++                return -1;  // done with file
++            }
+           break;
+       }
+         ret = lame_decode1_headers(buf, len, pcm_l, pcm_r, mp3data);
+-        if (ret == -1) return -1;
++        if (ret == -1) {
++            lame_decode_exit();  // release mp3decoder memory
++            return -1;
++        }
+       if (ret >0) break;
+     }
+     return ret;
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/get_audio.h cinelerra-1.1.5/plugins/lame/frontend/get_audio.h
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/get_audio.h     Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/get_audio.h  Thu Oct 17 14:38:32 2002
+@@ -42,8 +42,8 @@
+ FILE *init_outfile ( char *outPath, int decode );
+ void init_infile(lame_global_flags *, char *inPath);
+ void close_infile(void);
+-int get_audio(lame_global_flags *gfp, int buffer[2][1152]);
+-int get_audio16(lame_global_flags *gfp, short buffer[2][1152]);
++int get_audio(lame_global_flags * const gfp, int buffer[2][1152]);
++int get_audio16(lame_global_flags * const gfp, short buffer[2][1152]);
+ int WriteWaveHeader(FILE * const fp, const int pcmbytes,
+                   const int freq, const int channels, const int bits);
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/gtkanal.c cinelerra-1.1.5/plugins/lame/frontend/gtkanal.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/gtkanal.c       Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/gtkanal.c    Wed Feb 13 17:29:39 2002
+@@ -43,6 +43,18 @@
+ #include <dmalloc.h>
+ #endif
++
++//! Stringify \a x.
++#define STR(x)   #x
++//! Stringify \a x, perform macro expansion.
++#define XSTR(x)  STR(x)
++
++#define MP3X_MAJOR_VERSION      0      /* Major version number */
++#define MP3X_MINOR_VERSION     82      /* Minor version number */
++#define MP3X_ALPHA_VERSION      0      /* Set number if this is an alpha version, otherwise zero */
++#define MP3X_BETA_VERSION       0      /* Set number if this is a beta version, otherwise zero */
++
++
+ plotting_data *pinfo;
+ plotting_data *pplot;
+ plotting_data Pinfo[NUMPINFO];
+@@ -85,6 +97,7 @@
+   int totis;              /* total frames with i_stereo */
+   int totshort;           /* total granules with short blocks */
+   int totmix;             /* total granules with mixed blocks */
++  int totpreflag;         /* total granules with preflag */
+   int pupdate;            /* plot while processing, or only when needed */
+   int sfblines;           /* plot scalefactor bands in MDCT plot */
+   int difference;         /* plot original - decoded instead of orig vs. decoded */
+@@ -138,7 +151,7 @@
+     for ( ch = 0; ch < channels_out; ch++ ) {
+       for ( j = 0; j < framesize-DECDELAY; j++ )
+       pinfo->pcmdata2[ch][j] = pinfo->pcmdata2[ch][j+framesize];
+-      for ( j = 0; j < framesize; j++ )
++      for ( j = 0; j < framesize; j++ ) /*rescale from int to short int */
+       pinfo->pcmdata2[ch][j+framesize-DECDELAY] = Buffer[ch][j];
+     }
+@@ -851,6 +864,7 @@
+         for (ch = 0 ; ch < 2 ; ch ++) {
+           gtkinfo.totshort += (pinfo->mpg123blocktype[gr][ch]==2);
+           gtkinfo.totmix  += !(pinfo->mixed[gr][ch]==0);
++            gtkinfo.totpreflag += (pinfo->preflag[gr][ch]==1);
+           pinfo->totbits += pinfo->mainbits[gr][ch];
+         }
+       }
+@@ -1018,6 +1032,29 @@
+ }
++//! Get the mp3x version string.
++/*!
++  \param void
++  \return a pointer to a string which describes the version of mp3x.
++*/
++const char*  get_mp3x_version ( void )
++{
++#if   MP3X_ALPHA_VERSION > 0
++    static /*@observer@*/ const char *const str =
++        XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION)
++        " (alpha " XSTR(MP3X_ALPHA_VERSION) ", " __DATE__ " " __TIME__ ")";
++#elif MP3X_BETA_VERSION > 0
++    static /*@observer@*/ const char *const str =
++        XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION)
++        " (beta " XSTR(MP3X_BETA_VERSION) ", " __DATE__ ")";
++#else
++    static /*@observer@*/ const char *const str =
++        XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION);
++#endif
++
++    return str;
++}
++
+ static void text_window (GtkWidget *widget, gpointer data)
+ {
+@@ -1162,6 +1199,8 @@
+     gtk_text_insert(GTK_TEXT(box),NULL,NULL,NULL,text,-1);
+     sprintf(text,"mixed block granules: %i \n",gtkinfo.totmix);
+     gtk_text_insert(GTK_TEXT(box),NULL,NULL,NULL,text,-1);
++    sprintf(text,"preflag granules: %i \n",gtkinfo.totpreflag);
++    gtk_text_insert(GTK_TEXT(box),NULL,NULL,NULL,text,-1);
+     break;
+   }
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/lametime.c cinelerra-1.1.5/plugins/lame/frontend/lametime.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/lametime.c      Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/lametime.c   Mon May 27 13:13:37 2002
+@@ -58,6 +58,12 @@
+ #else
+     t = clock ();
+ #endif    
++
++    /*
++fprintf(stderr,"clock_t t = %lli \n\n",(int64_t) t);
++fprintf(stderr,"output: %f \n\n",t/(double)CLOCKS_PER_SEC);
++    */
++
+     return t / (double) CLOCKS_PER_SEC;
+ }
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/main.c cinelerra-1.1.5/plugins/lame/frontend/main.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/main.c  Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/main.c       Tue Oct 15 11:33:42 2002
+@@ -48,6 +48,10 @@
+ # include <fcntl.h>
+ #endif
++#if defined(_WIN32)
++# include <windows.h>
++#endif
++
+ /*
+  main.c is example code for how to use libmp3lame.a.  To use this library,
+@@ -62,6 +66,7 @@
+ #include "get_audio.h"
+ #include "portableio.h"
+ #include "timestatus.h"
++#include "VbrTag.h"
+ /* PLL 14/04/2000 */
+ #if macintosh
+@@ -174,7 +179,7 @@
+-    fprintf(stderr, "\rinput:  %s%s(%g kHz, %i channel%s, ",
++    if (silent < 10) fprintf(stderr, "\rinput:  %s%s(%g kHz, %i channel%s, ",
+             strcmp(inPath, "-") ? inPath : "<stdin>",
+             strlen(inPath) > 26 ? "\n\t" : "  ",
+             lame_get_in_samplerate( gfp ) / 1.e3,
+@@ -182,44 +187,51 @@
+     switch (input_format) {
+     case sf_mp3:
+-        skip += 528 + 1; /* mp3 decoder has a 528 sample delay, plus user supplied "skip" */
+-        fprintf(stderr, "MPEG-%u%s Layer %s", 2 - lame_get_version(gfp),
++        if (skip==0) {
++            if (enc_delay>-1) skip = enc_delay + 528+1;
++            else skip=lame_get_encoder_delay(gfp)+528+1;
++        }else{
++            // user specified a value of skip. just add for decoder
++            skip += 528+1; /* mp3 decoder has a 528 sample delay, plus user supplied "skip" */
++        }
++
++        if (silent < 10) fprintf(stderr, "MPEG-%u%s Layer %s", 2 - lame_get_version(gfp),
+                 lame_get_out_samplerate( gfp ) < 16000 ? ".5" : "", "III");
+         break;
+     case sf_mp2:
+         skip += 240 + 1;
+-        fprintf(stderr, "MPEG-%u%s Layer %s", 2 - lame_get_version(gfp),
++        if (silent < 10) fprintf(stderr, "MPEG-%u%s Layer %s", 2 - lame_get_version(gfp),
+                 lame_get_out_samplerate( gfp ) < 16000 ? ".5" : "", "II");
+         break;
+     case sf_mp1:
+         skip += 240 + 1;
+-        fprintf(stderr, "MPEG-%u%s Layer %s", 2 - lame_get_version(gfp),
++        if (silent < 10) fprintf(stderr, "MPEG-%u%s Layer %s", 2 - lame_get_version(gfp),
+                 lame_get_out_samplerate( gfp ) < 16000 ? ".5" : "", "I");
+         break;
+     case sf_ogg:
+-        fprintf(stderr, "Ogg Vorbis");
++        if (silent < 10) fprintf(stderr, "Ogg Vorbis");
+         skip = 0;       /* other formats have no delay *//* is += 0 not better ??? */
+         break;
+     case sf_raw:
+-        fprintf(stderr, "raw PCM data");
++        if (silent < 10) fprintf(stderr, "raw PCM data");
+         mp3input_data.nsamp = lame_get_num_samples( gfp );
+         mp3input_data.framesize = 1152;
+         skip = 0;       /* other formats have no delay *//* is += 0 not better ??? */
+         break;
+     case sf_wave:
+-        fprintf(stderr, "Microsoft WAVE");
++        if (silent < 10) fprintf(stderr, "Microsoft WAVE");
+         mp3input_data.nsamp = lame_get_num_samples( gfp );
+         mp3input_data.framesize = 1152;
+         skip = 0;       /* other formats have no delay *//* is += 0 not better ??? */
+         break;
+     case sf_aiff:
+-        fprintf(stderr, "SGI/Apple AIFF");
++        if (silent < 10) fprintf(stderr, "SGI/Apple AIFF");
+         mp3input_data.nsamp = lame_get_num_samples( gfp );
+         mp3input_data.framesize = 1152;
+         skip = 0;       /* other formats have no delay *//* is += 0 not better ??? */
+         break;
+     default:
+-        fprintf(stderr, "unknown");
++        if (silent < 10) fprintf(stderr, "unknown");
+         mp3input_data.nsamp = lame_get_num_samples( gfp );
+         mp3input_data.framesize = 1152;
+         skip = 0;       /* other formats have no delay *//* is += 0 not better ??? */
+@@ -227,12 +239,12 @@
+         break;
+     }
+-    fprintf(stderr, ")\noutput: %s%s(16 bit, Microsoft WAVE)\n",
++    if (silent < 10) fprintf(stderr, ")\noutput: %s%s(16 bit, Microsoft WAVE)\n",
+             strcmp(outPath, "-") ? outPath : "<stdout>",
+             strlen(outPath) > 45 ? "\n\t" : "  ");
+     if (skip > 0)
+-        fprintf(stderr, "skipping initial %i samples (encoder+decoder delay)\n",
++        if (silent < 10) fprintf(stderr, "skipping initial %i samples (encoder+decoder delay)\n",
+                 skip);
+     if ( 0 == disable_wav_header )
+@@ -274,11 +286,11 @@
+     i = (16 / 8) * tmp_num_channels;
+     assert(i > 0);
+     if (wavsize <= 0) {
+-        fprintf(stderr, "WAVE file contains 0 PCM samples\n");
++        if (silent < 10) fprintf(stderr, "WAVE file contains 0 PCM samples\n");
+         wavsize = 0;
+     }
+     else if (wavsize > 0xFFFFFFD0 / i) {
+-        fprintf(stderr,
++        if (silent < 10) fprintf(stderr,
+                 "Very huge WAVE file, can't set filesize accordingly\n");
+         wavsize = 0xFFFFFFD0;
+     }
+@@ -423,9 +435,9 @@
+     if (nogap) {
+         imp3 = lame_encode_flush_nogap(gf, mp3buffer, sizeof(mp3buffer)); /* may return one more mp3 frame */
+-      /* reinitialize bitstream for next encoding.  this is normally done
+-       * by lame_init_params(), but we cannot call that routine twice */ 
+-      lame_init_bitstream(gf);
++        /* reinitialize bitstream for next encoding.  this is normally done
++         * by lame_init_params(), but we cannot call that routine twice */
++        lame_init_bitstream(gf);
+     } else {
+         imp3 = lame_encode_flush(gf, mp3buffer, sizeof(mp3buffer)); /* may return one more mp3 frame */
+     }
+@@ -485,6 +497,86 @@
++void parse_nogap_filenames(int nogapout, char *inPath, char *outPath, char *outdir) {
++
++    char    *slasher;
++    int     n;
++
++    strcpy(outPath,outdir);
++    if (!nogapout)    {
++        strncpy(outPath, inPath, PATH_MAX + 1 - 4);
++        n=strlen(outPath);
++        /* nuke old extension, if one  */
++        if (outPath[n-3] == 'w' 
++            && outPath[n-2] == 'a'
++            && outPath[n-1] == 'v'
++            && outPath[n-4] == '.') {
++            outPath[n-3] = 'm';
++            outPath[n-2] = 'p';
++            outPath[n-1] = '3';
++        } else {
++            outPath[n+0] = '.';
++            outPath[n+1] = 'm';
++            outPath[n+2] = 'p';
++            outPath[n+3] = '3';
++            outPath[n+4] = 0;
++        }
++    } else    {
++        slasher = inPath;
++        slasher += PATH_MAX + 1 - 4;
++        
++        /* backseek to last dir delemiter */
++        while (*slasher != '/' && *slasher != '\\' && slasher != inPath
++               && *slasher != ':')
++            {
++                slasher--;
++            }
++        
++        /* skip one foward if needed */
++        if (slasher != inPath 
++            && (outPath[strlen(outPath)-1] == '/'
++                ||
++                outPath[strlen(outPath)-1] == '\\'
++                ||
++                outPath[strlen(outPath)-1] == ':')) 
++          slasher++;
++        else if (slasher == inPath
++                 && (outPath[strlen(outPath)-1] != '/'
++                     &&
++                     outPath[strlen(outPath)-1] != '\\'
++                     && 
++                     outPath[strlen(outPath)-1] != ':'))
++#ifdef _WIN32
++          strcat(outPath, "\\");
++#elif __OS2__
++        strcat(outPath, "\\");
++#else
++        strcat(outPath, "/");
++#endif
++        
++        strncat(outPath, slasher, PATH_MAX + 1 - 4);
++        n=strlen(outPath);
++        /* nuke old extension  */
++        if (outPath[n-3] == 'w' 
++            && outPath[n-2] == 'a'
++            && outPath[n-1] == 'v'
++            && outPath[n-4] == '.')     {
++          outPath[n-3] = 'm';
++          outPath[n-2] = 'p';
++          outPath[n-1] = '3';
++        } else {
++          outPath[n+0] = '.';
++          outPath[n+1] = 'm';
++          outPath[n+2] = 'p';
++          outPath[n+3] = '3';
++          outPath[n+4] = 0;
++        }
++    }
++}
++
++
++
++
+@@ -493,21 +585,49 @@
+ {
+     int     ret;
+     lame_global_flags *gf;
+-    char    outPath[MAX_NAME_SIZE];
+-    char    inPath[MAX_NAME_SIZE];
+-#define MAX_NOGAP 20
++    char    outPath[PATH_MAX + 1];
++    char    nogapdir[PATH_MAX + 1];
++    char    inPath[PATH_MAX + 1];
++
++    /* support for "nogap" encoding of up to 200 .wav files */
++#define MAX_NOGAP 200
++    int    nogapout = 0;
+     int     max_nogap = MAX_NOGAP;
+     char   *nogap_inPath[MAX_NOGAP];
++
+     int     i;
+     FILE   *outf;
+ #if macintosh
+     argc = ccommand(&argv);
+ #endif
++
++#if defined(_WIN32)
++   /* set affinity back to all CPUs.  Fix for EAC/lame on SMP systems from
++     "Todd Richmond" <todd.richmond@openwave.com> */
++    typedef BOOL (WINAPI *SPAMFunc)(HANDLE, DWORD);
++    SPAMFunc func;
++    SYSTEM_INFO si;
++
++    if ((func = (SPAMFunc)GetProcAddress(GetModuleHandle("KERNEL32.DLL"),
++        "SetProcessAffinityMask")) != NULL) {
++        GetSystemInfo(&si);
++        func(GetCurrentProcess(), si.dwActiveProcessorMask);
++    }
++#endif
++
++
++#ifdef __EMX__
++    /* This gives wildcard expansion on Non-POSIX shells with OS/2 */
++    _wildcard(&argc, &argv);
++#endif
++
+     for (i = 0; i < max_nogap; ++i) {
+-        nogap_inPath[i] = malloc(MAX_NAME_SIZE);
++        nogap_inPath[i] = malloc(PATH_MAX + 1);
+     }
++    memset(inPath, 0, sizeof(inPath));
++    
+     /* initialize libmp3lame */
+     input_format = sf_unknown;
+     if (NULL == (gf = lame_init())) {
+@@ -533,12 +653,22 @@
+     if (update_interval < 0.)
+         update_interval = 2.;
++    if (outPath[0] != '\0' && max_nogap>0) {
++        strncpy(nogapdir, outPath, PATH_MAX + 1);  
++        nogapout = 1;
++    }
++    
+     /* initialize input file.  This also sets samplerate and as much
+        other data on the input file as available in the headers */
+     if (max_nogap > 0) {
+-        strncpy(outPath, nogap_inPath[0], MAX_NAME_SIZE - 4);
+-        strncat(outPath, ".mp3", 4);
++        /* for nogap encoding of multiple input files, it is not possible to
++         * specify the output file name, only an optional output directory. */
++        parse_nogap_filenames(nogapout,nogap_inPath[0],outPath,nogapdir);
+         outf = init_files(gf, nogap_inPath[0], outPath);
++        if (lame_get_bWriteVbrTag(gf)) {
++            fprintf(stderr,"Note: Disabling VBR Xing/Info tag since it interferes with --nogap\n");
++            lame_set_bWriteVbrTag( gf, 0 );
++        }
+     }
+     else {
+         outf = init_files(gf, inPath, outPath);
+@@ -564,7 +694,7 @@
+     }
+-#ifdef HAVE_VORBIS
++#ifdef HAVE_VORBIS_ENCODER
+     if (lame_get_ogg(gf)) {
+         lame_encode_ogg_init(gf);
+         lame_set_VBR(gf, vbr_off); /* ignore lame's various VBR modes */
+@@ -577,16 +707,18 @@
+         if (mp3_delay_set)
+             lame_decoder(gf, outf, mp3_delay, inPath, outPath);
+         else
+-            lame_decoder(gf, outf, lame_get_encoder_delay(gf), inPath, outPath);
++            lame_decoder(gf, outf, 0, inPath, outPath);
+     }
+     else {
+         if (max_nogap > 0) {
++            /*
++             * encode multiple input files using nogap option
++             */
+             for (i = 0; i < max_nogap; ++i) {
+                 int     use_flush_nogap = (i != (max_nogap - 1));
+                 if (i > 0) {
+-                    strncpy(outPath, nogap_inPath[i], MAX_NAME_SIZE - 4);
+-                    strncat(outPath, ".mp3", 4);
++                    parse_nogap_filenames(nogapout,nogap_inPath[i],outPath,nogapdir);
+                     /* note: if init_files changes anything, like
+                        samplerate, num_channels, etc, we are screwed */
+                     outf = init_files(gf, nogap_inPath[i], outPath);
+@@ -594,8 +726,12 @@
+                 brhist_init_package(gf);
+                 ret =
+                     lame_encoder(gf, outf, use_flush_nogap, nogap_inPath[i],
+-                                 outPath);
++                                 outPath);    
++                
++                if (silent<=0) ReportLameTagProgress(gf,1);
+                 lame_mp3_tags_fid(gf, outf); /* add VBR tags to mp3 file */
++                if (silent<=0) ReportLameTagProgress(gf,0);
++                
+                 fclose(outf); /* close the output file */
+                 close_infile(); /* close the input file */
+             }
+@@ -603,9 +739,16 @@
+         }
+         else {
++            /*
++             * encode a single input file
++             */
+             brhist_init_package(gf);
+             ret = lame_encoder(gf, outf, 0, inPath, outPath);
++            
++            if (silent<=0) ReportLameTagProgress(gf,1);
+             lame_mp3_tags_fid(gf, outf); /* add VBR tags to mp3 file */
++            if (silent<=0) ReportLameTagProgress(gf,0);
++            
+             fclose(outf); /* close the output file */
+             close_infile(); /* close the input file */
+             lame_close(gf);
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/main.h cinelerra-1.1.5/plugins/lame/frontend/main.h
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/main.h  Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/main.h       Tue Oct 15 11:25:25 2002
+@@ -22,8 +22,11 @@
+ #include "get_audio.h"        
++#include <limits.h>
+-#define         MAX_NAME_SIZE           1000
++#ifndef PATH_MAX
++#define PATH_MAX 1024
++#endif
+ /* GLOBAL VARIABLES used by parse.c and main.c.  
+@@ -32,8 +35,11 @@
+ extern int swapbytes;              /* force byte swapping   default=0*/
+ extern int silent;
+ extern int brhist;
++
+ extern int mp3_delay;              /* for decoder only */
+ extern int mp3_delay_set;          /* for decoder only */
++extern int enc_delay;             /* if decoder finds a Xing header */ 
++extern int enc_padding;           /* if decoder finds a Xing header */ 
+ extern float update_interval;      /* to use Frank's time status display */
+ extern int disable_wav_header;     /* for decoder only */
+ extern mp3data_struct mp3input_data; /* used by Ogg and MP3 */
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/mp3rtp.c cinelerra-1.1.5/plugins/lame/frontend/mp3rtp.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/mp3rtp.c        Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/mp3rtp.c     Tue Oct 15 11:33:43 2002
+@@ -47,8 +47,6 @@
+ #include <dmalloc.h>
+ #endif
+-#define MAX_NAME_SIZE   2048  /* current value of Linux */
+-
+ /*
+  * Encode (via LAME) to mp3 with RTP streaming of the output.
+  *
+@@ -88,9 +86,9 @@
+-unsigned  maxvalue ( short int  Buffer [2] [1152] )
++unsigned int  maxvalue ( int  Buffer [2] [1152] )
+ {
+-    int  max = 0;
++    unsigned int  max = 0;
+     int  i;
+     
+     for ( i = 0; i < 1152; i++ ) {
+@@ -101,7 +99,7 @@
+     return max;
+ }
+-void levelmessage ( unsigned maxvalue )
++void levelmessage ( unsigned int maxvalue )
+ {
+     char        buff [] = "|  .  |  .  |  .  |  .  |  .  |  .  |  .  |  .  |  .  |  .  |  \r";
+     static int  max = 0;
+@@ -128,8 +126,8 @@
+ int  main ( int argc, char **argv )
+ {
+     unsigned char       mp3buffer [LAME_MAXMP3BUFFER];
+-    char       inPath    [MAX_NAME_SIZE];
+-    char       outPath   [MAX_NAME_SIZE];
++    char       inPath    [PATH_MAX + 1];
++    char       outPath   [PATH_MAX + 1];
+     int        Buffer [2] [1152];
+     lame_global_flags *gf;
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/mp3x.c cinelerra-1.1.5/plugins/lame/frontend/mp3x.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/mp3x.c  Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/mp3x.c       Tue Oct 15 11:33:43 2002
+@@ -36,8 +36,8 @@
+ {
+   char mp3buffer[LAME_MAXMP3BUFFER];
+   lame_global_flags *gf;  
+-  char outPath[MAX_NAME_SIZE];
+-  char inPath[MAX_NAME_SIZE];
++  char outPath[PATH_MAX + 1];
++  char inPath[PATH_MAX + 1];
+   int ret;
+   gf=lame_init();
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/parse.c cinelerra-1.1.5/plugins/lame/frontend/parse.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/parse.c Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/parse.c      Sun Nov 17 10:45:51 2002
+@@ -43,6 +43,14 @@
+ # endif
+ #endif
++#ifdef __OS2__
++#include <os2.h>
++#define PRTYC_IDLE 1
++#define PRTYC_REGULAR 2
++#define PRTYD_MINIMUM -31 
++#define PRTYD_MAXIMUM 31 
++#endif
++
+ #include "lame.h"
+ #include "brhist.h"
+@@ -66,6 +74,9 @@
+                                during decode */
+ int mp3_delay_set;          /* user specified the value of the mp3 encoder 
+                                delay to assume for decoding */
++
++int enc_delay;
++int enc_padding;
+ int disable_wav_header;
+ mp3data_struct mp3input_data; /* used by Ogg and MP3 */
+@@ -84,18 +95,20 @@
+ static void  
+ dosToLongFileName( char *fn )
+ {
+-    const int MSIZE = MAX_NAME_SIZE-4;  //  we wanna add ".mp3" later
++    const int MSIZE = PATH_MAX + 1 - 4;  //  we wanna add ".mp3" later
+     WIN32_FIND_DATAA lpFindFileData;
+     HANDLE h = FindFirstFileA( fn, &lpFindFileData );
+     if ( h != INVALID_HANDLE_VALUE ) {
+         int   a;
+-        char *q;
++        char *q, *p;
+         FindClose( h );
+         for ( a = 0; a < MSIZE; a++ ) {
+             if ( '\0' == lpFindFileData.cFileName[a] ) break;
+         }
+         if ( a >= MSIZE || a == 0 ) return;
+         q = strrchr( fn, '\\' );
++        p = strrchr( fn, '/' );
++        if ( p-q > 0 ) q = p;
+         if ( q == NULL ) q = strrchr(fn,':');
+         if ( q == NULL ) strncpy( fn, lpFindFileData.cFileName, a );
+         else {
+@@ -107,6 +120,69 @@
+ }
+ #endif
++#if defined(__OS2__)
++/* OS/2 priority functions */
++static int setOS2Priority( lame_global_flags*  gfp, int Priority )
++{
++    int rc;
++
++    switch(Priority) {
++ 
++    case 0:
++        rc = DosSetPriority(
++             0,                      /* Scope: only one process */
++             PRTYC_IDLE,             /* select priority class (idle, regular, etc) */
++             0,                      /* set delta */
++             0);                     /* Assume current process */
++        printf("==> Priority set to 0 (Low priority).\n");
++        break;
++
++    case 1:
++        rc = DosSetPriority(
++             0,                      /* Scope: only one process */
++             PRTYC_IDLE,             /* select priority class (idle, regular, etc) */
++             PRTYD_MAXIMUM,          /* set delta */
++             0);                     /* Assume current process */
++        printf("==> Priority set to 1 (Medium priority).\n");
++        break;
++
++    case 2:
++        rc = DosSetPriority(
++             0,                      /* Scope: only one process */
++             PRTYC_REGULAR,          /* select priority class (idle, regular, etc) */
++             PRTYD_MINIMUM,          /* set delta */
++             0);                     /* Assume current process */
++        printf("==> Priority set to 2 (Regular priority).\n");
++        break;
++        
++    case 3:
++        rc = DosSetPriority(
++             0,                      /* Scope: only one process */
++             PRTYC_REGULAR,          /* select priority class (idle, regular, etc) */
++             0,                      /* set delta */
++             0);                     /* Assume current process */
++        printf("==> Priority set to 3 (High priority).\n");
++        break;
++
++    case 4:
++        rc = DosSetPriority(
++             0,                      /* Scope: only one process */
++             PRTYC_REGULAR,          /* select priority class (idle, regular, etc) */
++             PRTYD_MAXIMUM,          /* set delta */
++             0);                     /* Assume current process */
++        printf("==> Priority set to 4 (Maximum priority). I hope you enjoy it :)\n");
++        break;
++     
++    default:
++        printf("==> Invalid priority specified! Assuming idle priority.\n");
++    }
++   
++
++    return 0;
++}
++#endif
++
++
+ /************************************************************************
+ *
+ * license
+@@ -192,10 +268,14 @@
+               "\n"
+               "    <infile> and/or <outfile> can be \"-\", which means stdin/stdout.\n"
+               "\n"
+-              "Try  \"%s --help\"     for more information\n" 
+-              "  or \"%s --longhelp\"\n"
+-              "  or \"%s -?\"         for a complete options list\n\n",
+-              ProgramName, ProgramName, ProgramName, ProgramName ); 
++              "Try:\n"
++              "     \"%s --help\"           for general usage information\n" 
++              " or:\n"
++              "     \"%s --preset help\"    for information on suggested predefined settings\n"
++              " or:\n"
++              "     \"%s --longhelp\"\n"
++              "  or \"%s -?\"              for a complete options list\n\n",
++              ProgramName, ProgramName, ProgramName, ProgramName, ProgramName ); 
+     return 0;
+ }
+@@ -230,9 +310,20 @@
+               "                    default is (j) or (s) depending on bitrate\n"
+               "    -V n            quality setting for VBR.  default n=%i\n"
+               "\n"
+-              "    --preset type   type must be phone, voice, fm, tape, hifi, cd or studio\n"
++              "    --preset type   type must be \"standard\", \"extreme\", \"insane\",\n"
++              "                    or a value for an average desired bitrate and depending on\n"                       
++              "                    the value specified, appropriate quality settings will be used.\n"
+               "                    \"--preset help\" gives some more infos on these\n"
+               "\n"
++#if defined(__OS2__)
++              "    --priority type  sets the process priority (OS/2 only):\n"
++              "                     0 = Low priority\n"
++              "                     1 = Medium priority\n"
++              "                     2 = Regular priority\n"
++              "                     3 = High priority\n"
++              "                     4 = Maximum priority\n"
++              "\n"
++#endif
+               "    --longhelp      full list of options\n"
+               "\n",
+               ProgramName, lame_get_VBR_q(gfp) );
+@@ -275,8 +366,8 @@
+               "    -r              input is raw pcm\n"
+               "    -x              force byte-swapping of input\n"
+               "    -s sfreq        sampling frequency of input file (kHz) - default 44.1 kHz\n"
+-#ifdef LIBSNDFILE
+               "    --bitwidth w    input bit width is w (default 16)\n"
++#ifdef LIBSNDFILE
+               "    --signed        input is signed (default)\n"
+               "    --unsigned      input is unsigned\n"
+               "    --little-endian input is little-endian (default from host)\n"
+@@ -285,8 +376,14 @@
+               "    --mp1input      input file is a MPEG Layer I   file\n"
+               "    --mp2input      input file is a MPEG Layer II  file\n"
+               "    --mp3input      input file is a MPEG Layer III file\n"
+-              "    --ogginput      input file is a Ogg Vorbis file",
+-              ProgramName );
++#if defined(HAVE_VORBIS)
++              "    --ogginput      input file is a Ogg Vorbis file\n"
++#endif
++            "    --nogap <file1> <file2> <...>\n"
++            "                    gapless encoding for a set of contiguous files\n"
++            "    --nogapout <dir>\n"
++            "                    output dir for gapless encoding (must precede --nogap)"
++              , ProgramName );
+     wait_for ( fp, lessmode );
+     fprintf ( fp,
+@@ -296,30 +393,32 @@
+               "                    force = force ms_stereo on all frames.\n"
+               "                    auto = jstereo, with varialbe mid/side threshold\n"
+               "    -a              downmix from stereo to mono file for mono encoding\n"
+-              "    -d              allow channels to have different blocktypes\n"
+-              "    --disptime <arg>print progress report every arg seconds\n"
++#if defined(HAVE_VORBIS_ENCODER)
+               "    --ogg           encode to Ogg Vorbis instead of MP3\n"
++#endif
+               "    --freeformat    produce a free format bitstream\n"
+               "    --decode        input=mp3 file, output=wav\n"
+               "    -t              disable writing wav header when using --decode\n"
+               "    --comp  <arg>   choose bitrate to achive a compression ratio of <arg>\n"
+               "    --scale <arg>   scale input (multiply PCM data) by <arg>\n"
+-              "    --athonly       only use the ATH for masking\n"
+-              "    --noath         disable the ATH for masking\n"
+-              "    --athlower x    lower the ATH x dB\n"
+-              "    --notemp        disable temporal masking effect\n"
+-              "    --short         use short blocks\n"
+-              "    --noshort       do not use short blocks\n"
+-              "    --voice         experimental voice mode\n"
+-              "    --preset type   type must be phone, voice, fm, tape, hifi, cd or studio\n"
+-              "                    \"--preset help\" gives some more infos on these" );
++            "    --scale-l <arg> scale channel 0 (left) input (multiply PCM data) by <arg>\n"
++              "    --scale-r <arg> scale channel 1 (right) input (multiply PCM data) by <arg>\n"
++              "    --preset type   type must be \"standard\", \"extreme\", \"insane\",\n"
++              "                    or a value for an average desired bitrate and depending on\n"                       
++              "                    the value specified, appropriate quality settings will be used.\n"
++              "                    \"--preset help\" gives some more infos on these\n" 
++              "    --r3mix         use  r3mix.net VBR preset"
++              );
+     wait_for ( fp, lessmode );
+     fprintf ( fp,
+               "  Verbosity:\n"
++              "    --disptime <arg>print progress report every arg seconds\n"
+               "    -S              don't print progress report, VBR histograms\n"
++              "    --nohist        disable VBR histogram display\n"
+               "    --silent        don't print anything on screen\n"
+               "    --quiet         don't print anything on screen\n"
++              "    --brief         print more useful information\n"
+               "    --verbose       print a lot of useful information\n"
+               "\n"
+               "  Noise shaping & psycho acoustic algorithms:\n"
+@@ -327,12 +426,14 @@
+               "                    -q 0:  Highest quality, very slow \n"
+               "                    -q 9:  Poor quality, but fast \n"
+               "    -h              Same as -q 2.   Recommended.\n"
+-              "    -f              Same as -q 7.   Fast, ok quality\n" );
++              "    -f              Same as -q 7.   Fast, ok quality\n" 
++              );
+     wait_for ( fp, lessmode );
+     fprintf ( fp,
+               "  CBR (constant bitrate, the default) options:\n"
+               "    -b <bitrate>    set the bitrate in kbps, default 128 kbps\n"
++              "    --cbr           enforce use of constant bitrate\n"
+               "\n"
+               "  ABR options:\n"
+               "    --abr <bitrate> specify average bitrate desired (instead of quality)\n"
+@@ -341,19 +442,60 @@
+               "    -v              use variable bitrate (VBR) (--vbr-old)\n"
+               "    --vbr-old       use old variable bitrate (VBR) routine\n"
+               "    --vbr-new       use new variable bitrate (VBR) routine\n"
+-              "    --vbr-mtrh      a merger of old and new (VBR) routine\n"
+               "    -V n            quality setting for VBR.  default n=%i\n"
+               "                    0=high quality,bigger files. 9=smaller files\n"
+               "    -b <bitrate>    specify minimum allowed bitrate, default  32 kbps\n"
+               "    -B <bitrate>    specify maximum allowed bitrate, default 320 kbps\n"
+               "    -F              strictly enforce the -b option, for use with players that\n"
+-              "                    do not support low bitrate mp3 (Apex AD600-A DVD/mp3 player)\n"
+-              "    -t              disable writing Xing VBR informational tag\n"
+-              "    --nohist        disable VBR histogram display", 
+-                                                     lame_get_VBR_q(gfp) );
++              "                    do not support low bitrate mp3\n"
++              "    -t              disable writing LAME Tag\n"
++              , lame_get_VBR_q(gfp) );
+   
+     wait_for ( fp, lessmode );  
+     fprintf ( fp,
++              "  ATH related:\n"
++              "    --noath         turns ATH down to a flat noise floor\n"
++              "    --athshort      ignore GPSYCHO for short blocks, use ATH only\n"
++              "    --athonly       ignore GPSYCHO completely, use ATH only\n"
++              "    --athtype n     selects between different ATH types [0-5]\n"
++              "    --athlower x    lowers ATH by x dB\n"
++              "    --athaa-type n  ATH auto adjust types 1-3, else no adjustment\n"
++              "    --athaa-loudapprox n   n=1 total energy or n=2 equal loudness curve\n"
++              "    --athaa-sensitivity x  activation offset in -/+ dB for ATH auto-adjustment\n" 
++              "\n"
++              "  PSY related:\n"
++              "    --short         use short blocks when appropriate\n"
++              "    --noshort       do not use short blocks\n"
++              "    --allshort      use only short blocks\n"
++              "    --cwlimit <freq>  compute tonality up to freq (in kHz) default 8.8717\n"
++#if 0
++/* this is redundant, we already have --notemp */
++              "    --temporal-masking n  use temporal masking effect n=0:no n=1:yes\n"
++#endif
++              "    --notemp        disable temporal masking effect\n"
++              "    --nspsytune     experimental PSY tunings by Naoki Shibata\n"
++              "    --nssafejoint   M/S switching criterion\n"
++              "    --nsmsfix <arg> M/S switching tuning [effective 0-3.5]\n"
++              "    --interch x     adjust inter-channel masking ratio\n"
++              "    --substep n     use pseudo substep noise shaping method types 0-2\n"
++              "    --ns-bass x     adjust masking for sfbs  0 -  6 (long)  0 -  5 (short)\n"
++              "    --ns-alto x     adjust masking for sfbs  7 - 13 (long)  6 - 10 (short)\n"         
++              "    --ns-treble x   adjust masking for sfbs 14 - 21 (long) 11 - 12 (short)\n"
++              "    --ns-sfb21 x    change ns-treble by x dB for sfb21\n"
++            );
++
++    wait_for ( fp, lessmode );  
++
++    fprintf ( fp,
++              "  experimental switches:\n"
++              "    -X n            selects between different noise measurements\n"
++              "    -Y              lets LAME ignore noise in sfb21, like in CBR\n"
++              "    -Z              toggles the scalefac feature on\n"
++            );
++
++    wait_for ( fp, lessmode );  
++
++    fprintf ( fp,
+               "  MP3 header/stream options:\n"
+               "    -e <emp>        de-emphasis n/5/c  (obsolete)\n"
+               "    -c              mark as copyright\n"
+@@ -371,7 +513,7 @@
+               "  --highpass <freq>       frequency(kHz), highpass filter cutoff below freq\n"
+               "  --highpass-width <freq> frequency(kHz) - default 15%% of highpass freq\n"
+               "  --resample <sfreq>  sampling frequency of output file(kHz)- default=automatic\n"
+-              "  --cwlimit <freq>    compute tonality up to freq (in kHz) default 8.8717" );
++               );
+   
+     wait_for ( fp, lessmode );
+     fprintf ( fp,
+@@ -393,57 +535,35 @@
+               "    Note: A version 2 tag will NOT be added unless one of the input fields\n"
+               "    won't fit in a version 1 tag (e.g. the title string is longer than 30\n"
+               "    characters), or the '--add-id3v2' or '--id3v2-only' options are used,\n"
+-              "    or output is redirected to stdout."
+-#if defined(HAVE_VORBIS)
++              "    or output is redirected to stdout.\n"
++#if defined(HAVE_VORBIS_ENCODER)
+               "\n\n"
+               "    Note: All '--t*' options (except those for track and genre) work for Ogg\n"
+               "    Vorbis output, but other ID3-specific options are ignored."
+ #endif              
+-#if defined(HAVE_GTK)
+-              "\n\n"
+-              "    -g              run graphical analysis on <infile>"
++#if defined(__OS2__)
++              "\n\nOS/2-specific options:\n"
++              "    --priority <type>     sets the process priority:\n"
++              "                               0 = Low priority (IDLE, delta = 0)\n"
++              "                               1 = Medium priority (IDLE, delta = +31)\n"
++              "                               2 = Regular priority (REGULAR, delta = -31)\n"
++              "                               3 = High priority (REGULAR, delta = 0)\n"
++              "                               4 = Maximum priority (REGULAR, delta = +31)\n"
++              "    Note: Calling '--priority' without a parameter will select priority 0.\n"
+ #endif
++
+               );
++#if defined(HAVE_NASM)
+     wait_for ( fp, lessmode );  
+-    display_bitrates ( fp );
+-
+-    return 0;
+-}
+-
+-int  extra_help ( const lame_global_flags* gfp, FILE* const fp, const char* ProgramName, int lessmode )  /* print long syntax help */
+-{
+-    lame_version_print ( fp );
+     fprintf ( fp,
+-              "Expert options (if you really know what you are doing)\n"
+-              "\nATH related:\n"
+-              "--noath               turns ATH down to a flat noise floor\n"
+-              "--athshort            ignore GPSYCHO for short blocks, use ATH only\n"
+-              "--athonly             ignore GPSYCHO completely, use ATH only\n"
+-              "--athtype n           selects between different ATH types [0-5]\n"
+-              "--athlower x          lowers ATH by x dB\n"
+-              "--ath-adjust n        ATH auto adjust types 1-3, else no adjustment\n"
+-              "--adapt-thres-type n  n=1 total energy or n=2 approximated loudness\n"
+-              "--adapt-thres-level x ??\n"
+-              "-Y                    different ATH adjust method\n"
+-              "\nPSY related:\n"
+-              "--temporal-masking n  use temporal masking effect n=0:no n=1:yes\n"
+-              "--notemp              disable temporal masking effect\n"
+-              "--nspsytune           experimental PSY tunings by Naoki Shibata\n"
+-              "--nssafejoint         M/S switching criterion\n"
+-              "--ns-bass x           used by above\n"
+-              "--ns-alto x           used by above\n"         
+-              "--ns-treble x         used by above\n"
+-            );
+-
++              "  Platform specific:\n"
++              "    --noasm <instructions> disable assembly optimizations for mmx/3dnow/sse\n"
++                );
+     wait_for ( fp, lessmode );  
++#endif
+-    fprintf ( fp,
+-              "\nmisc:\n"
+-              "--nores               disables the use of the bitreservoir\n" 
+-            );
+-
+-    wait_for ( fp, lessmode );  
++    display_bitrates ( fp );
+     return 0;
+ }
+@@ -472,6 +592,22 @@
+ }
++/*  note: for presets it would be better to externalize them in a file.
++    suggestion:  lame --preset <file-name> ...
++            or:  lame --preset my-setting  ... and my-setting is defined in lame.ini
++ */
++
++
++/*
++Note from GB on 08/25/2002:
++I am merging --presets and --alt-presets. Old presets are now aliases for
++corresponding abr values from old alt-presets. This way we now have a 
++unified preset system, and I hope than more people will use the new tuned
++presets instead of the old unmaintained ones.
++*/
++
++
++ 
+ /************************************************************************
+ *
+ * usage
+@@ -481,163 +617,264 @@
+ ************************************************************************/
+-typedef struct {
+-    const char* name;                   // name of preset
+-    long        resample;               // resample frequency in Hz, or -1 for no resampling
+-    short       highpass_freq;          // highpass frequency in Hz, or -1 for no highpass filtering
+-    short       lowpass_freq;           // lowpass frequency in Hz, or -1 for no lowpass filtering
+-    short       lowpass_width;          // lowpass width in Hz
+-    signed char no_short_blocks;        // use of short blocks, 1: no, 0: yes
+-    signed char quality;                // quality, the same as -f or -h
+-    MPEG_mode   mode;                   // channel mode (mono, stereo, joint)
+-    short       cbr;                    // CBR data rate in kbps (8...320)
+-    signed char vbr_mode;               // VBR mode (0...9)
+-    short       vbr_min;                // minimum VBR rate in kbps ( 8...256)
+-    short       vbr_max;                // maximum VBR rate in kbps (16...320)
+-} preset_t;
+-
+-const preset_t Presets [] = {
+-   // name       fs     fu    fo    dfo shrt qual  mode              cbr vbr_mode/min/max
+-    { "phone" ,  8000, 125,  3400,    0,  1,  5, MONO        ,  16,  6,   8,  24 },  // phone standard 300-3400
+-    { "phon+" , 11025, 100,  4000,    0,  1,  5, MONO        ,  24,  4,  16,  32 },  // phone theoretical limits
+-    { "lw"    , 11025,  -1,  4000,    0,  0,  5, MONO        ,  24,  3,  16,  56 },  // LW
+-    { "mw-eu" , 11025,  -1,  4000,    0,  0,  5, MONO        ,  24,  3,  16,  56 },  // MW in europe
+-    { "mw-us" , 16000,  -1,  7500,    0,  0,  5, MONO        ,  40,  3,  24, 112 },  // MW in U.S.A.
+-    { "sw"    , 11025,  -1,  4000,    0,  0,  5, MONO        ,  24,  3,  16,  56 },  // SW
+-    { "fm"    , 32000,  -1, 15000,    0,  0,  3, JOINT_STEREO, 112,  3,  80, 256 },
+-    { "voice" , 24000,  -1, 12000,    0,  1,  5, MONO        ,  56,  4,  40, 112 },
+-    { "radio" ,    -1,  -1, 15000,    0,  0,  3, JOINT_STEREO, 128,  3,  96, 256 },
+-    { "tape"  ,    -1,  -1, 18000,  900,  0,  3, JOINT_STEREO, 128,  3,  96, 256 },
+-    { "hifi"  ,    -1,  -1, 18000,  900,  0, -1, JOINT_STEREO, 160,  2, 112, 320 },
+-    { "cd"    ,    -1,  -1,    -1,   -1,  0, -1, STEREO      , 192,  1, 128, 320 },
+-    { "studio",    -1,  -1,    -1,   -1,  0, -1, STEREO      , 256,  0, 160, 320 },
+-};
++
++static void  presets_longinfo_dm ( FILE* msgfp )
++{
++        fprintf ( msgfp,
++        "\n" 
++        "The --preset switches are designed to provide the highest possible quality.\n"
++        "\n"
++        "They have for the most part been subject to and tuned via rigorous double blind\n"
++        "listening tests to verify and achieve this objective.\n"
++        "\n"
++        "These are continually updated to coincide with the latest developments that\n"
++        "occur and as a result should provide you with nearly the best quality\n"
++        "currently possible from LAME.\n"
++        "\n"
++        "To activate these presets:\n"
++        "\n"
++        "   For VBR modes (generally highest quality):\n"
++        "\n"
++        "     \"--preset standard\" This preset should generally be transparent\n"
++        "                             to most people on most music and is already\n"
++        "                             quite high in quality.\n"
++        "\n"
++        "     \"--preset extreme\" If you have extremely good hearing and similar\n"
++        "                             equipment, this preset will generally provide\n"
++        "                             slightly higher quality than the \"standard\"\n"
++        "                             mode.\n"
++        "\n"
++        "   For CBR 320kbps (highest quality possible from the --preset switches):\n"
++        "\n"
++        "     \"--preset insane\"  This preset will usually be overkill for most\n"
++        "                             people and most situations, but if you must\n"
++        "                             have the absolute highest quality with no\n"
++        "                             regard to filesize, this is the way to go.\n"
++        "\n"
++        "   For ABR modes (high quality per given bitrate but not as high as VBR):\n"
++        "\n"
++        "     \"--preset <kbps>\"  Using this preset will usually give you good\n"
++        "                             quality at a specified bitrate. Depending on the\n"
++        "                             bitrate entered, this preset will determine the\n"
++        "                             optimal settings for that particular situation.\n"
++        "                             While this approach works, it is not nearly as\n"
++        "                             flexible as VBR, and usually will not attain the\n"
++        "                             same level of quality as VBR at higher bitrates.\n"  
++        "\n"
++        "The following options are also available for the corresponding profiles:\n"
++        "\n"
++        "   <fast>        standard\n"
++        "   <fast>        extreme\n"
++        "                 insane\n"
++        "   <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n"
++        "                      simply specify a bitrate. For example:\n"
++        "                      \"--preset 185\" activates this\n"
++        "                      preset and uses 185 as an average kbps.\n" 
++        "\n"
++        "   \"fast\" - Enables the new fast VBR for a particular profile. The\n"
++        "            disadvantage to the speed switch is that often times the\n"
++        "            bitrate will be slightly higher than with the normal mode\n"
++        "            and quality may be slightly lower also.\n"
++      "   Warning: with the current version fast presets might result in too\n"
++      "            high bitrate compared to regular presets.\n"
++        "\n"
++        "   \"cbr\"  - If you use the ABR mode (read above) with a significant\n"
++        "            bitrate such as 80, 96, 112, 128, 160, 192, 224, 256, 320,\n"
++        "            you can use the \"cbr\" option to force CBR mode encoding\n"
++        "            instead of the standard abr mode. ABR does provide higher\n"
++        "            quality but CBR may be useful in situations such as when\n"
++        "            streaming an mp3 over the internet may be important.\n"
++        "\n"
++        "    For example:\n"
++        "\n"
++        "    \"--preset fast standard <input file> <output file>\"\n"
++        " or \"--preset cbr 192 <input file> <output file>\"\n"
++        " or \"--preset 172 <input file> <output file>\"\n"
++        " or \"--preset extreme <input file> <output file>\"\n"
++        "\n"
++        "\n"
++        "A few aliases are available for ABR mode:\n"
++        "phone => 16kbps/mono        phon+/lw/mw-eu/sw => 24kbps/mono\n"
++        "mw-us => 40kbps/mono        voice => 56kbps/mono\n"
++        "fm/radio/tape => 112kbps    hifi => 160kbps\n"
++        "cd => 192kbps               studio => 256kbps");
++}
+-static int  presets_info ( const lame_global_flags* gfp, FILE* const fp, const char* ProgramName )  /* print possible combination */
++static void  presets_info_dm ( FILE* msgfp )
+ {
+-    int i;
++    fprintf( msgfp, "\n"
++             "presets highly tuned for utmost quality via blind listening tests:\n"
++             "  VBR presets for steady quality\n"
++             "    --preset standard\n"
++             "    --preset extreme\n"
++             "    --preset insane\n"
++             "  ABR presets for best quality at a given average bitrate:\n"
++             "    --preset <bitrate value>\n"
++        );
++}
+-    fprintf ( fp, "\n");    
+-    lame_version_print ( fp );
+-    
+-    fprintf ( fp, "Presets are some shortcuts for common settings.\n");
+-    fprintf ( fp, "They can be combined with -v if you want VBR MP3s.\n");
+-    
+-    fprintf ( fp, "\n                ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  strlen(Presets[i].name) <= 4 ? "%5s " : " %-5s", Presets[i].name );
+-    fprintf ( fp, "\n=================");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "======" );
+-    fprintf ( fp, "\n--resample      ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        if ( Presets[i].resample < 0 )
+-            fprintf ( fp,  "      " );
+-        else
+-            fprintf ( fp,  "%6.3g",  Presets[i].resample*1.e-3 );
+-    fprintf ( fp, "\n--highpass      ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        if ( Presets[i].highpass_freq < 0 )
+-            fprintf ( fp,  "      " );
++
++static void  presets_info_r3mix ( FILE* msgfp )
++{
++    fprintf( msgfp, "\n"
++             "r3mix- VBR preset for steady quality with little excess:\n"
++             "    --preset r3mix\n" );
++}
++
++
++
++/*  some presets thanks to Dibrom
++ */
++static int  presets_set( lame_t gfp, int fast, int cbr, const char* preset_name, const char* ProgramName )
++{
++    int mono = 0;
++
++    if ((strcmp(preset_name, "help") == 0) && (fast < 1)
++                                         && (cbr  < 1)) {
++        lame_version_print ( stdout );
++        presets_longinfo_dm( stdout );
++        return -1;
++    }
++
++
++
++    //aliases for compatibility with old presets
++
++    if (strcmp(preset_name, "phone") == 0) {
++        preset_name = "16";
++        mono = 1;
++    }
++    if ( (strcmp(preset_name, "phon+") == 0) ||
++         (strcmp(preset_name, "lw") == 0) ||
++         (strcmp(preset_name, "mw-eu") == 0) ||
++         (strcmp(preset_name, "sw") == 0)) {
++        preset_name = "24";
++        mono = 1;
++    }
++    if (strcmp(preset_name, "mw-us") == 0) {
++        preset_name = "40";
++        mono = 1;
++    }
++    if (strcmp(preset_name, "voice") == 0) {
++        preset_name = "56";
++        mono = 1;
++    }
++    if (strcmp(preset_name, "fm") == 0) {
++        preset_name = "112";
++    }
++    if ( (strcmp(preset_name, "radio") == 0) ||
++         (strcmp(preset_name, "tape") == 0)) {
++        preset_name = "112";
++    }
++    if (strcmp(preset_name, "hifi") == 0) {
++        preset_name = "160";
++    }
++    if (strcmp(preset_name, "cd") == 0) {
++        preset_name = "192";
++    }
++    if (strcmp(preset_name, "studio") == 0) {
++        preset_name = "256";
++    }
++
++
++
++    if (strcmp(preset_name, "medium") == 0) {
++
++        if (fast > 0)
++           lame_set_preset(gfp, MEDIUM_FAST);
+         else
+-            fprintf ( fp,  "%6.3g",  Presets[i].highpass_freq*1.e-3 );
+-    fprintf ( fp, "\n--lowpass       ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        if ( Presets[i].lowpass_freq < 0 )
+-            fprintf ( fp,  "      " );
++           lame_set_preset(gfp, MEDIUM);
++
++        return 0;
++    }
++    
++    if (strcmp(preset_name, "standard") == 0) {
++
++        if (fast > 0)
++           lame_set_preset(gfp, STANDARD_FAST);
+         else
+-            fprintf ( fp,  "%6.3g",  Presets[i].lowpass_freq*1.e-3 );
+-    fprintf ( fp, "\n--lowpass-width ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        if ( Presets[i].lowpass_width < 0 )
+-            fprintf ( fp,  "      " );
++           lame_set_preset(gfp, STANDARD);
++
++        return 0;
++    }
++    
++    else if (strcmp(preset_name, "extreme") == 0){
++
++        if (fast > 0)
++           lame_set_preset(gfp, EXTREME_FAST);
+         else
+-            fprintf ( fp,  "%6.3g",  Presets[i].lowpass_width*1.e-3 );
+-    fprintf ( fp, "\n--noshort       ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        switch ( Presets[i].no_short_blocks ) {
+-        case  1: fprintf ( fp,  "   yes" ); break;
+-        case  0: fprintf ( fp,  "    no" ); break;
+-        case -1: fprintf ( fp,  "      " ); break;
+-        default: assert (0);                break;
+-        }
+-    fprintf ( fp, "\n                ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        switch ( Presets[i].mode ) {
+-        case MONO:         fprintf ( fp, "   -mm"); break;
+-        case JOINT_STEREO: fprintf ( fp, "   -mj"); break;
+-        case STEREO:       fprintf ( fp, "   -ms"); break;
+-        case -1:                  fprintf ( fp, "      "); break;
+-        default:                  assert (0);              break;
+-        }
+-    fprintf ( fp, "\n                ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        switch ( Presets[i].quality ) {
+-        case -1: fprintf ( fp, "      "); break;
+-        case  2: fprintf ( fp, "    -h"); break;
+-        case  3: fprintf ( fp, "   -q3"); break;
+-        case  5: fprintf ( fp, "      "); break;
+-        case  7: fprintf ( fp, "    -f"); break;
+-        default: assert (0);              break;
+-    }
+-    fprintf ( fp, "\n-b              ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "%6u", Presets[i].cbr );
+-    fprintf ( fp, "\n-- PLUS WITH -v ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "------" );
+-    fprintf ( fp, "-\n-V              ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "%6u", Presets[i].vbr_mode );
+-    fprintf ( fp, "\n-b              ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "%6u", Presets[i].vbr_min );
+-    fprintf ( fp, "\n-B              ");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "%6u", Presets[i].vbr_max );
+-    fprintf ( fp, "\n----------------");
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++)
+-        fprintf ( fp,  "------" );
+-  
+-    fprintf ( fp, "-\nEXAMPLES:\n");
+-    fprintf ( fp, " a) --preset fm\n");
+-    fprintf ( fp, "    equal to: -mj -b112 --resample 32 --lowpass 15 --lowpass-width 0\n");
+-    fprintf ( fp, " b) -v --preset studio\n");
+-    fprintf ( fp, "    equals to: -h -ms -V0 -b160 -B320\n");
++           lame_set_preset(gfp, EXTREME);
++
++        return 0;
++    }
++                                      
++    else if (((strcmp(preset_name, "insane") == 0) || 
++              (strcmp(preset_name, "320"   ) == 0))   && (fast < 1)) {
++
++        lame_set_preset(gfp, INSANE);
+  
+-    return 0;
+-}
++        return 0;
++    }
++    // Generic ABR Preset
++    if (((atoi(preset_name)) > 0) &&  (fast < 1)) {
++        if ((atoi(preset_name)) >= 8 && (atoi(preset_name)) <= 320){
++            lame_set_preset(gfp, atoi(preset_name));
+-static int  presets_setup ( lame_global_flags* gfp, const char* preset_name, const char* ProgramName )
+-{
+-    int i;
++            if (cbr == 1 )
++                lame_set_VBR(gfp, vbr_off);
++
++            if (mono == 1 ) {
++                lame_set_mode(gfp, MONO);
++            }
+-    for ( i = 0; i < sizeof(Presets)/sizeof(*Presets); i++ )
+-        if ( 0 == strncmp (preset_name, Presets[i].name, strlen (preset_name) ) ) {
+-            if ( Presets[i].resample >= 0 )
+-                (void) lame_set_out_samplerate( gfp, Presets[i].resample );
+-            if ( Presets[i].highpass_freq >= 0 )
+-                lame_set_highpassfreq(gfp,Presets[i].highpass_freq),
+-                lame_set_highpasswidth(gfp,0);
+-            lame_set_lowpassfreq(gfp,Presets[i].lowpass_freq);
+-            lame_set_lowpasswidth(gfp,Presets[i].lowpass_width);
+-            lame_set_no_short_blocks( gfp, Presets[i].no_short_blocks );
+-            lame_set_quality        ( gfp, Presets[i].quality         );
+-            lame_set_mode           ( gfp, Presets[i].mode            );
+-            lame_set_brate(gfp,Presets[i].cbr);
+-            lame_set_VBR_q(gfp,Presets[i].vbr_mode);
+-            lame_set_VBR_min_bitrate_kbps(gfp,Presets[i].vbr_min);
+-            lame_set_VBR_max_bitrate_kbps(gfp,Presets[i].vbr_max);
+             return 0;
++
+         }
++        else {
++            lame_version_print ( stderr );
++            fprintf(stderr,"Error: The bitrate specified is out of the valid range for this preset\n"
++                           "\n"
++                           "When using this mode you must enter a value between \"32\" and \"320\"\n"
++                           "\n"
++                           "For further information try: \"%s --preset help\"\n"                  
+-    presets_info ( gfp, stderr, ProgramName );
++                           , ProgramName
++                   );
++            return -1;
++        }
++    }
++
++
++
++    lame_version_print ( stderr );
++    fprintf(stderr,"Error: You did not enter a valid profile and/or options with --preset\n"
++                   "\n"
++                   "Available profiles are:\n"
++                   "\n"
++                   "   <fast>        standard\n"
++                   "   <fast>        extreme\n"
++                   "                 insane\n"
++                   "          <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n"
++                   "                             simply specify a bitrate. For example:\n"
++                   "                             \"--preset 185\" activates this\n"
++                   "                             preset and uses 185 as an average kbps.\n" 
++                   "\n"
++                   "    Some examples:\n"
++                   "\n"
++                   " or \"%s --preset fast standard <input file> <output file>\"\n"
++                   " or \"%s --preset cbr 192 <input file> <output file>\"\n"
++                   " or \"%s --preset 172 <input file> <output file>\"\n"
++                   " or \"%s --preset extreme <input file> <output file>\"\n"                   
++                   "\n"
++                   "For further information try: \"%s --preset help\"\n"                  
++
++                   , ProgramName, ProgramName, ProgramName, ProgramName, ProgramName
++           );
+     return -1;
+ }
+-
+ static void genre_list_handler (int num,const char *name,void *cookie)
+ {
+     printf ("%3d %s\n", num, name);
+@@ -692,7 +929,9 @@
+     if ( 0 == local_strcasecmp ( FileName, ".mp1" ) ) return sf_mp1;
+     if ( 0 == local_strcasecmp ( FileName, ".mp2" ) ) return sf_mp2;
+     if ( 0 == local_strcasecmp ( FileName, ".mp3" ) ) return sf_mp3;
++#if defined(HAVE_VORBIS)
+     if ( 0 == local_strcasecmp ( FileName, ".ogg" ) ) return sf_ogg;
++#endif
+     if ( 0 == local_strcasecmp ( FileName, ".wav" ) ) return sf_wave;
+     if ( 0 == local_strcasecmp ( FileName, ".aif" ) ) return sf_aiff;
+     if ( 0 == local_strcasecmp ( FileName, ".raw" ) ) return sf_raw;
+@@ -743,6 +982,8 @@
+     /* turn on display options. user settings may turn them off below */
+     silent   = 0;
+     brhist   = 1;
++    enc_padding=-1;
++    enc_delay=-1;
+     mp3_delay = 0;   
+     mp3_delay_set=0;
+     disable_wav_header=0;
+@@ -764,10 +1005,10 @@
+             if (! *token) { /* The user wants to use stdin and/or stdout. */
+                 input_file = 1;
+                 if (inPath [0] == '\0')
+-                    strncpy (inPath, argv[i],MAX_NAME_SIZE);
++                    strncpy (inPath, argv[i], PATH_MAX + 1);
+                 else 
+                 if (outPath[0] == '\0') 
+-                    strncpy (outPath, argv[i],MAX_NAME_SIZE);
++                    strncpy (outPath, argv[i], PATH_MAX + 1);
+             } 
+             if (*token == '-') { /* GNU style */
+                 token++;
+@@ -781,34 +1022,25 @@
+                     lame_set_VBR(gfp,vbr_rh); 
+                 
+                 T_ELIF ("vbr-new")
+-                    lame_set_VBR(gfp,vbr_mt); 
++                    lame_set_VBR(gfp,vbr_mtrh); 
+                 
+                 T_ELIF ("vbr-mtrh")
+                     lame_set_VBR(gfp,vbr_mtrh); 
++                T_ELIF ("cbr")
++                    lame_set_VBR(gfp,vbr_off); 
++
+                 T_ELIF ("r3mix")
+-                    lame_set_VBR(gfp,vbr_rh); 
+-                    lame_set_VBR_q(gfp,1);
+-                    lame_set_quality( gfp, 2 );
+-                    lame_set_lowpassfreq(gfp,19500);
+-                    lame_set_mode( gfp, JOINT_STEREO );
+-                    lame_set_ATHtype( gfp, 3 );
+-                    lame_set_VBR_min_bitrate_kbps(gfp,112);
+-                    
+-                
++                    lame_set_preset(gfp, R3MIX);
++                                    
+                 /**
+                  *  please, do *not* DOCUMENT this one
+                  *  it is a developers only switch (rh)
+                  */
+-                T_ELIF ("remix")
+-                    lame_set_VBR(gfp,vbr_mtrh); 
+-                    lame_set_VBR_q(gfp,3);
+-                    lame_set_quality( gfp, 0 );
+-                    lame_set_lowpassfreq(gfp,19500);
+-                    lame_set_mode( gfp, JOINT_STEREO );
+-                    lame_set_ATHtype( gfp, 3 );
+-                    lame_set_VBR_min_bitrate_kbps(gfp,32);
+-                    
++                T_ELIF ("tune")
++                    argUsed=1;
++                    {extern void lame_set_tune(lame_t gfp, float val);
++                    lame_set_tune(gfp,atof(nextArg));}    
+                     
+                 T_ELIF ("abr")
+                     argUsed=1;
+@@ -854,35 +1086,41 @@
+                     return -1;
+ #endif
+                 T_ELIF ("ogg")
+-#if defined(HAVE_VORBIS)
++#if defined(HAVE_VORBIS_ENCODER)
+                     (void) lame_set_ogg( gfp, 1 );
+ #else
+-                    fprintf(stderr,"Error: LAME not compiled with Vorbis support\n");
++                    fprintf(stderr,"Error: LAME not compiled with Vorbis Encoder support\n");
+                     return -1;
+ #endif
+                 T_ELIF ("phone")
+-                    if (presets_setup ( gfp, token, ProgramName ) < 0)
++                    if (presets_set( gfp, 0, 0, token, ProgramName ) < 0)
+                         return -1;
++                    fprintf(stderr, "Warning: --phone is deprecated, use --preset phone instead!");
+                     
+                 T_ELIF ("voice")
+-                    if (presets_setup ( gfp, token, ProgramName ) < 0)
++                    if (presets_set( gfp, 0, 0, token, ProgramName ) < 0)
+                         return -1;
++                    fprintf(stderr, "Warning: --voice is deprecated, use --preset voice instead!");
+                     
+                 T_ELIF ("radio")
+-                    if (presets_setup ( gfp, token, ProgramName ) < 0)
++                    if (presets_set( gfp, 0, 0, token, ProgramName ) < 0)
+                         return -1;
+-                    
++                    fprintf(stderr, "Warning: --radio is deprecated, use --preset radio instead!");
++
+                 T_ELIF ("tape")
+-                    if (presets_setup ( gfp, token, ProgramName ) < 0)
++                    if (presets_set( gfp, 0, 0, token, ProgramName ) < 0)
+                         return -1;
++                fprintf(stderr, "Warning: --tape is deprecated, use --preset tape instead!");
+                     
+                 T_ELIF ("cd")
+-                    if (presets_setup ( gfp, token, ProgramName ) < 0)
++                    if (presets_set( gfp, 0, 0, token, ProgramName ) < 0)
+                         return -1;
++                fprintf(stderr, "Warning: --cd is deprecated, use --preset cd instead!");
+                     
+                 T_ELIF ("studio")
+-                    if (presets_setup ( gfp, token, ProgramName ) < 0)
++                    if (presets_set( gfp, 0, 0, token, ProgramName ) < 0)
+                         return -1;
++                fprintf(stderr, "Warning: --studio is deprecated, use --preset studio instead!");
+                     
+                 T_ELIF ("noshort")
+                     (void) lame_set_no_short_blocks( gfp, 1 );
+@@ -890,6 +1128,9 @@
+                 T_ELIF ("short")
+                     (void) lame_set_no_short_blocks( gfp, 0 );
+                 
++                T_ELIF ("allshort")
++                    (void) lame_set_force_short_blocks( gfp, 1 );
++                
+                 T_ELIF ("decode")
+                     (void) lame_set_decode_only( gfp, 1 );
+@@ -903,7 +1144,7 @@
+                 
+                 T_ELIF ("nores")
+                     lame_set_disable_reservoir(gfp,1);
+-                    lame_set_padding_type(gfp,0);
++                    lame_set_padding_type(gfp, PAD_NO);
+                 
+                 T_ELIF ("strictly-enforce-ISO")
+                     lame_set_strict_ISO(gfp,1);
+@@ -919,21 +1160,38 @@
+                     argUsed=1;
+                     (void) lame_set_ATHtype( gfp, atoi( nextArg ) );
+-                T_ELIF ("ath-adjust")   //  switch for developing, no DOCU
++                T_ELIF ("athaa-type")   //  switch for developing, no DOCU
+                     argUsed=1;          //  1:Gaby, 2:Robert, 3:Jon, else:off
+-                    lame_set_adjust_type( gfp, atoi(nextArg) );
++                    lame_set_athaa_type( gfp, atoi(nextArg) );
+-                T_ELIF ("adapt-thres-type")
++                T_ELIF ("athaa-loudapprox")
+                     argUsed=1;
+-                    lame_set_adapt_thres_type( gfp, atoi(nextArg) );
++                    lame_set_athaa_loudapprox( gfp, atoi(nextArg) );
+-                T_ELIF ("adapt-thres-level")
++                T_ELIF ("athaa-sensitivity")
+                     argUsed=1;
+-                    lame_set_adapt_thres_level( gfp, atof(nextArg) );
++                    lame_set_athaa_sensitivity( gfp, atof(nextArg) );
+                 T_ELIF ("scale")
+                     argUsed=1;
+                     (void) lame_set_scale( gfp, atof(nextArg) );
++
++                T_ELIF ("noasm")
++                    argUsed=1;
++                    if (!strcmp(nextArg, "mmx")) 
++                        (void) lame_set_asm_optimizations( gfp, MMX, 0 );
++                    if (!strcmp(nextArg, "3dnow")) 
++                        (void) lame_set_asm_optimizations( gfp, AMD_3DNOW, 0 );
++                    if (!strcmp(nextArg, "sse")) 
++                        (void) lame_set_asm_optimizations( gfp, SSE, 0 );
++
++              T_ELIF ("scale-l")
++                    argUsed=1;
++                    (void) lame_set_scale_left( gfp, atof(nextArg) );
++
++                T_ELIF ("scale-r")
++                    argUsed=1;
++                    (void) lame_set_scale_right( gfp, atof(nextArg) );
+                 
+                 T_ELIF ("freeformat")
+                     lame_set_free_format(gfp,1);
+@@ -944,6 +1202,12 @@
+                 T_ELIF ("nohist")
+                     brhist = 0;
+                 
++#if defined(__OS2__)
++                      T_ELIF ("priority")
++                          argUsed=1;
++                          setOS2Priority(gfp, atoi(nextArg));
++#endif
++
+                 /* options for ID3 tag */
+                 T_ELIF ("tt")
+                     argUsed=1;
+@@ -1056,9 +1320,20 @@
+                     }
+                     lame_set_compression_ratio(gfp,val);
+                 
++                T_ELIF ("no-preset-tune")
++                    (void) lame_set_preset_notune( gfp, 0 );                                  
++
+                 T_ELIF ("notemp")
+                     (void) lame_set_useTemporal( gfp, 0 );
++                T_ELIF ("interch")
++                    argUsed=1;
++                    (void) lame_set_interChRatio( gfp, atof(nextArg ) );
++
++                T_ELIF ("substep")
++                    argUsed=1;
++                    (void) lame_set_substep( gfp, atof(nextArg) );
++
+                 T_ELIF ("temporal-masking")
+                     argUsed = 1;
+                     (void) lame_set_useTemporal( gfp, atoi(nextArg)?1:0 );
+@@ -1070,6 +1345,10 @@
+                 
+                 T_ELIF ("nssafejoint")
+                     lame_set_exp_nspsytune(gfp,lame_get_exp_nspsytune(gfp) | 2);
++
++                T_ELIF ("nsmsfix")
++                    argUsed=1;
++                    (void) lame_set_msfix( gfp, atof(nextArg) );
+                 
+                 T_ELIF ("ns-bass")
+                     argUsed=1;
+@@ -1110,6 +1389,36 @@
+                       lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | (k << 14));
+                     }
+                 
++                T_ELIF ("ns-sfb21")
++                    /*  to be compatible with Naoki's original code, 
++                     *  ns-sfb21 specifies how to change ns-treble for sfb21 */
++                    argUsed=1;
++                    {
++                      double d;
++                      int k;
++                      d = atof( nextArg );
++                      k = (int)(d * 4);
++                      if (k < -32) k = -32;
++                      if (k >  31) k =  31;
++                      if (k < 0) k += 64;
++                      lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | (k << 20));
++                    }
++                
++                T_ELIF ("nspsytune2")
++                  {
++                    FILE *fp = fopen( nextArg, "r" );
++                    if (fp == NULL) {
++                      fprintf(stderr,"nspsytune2 : error opening %s\n",nextArg);
++                      abort();
++                    }
++                    lame_set_exp_nspsytune2_pointer(gfp,0,fp);
++                  }
++                /* nspsytune2 implies nspsytune */
++                    argUsed=1;
++                    lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 1);
++                    lame_set_experimentalZ(gfp,1);
++                    lame_set_experimentalX(gfp,1);
++                
+                 /* some more GNU-ish options could be added
+                  * brief         => few messages on screen (name, status report)
+                  * o/output file => specifies output filename
+@@ -1120,8 +1429,11 @@
+                 T_ELIF2 ("quiet", "silent")
+                     silent = 10;    /* on a scale from 1 to 10 be very silent */
+                 
++                T_ELIF ("brief")
++                    silent = -5;     /* print few info on screen */
++                    
+                 T_ELIF ("verbose")
+-                    silent = -10;    /* print a lot on screen, the default */
++                    silent = -10;    /* print a lot on screen */
+                     
+                 T_ELIF2 ("version", "license")
+                     print_license ( gfp, stdout, ProgramName );
+@@ -1135,10 +1447,6 @@
+                     long_help ( gfp, stdout, ProgramName, 0 /* lessmode=NO */ );
+                     return -2;
+                     
+-                T_ELIF ("extrahelp")
+-                    extra_help ( gfp, stdout, ProgramName, 0 /* lessmode=NO */ );
+-                    return -2;
+-                    
+                 T_ELIF ("?")
+ #ifdef __unix__
+                     FILE* fp = popen ("less -Mqc", "w");
+@@ -1149,15 +1457,35 @@
+ #endif              
+                     return -2;
+                 
+-                T_ELIF ("preset")
++                T_ELIF2 ("preset", "alt-preset")
+                     argUsed = 1;
+-                    if (presets_setup ( gfp, nextArg, ProgramName ) < 0)
+-                        return -1;
+-                    
++                    {
++                    int fast = 0, cbr = 0;
++
++                    while ((strcmp(nextArg, "fast")  == 0) ||
++                           (strcmp(nextArg, "cbr")   == 0))  {
++
++                        if ((strcmp(nextArg, "fast") == 0) && (fast < 1))
++                            fast = 1;
++                        if ((strcmp(nextArg, "cbr")  == 0) && (cbr  < 1))
++                            cbr = 1;
++
++                        argUsed++;
++                        nextArg = i+argUsed < argc  ?  argv[i+argUsed]  :  "";
++                    }
++
++                    if (presets_set ( gfp, fast, cbr, nextArg, ProgramName ) < 0)
++                    return -1;
++                }
++
+                 T_ELIF ("disptime")
+                     argUsed = 1;
+                     update_interval = atof (nextArg);
++              T_ELIF ("nogapout")
++                  strcpy(outPath, nextArg);
++                  argUsed = 1;
++                
+                 T_ELIF ("nogap")
+                     nogap=1;
+                     
+@@ -1275,7 +1603,8 @@
+                         lame_set_highpassfreq(gfp,-1);
+                         break;
+                     case 'd': 
+-                        (void) lame_set_allow_diff_short( gfp, 1 );
++                        fprintf(stderr,"WARNING: -d is obsolete.\n");
++                        /*(void) lame_set_allow_diff_short( gfp, 1 );*/
+                         break;
+                     case 'S': 
+                         silent = 1;
+@@ -1290,11 +1619,6 @@
+                     case 'Z': 
+                         lame_set_experimentalZ(gfp,1);
+                         break;
+-#if defined(HAVE_GTK)
+-                    case 'g': /* turn on gtk analysis */
+-                        (void) lame_set_analysis( gfp, 1 );
+-                        break;
+-#endif                  
+                     case 'e':        
+                         argUsed = 1;
+                         
+@@ -1333,7 +1657,7 @@
+         } else {
+             if (nogap) {
+                 if ((num_nogap != NULL) && (count_nogap < *num_nogap)) {
+-                    strncpy(nogap_inPath[count_nogap++],argv[i],MAX_NAME_SIZE);
++                    strncpy(nogap_inPath[count_nogap++], argv[i], PATH_MAX + 1);
+                     input_file=1;
+                 } else {
+                     /* sorry, calling program did not allocate enough space */
+@@ -1345,11 +1669,11 @@
+                 /* normal options:   inputfile  [outputfile], and
+                    either one can be a '-' for stdin/stdout */
+                 if (inPath [0] == '\0') {     
+-                    strncpy(inPath , argv[i], MAX_NAME_SIZE);
++                    strncpy(inPath , argv[i], PATH_MAX + 1);
+                     input_file=1;
+                 } else {
+                     if (outPath[0] == '\0') 
+-                        strncpy(outPath, argv[i], MAX_NAME_SIZE);
++                        strncpy(outPath, argv[i], PATH_MAX + 1);
+                     else {
+                         fprintf(stderr,"%s: excess arg %s\n", ProgramName, argv[i]);
+                         err = 1;
+@@ -1365,18 +1689,20 @@
+     }
+         
+     if ( inPath[0] == '-' ) 
+-        silent = 1;  /* turn off status - it's broken for stdin */
++        /* turn off status - it's broken for stdin */
++        silent = (silent <= 1 ? 1 : silent);
++
+ #ifdef WIN32
+     else
+         dosToLongFileName( inPath );
+ #endif
+     
+-    if ( outPath[0] == '\0' ) {
++    if ( outPath[0] == '\0' && count_nogap == 0) {
+         if ( inPath[0] == '-' ) {
+             /* if input is stdin, default output is stdout */
+             strcpy(outPath,"-");
+         } else {
+-            strncpy(outPath, inPath, MAX_NAME_SIZE - 4);
++            strncpy(outPath, inPath, PATH_MAX + 1 - 4);
+             if ( lame_get_decode_only( gfp ) ) {
+                 strncat (outPath, ".wav", 4 );
+             } else if( lame_get_ogg( gfp ) ) {
+@@ -1386,6 +1712,7 @@
+             }
+         }
+     }
++    
+     /* some file options not allowed with stdout */
+     if (outPath[0]=='-') {
+         (void) lame_set_bWriteVbrTag( gfp, 0 ); /* turn off VBR tag */
+@@ -1421,6 +1748,7 @@
+     if ( lame_get_free_format(gfp) ) {
+         if ( lame_get_brate(gfp) < 8  ||  lame_get_brate(gfp) > 640 ) {
+             fprintf(stderr,"For free format, specify a bitrate between 8 and 640 kbps\n");
++            fprintf(stderr,"with the -b <bitrate> option\n");
+             return -1;
+         }
+     }
+@@ -1429,3 +1757,4 @@
+ }
+ /* end of parse.c */
++
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/parse.h cinelerra-1.1.5/plugins/lame/frontend/parse.h
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/parse.h Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/parse.h      Thu Oct 17 14:38:32 2002
+@@ -5,7 +5,7 @@
+ int  long_help        ( const lame_global_flags* gfp, FILE* const fp, const char* ProgramName, int lessmode );
+ int  display_bitrates (                               FILE* const fp );
+-int  parse_args(lame_global_flags* gfp, int argc, char** argv, char *inPath, char *outPath, char * nogap_inPath[], int *max_nogap);
++int  parse_args(lame_global_flags* gfp, int argc, char** argv, char * const inPath, char * const outPath, char * nogap_inPath[], int *max_nogap);
+ void print_config(lame_global_flags* gfp);
+ /* end of parse.h */
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/rtp.h cinelerra-1.1.5/plugins/lame/frontend/rtp.h
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/rtp.h   Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/rtp.h        Wed Feb 13 17:30:05 2002
+@@ -26,7 +26,7 @@
+ int makesocket(char *szAddr,unsigned short port,unsigned char TTL,struct sockaddr_in *sSockAddr);
+ void rtp_output(const char *mp3buffer,int mp3size);
+-#ifdef 0
++#if 0
+ int rtp_send (
+     SOCKET s,
+     struct rtpheader *foo,
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/timestatus.c cinelerra-1.1.5/plugins/lame/frontend/timestatus.c
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/timestatus.c    Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/timestatus.c Mon May 27 13:13:37 2002
+@@ -55,8 +55,8 @@
+ #endif
+ typedef struct {
+-    double  start_time;                         // start time of converting [s]
+-    double  elapsed_time;               // current time - start time [s]
++    double  last_time;                          // result of last call to clock
++    double  elapsed_time;               // total time
+     double  estimated_time;             // estimated total duration time [s]
+     double  speed_index;                // speed relative to realtime coding [100%]
+ } timestatus_t;
+@@ -112,15 +112,29 @@
+     static timestatus_t  proc_time;
+     int                  percent;
+     static int           init = 0; /* What happens here? A work around instead of a bug fix ??? */
++    double               tmx,delta;
+     if ( frameNum == 0 ) {
+-        real_time.start_time = GetRealTime ();
+-        proc_time.start_time = GetCPUTime  ();
++        real_time.last_time = GetRealTime ();
++        proc_time.last_time = GetCPUTime  ();
++        real_time.elapsed_time = 0;
++        proc_time.elapsed_time = 0;
+     }
+-    
+-    real_time.elapsed_time = GetRealTime () - real_time.start_time;
+-    proc_time.elapsed_time = GetCPUTime  () - proc_time.start_time;
++
++    // we need rollover protection for GetCPUTime, and maybe GetRealTime():
++    tmx=GetRealTime();
++    delta=tmx-real_time.last_time;
++    if (delta<0) delta=0;  // ignore, clock has rolled over
++    real_time.elapsed_time += delta;
++    real_time.last_time     = tmx;
++
++
++    tmx=GetCPUTime();
++    delta=tmx-proc_time.last_time;
++    if (delta<0) delta=0;  // ignore, clock has rolled over
++    proc_time.elapsed_time += delta;
++    proc_time.last_time     = tmx;
+     if ( frameNum == 0 && init == 0 ) {
+         fprintf ( stderr,
+diff -Nur cinelerra-1.1.5/plugins/lame/frontend.orig/timestatus.h cinelerra-1.1.5/plugins/lame/frontend/timestatus.h
+--- cinelerra-1.1.5/plugins/lame/frontend.orig/timestatus.h    Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/frontend/timestatus.h Thu Oct 17 14:38:32 2002
+@@ -21,15 +21,15 @@
+ #ifndef LAME_TIMESTATUS_H
+ #define LAME_TIMESTATUS_H
+-void timestatus_klemm(const lame_global_flags *gfp);
++void timestatus_klemm(const lame_global_flags * const gfp);
+-void timestatus ( int samp_rate, 
+-                  int frameNum, 
+-                  int totalframes, 
+-                  int           framesize);
++void timestatus ( const int samp_rate, 
++                  const int frameNum, 
++                  const int totalframes, 
++                  const int           framesize);
+ void timestatus_finish(void);
+-void decoder_progress(const lame_global_flags *gfp,const mp3data_struct *);
+-void decoder_progress_finish(const lame_global_flags *gfp);
++void decoder_progress(const lame_global_flags * const gfp,const mp3data_struct * const);
++void decoder_progress_finish(const lame_global_flags * const gfp);
+ #endif /* LAME_TIMESTATUS_H */
+--- cinelerra-1.1.5/plugins/lame/Makefile.orig Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/lame/Makefile      Mon Mar 24 10:10:46 2003
+@@ -14,7 +14,7 @@
+ CFLAGS += -DHAVE_CONFIG_H \
+-      -Iinclude \
++      -I/usr/include/lame \
+       -Ilibmp3lame \
+       -I.
+@@ -26,34 +26,14 @@
+       $(OBJDIR)/frontend/main.o \
+       $(OBJDIR)/frontend/parse.o \
+       $(OBJDIR)/frontend/portableio.o \
+-      $(OBJDIR)/frontend/timestatus.o \
+-      $(OBJDIR)/libmp3lame/VbrTag.o \
+-      $(OBJDIR)/libmp3lame/bitstream.o \
+-      $(OBJDIR)/libmp3lame/encoder.o \
+-      $(OBJDIR)/libmp3lame/fft.o \
+-      $(OBJDIR)/libmp3lame/id3tag.o \
+-      $(OBJDIR)/libmp3lame/lame.o \
+-      $(OBJDIR)/libmp3lame/mpglib_interface.o \
+-      $(OBJDIR)/libmp3lame/newmdct.o \
+-      $(OBJDIR)/libmp3lame/pcm.o \
+-      $(OBJDIR)/libmp3lame/psymodel.o \
+-      $(OBJDIR)/libmp3lame/quantize.o \
+-      $(OBJDIR)/libmp3lame/quantize_pvt.o \
+-      $(OBJDIR)/libmp3lame/reservoir.o \
+-      $(OBJDIR)/libmp3lame/set_get.o \
+-      $(OBJDIR)/libmp3lame/tables.o \
+-      $(OBJDIR)/libmp3lame/takehiro.o \
+-      $(OBJDIR)/libmp3lame/util.o \
+-      $(OBJDIR)/libmp3lame/vbrquantize.o \
+-      $(OBJDIR)/libmp3lame/version.o \
+-      $(OBJDIR)/libmp3lame/vorbis_interface.o
++      $(OBJDIR)/frontend/timestatus.o
+ OUTPUT = ../$(OBJDIR)/lame.plugin
+-LIBS = -lm -lcurses
++LIBS = -lm -lcurses -lmp3lame
+-DIRS = $(OBJDIR)/frontend $(OBJDIR)/libmp3lame/
++DIRS = $(OBJDIR)/frontend
+ $(shell echo $(CFLAGS) > $(OBJDIR)/c_flags)
+ $(shell echo $(OBJS) $(LIBS) > $(OBJDIR)/libs)
diff --git a/cinelerra-mpeg2.patch b/cinelerra-mpeg2.patch
deleted file mode 100644 (file)
index 6074218..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- cinelerra-1.1.5/plugins/mpeg2enc/global.h.orig     Sat Sep 21 07:07:54 2002
-+++ cinelerra-1.1.5/plugins/mpeg2enc/global.h  Fri Mar 21 01:34:37 2003
-@@ -27,12 +27,12 @@
-  *
-  */
-+#include <pthread.h>
-+#include <stdint.h>
- #include "libmpeg3.h"
- #include "mpeg2enc.h"
- #include "quicktime.h"
--#include <pthread.h>
--#include <stdint.h>
- /* choose between declaration (GLOBAL_ undefined)
-  * and definition (GLOBAL_ defined)
diff --git a/cinelerra-strip.patch b/cinelerra-strip.patch
new file mode 100644 (file)
index 0000000..9cfe0b3
--- /dev/null
@@ -0,0 +1,22 @@
+--- cinelerra-1.1.5/plugins/defaulttheme/Makefile.orig Sun Dec 22 11:37:27 2002
++++ cinelerra-1.1.5/plugins/defaulttheme/Makefile      Mon Mar 24 10:23:13 2003
+@@ -6,7 +6,7 @@
+ OUTPUT_THEME: $(OBJS)
+       $(LDLINKER) -o $(OUTPUT_THEME) $(OBJS)
+-      strip $(OUTPUT_THEME)
++      $(STRIP) $(OUTPUT_THEME)
+       ../../guicast/$(OBJDIR)/bootstrap $(OUTPUT_THEME) data/*.png
+--- cinelerra-1.1.5/plugins/microtheme/Makefile.orig   Fri Jun 21 14:35:25 2002
++++ cinelerra-1.1.5/plugins/microtheme/Makefile        Mon Mar 24 10:23:34 2003
+@@ -6,7 +6,7 @@
+ OUTPUT_THEME: $(OBJS)
+       $(LDLINKER) -o $(OUTPUT_THEME) $(OBJS)
+-      strip $(OUTPUT_THEME)
++      $(STRIP) $(OUTPUT_THEME)
+       ../../cinelerra/$(OBJDIR)/bootstrap $(OUTPUT_THEME) data/*.png
+ include ../../plugin_config
index 04a6185808db2b509a863e8a9b36691b7cd89c02..67696dafcfd521b678eef93bcbb3dc9bf4285282 100644 (file)
@@ -63,7 +63,7 @@
 -      $(ESOUNDCFLAGS) \
 -      $(ALSA_CFLAGS) \
 -      -I../tiff \
-+      -I/usr/include/quicktime -I../quicktime \
++      -I/usr/include/quicktime \
 +      -I/usr/include/libdv \
 +      -I/usr/include/ogg \
 +      -I/usr/include/vorbis \
  CFLAGS += -I../ -I../../cinelerra \
        -I../../guicast \
 -      -I../../quicktime \
-+      -I/usr/include/quicktime -I../../quicktime \
++      -I/usr/include/quicktime \
        -I../colors
  
  $(shell echo $(CFLAGS) > ../$(OBJDIR)/c_flags)
 -
 -
 +$(OBJS):
-+      $(CC) -c $(CFLAGS) -I/usr/include/quicktime -I../../quicktime -I../../cinelerra -I../../guicast -I../colors $(subst $(OBJDIR)/,, $*.C) -o $*.o
++      $(CC) -c $(CFLAGS) -I/usr/include/quicktime -I../../cinelerra -I../../guicast -I../colors $(subst $(OBJDIR)/,, $*.C) -o $*.o
  
  $(OBJDIR)/title.o: title.C
  $(OBJDIR)/titlewindow.o: titlewindow.C
+--- cinelerra-1.1.5/cinelerra/jpegwrapper.h.orig       Fri Jun 21 14:35:24 2002
++++ cinelerra-1.1.5/cinelerra/jpegwrapper.h    Mon Mar 24 12:53:00 2003
+@@ -7,7 +7,7 @@
+ extern "C" {
+ #endif
+-#include "jpeg/jpeglib.h"
++#include <jpeglib.h>
+ #ifdef __cplusplus
+ }
index 811c2189ad8e7db974a3f75e30d4f0c2fe454c21..5da0637a2a934a0b6ebed2ae3d5cd2e198feb5e5 100644 (file)
@@ -1,5 +1,5 @@
-Summary:       -
-Summary(pl):   -
+Summary:       Cinelerra - capturing, editing and production of audio/video material
+Summary(pl):   Cinelerra - nagrywanie, obróbka i produkcja materia³u audio/video
 Name:          cinelerra
 Version:       1.1.5
 Release:       1
@@ -8,28 +8,55 @@ Group:                X11/Applications
 Source0:       http://dl.sourceforge.net/heroines/%{name}-%{version}-src.tar.bz2
 # yes, it's the same source
 # TODO: build guicast as separate, shared library to use in
-#       xmovie, mix2000, cinerella and bcast 
+#       xmovie, mix2000, cinelerra and bcast 
 Patch0:                xmovie-c++.patch
 Patch1:                %{name}-system-libs.patch
 Patch2:                %{name}-libsndfile1.patch
 Patch3:                %{name}-c++.patch
-Patch4:                %{name}-mpeg2.patch
+Patch4:                %{name}-lame.patch
+Patch5:                %{name}-strip.patch
+Patch6:                %{name}-fontsdir.patch
 URL:           http://heroinewarrior.com/cinelerra.php3
 BuildRequires: XFree86-devel
-# it's sick, but it's true - it used libuuid functions
+# it's sick, but it's true - it uses libuuid functions
 BuildRequires: e2fsprogs-devel
 BuildRequires: esound-devel
+BuildRequires: lame-libs-devel >= 3.93.1
 BuildRequires: libavc1394-devel >= 0.4.0
-BuildRequires: libmpeg3-devel >= 1.5.0
+BuildRequires: libmpeg3-devel >= 1.5.0-2
 BuildRequires: libsndfile-devel >= 1.0.0
 BuildRequires: libstdc++-devel
 BuildRequires: libtiff-devel
-BuildRequires: quicktime4linux-devel >= 1.6.1
+BuildRequires: quicktime4linux-devel >= 1.6.1-2
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
+# defaulttheme and microtheme cannot be stripped
+# (they have resources appended to linked binary :/)
+%define                no_install_post_strip   1
+
 %description
+There are two types of moviegoers: producers who create new content,
+going back over their content at future points for further refinement,
+and consumers who want to acquire the content and watch it. Cinelerra
+is not intended for consumers. Cinelerra has many features for
+uncompressed content, high resolution processing, and compositing,
+with very few shortcuts. Producers need these features because of the
+need to retouch many generations of footage with alterations to the
+format, which makes Cinelerra very complex.
+
+Cinelerra was meant to be a Broadcast 2000 replacement.
 
 %description -l pl
+S± dwa rodzaje u¿ytkowników zajmuj±cych siê filmami: producenci
+tworz±cy nowe filmy, wracaj±cy do nich w przysz³o¶ci w celu dalszego
+wyg³adzenia, oraz konsumenci, którzy chc± tylko zdobyæ film i go
+obejrzeæ. Cinelerra nie jest dla konsumentów. Program ma wiele
+mo¿liwo¶ci do edycji nieskompresowanej zawarto¶ci, obróbki w wysokiej
+rozdzielczo¶ci oraz monta¿u, z bardzo ma³± liczb± skrótów. Producenci
+potrzebuj± tych mo¿liwo¶ci ze wzglêdu na konieczno¶æ retuszowania
+oraz modyfikacji formatu, co czyni program bardzo z³o¿onym.
+
+Cinelerra by³a tworzona z my¶l± o zast±pieniu programu Broadcast 2000.
 
 %prep
 %setup -q
@@ -38,6 +65,8 @@ BuildRoot:    %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
+%patch6 -p1
 
 %build
 CFLAGS="%{rpmcflags} -fno-rtti"; export CFLAGS
@@ -45,11 +74,9 @@ CFLAGS="%{rpmcflags} -fno-rtti"; export CFLAGS
 %{__make} -C mplexlo
 %{__make} -C guicast
 %{__make} -C cinelerra
-# TODO: lame fails (termcap.h not found)
-# TODO: lame should use shared lame library
-# TODO: defaulttheme and microtheme cannot be stripped
-#       (they have resources appended to linked binary :/)
-%{__make} -C plugins
+# defaulttheme and microtheme are stripped before running "bootstrap"
+%{__make} -C plugins \
+       STRIP="%{?debug:true}%{!?debug:strip -R.note -R.comment}"
 
 %install
 rm -rf $RPM_BUILD_ROOT
@@ -58,10 +85,18 @@ install -d $RPM_BUILD_ROOT{%{_bindir},%{_libdir}/cinelerra}
 install cinelerra/*/cinelerra $RPM_BUILD_ROOT%{_bindir}
 install plugins/`uname -m`/*.plugin $RPM_BUILD_ROOT%{_libdir}/cinelerra
 
+%if 0%{!?debug:1}
+# strip all that can be stripped
+strip -R.note -R.comment $RPM_BUILD_ROOT%{_bindir}/cinelerra
+find $RPM_BUILD_ROOT%{_libdir}/cinelerra -name '*.plugin' | \
+       grep -v 'defaulttheme\|microtheme' | xargs strip -R.note -R.comment
+%endif
+
 %clean
 rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(644,root,root,755)
+%doc doc/{*.png,*.html,press}
 %attr(755,root,root) %{_bindir}/*
 %attr(755,root,root) %{_libdir}/cinelerra
This page took 0.228275 seconds and 4 git commands to generate.