avidump.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  * Dave Mackie dmackie@cisco.com
  20.  * Bill May wmay@cisco.com
  21.  */
  22. #include <math.h>
  23. #include <mpeg4ip.h>
  24. #include <mpeg4ip_getopt.h>
  25. #include <avilib.h>
  26. /* globals */
  27. char* progName;
  28. static struct {
  29.   const char *name;
  30.   int value;
  31. } audio_names[] = {
  32.   {"UNKNOWN", 0x0000},
  33.   {"PCM", 0x0001},
  34.   {"ADPCM", 0x0002},
  35.   {"IBM_CVSD", 0x0005},
  36.   {"ALAW", 0x0006},
  37.   {"MULAW", 0x0007},
  38.   {"OKI_ADPCM", 0x0010},
  39.   {"DVI_ADPCM", 0x0011},
  40.   {"DIGISTD", 0x0015},
  41.   {"DIGIFIX", 0x0016},
  42.   {"YAMAHA_ADPCM", 0x0020},
  43.   {"DSP_TRUESPEECH", 0x0022},
  44.   {"GSM610", 0x0031},
  45.   {"IBMMULAW", 0x0101},
  46.   {"IBMALAW", 0x0102},
  47.   {"IBMADPCM", 0x0103},
  48.   { NULL, 0}, 
  49. };
  50. /*
  51.  *avidump
  52.  * required arg1 should be file to check
  53.  */ 
  54. int main(int argc, char** argv)
  55. {
  56.   /* internal variables */
  57.   char* aviFileName = NULL;
  58.   avi_t* aviFile = NULL;
  59.   FILE* rawFile = NULL;
  60.   uint32_t numVideoFrames;
  61.   int ix, format;
  62.   const char *aname;
  63.   
  64.   /* begin process command line */
  65.   progName = argv[0];
  66.   while (1) {
  67.     int c = -1;
  68.     int option_index = 0;
  69.     static struct option long_options[] = {
  70.       { "version", 0, 0, 'V'},
  71.       { "help", 0, 0, '?'},
  72.       { NULL, 0, 0, 0 }
  73.     };
  74.     c = getopt_long_only(argc, argv, "Vh",
  75.  long_options, &option_index);
  76.     
  77.     if (c == -1)
  78.       break;
  79.     switch (c) {
  80.     case '?':
  81.       fprintf(stderr, "%s <filename>", progName);
  82.       return (0);
  83.     case 'V':
  84.       fprintf(stderr, "%s - %s version %sn", progName,
  85.       PACKAGE, VERSION);
  86.       return (0);
  87.     default:
  88.       fprintf(stderr, "%s: unknown option specified, ignoring: %cn", 
  89.       progName, c);
  90.     }
  91.   }
  92.   /* check that we have at least two non-option arguments */
  93.   if ((argc - optind) < 1) {
  94.     fprintf(stderr, 
  95.     "usage: %s <avi-file> ...n",
  96.     progName);
  97.     exit(1);
  98.   }
  99.   fprintf(stderr, "%s - %s version %sn",
  100.   progName, PACKAGE, VERSION);
  101.   /* point to the specified file names */
  102.   while (optind < argc) {
  103.     aviFileName = argv[optind++];
  104.     if (aviFileName == NULL) return (0);
  105.     /* open the AVI file */
  106.     aviFile = AVI_open_input_file(aviFileName, TRUE);
  107.     if (aviFile == NULL) {
  108.       fprintf(stderr, 
  109.       "%s: error %s: %sn",
  110.       progName, aviFileName, AVI_strerror());
  111.       exit(4);
  112.     }
  113.     fprintf(stdout, "%sn", aviFileName);
  114.     numVideoFrames = AVI_video_frames(aviFile);
  115.     if (numVideoFrames != 0) {
  116.       fprintf(stdout, "Video Informationn");
  117.       fprintf(stdout,
  118.       "   Video compressor: %sn",
  119.       AVI_video_compressor(aviFile));
  120.       fprintf(stdout,
  121.       "   Video frame rate: %gn", 
  122.       AVI_video_frame_rate(aviFile));
  123.       fprintf(stdout, "   Number of frames: %un", numVideoFrames);
  124.       fprintf(stdout, "   Video height    : %dn", AVI_video_height(aviFile));
  125.       fprintf(stdout, "   Video width     : %dn", AVI_video_width(aviFile));
  126.     } else {
  127.       fprintf(stdout, "No video framesn");
  128.     }
  129.     if (AVI_audio_bytes(aviFile) != 0) {
  130.       fprintf(stdout, "Audio information:n");
  131.       fprintf(stdout, "   Audio channels: %dn", AVI_audio_channels(aviFile));
  132.       fprintf(stdout, "   Audio bits/sample: %dn", AVI_audio_bits(aviFile));
  133.       format = AVI_audio_format(aviFile);
  134.       for (ix = 0, aname = NULL;
  135.    aname == NULL && audio_names[ix].name != NULL;
  136.    ix++) {
  137. if (audio_names[ix].value == format) {
  138.   aname = audio_names[ix].name;
  139. }
  140.       }
  141.       if (aname == NULL) aname = "Format not in list";
  142.       fprintf(stdout, "   Audio format: %d %sn", format, aname);
  143.       fprintf(stdout, "   Audio sample rate: %dn", AVI_audio_rate(aviFile));
  144.       fprintf(stdout, "   Audio bytes: %dn", AVI_audio_bytes(aviFile));
  145.     } else {
  146.       fprintf(stdout, "No audio bytesn");
  147.     }
  148.     /* cleanup */
  149.     AVI_close(aviFile);
  150.   }
  151.   return(0);
  152. }