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

DVD

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * Copyright (C) 1998,1999  Thomas Mirlacher
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  * 
  19.  * The author may be reached as dent@cosy.sbg.ac.at, or
  20.  * Thomas Mirlacher, Jakob-Haringerstr. 2, A-5020 Salzburg,
  21.  * Austria
  22.  *
  23.  *------------------------------------------------------------
  24.  *
  25.  */
  26. #include <stdio.h>
  27. #include <sys/types.h>
  28. static struct {
  29.         u_short descr : 16;
  30.         char lang_long[20];
  31. } lang_tbl[] = {
  32. /* The ISO 639 language codes.
  33.  * Language names with * prefix are not spelled in their own language 
  34.  *
  35.  */
  36. {0x00, "Not Specified"},
  37. {'  ', "Not Specified"},
  38. {'aa', "*Afar"},
  39. {'ab', "*Abkhazian"},
  40. {'af', "*Afrikaans"},
  41. {'am', "*Amharic"},
  42. {'ar', "*Arabic"},
  43. {'as', "*Assamese"},
  44. {'ay', "*Aymara"},
  45. {'az', "*Azerbaijani"},
  46. {'ba', "*Bashkir"},
  47. {'be', "*Byelorussian"},
  48. {'bg', "*Bulgarian"},
  49. {'bh', "*Bihari"},
  50. {'bi', "*Bislama"},
  51. {'bn', "*Bengali; Bangla"},
  52. {'bo', "*Tibetan"},
  53. {'br', "*Breton"},
  54. {'ca', "*Catalan"},
  55. {'co', "*Corsican"},
  56. {'cs', "*Czech"},
  57. {'cy', "*Welsh"},
  58. {'da', "Dansk"},
  59. {'de', "Deutsch"},
  60. {'dz', "*Bhutani"},
  61. {'el', "*Greek"},
  62. {'en', "English"},
  63. {'eo', "*Esperanto"},
  64. {'es', "Espanol"},
  65. {'et', "*Estonian"},
  66. {'eu', "*Basque"},
  67. {'fa', "*Persian"},
  68. {'fi', "*Finish"},
  69. {'fj', "*Fiji"},
  70. {'fo', "*Faroese"},
  71. {'fr', "Francais"},
  72. {'fy', "*Frisian"},
  73. {'ga', "*Irish"},
  74. {'gd', "*Scots Gaelic"},
  75. {'gl', "*Galician"},
  76. {'gn', "*Guarani"},
  77. {'gu', "*Gujarati"},
  78. {'ha', "*Hausa"},
  79. {'he', "*Hebrew"}, // formerly iw
  80. {'hi', "*Hindi"},
  81. {'hr', "Hrvatski"}, // Croatian
  82. {'hu', "*Hungarian"},
  83. {'hy', "*Armenian"},
  84. {'ia', "*Interlingua"},
  85. {'id', "*Indonesian"}, // formerly in
  86. {'ie', "*Interlingue"},
  87. {'ik', "*Inupiak"},
  88. {'in', "*Indonesian"}, // replaced by id
  89. {'is', "Islenska"},
  90. {'it', "Italiano"},
  91. {'iu', "*Inuktitut"},
  92. {'iw', "*Hebrew"}, // replaced by he
  93. {'ja', "*Japanese"},
  94. {'ji', "*Yiddish"}, // replaced by yi
  95. {'jw', "*Javanese"},
  96. {'ka', "*Georgian"},
  97. {'kk', "*Kazakh"},
  98. {'kl', "*Greenlandic"},
  99. {'km', "*Cambodian"},
  100. {'kn', "*Kannada"},
  101. {'ko', "*Korean"},
  102. {'ks', "*Kashmiri"},
  103. {'ku', "*Kurdish"},
  104. {'ky', "*Kirghiz"},
  105. {'la', "*Latin"},
  106. {'ln', "*Lingala"},
  107. {'lo', "*Laothian"},
  108. {'lt', "*Lithuanian"},
  109. {'lv', "*Latvian, Lettish"},
  110. {'mg', "*Malagasy"},
  111. {'mi', "*Maori"},
  112. {'mk', "*Macedonian"},
  113. {'ml', "*Malayalam"},
  114. {'mn', "*Mongolian"},
  115. {'mo', "*Moldavian"},
  116. {'mr', "*Marathi"},
  117. {'ms', "*Malay"},
  118. {'mt', "*Maltese"},
  119. {'my', "*Burmese"},
  120. {'na', "*Nauru"},
  121. {'ne', "*Nepali"},
  122. {'nl', "Nederlands"},
  123. {'no', "Norsk"},
  124. {'oc', "*Occitan"},
  125. {'om', "*(Afan) Oromo"},
  126. {'or', "*Oriya"},
  127. {'pa', "*Punjabi"},
  128. {'pl', "*Polish"},
  129. {'ps', "*Pashto, Pushto"},
  130. {'pt', "Portugues"},
  131. {'qu', "*Quechua"},
  132. {'rm', "*Rhaeto-Romance"},
  133. {'rn', "*Kirundi"},
  134. {'ro', "*Romanian"},
  135. {'ru', "*Russian"},
  136. {'rw', "*Kinyarwanda"},
  137. {'sa', "*Sanskrit"},
  138. {'sd', "*Sindhi"},
  139. {'sg', "*Sangho"},
  140. {'sh', "*Serbo-Croatian"},
  141. {'si', "*Sinhalese"},
  142. {'sk', "*Slovak"},
  143. {'sl', "*Slovenian"},
  144. {'sm', "*Samoan"},
  145. {'sn', "*Shona"},
  146. {'so', "*Somali"},
  147. {'sq', "*Albanian"},
  148. {'sr', "*Serbian"},
  149. {'ss', "*Siswati"},
  150. {'st', "*Sesotho"},
  151. {'su', "*Sundanese"},
  152. {'sv', "Svenska"},
  153. {'sw', "*Swahili"},
  154. {'ta', "*Tamil"},
  155. {'te', "*Telugu"},
  156. {'tg', "*Tajik"},
  157. {'th', "*Thai"},
  158. {'ti', "*Tigrinya"},
  159. {'tk', "*Turkmen"},
  160. {'tl', "*Tagalog"},
  161. {'tn', "*Setswana"},
  162. {'to', "*Tonga"},
  163. {'tr', "*Turkish"},
  164. {'ts', "*Tsonga"},
  165. {'tt', "*Tatar"},
  166. {'tw', "*Twi"},
  167. {'ug', "*Uighur"},
  168. {'uk', "*Ukrainian"},
  169. {'ur', "*Urdu"},
  170. {'uz', "*Uzbek"},
  171. {'vi', "*Vietnamese"},
  172. {'vo', "*Volapuk"},
  173. {'wo', "*Wolof"},
  174. {'xh', "*Xhosa"},
  175. {'yi', "*Yiddish"}, // formerly ji
  176. {'yo', "*Yoruba"},
  177. {'za', "*Zhuang"},
  178. {'zh', "*Chinese"},
  179. {'zu', "*Zulu"},
  180. {0, ""}
  181. };
  182. /**
  183.  *
  184.  */
  185. char *decode_lang (u_short descr)
  186. {
  187.         int i;
  188. // swap bytes (for i386 at least)
  189.         descr = ((descr>>8)&0xff) | ((descr&0xff)<<8);
  190.         for (i=0; lang_tbl[i].lang_long[0]; i++) {
  191.                 if (descr == lang_tbl[i].descr) {
  192.                         return (char *) lang_tbl[i].lang_long;
  193.                 }
  194.         }
  195.         printf ("descr: %x%xn", (descr>>8)&0xff, descr&0xff);
  196.         return lang_tbl[i].lang_long;
  197. }
  198. static struct {
  199.         u_short descr;
  200.         char descr_long[50];
  201. } videomode_tbl[] = {
  202. {0x01, "Never The Same Color 29.97fps"},
  203. {0x02, "Never The Same Color 30fps"},
  204. {0x03, "PAL-B, D, G, H, I, 25 fps"},
  205. {0x04, "PAL-M 29.97 fps"},
  206. {0x05, "PAL-M 30 fps"},
  207. {0x06, "PAL-N 25 fps"},
  208. {0x07, "PAL-Nc 25 fps"},
  209. {0x08, "PAL 30 fps"},
  210. {0, ""}
  211. };
  212. /**
  213.  *
  214.  */
  215. char *decode_videomode (u_short descr)
  216. {
  217.         int i;
  218.         for (i=0; videomode_tbl[i].descr; i++) {
  219.                 if (descr == videomode_tbl[i].descr) {
  220.                         return (char *) videomode_tbl[i].descr_long;
  221.                 }
  222.         }
  223.         fprintf (stderr, "VIDEO 0x%0X", descr);
  224.         return NULL;
  225. }
  226. /**
  227.  *
  228.  */
  229. char *decode_audiomode (u_short descr)
  230. {
  231. static char audio_coding_mode[][9] = {
  232. "AC3",
  233. "MPEG1",
  234. "MPEG2ext",
  235. "LPCM",
  236. "DTS",
  237. "SDDS"
  238. };
  239. return audio_coding_mode[descr&0x07];
  240. }
  241. /**
  242.  *
  243.  */
  244. char *decode_audiomodeappl (u_char descr)
  245. {
  246. static char audio_appl_mode[][15] = {
  247. "Not Specified",
  248. "Karaoke",
  249. "Surround Sound"
  250. };
  251. return audio_appl_mode[descr&0x02];
  252. }
  253. static struct {
  254. u_char descr;
  255. char descr_long[25];
  256. } audiocaption_tbl[] = {
  257. {0x01, "Normal Caption"},
  258. {0x03, "Directors Comments"},
  259. {0, ""}
  260. };
  261. /**
  262.  *
  263.  */
  264. char *decode_caption (u_char descr)
  265. {
  266. int i;
  267. for (i=0; audiocaption_tbl[i].descr; i++) {
  268. if (descr == audiocaption_tbl[i].descr) {
  269. return (char *) audiocaption_tbl[i].descr_long;
  270. }
  271. }
  272. return NULL;
  273. }