diff --git a/av1/encoder/cnn.c b/av1/encoder/cnn.c
index 217d238..3cfe63e 100644
--- a/av1/encoder/cnn.c
+++ b/av1/encoder/cnn.c
@@ -1048,188 +1048,3 @@
                   thread_data, output, out_stride);
   aom_free(input_);
 }
-
-void av1_restore_cnn_img(uint8_t *dgd, int width, int height, int stride,
-                         const CNN_CONFIG *cnn_config,
-                         const CNN_THREAD_DATA *thread_data) {
-  const float max_val = 255;
-  int out_width = 0;
-  int out_height = 0;
-  int out_channels = 0;
-  av1_find_cnn_output_size(width, height, cnn_config, &out_width, &out_height,
-                           &out_channels);
-  assert(out_width == width);
-  assert(out_height == height);
-  // For restoration, we only want one channel outputted.
-  assert(out_channels == 1);
-
-  const int out_stride = width;
-  float *output = (float *)aom_malloc(width * height * sizeof(*output));
-  av1_cnn_predict_img(&dgd, width, height, stride, cnn_config, thread_data,
-                      &output, out_stride);
-
-  if (cnn_config->is_residue) {
-    for (int i = 0; i < height; ++i)
-      for (int j = 0; j < width; ++j) {
-        const int residue = (int)(output[i * out_stride + j] * max_val + 0.5);
-        dgd[i * stride + j] = clip_pixel(dgd[i * stride + j] + residue);
-      }
-  } else {
-    for (int i = 0; i < height; ++i)
-      for (int j = 0; j < width; ++j)
-        dgd[i * stride + j] =
-            clip_pixel((int)(output[i * out_stride + j] * max_val + 0.5));
-  }
-  aom_free(output);
-}
-
-void av1_restore_cnn_img_highbd(uint16_t *dgd, int width, int height,
-                                int stride, const CNN_CONFIG *cnn_config,
-                                const CNN_THREAD_DATA *thread_data,
-                                int bit_depth) {
-  const float max_val = (float)((1 << bit_depth) - 1);
-  int out_width = 0;
-  int out_height = 0;
-  int out_channels = 0;
-  av1_find_cnn_output_size(width, height, cnn_config, &out_width, &out_height,
-                           &out_channels);
-  assert(out_width == width);
-  assert(out_height == height);
-  // For restoration, we only want one channel outputted.
-  assert(out_channels == 1);
-
-  float *output = (float *)aom_malloc(width * height * sizeof(*output));
-  const int out_stride = width;
-  av1_cnn_predict_img_highbd(&dgd, width, height, stride, cnn_config,
-                             thread_data, bit_depth, &output, out_stride);
-
-  if (cnn_config->is_residue) {
-    for (int i = 0; i < height; ++i)
-      for (int j = 0; j < width; ++j) {
-        const int residue = (int)(output[i * out_stride + j] * max_val + 0.5);
-        dgd[i * stride + j] +=
-            clip_pixel_highbd(dgd[i * stride + j] + residue, bit_depth);
-      }
-  } else {
-    for (int i = 0; i < height; ++i)
-      for (int j = 0; j < width; ++j)
-        dgd[i * stride + j] = clip_pixel_highbd(
-            (int)(output[i * out_stride + j] * max_val + 0.5), bit_depth);
-  }
-  aom_free(output);
-}
-
-void av1_restore_cnn_plane_part(AV1_COMMON *cm, const CNN_CONFIG *cnn_config,
-                                const CNN_THREAD_DATA *thread_data, int plane,
-                                int start_x, int start_y, int width,
-                                int height) {
-  YV12_BUFFER_CONFIG *buf = &cm->cur_frame->buf;
-
-  assert(start_x >= 0 && start_x + width <= buf->y_crop_width);
-  assert(start_y >= 0 && start_y + height <= buf->y_crop_height);
-
-  int offset = 0, part_width = 0, part_height = 0;
-  switch (plane) {
-    case AOM_PLANE_Y:
-      part_width = width;
-      part_height = height;
-      offset = start_y * buf->y_stride + start_x;
-      break;
-    case AOM_PLANE_U:
-    case AOM_PLANE_V:
-      part_width = width >> buf->subsampling_x;
-      part_height = height >> buf->subsampling_y;
-      offset = (start_y >> buf->subsampling_y) * buf->uv_stride +
-               (start_x >> buf->subsampling_x);
-      break;
-    default: assert(0 && "Invalid plane index");
-  }
-  if (cm->seq_params.use_highbitdepth) {
-    switch (plane) {
-      case AOM_PLANE_Y:
-        av1_restore_cnn_img_highbd(CONVERT_TO_SHORTPTR(buf->y_buffer + offset),
-                                   part_width, part_height, buf->y_stride,
-                                   cnn_config, thread_data,
-                                   cm->seq_params.bit_depth);
-        break;
-      case AOM_PLANE_U:
-        av1_restore_cnn_img_highbd(CONVERT_TO_SHORTPTR(buf->u_buffer + offset),
-                                   part_width, part_height, buf->uv_stride,
-                                   cnn_config, thread_data,
-                                   cm->seq_params.bit_depth);
-        break;
-      case AOM_PLANE_V:
-        av1_restore_cnn_img_highbd(CONVERT_TO_SHORTPTR(buf->v_buffer + offset),
-                                   part_width, part_height, buf->uv_stride,
-                                   cnn_config, thread_data,
-                                   cm->seq_params.bit_depth);
-        break;
-      default: assert(0 && "Invalid plane index");
-    }
-  } else {
-    assert(cm->seq_params.bit_depth == 8);
-    switch (plane) {
-      case AOM_PLANE_Y:
-        av1_restore_cnn_img(buf->y_buffer + offset, part_width, part_height,
-                            buf->y_stride, cnn_config, thread_data);
-        break;
-      case AOM_PLANE_U:
-        av1_restore_cnn_img(buf->u_buffer + offset, part_width, part_height,
-                            buf->uv_stride, cnn_config, thread_data);
-        break;
-      case AOM_PLANE_V:
-        av1_restore_cnn_img(buf->v_buffer + offset, part_width, part_height,
-                            buf->uv_stride, cnn_config, thread_data);
-        break;
-      default: assert(0 && "Invalid plane index");
-    }
-  }
-}
-
-void av1_restore_cnn_plane(AV1_COMMON *cm, const CNN_CONFIG *cnn_config,
-                           int plane, const CNN_THREAD_DATA *thread_data) {
-  YV12_BUFFER_CONFIG *buf = &cm->cur_frame->buf;
-  if (cm->seq_params.use_highbitdepth) {
-    switch (plane) {
-      case AOM_PLANE_Y:
-        av1_restore_cnn_img_highbd(CONVERT_TO_SHORTPTR(buf->y_buffer),
-                                   buf->y_crop_width, buf->y_crop_height,
-                                   buf->y_stride, cnn_config, thread_data,
-                                   cm->seq_params.bit_depth);
-        break;
-      case AOM_PLANE_U:
-        av1_restore_cnn_img_highbd(CONVERT_TO_SHORTPTR(buf->u_buffer),
-                                   buf->uv_crop_width, buf->uv_crop_height,
-                                   buf->uv_stride, cnn_config, thread_data,
-                                   cm->seq_params.bit_depth);
-        break;
-      case AOM_PLANE_V:
-        av1_restore_cnn_img_highbd(CONVERT_TO_SHORTPTR(buf->v_buffer),
-                                   buf->uv_crop_width, buf->uv_crop_height,
-                                   buf->uv_stride, cnn_config, thread_data,
-                                   cm->seq_params.bit_depth);
-        break;
-      default: assert(0 && "Invalid plane index");
-    }
-  } else {
-    assert(cm->seq_params.bit_depth == 8);
-    switch (plane) {
-      case AOM_PLANE_Y:
-        av1_restore_cnn_img(buf->y_buffer, buf->y_crop_width,
-                            buf->y_crop_height, buf->y_stride, cnn_config,
-                            thread_data);
-        break;
-      case AOM_PLANE_U:
-        av1_restore_cnn_img(buf->u_buffer, buf->uv_crop_width,
-                            buf->uv_crop_height, buf->uv_stride, cnn_config,
-                            thread_data);
-        break;
-      case AOM_PLANE_V:
-        av1_restore_cnn_img(buf->v_buffer, buf->uv_crop_width,
-                            buf->uv_crop_height, buf->uv_stride, cnn_config,
-                            thread_data);
-        break;
-      default: assert(0 && "Invalid plane index");
-    }
-  }
-}
diff --git a/av1/encoder/cnn.h b/av1/encoder/cnn.h
index 58e0d03..dc800a0 100644
--- a/av1/encoder/cnn.h
+++ b/av1/encoder/cnn.h
@@ -159,26 +159,6 @@
                                 const CNN_THREAD_DATA *thread_data,
                                 int bit_depth, float **output, int out_stride);
 
-// Restoration functions from input image buffer
-// These internally call av1_cnn_predict_img() / av1_cnn_predict_img_highbd().
-void av1_restore_cnn_img(uint8_t *dgd, int width, int height, int stride,
-                         const CNN_CONFIG *cnn_config,
-                         const CNN_THREAD_DATA *thread_data);
-void av1_restore_cnn_img_highbd(uint16_t *dgd, int width, int height,
-                                int stride, const CNN_CONFIG *cnn_config,
-                                const CNN_THREAD_DATA *thread_data,
-                                int bit_depth);
-
-// Restoration functions that work on current frame buffer in AV1_COMMON
-// directly for convenience.
-void av1_restore_cnn_plane(struct AV1Common *cm, const CNN_CONFIG *cnn_config,
-                           int plane, const CNN_THREAD_DATA *thread_data);
-void av1_restore_cnn_plane_part(struct AV1Common *cm,
-                                const CNN_CONFIG *cnn_config,
-                                const CNN_THREAD_DATA *thread_data, int plane,
-                                int start_x, int start_y, int width,
-                                int height);
-
 #ifdef __cplusplus
 }  // extern "C"
 #endif
