diff --git a/main.c b/main.c
index 0b3b613893a76bb71296b159c08494ba9e1d26a1..545020fd0596eac008e1e3e86c6a2e0622f48076 100644
--- a/main.c
+++ b/main.c
@@ -9,44 +9,75 @@
 
 #include <stdio.h>
 #include <stdint.h>
+#include <string.h>
 
 // Load raw image to memory. Images should be in
-int loadFrameFromDisk(const uint8_t* frameBuffer, int index) {
+int loadFrameFromDisk(const PixelRGB8* imageRGB, int index) {
     char filepath[100];
-    sprintf(filepath, "FRAME_IN_DIRECTORY/FRAME_IN_FILENAME%d", index);
-    int fd = open(filepath);
-    return read(fd, (void*) frameBuffer, FRAME_BUF_SIZE);
+    sprintf(filepath, "%s%s%d", FRAME_IN_DIRECTORY, FRAME_IN_FILENAME, index);
+    FILE* fd = fopen(filepath, "r");
+
+    int i, status;
+    for (i=0; i< IMG_AREA; i++) {
+        status = fread((void*) &imageRGB[i], BYTES_PER_PIXEL, 1, fd);
+        if (status < 0) {
+            fprintf(stderr, "Error while reading %s\n", filepath);
+            fclose(fd);
+            return status;
+        }
+    }
+    fclose(fd);
+    return 0;
 }
 
-int writeFrameToDisk(const uint8_t* frameBuffer, int index) {
+int writeFrameToDisk(const PixelRGB8* imageRGB, int index) {
     char filepath[100];
-    sprintf(filepath, "FRAME_OUT_DIRECTORY/FRAME_OUT_FILENAME%d", index);
-    int fd = open(filepath);
-    return write(fd, (void*) frameBuffer, FRAME_BUF_SIZE);
+    sprintf(filepath, "%s%s%d", FRAME_OUT_DIRECTORY, FRAME_OUT_FILENAME, index);
+    FILE* fd = fopen(filepath, "w");
+
+    int i, status;
+    for (i=0; i< IMG_AREA; i++) {
+        status = fwrite((void*) &imageRGB[i], BYTES_PER_PIXEL, 1, fd);
+        if (status < 0) {
+            fprintf(stderr, "Error while reading %s\n", filepath);
+            fclose(fd);
+            return status;
+        }
+    }
+    fclose(fd);
+    return 0;
 }
 
-correctPixelColor
-// Convert to HSV
+int correctPixelColor(const PixelRGB8* pixel, int deltaHue, int deltaSaturation, int deltaValue) {
+    // TODO: Implémenter
+    printf("Pixel: %d %d %d\n", pixel->red, pixel->green, pixel->blue);
+
+    // Convert to HSV
+
+    // Add corrections
 
-// Add corrections
+    // Convert back to RGB
 
-// Convert back to RGB
+    return 0;
+}
 
 // Pass hue, saturation and value (lightness / 2) corrections to args
 int main(int argc, char* argv) {
     // Start timing
-    const uint8_t frameBuffer[FRAME_BUF_SIZE];
+    // TODO: Mesurer le nombre d'image par secondes traitées. Objectif 30fps
+    const PixelRGB8 imageRGB[IMG_AREA];
+
     int i, j;
     for (i=0; i<N_IMAGES; i++) {
-        loadFrameFromDisk(frameBuffer, i);
+        loadFrameFromDisk(imageRGB, i);
 
-        // Apply correction to each pixel and write it back to the frame buffer
-        for (j=0; j<FRAME_BUF_SIZE; j+=3) {
-            correctPixelColor(frameBuffer[j], DELTA_HUE,
-                                            DELTA_SATURATION, DELTA_VALUE);
+        // Apply correction to each pixel
+        for (j=0; j<IMG_AREA; j++) {
+            correctPixelColor(&imageRGB[j], DELTA_HUE,
+                                    DELTA_SATURATION, DELTA_VALUE);
         }
 
-        writeFrameToDisk(frameBuffer, i);
+        writeFrameToDisk(imageRGB, i);
     }
 
     // Stop timing
diff --git a/main.h b/main.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c31c66c7b8c8c77a61f6457d8f6fa9a7662f4538 100644
--- a/main.h
+++ b/main.h
@@ -0,0 +1,45 @@
+/*********************************************************
+* Conversion d'image RGB­> HSV > RGB
+* Date: 25-Mai-2021
+* Auteur: Yann Roberge
+*********************************************************/
+
+#include <stdint.h>
+
+// Image definition
+#define N_IMAGES        100
+#define IMG_WIDTH       640
+#define IMG_HEIGHT      360
+#define IMG_AREA        (IMG_WIDTH * IMG_HEIGHT)
+#define IMG_DEPTH       8 // bits
+#define IMG_N_CHANNELS  3 // RGB
+
+#define BYTES_PER_PIXEL (IMG_N_CHANNELS * IMG_DEPTH / 8)
+#define FRAME_BUF_SIZE  (IMG_AREA * BYTES_PER_PIXEL)
+
+// Files and directories
+#define FRAME_IN_DIRECTORY "/run/user/1000/gvfs/sftp:host=odroid,user=nas/media/raid/frames/"
+#define FRAME_OUT_DIRECTORY "/run/user/1000/gvfs/sftp:host=odroid,user=nas/media/raid/frames_out/"
+
+#define FRAME_IN_FILENAME "frame"
+#define FRAME_OUT_FILENAME "frameout"
+
+// Corrections to apply
+#define DELTA_HUE           50
+#define DELTA_SATURATION    50
+#define DELTA_VALUE         50
+
+// Pixel struct unpacked for processing
+typedef struct {
+    uint8_t red;
+    uint8_t green;
+    uint8_t blue;
+    uint8_t RESERVED;
+} PixelRGB8;
+
+// Functions
+int loadFrameFromDisk(const PixelRGB8* imageRGB, int index);
+int writeFrameToDisk(const PixelRGB8* imageRGB, int index);
+int correctPixelColor(const PixelRGB8* pixel, int deltaHue, int deltaSaturation,
+                                        int deltaValue);
+