diff --git a/.pick_status.json b/.pick_status.json index 62978218054..ea2f01fbc73 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1228,7 +1228,7 @@ "description": "frontends/va: remove private member and update target buffer", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/frontends/va/picture_h264.c b/src/gallium/frontends/va/picture_h264.c index 04241a4c346..3a2bad20feb 100644 --- a/src/gallium/frontends/va/picture_h264.c +++ b/src/gallium/frontends/va/picture_h264.c @@ -30,23 +30,9 @@ #include "util/u_handle_table.h" #include "va_private.h" -static void vlVaGetPastReferenceFrame(vlVaDriver *drv, VASurfaceID surface_id, - struct pipe_video_buffer **ref_frame) -{ - vlVaSurface *surf = handle_table_get(drv->htab, surface_id); - if (surf) { - *ref_frame = surf->obsolete_buf; - surf->obsolete_buf = NULL; - } - else - *ref_frame = NULL; -} - static void resetReferencePictureDesc(struct pipe_h264_picture_desc *h264, unsigned int i) { - struct h264_private *private = h264->priv; - h264->ref[i] = NULL; h264->frame_num_list[i] = 0; h264->is_long_term[i] = 0; @@ -54,21 +40,17 @@ static void resetReferencePictureDesc(struct pipe_h264_picture_desc *h264, h264->bottom_is_reference[i] = 0; h264->field_order_cnt_list[i][0] = 0; h264->field_order_cnt_list[i][1] = 0; - - private->past_ref[i] = NULL; } void vlVaHandlePictureParameterBufferH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf) { VAPictureParameterBufferH264 *h264 = buf->data; - struct h264_private *private = &context->h264; unsigned int top_or_bottom_field; bool is_ref; unsigned i; assert(buf->size >= sizeof(VAPictureParameterBufferH264) && buf->num_elements == 1); context->desc.h264.slice_count = 0; - context->desc.h264.priv = private; /*CurrPic*/ context->desc.h264.field_order_cnt[0] = h264->CurrPic.TopFieldOrderCnt; context->desc.h264.field_order_cnt[1] = h264->CurrPic.BottomFieldOrderCnt; @@ -148,7 +130,6 @@ void vlVaHandlePictureParameterBufferH264(vlVaDriver *drv, vlVaContext *context, } vlVaGetReferenceFrame(drv, h264->ReferenceFrames[i].picture_id, &context->desc.h264.ref[i]); - vlVaGetPastReferenceFrame(drv, h264->ReferenceFrames[i].picture_id, &private->past_ref[i]); context->desc.h264.frame_num_list[i] = h264->ReferenceFrames[i].frame_idx; top_or_bottom_field = h264->ReferenceFrames[i].flags & diff --git a/src/gallium/frontends/va/surface.c b/src/gallium/frontends/va/surface.c index 21cf8adee63..eed152f46ef 100644 --- a/src/gallium/frontends/va/surface.c +++ b/src/gallium/frontends/va/surface.c @@ -1492,7 +1492,6 @@ vlVaExportSurfaceHandle(VADriverContextP ctx, struct u_rect src_rect, dst_rect; surf->templat.interlaced = false; - surf->obsolete_buf = surf->buffer; ret = vlVaHandleSurfaceAllocate(drv, surf, &surf->templat, NULL, 0); if (ret != VA_STATUS_SUCCESS) { @@ -1509,10 +1508,11 @@ vlVaExportSurfaceHandle(VADriverContextP ctx, interlaced, surf->buffer, &src_rect, &dst_rect, VL_COMPOSITOR_WEAVE); + if (interlaced->codec && interlaced->codec->update_decoder_target) + interlaced->codec->update_decoder_target(interlaced->codec, interlaced, surf->buffer); interlaced->destroy(interlaced); - } else - surf->obsolete_buf = NULL; + } surfaces = surf->buffer->get_surfaces(surf->buffer); diff --git a/src/gallium/frontends/va/va_private.h b/src/gallium/frontends/va/va_private.h index b92d49477d5..345f35c8ee1 100644 --- a/src/gallium/frontends/va/va_private.h +++ b/src/gallium/frontends/va/va_private.h @@ -346,7 +346,6 @@ typedef struct { unsigned int slice_header_size; } mjpeg; - struct h264_private h264; struct vl_deint_filter *deint; vlVaBuffer *coded_buf; int target_id; diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h index d2038444a51..2ebc9d3faa5 100644 --- a/src/gallium/include/pipe/p_video_state.h +++ b/src/gallium/include/pipe/p_video_state.h @@ -357,10 +357,6 @@ struct pipe_h264_pps int8_t second_chroma_qp_index_offset; }; -struct h264_private { - struct pipe_video_buffer *past_ref[16]; -}; - struct pipe_h264_picture_desc { struct pipe_picture_desc base; @@ -386,9 +382,6 @@ struct pipe_h264_picture_desc uint32_t frame_num_list[16]; struct pipe_video_buffer *ref[16]; - - /* using private as a parameter name conflicts with C++ keywords */ - void *priv; }; struct pipe_enc_quality_modes