mom_access.c
上传用户:enenge
上传日期:2007-01-08
资源大小:96k
文件大小:10k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /**************************************************************************
  2.  *                                                                        *
  3.  * This code is developed by Adam Li.  This software is an                *
  4.  * implementation of a part of one or more MPEG-4 Video tools as          *
  5.  * specified in ISO/IEC 14496-2 standard.  Those intending to use this    *
  6.  * software module in hardware or software products are advised that its  *
  7.  * use may infringe existing patents or copyrights, and any such use      *
  8.  * would be at such party's own risk.  The original developer of this     *
  9.  * software module and his/her company, and subsequent editors and their  *
  10.  * companies (including Project Mayo), will have no liability for use of  *
  11.  * this software or modifications or derivatives thereof.                 *
  12.  *                                                                        *
  13.  * Project Mayo gives users of the Codec a license to this software       *
  14.  * module or modifications thereof for use in hardware or software        *
  15.  * products claiming conformance to the MPEG-4 Video Standard as          *
  16.  * described in the Open DivX license.                                    *
  17.  *                                                                        *
  18.  * The complete Open DivX license can be found at                         *
  19.  * http://www.projectmayo.com/opendivx/license.php .                      *
  20.  *                                                                        *
  21.  **************************************************************************/
  22. /**************************************************************************
  23.  *
  24.  *  mom_access.c
  25.  *
  26.  *  Copyright (C) 2001  Project Mayo
  27.  *
  28.  *  Adam Li
  29.  *
  30.  *  DivX Advance Research Center <darc@projectmayo.com>
  31.  *
  32.  **************************************************************************/
  33. /* This file contains memory access for the Image, Vop and VolConfig data */
  34. /* structures.                                                            */
  35. /* Some codes of this project come from MoMuSys MPEG-4 implementation.    */
  36. /* Please see seperate acknowledgement file for a list of contributors.   */
  37. #include "mom_access.h"
  38. /***********************************************************CommentBegin******
  39.  *
  40.  * -- GetImage{xxx} -- Access components of intermediate formats
  41.  *
  42.  * Char *GetImageData(Image *image)
  43.  *      UInt GetImageSize(Image *image)
  44.  *      UInt GetImageSizeX(Image *image)
  45.  *      UInt GetImageSizeY(Image *image)
  46.  *      Int GetImageVersion(Image *image)
  47.  *      ImageType GetImageType(Image *image)
  48.  *
  49.  * Purpose :
  50.  * These are common functions to access specific components
  51.  *      of the common data structures which are used for the
  52.  *      intermediate formats.
  53.  *
  54.  ***********************************************************CommentEnd********/
  55. Char *
  56. GetImageData(Image *image)
  57. {
  58. switch(GetImageType(image))
  59. {
  60. case SHORT_TYPE:
  61. return((Char *)image->data->s);
  62. break;
  63. case FLOAT_TYPE:
  64. return((Char *)image->data->f);
  65. break;
  66. case UCHAR_TYPE:
  67. return((Char *)image->data->u);
  68. break;
  69. default:
  70. printf("Image type >>%d<< not supportedn",image->type);
  71. return(NULL);
  72. }
  73. }
  74. UInt
  75. GetImageSize(Image *image)
  76. {
  77. return(image->x * image->y);
  78. }
  79. UInt
  80. GetImageSizeX(Image *image)
  81. {
  82. return(image->x);
  83. }
  84. UInt
  85. GetImageSizeY(Image *image)
  86. {
  87. return(image->y);
  88. }
  89. Int
  90. GetImageVersion(Image *image)
  91. {
  92. return(image->version);
  93. }
  94. ImageType
  95. GetImageType(Image *image)
  96. {
  97. return(image->type);
  98. }
  99. /***********************************************************CommentBegin******
  100.  *
  101.  * -- GetVop{xxx} -- Functions to access components of the Vop structure
  102.  *
  103.  * Purpose :
  104.  * These are common functions to access specific components
  105.  *      of the Vop data structure.
  106.  *
  107.  ***********************************************************CommentEnd********/
  108. Int GetVopNot8Bit(Vop *vop)
  109. {
  110. return (vop->bits_per_pixel != 8);
  111. }
  112. Int GetVopQuantPrecision(Vop *vop)
  113. {
  114. return (vop->quant_precision);
  115. }
  116. Int GetVopBitsPerPixel(Vop *vop)
  117. {
  118. return (vop->bits_per_pixel);
  119. }
  120. Int GetVopMidGrey(Vop *vop)
  121. {
  122. return (1 << (vop->bits_per_pixel - 1));
  123. }
  124. Int GetVopBrightWhite(Vop *vop)
  125. {
  126. return ((1 << vop->bits_per_pixel) - 1);
  127. }
  128. Int GetVopTimeIncrementResolution(Vop *vop)
  129. {
  130. return (vop->time_increment_resolution);
  131. }
  132. Int
  133. GetVopModTimeBase(Vop *vop)
  134. {
  135. return(vop->mod_time_base);
  136. }
  137. Int
  138. GetVopTimeInc(Vop *vop)
  139. {
  140. return((int)vop->time_inc);
  141. }
  142. Int
  143. GetVopPredictionType(Vop *vop)
  144. {
  145. return(vop->prediction_type);
  146. }
  147. Int GetVopIntraDCVlcThr(Vop *vop)
  148. {
  149. return (vop->intra_dc_vlc_thr);
  150. }
  151. Int
  152. GetVopRoundingType(Vop *vop)
  153. {
  154. return(vop->rounding_type);
  155. }
  156. Int
  157. GetVopWidth(Vop *vop)
  158. {
  159. return(vop->width);
  160. }
  161. Int
  162. GetVopHeight(Vop *vop)
  163. {
  164. return(vop->height);
  165. }
  166. Int
  167. GetVopHorSpatRef(Vop *vop)
  168. {
  169. return(vop->hor_spat_ref);
  170. }
  171. Int
  172. GetVopVerSpatRef(Vop *vop)
  173. {
  174. return(vop->ver_spat_ref);
  175. }
  176. Int
  177. GetVopQuantizer(Vop *vop)
  178. {
  179. return(vop->quantizer);
  180. }
  181. Int
  182. GetVopIntraQuantizer(Vop *vop)
  183. {
  184. return(vop->intra_quantizer);
  185. }
  186. Int
  187. GetVopIntraACDCPredDisable(Vop *vop)
  188. {
  189. return(vop->intra_acdc_pred_disable);
  190. }
  191. Int
  192. GetVopFCodeFor(Vop *vop)
  193. {
  194. return(vop->fcode_for);
  195. }
  196. Int
  197. GetVopSearchRangeFor(Vop *vop)
  198. {
  199. return(vop->sr_for);
  200. }
  201. Image *
  202. GetVopY(Vop *vop)
  203. {
  204. return(vop->y_chan);
  205. }
  206. Image *
  207. GetVopU(Vop *vop)
  208. {
  209. return(vop->u_chan);
  210. }
  211. Image *
  212. GetVopV(Vop *vop)
  213. {
  214. return(vop->v_chan);
  215. }
  216. /***********************************************************CommentBegin******
  217.  *
  218.  * -- PutVop{xxx} -- Functions to write to components of the Vop structure
  219.  *
  220.  * These are common functions to write to specific components
  221.  *      of the Vop structure.
  222.  *
  223.  ***********************************************************CommentEnd********/
  224. Void PutVopQuantPrecision(Int quant_precision,Vop *vop)
  225. {
  226. vop->quant_precision = quant_precision;
  227. }
  228. Void PutVopBitsPerPixel(Int bits_per_pixel,Vop *vop)
  229. {
  230. vop->bits_per_pixel = bits_per_pixel;
  231. }
  232. Void PutVopTimeIncrementResolution(Int time_incre_res, Vop *vop)
  233. {
  234. vop->time_increment_resolution=time_incre_res;
  235. }
  236. Void
  237. PutVopModTimeBase(Int mod_time_base, Vop *vop)
  238. {
  239. vop->mod_time_base = mod_time_base;
  240. }
  241. Void
  242. PutVopTimeInc(Int time_inc, Vop *vop)
  243. {
  244. vop->time_inc = (float)time_inc;
  245. }
  246. Void
  247. PutVopPredictionType(Int prediction_type, Vop *vop)
  248. {
  249. vop->prediction_type = prediction_type;
  250. }
  251. Void PutVopIntraDCVlcThr(Int intra_dc_vlc_thr,Vop *vop)
  252. {
  253. vop->intra_dc_vlc_thr=intra_dc_vlc_thr;
  254. }
  255. Void
  256. PutVopRoundingType(Int rounding_type, Vop *vop)
  257. {
  258. vop->rounding_type = rounding_type;
  259. }
  260. Void
  261. PutVopWidth(Int width, Vop *vop)
  262. {
  263. vop->width = width;
  264. }
  265. Void
  266. PutVopHeight(Int height, Vop *vop)
  267. {
  268. vop->height = height;
  269. }
  270. Void
  271. PutVopHorSpatRef(Int hor_spat_ref, Vop *vop)
  272. {
  273. vop->hor_spat_ref = hor_spat_ref;
  274. }
  275. Void
  276. PutVopVerSpatRef(Int ver_spat_ref, Vop *vop)
  277. {
  278. vop->ver_spat_ref = ver_spat_ref;
  279. }
  280. Void
  281. PutVopQuantizer(Int quantizer, Vop *vop)
  282. {
  283. vop->quantizer = quantizer;
  284. }
  285. Void
  286. PutVopIntraACDCPredDisable(Int intra_acdc_pred_disable, Vop *vop)
  287. {
  288. vop->intra_acdc_pred_disable = intra_acdc_pred_disable;
  289. }
  290. Void
  291. PutVopFCodeFor(Int fcode_for, Vop *vop)
  292. {
  293. vop->fcode_for = fcode_for;
  294. }
  295. Void
  296. PutVopSearchRangeFor(Int sr_for, Vop *vop)
  297. {
  298. vop->sr_for = sr_for;
  299. }
  300. Void
  301. PutVopY(Image *y_chan, Vop *vop)
  302. {
  303. FreeImage(vop->y_chan);
  304. vop->y_chan = y_chan;
  305. }
  306. Void
  307. PutVopU(Image *u_chan, Vop *vop)
  308. {
  309. FreeImage(vop->u_chan);
  310. vop->u_chan = u_chan;
  311. }
  312. Void
  313. PutVopV(Image *v_chan, Vop *vop)
  314. {
  315. FreeImage(vop->v_chan);
  316. vop->v_chan = v_chan;
  317. }
  318. Void
  319. PutVopIntraQuantizer(Int Q,Vop *vop)
  320. {
  321. vop->intra_quantizer = Q;
  322. }
  323. /***********************************************************CommentBegin******
  324.  *
  325.  * -- PutVolConfigXXXX -- Access functions for VolConfig
  326.  *
  327.  * Purpose :
  328.  *      To set particular fields in a VolConfig strcuture
  329.  *
  330.  ***********************************************************CommentEnd********/
  331. Void
  332. PutVolConfigFrameRate(Float fr, VolConfig *cfg)
  333. {
  334. cfg->frame_rate = fr;
  335. }
  336. Void
  337. PutVolConfigM(Int M, VolConfig *cfg)
  338. {
  339. cfg->M = M;
  340. }
  341. Void
  342. PutVolConfigStartFrame(Int frame, VolConfig *cfg)
  343. {
  344. cfg->start_frame = frame;
  345. }
  346. Void
  347. PutVolConfigEndFrame(Int frame, VolConfig *cfg)
  348. {
  349. cfg->end_frame = frame;
  350. }
  351. Void
  352. PutVolConfigBitrate(Int bit_rate,VolConfig *cfg)
  353. {
  354. cfg->bit_rate = bit_rate;
  355. }
  356. Void
  357. PutVolConfigIntraPeriod(Int ir,VolConfig *cfg)
  358. {
  359. cfg->intra_period = ir;
  360. }
  361. Void
  362. PutVolConfigQuantizer(Int Q,VolConfig *cfg)
  363. {
  364. cfg->quantizer = Q;
  365. }
  366. Void
  367. PutVolConfigIntraQuantizer(Int Q,VolConfig *cfg)
  368. {
  369. cfg->intra_quantizer = Q;
  370. }
  371. Void
  372. PutVolConfigFrameSkip(Int frame_skip,VolConfig *cfg)
  373. {
  374. cfg->frame_skip = frame_skip;
  375. }
  376. Void
  377. PutVolConfigModTimeBase(Int time,VolConfig *cfg)
  378. {
  379. cfg->modulo_time_base[0] = cfg->modulo_time_base[1];
  380. cfg->modulo_time_base[1] = time;
  381. }
  382. /***********************************************************CommentBegin******
  383.  *
  384.  * -- GetVolConfigXXXX -- Access functions for VolConfig
  385.  *
  386.  * Purpose :
  387.  *      To obtain the value of particular fields in a VolConfig structure
  388.  *
  389.  ***********************************************************CommentEnd********/
  390. Float
  391. GetVolConfigFrameRate(VolConfig *cfg)
  392. {
  393. return(cfg->frame_rate);
  394. }
  395. Int
  396. GetVolConfigM(VolConfig *cfg)
  397. {
  398. return(cfg->M);
  399. }
  400. Int
  401. GetVolConfigStartFrame(VolConfig *cfg)
  402. {
  403. return(cfg->start_frame);
  404. }
  405. Int
  406. GetVolConfigEndFrame(VolConfig *cfg)
  407. {
  408. return(cfg->end_frame);
  409. }
  410. Int
  411. GetVolConfigBitrate(VolConfig *cfg)
  412. {
  413. return(cfg->bit_rate);
  414. }
  415. Int
  416. GetVolConfigIntraPeriod(VolConfig *cfg)
  417. {
  418. return(cfg->intra_period);
  419. }
  420. Int
  421. GetVolConfigQuantizer(VolConfig *cfg)
  422. {
  423. return(cfg->quantizer);
  424. }
  425. Int
  426. GetVolConfigIntraQuantizer(VolConfig *cfg)
  427. {
  428. return(cfg->intra_quantizer);
  429. }
  430. Int
  431. GetVolConfigFrameSkip(VolConfig *cfg)
  432. {
  433. return(cfg->frame_skip);
  434. }
  435. Int
  436. GetVolConfigModTimeBase(VolConfig *cfg,Int i)
  437. {
  438. return(cfg->modulo_time_base[i]);
  439. }