diff --git a/src/gallium/frontends/va/picture.c b/src/gallium/frontends/va/picture.c index 4706013ac8f..c358bc25c6b 100644 --- a/src/gallium/frontends/va/picture.c +++ b/src/gallium/frontends/va/picture.c @@ -277,7 +277,7 @@ handleVAProtectedSliceDataBufferType(vlVaContext *context, vlVaBuffer *buf) static void handleVASliceDataBufferType(vlVaContext *context, vlVaBuffer *buf) { - enum pipe_video_format format; + enum pipe_video_format format = u_reduce_video_profile(context->templat.profile); unsigned num_buffers = 0; void * const *buffers[3]; unsigned sizes[3]; @@ -335,9 +335,16 @@ handleVASliceDataBufferType(vlVaContext *context, vlVaBuffer *buf) } } - buffers[num_buffers] = buf->data; - sizes[num_buffers] = buf->size; - ++num_buffers; + if (context->desc.base.protected_playback && PIPE_VIDEO_FORMAT_VP9 == format){ + vlVaDecoderVP9BitstreamHeader(context, buf); + buffers[num_buffers] = buf->data + context->desc.vp9.picture_parameter.frame_header_length_in_bytes; + sizes[num_buffers] = buf->size - context->desc.vp9.picture_parameter.frame_header_length_in_bytes; + ++num_buffers; + } else { + buffers[num_buffers] = buf->data; + sizes[num_buffers] = buf->size; + ++num_buffers; + } if (format == PIPE_VIDEO_FORMAT_JPEG) { buffers[num_buffers] = (void *const)&eoi_jpeg;