diff --git a/apps/aomdec.c b/apps/aomdec.c
index 8e98f0b..2f5f6b0 100644
--- a/apps/aomdec.c
+++ b/apps/aomdec.c
@@ -427,13 +427,6 @@
   }
 }
 
-static int img_shifted_realloc_required(const aom_image_t *img,
-                                        const aom_image_t *shifted,
-                                        aom_img_fmt_t required_fmt) {
-  return img->d_w != shifted->d_w || img->d_h != shifted->d_h ||
-         required_fmt != shifted->fmt;
-}
-
 static int main_loop(int argc, const char **argv_) {
   aom_codec_ctx_t decoder;
   char *fn = NULL;
@@ -854,37 +847,8 @@
           output_bit_depth = img->bit_depth;
         }
         // Shift up or down if necessary
-        if (output_bit_depth != 0) {
-          const aom_img_fmt_t shifted_fmt =
-              output_bit_depth == 8 ? img->fmt & ~AOM_IMG_FMT_HIGHBITDEPTH
-                                    : img->fmt | AOM_IMG_FMT_HIGHBITDEPTH;
-
-          if (shifted_fmt != img->fmt || output_bit_depth != img->bit_depth) {
-            if (img_shifted &&
-                img_shifted_realloc_required(img, img_shifted, shifted_fmt)) {
-              aom_img_free(img_shifted);
-              img_shifted = NULL;
-            }
-            if (img_shifted) {
-              img_shifted->monochrome = img->monochrome;
-            }
-            if (!img_shifted) {
-              img_shifted =
-                  aom_img_alloc(NULL, shifted_fmt, img->d_w, img->d_h, 16);
-              img_shifted->bit_depth = output_bit_depth;
-              img_shifted->monochrome = img->monochrome;
-              img_shifted->csp = img->csp;
-            }
-            if (output_bit_depth > img->bit_depth) {
-              aom_img_upshift(img_shifted, img,
-                              output_bit_depth - img->bit_depth);
-            } else {
-              aom_img_downshift(img_shifted, img,
-                                img->bit_depth - output_bit_depth);
-            }
-            img = img_shifted;
-          }
-        }
+        if (output_bit_depth != 0)
+          aom_shift_img(output_bit_depth, &img, &img_shifted);
 
         aom_input_ctx.width = img->d_w;
         aom_input_ctx.height = img->d_h;
diff --git a/common/tools_common.c b/common/tools_common.c
index 2f21bb3..ef5e9a7 100644
--- a/common/tools_common.c
+++ b/common/tools_common.c
@@ -424,3 +424,44 @@
     lowbd_img_downshift(dst, src, down_shift);
   }
 }
+
+static int img_shifted_realloc_required(const aom_image_t *img,
+                                        const aom_image_t *shifted,
+                                        aom_img_fmt_t required_fmt) {
+  return img->d_w != shifted->d_w || img->d_h != shifted->d_h ||
+         required_fmt != shifted->fmt;
+}
+
+void aom_shift_img(unsigned int output_bit_depth, aom_image_t **img_ptr,
+                   aom_image_t **img_shifted_ptr) {
+  aom_image_t *img = *img_ptr;
+  aom_image_t *img_shifted = *img_shifted_ptr;
+
+  const aom_img_fmt_t shifted_fmt = output_bit_depth == 8
+                                        ? img->fmt & ~AOM_IMG_FMT_HIGHBITDEPTH
+                                        : img->fmt | AOM_IMG_FMT_HIGHBITDEPTH;
+
+  if (shifted_fmt != img->fmt || output_bit_depth != img->bit_depth) {
+    if (img_shifted &&
+        img_shifted_realloc_required(img, img_shifted, shifted_fmt)) {
+      aom_img_free(img_shifted);
+      img_shifted = NULL;
+    }
+    if (img_shifted) {
+      img_shifted->monochrome = img->monochrome;
+    }
+    if (!img_shifted) {
+      img_shifted = aom_img_alloc(NULL, shifted_fmt, img->d_w, img->d_h, 16);
+      img_shifted->bit_depth = output_bit_depth;
+      img_shifted->monochrome = img->monochrome;
+      img_shifted->csp = img->csp;
+    }
+    if (output_bit_depth > img->bit_depth) {
+      aom_img_upshift(img_shifted, img, output_bit_depth - img->bit_depth);
+    } else {
+      aom_img_downshift(img_shifted, img, img->bit_depth - output_bit_depth);
+    }
+    *img_shifted_ptr = img_shifted;
+    *img_ptr = img_shifted;
+  }
+}
diff --git a/common/tools_common.h b/common/tools_common.h
index 4e1d12f..c981361 100644
--- a/common/tools_common.h
+++ b/common/tools_common.h
@@ -155,6 +155,8 @@
 void aom_img_upshift(aom_image_t *dst, const aom_image_t *src, int input_shift);
 void aom_img_downshift(aom_image_t *dst, const aom_image_t *src,
                        int down_shift);
+void aom_shift_img(unsigned int output_bit_depth, aom_image_t **img_ptr,
+                   aom_image_t **img_shifted_ptr);
 void aom_img_truncate_16_to_8(aom_image_t *dst, const aom_image_t *src);
 
 #ifdef __cplusplus
