diff --git a/libavutil/hwcontext_opencl.c b/libavutil/hwcontext_opencl.c
index 54c050ab40..c5af1aec74 100644
--- a/libavutil/hwcontext_opencl.c
+++ b/libavutil/hwcontext_opencl.c
@@ -138,6 +138,11 @@ typedef struct OpenCLDeviceContext {
 } OpenCLDeviceContext;
 
 typedef struct OpenCLFramesContext {
+    /**
+     * The public AVOpenCLFramesContext. See hwcontext_opencl.h for it.
+     */
+    AVOpenCLFramesContext p;
+
     // Command queue used for transfer/mapping operations on this frames
     // context.  If the user supplies one, this is a reference to it.
     // Otherwise, it is a reference to the default command queue for the
@@ -1689,9 +1694,9 @@ fail:
 
 static int opencl_frames_init_command_queue(AVHWFramesContext *hwfc)
 {
-    AVOpenCLFramesContext *hwctx = hwfc->hwctx;
+    OpenCLFramesContext    *priv = hwfc->hwctx;
+    AVOpenCLFramesContext *hwctx = &priv->p;
     OpenCLDeviceContext *devpriv = hwfc->device_ctx->hwctx;
-    OpenCLFramesContext    *priv = hwfc->internal->priv;
     cl_int cle;
 
     priv->command_queue = hwctx->command_queue ? hwctx->command_queue
@@ -1721,7 +1726,7 @@ static int opencl_frames_init(AVHWFramesContext *hwfc)
 
 static void opencl_frames_uninit(AVHWFramesContext *hwfc)
 {
-    OpenCLFramesContext *priv = hwfc->internal->priv;
+    OpenCLFramesContext *priv = hwfc->hwctx;
     cl_int cle;
 
 #if HAVE_OPENCL_DXVA2 || HAVE_OPENCL_D3D11
@@ -1815,7 +1820,7 @@ static int opencl_wait_events(AVHWFramesContext *hwfc,
 static int opencl_transfer_data_from(AVHWFramesContext *hwfc,
                                      AVFrame *dst, const AVFrame *src)
 {
-    OpenCLFramesContext *priv = hwfc->internal->priv;
+    OpenCLFramesContext *priv = hwfc->hwctx;
     cl_image_format image_format;
     cl_image_desc image_desc;
     cl_int cle;
@@ -1870,7 +1875,7 @@ static int opencl_transfer_data_from(AVHWFramesContext *hwfc,
 static int opencl_transfer_data_to(AVHWFramesContext *hwfc,
                                    AVFrame *dst, const AVFrame *src)
 {
-    OpenCLFramesContext *priv = hwfc->internal->priv;
+    OpenCLFramesContext *priv = hwfc->hwctx;
     cl_image_format image_format;
     cl_image_desc image_desc;
     cl_int cle;
@@ -1932,7 +1937,7 @@ typedef struct OpenCLMapping {
 static void opencl_unmap_frame(AVHWFramesContext *hwfc,
                                HWMapDescriptor *hwmap)
 {
-    OpenCLFramesContext *priv = hwfc->internal->priv;
+    OpenCLFramesContext *priv = hwfc->hwctx;
     OpenCLMapping *map = hwmap->priv;
     cl_event events[AV_NUM_DATA_POINTERS];
     int p, e;
@@ -1961,7 +1966,7 @@ static void opencl_unmap_frame(AVHWFramesContext *hwfc,
 static int opencl_map_frame(AVHWFramesContext *hwfc, AVFrame *dst,
                             const AVFrame *src, int flags)
 {
-    OpenCLFramesContext *priv = hwfc->internal->priv;
+    OpenCLFramesContext *priv = hwfc->hwctx;
     cl_map_flags map_flags;
     cl_image_format image_format;
     cl_image_desc image_desc;
@@ -2217,7 +2222,7 @@ static void opencl_unmap_from_qsv(AVHWFramesContext *dst_fc,
 {
     AVOpenCLFrameDescriptor    *desc = hwmap->priv;
     OpenCLDeviceContext *device_priv = dst_fc->device_ctx->hwctx;
-    OpenCLFramesContext *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext *frames_priv = dst_fc->hwctx;
     cl_event event;
     cl_int cle;
     int p;
@@ -2253,7 +2258,7 @@ static int opencl_map_from_qsv(AVHWFramesContext *dst_fc, AVFrame *dst,
         (AVHWFramesContext*)src->hw_frames_ctx->data;
     OpenCLDeviceContext *device_priv = dst_fc->device_ctx->hwctx;
     AVOpenCLDeviceContext   *dst_dev = &device_priv->p;
-    OpenCLFramesContext *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext *frames_priv = dst_fc->hwctx;
     AVOpenCLFrameDescriptor *desc;
     VASurfaceID va_surface;
     cl_mem_flags cl_flags;
@@ -2351,7 +2356,7 @@ static void opencl_unmap_from_dxva2(AVHWFramesContext *dst_fc,
 {
     AVOpenCLFrameDescriptor    *desc = hwmap->priv;
     OpenCLDeviceContext *device_priv = dst_fc->device_ctx->hwctx;
-    OpenCLFramesContext *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext *frames_priv = dst_fc->hwctx;
     cl_event event;
     cl_int cle;
 
@@ -2376,7 +2381,7 @@ static int opencl_map_from_dxva2(AVHWFramesContext *dst_fc, AVFrame *dst,
         (AVHWFramesContext*)src->hw_frames_ctx->data;
     AVDXVA2FramesContext  *src_hwctx = src_fc->hwctx;
     OpenCLDeviceContext *device_priv = dst_fc->device_ctx->hwctx;
-    OpenCLFramesContext *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext *frames_priv = dst_fc->hwctx;
     AVOpenCLFrameDescriptor *desc;
     cl_event event;
     cl_int cle;
@@ -2439,7 +2444,7 @@ static int opencl_frames_derive_from_dxva2(AVHWFramesContext *dst_fc,
     AVDXVA2FramesContext  *src_hwctx = src_fc->hwctx;
     OpenCLDeviceContext *device_priv = dst_fc->device_ctx->hwctx;
     AVOpenCLDeviceContext   *dst_dev = &device_priv->p;
-    OpenCLFramesContext *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext *frames_priv = dst_fc->hwctx;
     cl_mem_flags cl_flags;
     cl_int cle;
     int err, i, p, nb_planes;
@@ -2516,7 +2521,7 @@ static void opencl_unmap_from_d3d11(AVHWFramesContext *dst_fc,
 {
     AVOpenCLFrameDescriptor    *desc = hwmap->priv;
     OpenCLDeviceContext *device_priv = dst_fc->device_ctx->hwctx;
-    OpenCLFramesContext *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext *frames_priv = dst_fc->hwctx;
     cl_event event;
     cl_int cle;
 
@@ -2535,7 +2540,7 @@ static int opencl_map_from_d3d11(AVHWFramesContext *dst_fc, AVFrame *dst,
                                  const AVFrame *src, int flags)
 {
     OpenCLDeviceContext  *device_priv = dst_fc->device_ctx->hwctx;
-    OpenCLFramesContext  *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext  *frames_priv = dst_fc->hwctx;
     AVOpenCLFrameDescriptor *desc;
     cl_event event;
     cl_int cle;
@@ -2595,7 +2600,7 @@ static int opencl_frames_derive_from_d3d11(AVHWFramesContext *dst_fc,
     AVD3D11VAFramesContext *src_hwctx = src_fc->hwctx;
     OpenCLDeviceContext  *device_priv = dst_fc->device_ctx->hwctx;
     AVOpenCLDeviceContext    *dst_dev = &device_priv->p;
-    OpenCLFramesContext  *frames_priv = dst_fc->internal->priv;
+    OpenCLFramesContext  *frames_priv = dst_fc->hwctx;
     cl_mem_flags cl_flags;
     cl_int cle;
     int err, i, p, nb_planes;
@@ -2938,8 +2943,7 @@ const HWContextType ff_hwcontext_type_opencl = {
     .name                   = "OpenCL",
 
     .device_hwctx_size      = sizeof(OpenCLDeviceContext),
-    .frames_hwctx_size      = sizeof(AVOpenCLFramesContext),
-    .frames_priv_size       = sizeof(OpenCLFramesContext),
+    .frames_hwctx_size      = sizeof(OpenCLFramesContext),
 
     .device_create          = &opencl_device_create,
     .device_derive          = &opencl_device_derive,
