jcext.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /*
  2. * jcext.c
  3. *
  4. * Copyright (C) 2014, D. R. Commander.
  5. * Copyright (C) 2014, Mozilla Corporation.
  6. * For conditions of distribution and use, see the accompanying README file.
  7. *
  8. * This file contains accessor functions for extension parameters. These
  9. * allow for extending the functionality of the libjpeg API without breaking
  10. * backward ABI compatibility.
  11. */
  12. #define JPEG_INTERNALS
  13. #include "jinclude.h"
  14. #include "jpeglib.h"
  15. GLOBAL(boolean)
  16. jpeg_c_bool_param_supported (const j_compress_ptr cinfo, J_BOOLEAN_PARAM param)
  17. {
  18. switch (param) {
  19. case JBOOLEAN_OPTIMIZE_SCANS:
  20. case JBOOLEAN_TRELLIS_QUANT:
  21. case JBOOLEAN_TRELLIS_QUANT_DC:
  22. case JBOOLEAN_TRELLIS_EOB_OPT:
  23. case JBOOLEAN_USE_LAMBDA_WEIGHT_TBL:
  24. case JBOOLEAN_USE_SCANS_IN_TRELLIS:
  25. case JBOOLEAN_TRELLIS_Q_OPT:
  26. case JBOOLEAN_OVERSHOOT_DERINGING:
  27. return TRUE;
  28. }
  29. return FALSE;
  30. }
  31. GLOBAL(void)
  32. jpeg_c_set_bool_param (j_compress_ptr cinfo, J_BOOLEAN_PARAM param,
  33. boolean value)
  34. {
  35. switch(param) {
  36. case JBOOLEAN_OPTIMIZE_SCANS:
  37. cinfo->master->optimize_scans = value;
  38. break;
  39. case JBOOLEAN_TRELLIS_QUANT:
  40. cinfo->master->trellis_quant = value;
  41. break;
  42. case JBOOLEAN_TRELLIS_QUANT_DC:
  43. cinfo->master->trellis_quant_dc = value;
  44. break;
  45. case JBOOLEAN_TRELLIS_EOB_OPT:
  46. cinfo->master->trellis_eob_opt = value;
  47. break;
  48. case JBOOLEAN_USE_LAMBDA_WEIGHT_TBL:
  49. cinfo->master->use_lambda_weight_tbl = value;
  50. break;
  51. case JBOOLEAN_USE_SCANS_IN_TRELLIS:
  52. cinfo->master->use_scans_in_trellis = value;
  53. break;
  54. case JBOOLEAN_TRELLIS_Q_OPT:
  55. cinfo->master->trellis_q_opt = value;
  56. break;
  57. case JBOOLEAN_OVERSHOOT_DERINGING:
  58. cinfo->master->overshoot_deringing = value;
  59. break;
  60. default:
  61. ERREXIT(cinfo, JERR_BAD_PARAM);
  62. }
  63. }
  64. GLOBAL(boolean)
  65. jpeg_c_get_bool_param (const j_compress_ptr cinfo, J_BOOLEAN_PARAM param)
  66. {
  67. switch(param) {
  68. case JBOOLEAN_OPTIMIZE_SCANS:
  69. return cinfo->master->optimize_scans;
  70. case JBOOLEAN_TRELLIS_QUANT:
  71. return cinfo->master->trellis_quant;
  72. case JBOOLEAN_TRELLIS_QUANT_DC:
  73. return cinfo->master->trellis_quant_dc;
  74. case JBOOLEAN_TRELLIS_EOB_OPT:
  75. return cinfo->master->trellis_eob_opt;
  76. case JBOOLEAN_USE_LAMBDA_WEIGHT_TBL:
  77. return cinfo->master->use_lambda_weight_tbl;
  78. case JBOOLEAN_USE_SCANS_IN_TRELLIS:
  79. return cinfo->master->use_scans_in_trellis;
  80. case JBOOLEAN_TRELLIS_Q_OPT:
  81. return cinfo->master->trellis_q_opt;
  82. case JBOOLEAN_OVERSHOOT_DERINGING:
  83. return cinfo->master->overshoot_deringing;
  84. default:
  85. ERREXIT(cinfo, JERR_BAD_PARAM);
  86. }
  87. return FALSE;
  88. }
  89. GLOBAL(boolean)
  90. jpeg_c_float_param_supported (const j_compress_ptr cinfo, J_FLOAT_PARAM param)
  91. {
  92. switch (param) {
  93. case JFLOAT_LAMBDA_LOG_SCALE1:
  94. case JFLOAT_LAMBDA_LOG_SCALE2:
  95. case JFLOAT_TRELLIS_DELTA_DC_WEIGHT:
  96. return TRUE;
  97. }
  98. return FALSE;
  99. }
  100. GLOBAL(void)
  101. jpeg_c_set_float_param (j_compress_ptr cinfo, J_FLOAT_PARAM param, float value)
  102. {
  103. switch (param) {
  104. case JFLOAT_LAMBDA_LOG_SCALE1:
  105. cinfo->master->lambda_log_scale1 = value;
  106. break;
  107. case JFLOAT_LAMBDA_LOG_SCALE2:
  108. cinfo->master->lambda_log_scale2 = value;
  109. break;
  110. case JFLOAT_TRELLIS_DELTA_DC_WEIGHT:
  111. cinfo->master->trellis_delta_dc_weight = value;
  112. break;
  113. default:
  114. ERREXIT(cinfo, JERR_BAD_PARAM);
  115. }
  116. }
  117. GLOBAL(float)
  118. jpeg_c_get_float_param (const j_compress_ptr cinfo, J_FLOAT_PARAM param)
  119. {
  120. switch (param) {
  121. case JFLOAT_LAMBDA_LOG_SCALE1:
  122. return cinfo->master->lambda_log_scale1;
  123. case JFLOAT_LAMBDA_LOG_SCALE2:
  124. return cinfo->master->lambda_log_scale2;
  125. case JFLOAT_TRELLIS_DELTA_DC_WEIGHT:
  126. return cinfo->master->trellis_delta_dc_weight;
  127. default:
  128. ERREXIT(cinfo, JERR_BAD_PARAM);
  129. }
  130. return -1;
  131. }
  132. GLOBAL(boolean)
  133. jpeg_c_int_param_supported (const j_compress_ptr cinfo, J_INT_PARAM param)
  134. {
  135. switch (param) {
  136. case JINT_COMPRESS_PROFILE:
  137. case JINT_TRELLIS_FREQ_SPLIT:
  138. case JINT_TRELLIS_NUM_LOOPS:
  139. case JINT_BASE_QUANT_TBL_IDX:
  140. case JINT_DC_SCAN_OPT_MODE:
  141. return TRUE;
  142. }
  143. return FALSE;
  144. }
  145. GLOBAL(void)
  146. jpeg_c_set_int_param (j_compress_ptr cinfo, J_INT_PARAM param, int value)
  147. {
  148. switch (param) {
  149. case JINT_COMPRESS_PROFILE:
  150. switch (value) {
  151. case JCP_MAX_COMPRESSION:
  152. case JCP_FASTEST:
  153. cinfo->master->compress_profile = value;
  154. break;
  155. default:
  156. ERREXIT(cinfo, JERR_BAD_PARAM_VALUE);
  157. }
  158. break;
  159. case JINT_TRELLIS_FREQ_SPLIT:
  160. cinfo->master->trellis_freq_split = value;
  161. break;
  162. case JINT_TRELLIS_NUM_LOOPS:
  163. cinfo->master->trellis_num_loops = value;
  164. break;
  165. case JINT_BASE_QUANT_TBL_IDX:
  166. if (value >= 0 && value <= 8)
  167. cinfo->master->quant_tbl_master_idx = value;
  168. break;
  169. case JINT_DC_SCAN_OPT_MODE:
  170. cinfo->master->dc_scan_opt_mode = value;
  171. break;
  172. default:
  173. ERREXIT(cinfo, JERR_BAD_PARAM);
  174. }
  175. }
  176. GLOBAL(int)
  177. jpeg_c_get_int_param (const j_compress_ptr cinfo, J_INT_PARAM param)
  178. {
  179. switch (param) {
  180. case JINT_COMPRESS_PROFILE:
  181. return cinfo->master->compress_profile;
  182. case JINT_TRELLIS_FREQ_SPLIT:
  183. return cinfo->master->trellis_freq_split;
  184. case JINT_TRELLIS_NUM_LOOPS:
  185. return cinfo->master->trellis_num_loops;
  186. case JINT_BASE_QUANT_TBL_IDX:
  187. return cinfo->master->quant_tbl_master_idx;
  188. case JINT_DC_SCAN_OPT_MODE:
  189. return cinfo->master->dc_scan_opt_mode;
  190. default:
  191. ERREXIT(cinfo, JERR_BAD_PARAM);
  192. }
  193. return -1;
  194. }