diff --git a/camera/fake-pipeline2/Scene.cpp b/camera/fake-pipeline2/Scene.cpp
index 0fea38e..4f5962b 100644
--- a/camera/fake-pipeline2/Scene.cpp
+++ b/camera/fake-pipeline2/Scene.cpp
@@ -339,35 +339,6 @@
     setReadoutPixel(0,0);
 }
 
-void Scene::setReadoutPixel(int x, int y) {
-    mCurrentX = x;
-    mCurrentY = y;
-    mSubX = (x + mOffsetX + mHandshakeX) % mMapDiv;
-    mSubY = (y + mOffsetY + mHandshakeY) % mMapDiv;
-    mSceneX = (x + mOffsetX + mHandshakeX) / mMapDiv;
-    mSceneY = (y + mOffsetY + mHandshakeY) / mMapDiv;
-    mSceneIdx = mSceneY * kSceneWidth + mSceneX;
-    mCurrentSceneMaterial = &(mCurrentColors[kScene[mSceneIdx]]);
-}
-
-const uint32_t* Scene::getPixelElectrons() {
-    const uint32_t *pixel = mCurrentSceneMaterial;
-    mCurrentX++;
-    mSubX++;
-    if (mCurrentX >= mSensorWidth) {
-        mCurrentX = 0;
-        mCurrentY++;
-        if (mCurrentY >= mSensorHeight) mCurrentY = 0;
-        setReadoutPixel(mCurrentX, mCurrentY);
-    } else if (mSubX > mMapDiv) {
-        mSceneIdx++;
-        mSceneX++;
-        mCurrentSceneMaterial = &(mCurrentColors[kScene[mSceneIdx]]);
-        mSubX = 0;
-    }
-    return pixel;
-}
-
 // Handshake model constants.
 // Frequencies measured in a nanosecond timebase
 const float Scene::kHorizShakeFreq1 = 2 * M_PI * 2  / 1e9; // 2 Hz
diff --git a/camera/fake-pipeline2/Scene.h b/camera/fake-pipeline2/Scene.h
index 3a7a001..df02691 100644
--- a/camera/fake-pipeline2/Scene.h
+++ b/camera/fake-pipeline2/Scene.h
@@ -64,13 +64,38 @@
     void calculateScene(nsecs_t time);
 
     // Set sensor pixel readout location.
-    void setReadoutPixel(int x, int y);
+    inline void setReadoutPixel(int x, int y) {
+        mCurrentX = x;
+        mCurrentY = y;
+        mSubX = (x + mOffsetX + mHandshakeX) % mMapDiv;
+        mSubY = (y + mOffsetY + mHandshakeY) % mMapDiv;
+        mSceneX = (x + mOffsetX + mHandshakeX) / mMapDiv;
+        mSceneY = (y + mOffsetY + mHandshakeY) / mMapDiv;
+        mSceneIdx = mSceneY * kSceneWidth + mSceneX;
+        mCurrentSceneMaterial = &(mCurrentColors[kScene[mSceneIdx]]);
+    }
 
     // Get sensor response in physical units (electrons) for light hitting the
     // current readout pixel, after passing through color filters. The readout
     // pixel will be auto-incremented. The returned array can be indexed with
     // ColorChannels.
-    const uint32_t* getPixelElectrons();
+    inline const uint32_t* getPixelElectrons() {
+        const uint32_t *pixel = mCurrentSceneMaterial;
+        mCurrentX++;
+        mSubX++;
+        if (mCurrentX >= mSensorWidth) {
+            mCurrentX = 0;
+            mCurrentY++;
+            if (mCurrentY >= mSensorHeight) mCurrentY = 0;
+            setReadoutPixel(mCurrentX, mCurrentY);
+        } else if (mSubX > mMapDiv) {
+            mSceneIdx++;
+            mSceneX++;
+            mCurrentSceneMaterial = &(mCurrentColors[kScene[mSceneIdx]]);
+            mSubX = 0;
+        }
+        return pixel;
+    }
 
     enum ColorChannels {
         R = 0,
