| OLD | NEW |
| 1 /* | 1 /* |
| 2 * The copyright in this software is being made available under the 2-clauses | 2 * The copyright in this software is being made available under the 2-clauses |
| 3 * BSD License, included below. This software may be subject to other third | 3 * BSD License, included below. This software may be subject to other third |
| 4 * party and contributor rights, including patent rights, and no such rights | 4 * party and contributor rights, including patent rights, and no such rights |
| 5 * are granted under this license. | 5 * are granted under this license. |
| 6 * | 6 * |
| 7 * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s
.fr> | 7 * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s
.fr> |
| 8 * All rights reserved. | 8 * All rights reserved. |
| 9 * | 9 * |
| 10 * Redistribution and use in source and binary forms, with or without | 10 * Redistribution and use in source and binary forms, with or without |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 | 96 |
| 97 return OPJ_TRUE; | 97 return OPJ_TRUE; |
| 98 } | 98 } |
| 99 | 99 |
| 100 | 100 |
| 101 /* | 101 /* |
| 102 ========================================================== | 102 ========================================================== |
| 103 Local functions | 103 Local functions |
| 104 ========================================================== | 104 ========================================================== |
| 105 */ | 105 */ |
| 106 OPJ_BOOL opj_lupDecompose(OPJ_FLOAT32 * matrix,OPJ_UINT32 * permutations, | 106 static OPJ_BOOL opj_lupDecompose(OPJ_FLOAT32 * matrix,OPJ_UINT32 * permutations, |
| 107 OPJ_FLOAT32 * p_swap_area, | 107 OPJ_FLOAT32 * p_swap_area, |
| 108 OPJ_UINT32 nb_compo) | 108 OPJ_UINT32 nb_compo) |
| 109 { | 109 { |
| 110 OPJ_UINT32 * tmpPermutations = permutations; | 110 OPJ_UINT32 * tmpPermutations = permutations; |
| 111 OPJ_UINT32 * dstPermutations; | 111 OPJ_UINT32 * dstPermutations; |
| 112 OPJ_UINT32 k2=0,t; | 112 OPJ_UINT32 k2=0,t; |
| 113 OPJ_FLOAT32 temp; | 113 OPJ_FLOAT32 temp; |
| 114 OPJ_UINT32 i,j,k; | 114 OPJ_UINT32 i,j,k; |
| 115 OPJ_FLOAT32 p; | 115 OPJ_FLOAT32 p; |
| 116 OPJ_UINT32 lLastColum = nb_compo - 1; | 116 OPJ_UINT32 lLastColum = nb_compo - 1; |
| 117 OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32); | 117 OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32); |
| 118 OPJ_FLOAT32 * lTmpMatrix = matrix; | 118 OPJ_FLOAT32 * lTmpMatrix = matrix; |
| 119 OPJ_FLOAT32 * lColumnMatrix,* lDestMatrix; | 119 OPJ_FLOAT32 * lColumnMatrix,* lDestMatrix; |
| 120 OPJ_UINT32 offset = 1; | 120 OPJ_UINT32 offset = 1; |
| 121 OPJ_UINT32 lStride = nb_compo-1; | 121 OPJ_UINT32 lStride = nb_compo-1; |
| 122 | 122 |
| 123 /*initialize permutations */ | 123 /*initialize permutations */ |
| 124 for (i = 0; i < nb_compo; ++i) | 124 for (i = 0; i < nb_compo; ++i) |
| 125 { | 125 { |
| 126 *tmpPermutations++ = i; | 126 *tmpPermutations++ = i; |
| 127 } | 127 } |
| 128 » /* now make a pivot with colum switch */ | 128 » /* now make a pivot with column switch */ |
| 129 tmpPermutations = permutations; | 129 tmpPermutations = permutations; |
| 130 for (k = 0; k < lLastColum; ++k) { | 130 for (k = 0; k < lLastColum; ++k) { |
| 131 p = 0.0; | 131 p = 0.0; |
| 132 | 132 |
| 133 /* take the middle element */ | 133 /* take the middle element */ |
| 134 lColumnMatrix = lTmpMatrix + k; | 134 lColumnMatrix = lTmpMatrix + k; |
| 135 | 135 |
| 136 /* make permutation with the biggest value in the column */ | 136 /* make permutation with the biggest value in the column */ |
| 137 for (i = k; i < nb_compo; ++i) { | 137 for (i = k; i < nb_compo; ++i) { |
| 138 temp = ((*lColumnMatrix > 0) ? *lColumnMatrix : -(*lColu
mnMatrix)); | 138 temp = ((*lColumnMatrix > 0) ? *lColumnMatrix : -(*lColu
mnMatrix)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 /* 1 element less for stride */ | 197 /* 1 element less for stride */ |
| 198 --lStride; | 198 --lStride; |
| 199 /* next line */ | 199 /* next line */ |
| 200 lTmpMatrix+=nb_compo; | 200 lTmpMatrix+=nb_compo; |
| 201 /* next permutation element */ | 201 /* next permutation element */ |
| 202 ++tmpPermutations; | 202 ++tmpPermutations; |
| 203 } | 203 } |
| 204 return OPJ_TRUE; | 204 return OPJ_TRUE; |
| 205 } | 205 } |
| 206 | 206 |
| 207 void opj_lupSolve (OPJ_FLOAT32 * pResult, | 207 static void opj_lupSolve (OPJ_FLOAT32 * pResult, |
| 208 OPJ_FLOAT32 * pMatrix, | 208 OPJ_FLOAT32 * pMatrix, |
| 209 OPJ_FLOAT32 * pVector, | 209 OPJ_FLOAT32 * pVector, |
| 210 OPJ_UINT32* pPermutations, | 210 OPJ_UINT32* pPermutations, |
| 211 OPJ_UINT32 nb_compo,OPJ_FLOAT32 * p_intermediate_data) | 211 OPJ_UINT32 nb_compo,OPJ_FLOAT32 * p_intermediate_data) |
| 212 { | 212 { |
| 213 OPJ_INT32 k; | 213 OPJ_INT32 k; |
| 214 OPJ_UINT32 i,j; | 214 OPJ_UINT32 i,j; |
| 215 OPJ_FLOAT32 sum; | 215 OPJ_FLOAT32 sum; |
| 216 OPJ_FLOAT32 u; | 216 OPJ_FLOAT32 u; |
| 217 OPJ_UINT32 lStride = nb_compo+1; | 217 OPJ_UINT32 lStride = nb_compo+1; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 /* sum += matrix[k][j] * x[j] */ | 259 /* sum += matrix[k][j] * x[j] */ |
| 260 sum += (*(lTmpMatrix++)) * (*(lCurrentPtr++)); | 260 sum += (*(lTmpMatrix++)) * (*(lCurrentPtr++)); |
| 261 } | 261 } |
| 262 /*x[k] = (y[k] - sum) / u; */ | 262 /*x[k] = (y[k] - sum) / u; */ |
| 263 *(lBeginPtr--) = (*(lGeneratedData--) - sum) / u; | 263 *(lBeginPtr--) = (*(lGeneratedData--) - sum) / u; |
| 264 lLineMatrix -= lStride; | 264 lLineMatrix -= lStride; |
| 265 } | 265 } |
| 266 } | 266 } |
| 267 | 267 |
| 268 | 268 |
| 269 void opj_lupInvert (OPJ_FLOAT32 * pSrcMatrix, | 269 static void opj_lupInvert (OPJ_FLOAT32 * pSrcMatrix, |
| 270 OPJ_FLOAT32 * pDestMatrix, | 270 OPJ_FLOAT32 * pDestMatrix, |
| 271 OPJ_UINT32 nb_compo, | 271 OPJ_UINT32 nb_compo, |
| 272 OPJ_UINT32 * pPermutations, | 272 OPJ_UINT32 * pPermutations, |
| 273 OPJ_FLOAT32 * p_src_temp, | 273 OPJ_FLOAT32 * p_src_temp, |
| 274 OPJ_FLOAT32 * p_dest_temp, | 274 OPJ_FLOAT32 * p_dest_temp, |
| 275 OPJ_FLOAT32 * p_swap_area ) | 275 OPJ_FLOAT32 * p_swap_area ) |
| 276 { | 276 { |
| 277 OPJ_UINT32 j,i; | 277 OPJ_UINT32 j,i; |
| 278 OPJ_FLOAT32 * lCurrentPtr; | 278 OPJ_FLOAT32 * lCurrentPtr; |
| 279 OPJ_FLOAT32 * lLineMatrix = pDestMatrix; | 279 OPJ_FLOAT32 * lLineMatrix = pDestMatrix; |
| 280 OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32); | 280 OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32); |
| 281 | 281 |
| 282 for (j = 0; j < nb_compo; ++j) { | 282 for (j = 0; j < nb_compo; ++j) { |
| 283 lCurrentPtr = lLineMatrix++; | 283 lCurrentPtr = lLineMatrix++; |
| 284 memset(p_src_temp,0,lSwapSize); | 284 memset(p_src_temp,0,lSwapSize); |
| 285 p_src_temp[j] = 1.0; | 285 p_src_temp[j] = 1.0; |
| 286 opj_lupSolve(p_dest_temp,pSrcMatrix,p_src_temp, pPermutations, n
b_compo , p_swap_area); | 286 opj_lupSolve(p_dest_temp,pSrcMatrix,p_src_temp, pPermutations, n
b_compo , p_swap_area); |
| 287 | 287 |
| 288 for (i = 0; i < nb_compo; ++i) { | 288 for (i = 0; i < nb_compo; ++i) { |
| 289 *(lCurrentPtr) = p_dest_temp[i]; | 289 *(lCurrentPtr) = p_dest_temp[i]; |
| 290 lCurrentPtr+=nb_compo; | 290 lCurrentPtr+=nb_compo; |
| 291 } | 291 } |
| 292 } | 292 } |
| 293 } | 293 } |
| 294 | 294 |
| OLD | NEW |