st/va: enable dual instances encode only for H264
Logics that related to dual instances encode should only be done for H264, not other codecs. Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com> Acked-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
@@ -617,7 +617,8 @@ vlVaEndPicture(VADriverContextP ctx, VAContextID context_id)
|
||||
}
|
||||
|
||||
context->decoder->end_frame(context->decoder, context->target, &context->desc.base);
|
||||
if (context->decoder->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
|
||||
if (context->decoder->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE &&
|
||||
u_reduce_video_profile(context->templat.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
|
||||
int idr_period = context->desc.h264enc.gop_size / context->gop_coeff;
|
||||
int p_remain_in_idr = idr_period - context->desc.h264enc.frame_num;
|
||||
surf->frame_num_cnt = context->desc.h264enc.frame_num_cnt;
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "util/u_rect.h"
|
||||
#include "util/u_sampler.h"
|
||||
#include "util/u_surface.h"
|
||||
#include "util/u_video.h"
|
||||
|
||||
#include "vl/vl_compositor.h"
|
||||
#include "vl/vl_video_buffer.h"
|
||||
@@ -122,16 +123,18 @@ vlVaSyncSurface(VADriverContextP ctx, VASurfaceID render_target)
|
||||
}
|
||||
|
||||
if (context->decoder->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
|
||||
int frame_diff;
|
||||
if (context->desc.h264enc.frame_num_cnt >= surf->frame_num_cnt)
|
||||
frame_diff = context->desc.h264enc.frame_num_cnt - surf->frame_num_cnt;
|
||||
else
|
||||
frame_diff = 0xFFFFFFFF - surf->frame_num_cnt + 1 + context->desc.h264enc.frame_num_cnt;
|
||||
if ((frame_diff == 0) &&
|
||||
(surf->force_flushed == false) &&
|
||||
(context->desc.h264enc.frame_num_cnt % 2 != 0)) {
|
||||
context->decoder->flush(context->decoder);
|
||||
context->first_single_submitted = true;
|
||||
if (u_reduce_video_profile(context->templat.profile) == PIPE_VIDEO_FORMAT_MPEG4_AVC) {
|
||||
int frame_diff;
|
||||
if (context->desc.h264enc.frame_num_cnt >= surf->frame_num_cnt)
|
||||
frame_diff = context->desc.h264enc.frame_num_cnt - surf->frame_num_cnt;
|
||||
else
|
||||
frame_diff = 0xFFFFFFFF - surf->frame_num_cnt + 1 + context->desc.h264enc.frame_num_cnt;
|
||||
if ((frame_diff == 0) &&
|
||||
(surf->force_flushed == false) &&
|
||||
(context->desc.h264enc.frame_num_cnt % 2 != 0)) {
|
||||
context->decoder->flush(context->decoder);
|
||||
context->first_single_submitted = true;
|
||||
}
|
||||
}
|
||||
context->decoder->get_feedback(context->decoder, surf->feedback, &(surf->coded_buf->coded_size));
|
||||
surf->feedback = NULL;
|
||||
|
||||
Reference in New Issue
Block a user