diff --git a/daemon/src/video/video_base.cpp b/daemon/src/video/video_base.cpp
index 717ab02d4886c0e6582b4bd18f27f54ec57274ef..493622ddb1d79611d8acfb670de74d8265111af3 100644
--- a/daemon/src/video/video_base.cpp
+++ b/daemon/src/video/video_base.cpp
@@ -216,35 +216,19 @@ int VideoFrame::mirror() {
         return -1;
     }
 
-    uint8_t *data;
-	ssize_t stride;
-
-    // Y
-    stride = frame_->linesize[0];
-	data = frame_->data[0];
-	for (int i = 0; i < frame_->height; i++) {
-        for (int j=0,k=stride-1; j < stride/2; j++, k--)
-            std::swap(data[j], data[k]);
-		data += stride;
-	}
-
-    // U
-	stride = frame_->linesize[1];
-	data = frame_->data[1];
-	for (int i = 0; i < frame_->height / 2; i++) {
-        for (int j=0,k=stride-1; j < stride/2; j++, k--)
-            std::swap(data[j], data[k]);
-		data += stride;
-	}
-
-    // V
-	stride = frame_->linesize[2];
-	data = frame_->data[2];
-	for (int i = 0; i < frame_->height / 2; i++) {
-        for (int j=0,k=stride-1; j < stride/2; j++, k--)
-            std::swap(data[j], data[k]);
-		data += stride;
-	}
+    auto flip_lr = [&] (unsigned idx) {
+        const ssize_t stride = frame_->linesize[idx];
+        uint8_t *data = frame_->data[idx];
+        const ssize_t height = idx == 0 ? frame_->height : frame_->height / 2;
+        for (int i = 0; i < height; i++) {
+            for (int j = 0,k = stride - 1; j < stride / 2; j++, k--)
+                std::swap(data[j], data[k]);
+            data += stride;
+        }
+    };
+
+    for (unsigned i = 0; i < 3; ++i)
+        flip_lr(i);
 
     return 0;
 }