void OnApplicationQuit()
    {
        // HACK(KARAN): This is temporary for saving car controls
        if (this.name == "Front")
        {
            if (debugCarControlsData.Length != 0)
            {
                sw.WriteLine(debugCarControlsData);
            }
            sw.Close();
        }

        if (doubleBuffer.IsNotEmpty())
        {
            String filePath        = capturedImagesDirectory + "\\" + (fileNum++) + ".raw";
            byte[] remainingImages = doubleBuffer.FlushAndGetAllData();

            int imageSize = rawHeader.imageWidth * rawHeader.imageHeight * rawHeader.bytesPerPixel;

            rawHeader.numImages = remainingImages.Length / imageSize;

            rawHeaderSerialized = rawHeader.ToByteArray();
            WriteRawFile(filePath, rawHeader, rawHeaderSerialized, remainingImages);
        }

        System.IO.File.WriteAllText(capturedImagesDirectory + "\\" + this.name + "_debugCaptureFPS.csv", debugShutterRateData);
    }
    public void Start()
    {
        // HACK(KARAN): This is temporary for saving car controls
        if (this.name == "Front" && sw == null)
        {
            sw = new StreamWriter(Application.dataPath + "\\CapturedImages~\\carControls.csv", false);
        }

        if (settings.useDefault)
        {
            settings.imageWidth        = 256;
            settings.imageHeight       = 256;
            settings.bytesPerPixel     = 3;
            settings.numFramesToBuffer = 100;
            settings.captureFPS        = 15;
        }

        secondsPerImage = (1.0f / settings.captureFPS);
        imageRect       = new Rect(0, 0, settings.imageWidth, settings.imageHeight);

        /* Texture Formats: RGBA32, RGB24*/
        TextureFormat format = settings.bytesPerPixel == 3 ? TextureFormat.RGB24 : TextureFormat.RGBA32;

        image           = new Texture2D(settings.imageWidth, settings.imageHeight, format, false);
        cameraComponent = GetComponent <Camera>();
        cameraComponent.targetTexture = new RenderTexture(settings.imageWidth, settings.imageHeight, 0, RenderTextureFormat.ARGB32);
        cameraComponent.enabled       = false;

        // NOTE(KARAN): Setting up of double buffer for the async version.
        rawHeader               = new RawHeader();
        rawHeader.imageHeight   = settings.imageHeight;
        rawHeader.imageWidth    = settings.imageWidth;
        rawHeader.bytesPerPixel = settings.bytesPerPixel;
        rawHeader.numImages     = settings.numFramesToBuffer;
        rawHeaderSerialized     = rawHeader.ToByteArray();

        int fileSize = rawHeader.imageWidth * rawHeader.imageHeight * rawHeader.bytesPerPixel * rawHeader.numImages;

        doubleBuffer = new DoubleBuffer(fileSize);

        capturedImagesDirectory = Application.dataPath + "\\CapturedImages~\\" + this.name;
        if (!Directory.Exists(capturedImagesDirectory))
        {
            Directory.CreateDirectory(capturedImagesDirectory);
        }
    }