⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicin.c

📁 Motion JPEG编解码器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************Copyright (c) 1991 MPEG/audio software simulation group, All Rights Reservedmusicin.c**********************************************************************//********************************************************************** * MPEG/audio coding/decoding software, work in progress              * *   NOT for public distribution until verified and approved by the   * *   MPEG/audio committee.  For further information, please contact   * *   Davis Pan, 508-493-2241, e-mail: pan@3d.enet.dec.com             * *                                                                    * * VERSION 4.0                                                        * *   changes made since last update:                                  * *   date   programmers         comment                               * * 3/01/91  Douglas Wong,       start of version 1.1 records          * *          Davis Pan                                                 * * 3/06/91  Douglas Wong,       rename: setup.h to endef.h            * *                              removed extraneous variables          * * 3/21/91  J.Georges Fritsch   introduction of the bit-stream        * *                              package. This package allows you      * *                              to generate the bit-stream in a       * *                              binary or ascii format                * * 3/31/91  Bill Aspromonte     replaced the read of the SB matrix    * *                              by an "code generated" one            * * 5/10/91  W. Joseph Carter    Ported to Macintosh and Unix.         * *                              Incorporated Jean-Georges Fritsch's   * *                              "bitstream.c" package.                * *                              Modified to strictly adhere to        * *                              encoded bitstream specs, including    * *                              "Berlin changes".                     * *                              Modified user interface dialog & code * *                              to accept any input & output          * *                              filenames desired.  Also added        * *                              de-emphasis prompt and final bail-out * *                              opportunity before encoding.          * *                              Added AIFF PCM sound file reading     * *                              capability.                           * *                              Modified PCM sound file handling to   * *                              process all incoming samples and fill * *                              out last encoded frame with zeros     * *                              (silence) if needed.                  * *                              Located and fixed numerous software   * *                              bugs and table data errors.           * * 27jun91  dpwe (Aware Inc)    Used new frame_params struct.         * *                              Clear all automatic arrays.           * *                              Changed some variable names,          * *                              simplified some code.                 * *                              Track number of bits actually sent.   * *                              Fixed padding slot, stereo bitrate    * *                              Added joint-stereo : scales L+R.      * * 6/12/91  Earle Jennings      added fix for MS_DOS in obtain_param  * * 6/13/91  Earle Jennings      added stack length adjustment before  * *                              main for MS_DOS                       * * 7/10/91  Earle Jennings      conversion of all float to FLOAT      * *                              port to MsDos from MacIntosh completed* * 8/ 8/91  Jens Spille         Change for MS-C6.00                   * * 8/22/91  Jens Spille         new obtain_parameters()               * *10/ 1/91  S.I. Sudharsanan,   Ported to IBM AIX platform.           * *          Don H. Lee,                                               * *          Peter W. Farrett                                          * *10/ 3/91  Don H. Lee          implemented CRC-16 error protection   * *                              newly introduced functions are        * *                              I_CRC_calc, II_CRC_calc and encode_CRC* *                              Additions and revisions are marked    * *                              with "dhl" for clarity                * *11/11/91 Katherine Wang       Documentation of code.                * *                                (variables in documentation are     * *                                surround by the # symbol, and an '*'* *                                denotes layer I or II versions)     * * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   * *                              important fixes involved changing     * *                              16-bit ints to long or unsigned in    * *                              bit alloc routines for quant of 65535 * *                              and passing proper function args.     * *                              Removed "Other Joint Stereo" option   * *                              and made bitrate be total channel     * *                              bitrate, irrespective of the mode.    * *                              Fixed many small bugs & reorganized.  * * 2/25/92  Masahiro Iwadare    made code cleaner and more consistent * * 8/07/92  Mike Coleman        make exit() codes return error status * *                              made slight changes for portability   * *19 aug 92 Soren H. Nielsen    Changed MS-DOS file name extensions.  * * 8/25/92  Shaun Astarabadi    Replaced rint() function with explicit* *                              rounding for portability with MSDOS.  * * 9/22/92  jddevine@aware.com  Fixed _scale_factor_calc() calls.     * *10/19/92  Masahiro Iwadare    added info->mode and info->mode_ext   * *                              updates for AIFF format files         * * 3/10/93  Kevin Peterson      In parse_args, only set non default   * *                              bit rate if specified in arg list.    * *                              Use return value from aiff_read_hdrs  * *                              to fseek to start of sound data       * * 7/26/93  Davis Pan           fixed bug in printing info->mode_ext  * *                              value for joint stereo condition      * * 8/27/93 Seymour Shlien,      Fixes in Unix and MSDOS ports,        * *         Daniel Lauzon, and                                         * *         Bill Truerniet                                             * * 2004/7/29  Steven Schultz    Cleanup and fix the pathname limit    * *                              once and for all.                     * * 2004/8/22  Steven Schultz    Make the code agree with the manpage  * *                              The manpage says that -V _forces_ VCD * *                              compatible mode.  Also, the VCD 2.0   * *                              specification permits 128, 192  and   * *                              384 kbit/sec rates for stereo (or dual* *                              mono) and 64,96 or 192 kbit/sec for   * *                              mono mode.  Since VCD2.0 came out in  * *                              1995 I think it's time to update this * *                              program ;)                            * *                              Make the default sampling rate 48000  * *                              if -V is NOT used - this will avoid   * *                              problems with folks encoding for DVDs.* **********************************************************************/#ifdef HAVE_CONFIG_H#include "config.h"#endif #include <stdlib.h>#include <string.h>#include "common.h"#include "encoder.h"#include "wav_io.h"/* Global variable definitions for "musicin.c" */FILE               *musicin;Bit_stream_struc   bs;int		   verbose = 1;char               *programName;/* Global variables */int freq_in=0;int freq_out=48000;int chans_in=0;int chans_out=0;int audio_bits=0;int32_t audio_bytes=0;static void Usage(char *str){  printf("Usage: %s [params] < input.wav\n",str);  printf("   where possible params are:\n");  printf( "  -v num  Level of verbosity. 0 = quiet, 1 = normal 2 = verbose/debug\n");  printf("   -b num     Bitrate in KBit/sec (default: 224 KBit/s)\n");  printf("   -l num     Layer number 1 or 2 (default: 2)\n");  printf("   -o name    Outputfile name (REQUIRED)\n");  printf("   -r num     Force output sampling rate to be num Hz (default: 48000)\n");  printf("              num must be one of 32000, 44100, 48000\n");  printf("   -s         Force stereo output (default)\n");  printf("   -m         Force mono output\n");  printf("   -e         Use CRC error protection\n");  printf("   -V         Force VCD sampling rate (-r 44100) and perform bitrate/channel validity checks\n");  printf("   -?         Print this lot out\n");  exit(0);}static voidget_params(argc, argv,fr_ps,psy,num_samples,encoded_file_name)int             argc;char**          argv;frame_params    *fr_ps;int             *psy;unsigned long   *num_samples;char            **encoded_file_name;{    layer *info = fr_ps->header;    int brt=224;    char *outfilename = 0;    int stereo = 1;    int mono = 0;    int video_cd = 0;    int j, n;    int audio_format;    /* RJ: We set most params to fixed defaults: */    info->lay = 2;    info->emphasis = 0;    info->extension = 0;    info->error_protection = 0;    info->copyright = 0;    info->original = 0;    info->mode_ext = 0;    *psy = 2;    *num_samples = MAX_U_32_NUM; /* Unlimited */    while( (n=getopt(argc,argv,"b:o:l:r:smeVv:")) != EOF)    {        switch(n) {		case 'b':			brt = atoi(optarg);			break;		case 'o':			outfilename = optarg;			break;		case 'r':			freq_out = atoi(optarg);    			if (freq_out!=32000 && freq_out!=44100 && freq_out!=48000)       			mjpeg_error_exit1("-r requires one of 32000 44100 48000!");			break;		case 'l':			info->lay = atoi(optarg);    			if (info->lay!=2 && info->lay!=1)       			mjpeg_error_exit1("-l requires 1 or 2!");			break;		case 's':			stereo = 1;			mono = 0;			chans_out = 2;			break;		case 'm':			mono = 1;			stereo = 0;    			chans_out = 1;			break;		case 'e':                        info->error_protection = 1;			break;		case 'V':			video_cd = 1;			break;	        case 'v':			verbose = atoi(optarg);			if( verbose < 0 || verbose > 2 )				Usage(argv[0]);			break;		case '?':			Usage(argv[0]);        }    }    (void)mjpeg_default_handler_verbosity(verbose);    if(argc!=optind) 		Usage(argv[0]);    if(outfilename==0)    {        mjpeg_error("Output file name (-o option) is required!");        Usage(argv[0]);    }    *encoded_file_name = strdup(outfilename);    if (*encoded_file_name == NULL)       mjpeg_error_exit1("can not malloc %d bytes", strlen(outfilename));    /* Read the WAV file header, make sanity checks */    if(wav_read_header(stdin,&freq_in,&chans_in,&audio_bits,                       &audio_format,&audio_bytes))        mjpeg_error_exit1("failure reading WAV file");    mjpeg_info("Opened WAV file, freq = %d Hz, channels = %d, bits = %d",           freq_in, chans_in, audio_bits);    mjpeg_info("format = 0x%x, audio length = %d bytes",audio_format,audio_bytes);    if(audio_format!=1)       mjpeg_error_exit1("WAV file is not in PCM format");    if(audio_bits!=8 && audio_bits!=16)       mjpeg_error_exit1("audio samples must have 8 or 16 bits");    if(chans_in!=1 && chans_in!=2)       mjpeg_error_exit1("can only handle files with 1 or 2 channels");    if(chans_out==0) chans_out = chans_in;    if(chans_out==1)       info->mode = MPG_MD_MONO;    else       info->mode = MPG_MD_STEREO;    if(video_cd && info->lay != 2 )       mjpeg_error_exit1("Option -V requires layer II!");    if	(video_cd)        {        freq_out=44100;	if (chans_out == 2)	   {           switch (brt)                  {		  case	128:		  case	192:		  case	224:		  case	384:		        break;		  default:		        mjpeg_error_exit1("-b %d not valid with stereo. Bitrate must be 128, 192, 224 or 384", brt);		  }	    }	else if (chans_out == 1)	    {	    switch (brt)	           {		   case 64:		   case 96:		   case 192:		        break;		   default:		        mjpeg_error_exit1("-b %d not valid with mono. Bitrate must be 64, 96 or 192", brt);		   }	     }        }    if(freq_out==0) freq_out = freq_in;    switch (freq_out) {       case 48000 :           info->sampling_frequency = 1;           break;       case 44100 :           info->sampling_frequency = 0;           break;       case 32000 :           info->sampling_frequency = 2;           break;       default:           mjpeg_error_exit1("Frequency must be one of 32000 44100 48000"					   " unless -r is used!");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -