source: soft/giet_vm/applications/rosenfeld/nrc2/src/nrmem1.c @ 823

Last change on this file since 823 was 823, checked in by meunier, 8 years ago
  • Improved scripts for simulations and graphes
  • Continued to clean up the lib nrc2 (from nrio2x.x to nrmem1.c)
  • Added a version (Fast - Parmerge - No stats)
File size: 5.5 KB
RevLine 
[772]1/* ---------------- */
2/* --- nrmem1.c --- */
3/* ---------------- */
4
5/*
6 * Copyright (c) 2000-2014, Lionel Lacassagne, All rights reserved
7 * Univ Paris Sud XI, CNRS
8 *
9 * Distributed under the Boost Software License, Version 1.0
10 * see accompanying file LICENSE.txt or copy it at
11 * http://www.boost.org/LICENSE_1_0.txt
12 */
13
14#include <stdio.h>
15#include <stddef.h>
16#include <stdlib.h>
17#include <math.h> // fabs
18
19#include "mypredef.h"
20#include "nrtype.h"
21#include "nrdef.h"
22#include "nrmacro.h"
23#include "nrkernel.h"
24
25#include "nrmem1.h"
26
27/*
28 * -----------
29 * --- dup ---
30 * -----------
31 */
[823]32
33
34#undef dup_type_vector
35#define dup_type_vector(t) \
36void short_name(t,dup_,vector)(t * X, int32_t nl, int32_t nh, t * Y) \
37{                                        \
38    for (int32_t i = nl; i <= nh; i++) { \
39        Y[i] = X[i];                     \
40    }                                    \
[772]41}
[823]42
43dup_type_vector(int8_t);
44dup_type_vector(uint8_t);
45dup_type_vector(int16_t);
46dup_type_vector(uint16_t);
47dup_type_vector(int32_t);
48dup_type_vector(uint32_t);
49dup_type_vector(int64_t);
50dup_type_vector(uint64_t);
51dup_type_vector(float);
52dup_type_vector(double);
53dup_type_vector(rgb8);
54dup_type_vector(rgbx8);
55
56
[772]57/*
58 * --------------------
59 * --- split_vector ---
60 * --------------------
61 */
[823]62
63
64void split_rgb8vector(rgb8 * X, int32_t nl, int32_t nh, uint8_t * R, uint8_t * G, uint8_t * B)
[772]65{
[823]66    for (int32_t i = nl; i <= nh; i++) {
67        R[i] = X[i].r;
68        G[i] = X[i].g;
69        B[i] = X[i].b;
70    }
[772]71}
[823]72
73void split_rgb32vector(rgb32 * X, int32_t nl, int32_t nh, uint32_t * R, uint32_t * G, uint32_t * B)
[772]74{
[823]75    for (int32_t i = nl; i <= nh; i++) {
76        R[i] = X[i].r;
77        G[i] = X[i].g;
78        B[i] = X[i].b;
79    }
[772]80}
[823]81
82void merge_rgb8vector(uint8_t * R, uint8_t * G, uint8_t * B, int32_t nl, int32_t nh, rgb8 * X)
[772]83{
[823]84    for (int32_t i = nl; i <= nh; i++) {
85        X[i].r = R[i];
86        X[i].g = G[i];
87        X[i].b = B[i];
88    }
[772]89}
[823]90
91
92void merge_rgb32vector(uint32_t * R, uint32_t * G, uint32_t * B, int32_t nl, int32_t nh, rgb32 * X)
[772]93{
[823]94    for (int32_t i = nl; i <= nh; i++) {
95        X[i].r = R[i];
96        X[i].g = G[i];
97        X[i].b = B[i];
98    }
[772]99}
100
101/* ---------------- */
[823]102/* -- Conversion -- */
[772]103/* ---------------- */
104
[823]105#undef convert_type1_vector_type2_vector
106#define convert_type1_vector_type2_vector(t1, t2) \
107void short_name(t1,convert_,short_name(t2,vector_,vector))(t1 * X, int32_t nl, int32_t nh, t2 * Y) \
108{                                        \
109    for (int32_t i = nl; i <= nh; i++) { \
110        Y[i] = (t2) X[i];                \
111    }                                    \
[772]112}
[823]113
114convert_type1_vector_type2_vector(int8_t,int16_t);
115convert_type1_vector_type2_vector(int8_t,int32_t);
116convert_type1_vector_type2_vector(int8_t,float);
117convert_type1_vector_type2_vector(int8_t,double);
118convert_type1_vector_type2_vector(uint8_t,uint16_t);
119convert_type1_vector_type2_vector(uint8_t,uint32_t);
120convert_type1_vector_type2_vector(uint8_t,float);
121convert_type1_vector_type2_vector(uint8_t,double);
122convert_type1_vector_type2_vector(int16_t,int32_t);
123convert_type1_vector_type2_vector(int16_t,float);
124convert_type1_vector_type2_vector(int16_t,double);
125convert_type1_vector_type2_vector(uint16_t,uint32_t);
126convert_type1_vector_type2_vector(uint16_t,float);
127convert_type1_vector_type2_vector(uint16_t,double);
128convert_type1_vector_type2_vector(int32_t,float);
129convert_type1_vector_type2_vector(int32_t,double);
130convert_type1_vector_type2_vector(uint32_t,float);
131convert_type1_vector_type2_vector(uint32_t,double);
132convert_type1_vector_type2_vector(int16_t,int8_t);
133convert_type1_vector_type2_vector(uint16_t,uint8_t);
134convert_type1_vector_type2_vector(int32_t,int8_t);
135convert_type1_vector_type2_vector(int32_t,int16_t);
136convert_type1_vector_type2_vector(uint32_t,uint8_t);
137convert_type1_vector_type2_vector(uint32_t,uint16_t);
138convert_type1_vector_type2_vector(float,int8_t);
139convert_type1_vector_type2_vector(float,uint8_t);
140convert_type1_vector_type2_vector(float,int16_t);
141convert_type1_vector_type2_vector(float,uint16_t);
142convert_type1_vector_type2_vector(float,int32_t);
143convert_type1_vector_type2_vector(float,uint32_t);
144convert_type1_vector_type2_vector(double,int8_t);
145convert_type1_vector_type2_vector(double,uint8_t);
146convert_type1_vector_type2_vector(double,int16_t);
147convert_type1_vector_type2_vector(double,uint16_t);
148convert_type1_vector_type2_vector(double,int32_t);
149convert_type1_vector_type2_vector(double,uint32_t);
150convert_type1_vector_type2_vector(double,float);
151
152
153
154
155
156
157
158void convert_ui8vector_rgb8vector(uint8_t * X, int32_t nl, int32_t nh, rgb8 * Y)
[772]159{
[823]160    for (int32_t i = nl; i <= nh; i++) {
[772]161        Y[i].r = X[i];
162        Y[i].g = X[i];
163        Y[i].b = X[i];
164    }
165}
[823]166
167void convert_ui8vector_rgbx8vector(uint8_t * X, int32_t nl, int32_t nh, rgbx8 * Y)
[772]168{
[823]169    for (int32_t i = nl; i <= nh; i++) {
[772]170        Y[i].r = X[i];
171        Y[i].g = X[i];
172        Y[i].b = X[i];
173        Y[i].x = 255;
174    }
175}
176
[823]177
178void convert_rgb8vector_ui8vector(rgb8 * X, int32_t nl, int32_t nh, uint8_t * Y)
[772]179{
[823]180    for (int32_t i = nl; i <= nh; i++) {
[772]181        Y[i] = (X[i].r + X[i].g + X[i].b) / 3;
182    }
183}
[823]184
185void convert_rgbx8vector_ui8vector(rgbx8 * X, int32_t nl, int32_t nh, uint8_t * Y)
[772]186{
[823]187    for (int32_t i = nl; i <= nh; i++) {
[772]188        Y[i] = (X[i].r + X[i].g + X[i].b) / 3;
189    }
190}
[823]191
[772]192/*
193 * ---------------
194 * --- LowPart ---
195 * ---------------
196 */
[823]197
198void lowpart_ui16vector_ui8vector(uint16_t * X, int32_t nl, int32_t nh, uint8_t * Y)
[772]199{
[823]200    for(int32_t i = nl; i <= nh; i++) {
201        Y[i] = X[i] & 0xff;
202    }
[772]203}
[823]204
205void lowpart_ui32vector_ui8vector(uint32_t * X, int32_t nl, int32_t nh, uint8_t * Y)
[772]206{
[823]207    for (int32_t i = nl; i <= nh; i++) {
208        Y[i] = X[i] & 0xff;
209    }
[772]210}
211
212
Note: See TracBrowser for help on using the repository browser.