verify_ac3.c
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:4k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /* 
  2.  *    verify_ac3.c
  3.  *
  4.  * Copyright (C) Aaron Holtzman - May 1999
  5.  *
  6.  *  This file is part of ac3dec, a free Dolby AC-3 stream decoder.
  7.  *
  8.  *  ac3dec is free software; you can redistribute it and/or modify
  9.  *  it under the terms of the GNU General Public License as published by
  10.  *  the Free Software Foundation; either version 2, or (at your option)
  11.  *  any later version.
  12.  *   
  13.  *  ac3dec is distributed in the hope that it will be useful,
  14.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *  GNU General Public License for more details.
  17.  *   
  18.  *  You should have received a copy of the GNU General Public License
  19.  *  along with GNU Make; see the file COPYING.  If not, write to
  20.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  21.  *
  22.  *
  23.  */
  24. #ifdef HAVE_CONFIG_H
  25. #include "config.h"
  26. #endif 
  27. #include <stdlib.h>
  28. #include <stdio.h>
  29. #include <errno.h>
  30. #include <string.h>
  31. #include "ac3.h"
  32. #include "decode.h"
  33. #include "bitstream.h"
  34. #include "parse.h"
  35. #include "crc.h"
  36. #include "sys/time.h"
  37. #include "debug.h"
  38. static void decode_find_sync(bitstream_t *bs);
  39. static void decode_print_banner(void);
  40. static bsi_t bsi;
  41. static syncinfo_t syncinfo;
  42. static uint_32 frame_count = 0;
  43. int main(int argc,char *argv[])
  44. {
  45. int i;
  46. bitstream_t *bs;
  47. FILE *in_file;
  48. int done_banner = 0;
  49. int bits_in_frame;
  50. /* If we get an argument then use it as a filename... otherwise use
  51.  * stdin */
  52. if(argc > 1)
  53. {
  54. in_file = fopen(argv[1],"r");
  55. if(!in_file)
  56. {
  57. fprintf(stderr,"%s - Couldn't open file %sn",strerror(errno),argv[1]);
  58. exit(1);
  59. }
  60. }
  61. else
  62. in_file = stdin;
  63. bs = bitstream_open(in_file);
  64. while(1)
  65. {
  66. decode_find_sync(bs);
  67. parse_syncinfo(&syncinfo,bs);
  68. parse_bsi(&bsi,bs);
  69. if(!done_banner)
  70. {
  71. decode_print_banner();
  72. done_banner = 1;
  73. }
  74. bits_in_frame = (syncinfo.frame_size * 16)  - bs->total_bits_read;
  75. for(i=0; i < bits_in_frame ; i++)
  76. bitstream_get(bs,1);
  77. if(!crc_validate())
  78. {
  79. printf("(crc) CRC check failed on frame %ldn",frame_count);
  80. }
  81. else
  82. {
  83. dprintf("(crc) CRC check passedn");
  84. }
  85. if(bitstream_done(bs))
  86. break;
  87. }
  88. printf("end of streamn");
  89. bitstream_close(bs);
  90. return 0;
  91. }
  92. static 
  93. void decode_find_sync(bitstream_t *bs)
  94. {
  95. uint_16 sync_word;
  96. uint_32 i = 0;
  97. sync_word = bitstream_get(bs,16);
  98. /* Make sure we sync'ed */
  99. while(1)
  100. {
  101. if(sync_word == 0x0b77)
  102. break;
  103. sync_word = sync_word * 2;
  104. sync_word |= bitstream_get(bs,1);
  105. i++;
  106. }
  107. dprintf("(sync) %ld bits skipped to synchronizen",i);
  108. dprintf("(sync) begin frame %ldn",frame_count);
  109. frame_count++;
  110. bs->total_bits_read = 16;
  111. crc_init();
  112. }
  113. void decode_print_banner(void)
  114. {
  115. printf(PACKAGE"-"VERSION" (C) 1999 Aaron Holtzman (aholtzma@engr.uvic.ca)n");
  116. printf("Verifying Streamn");
  117. printf("%d.%d Mode ",bsi.nfchans,bsi.lfeon);
  118. switch (syncinfo.fscod)
  119. {
  120. case 2:
  121. printf("32 KHz   ");
  122. break;
  123. case 1:
  124. printf("44.1 KHz ");
  125. break;
  126. case 0:
  127. printf("48 KHz   ");
  128. break;
  129. default:
  130. printf("Invalid sampling rate ");
  131. break;
  132. }
  133. printf("%4d kbps ",syncinfo.bit_rate);
  134. switch(bsi.bsmod)
  135. {
  136. case 0:
  137. printf("Complete Main Audio Service");
  138. break;
  139. case 1:
  140. printf("Music and Effects Audio Service");
  141. case 2:
  142. printf("Visually Impaired Audio Service");
  143. break;
  144. case 3:
  145. printf("Hearing Impaired Audio Service");
  146. break;
  147. case 4:
  148. printf("Dialogue Audio Service");
  149. break;
  150. case 5:
  151. printf("Commentary Audio Service");
  152. break;
  153. case 6:
  154. printf("Emergency Audio Service");
  155. break;
  156. case 7:
  157. printf("Voice Over Audio Service");
  158. break;
  159. }
  160. printf("n");
  161. }