mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06:50 +08:00
[mpp_dec]:add default horstride verstrid config for first frame info set
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@579 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -66,6 +66,8 @@ typedef struct {
|
|||||||
RK_U32 CodecType;
|
RK_U32 CodecType;
|
||||||
RK_U32 ImgWidth;
|
RK_U32 ImgWidth;
|
||||||
RK_U32 ImgHeight;
|
RK_U32 ImgHeight;
|
||||||
|
RK_U32 ImgHorStride;
|
||||||
|
RK_U32 ImgVerStride;
|
||||||
} VPU_GENERIC;
|
} VPU_GENERIC;
|
||||||
|
|
||||||
typedef struct VPUMem {
|
typedef struct VPUMem {
|
||||||
|
@@ -237,8 +237,8 @@ static void generate_info_set(MppBufSlotsImpl *impl, MppFrame frame, RK_U32 forc
|
|||||||
(impl->hal_ver_align(codec_ver_stride)) :
|
(impl->hal_ver_align(codec_ver_stride)) :
|
||||||
(impl->hal_ver_align(height));
|
(impl->hal_ver_align(height));
|
||||||
if (force_default_align) {
|
if (force_default_align) {
|
||||||
hal_hor_stride = default_align_16(width);
|
hal_hor_stride = codec_hor_stride;
|
||||||
hal_ver_stride = default_align_16(height);
|
hal_ver_stride = codec_ver_stride;
|
||||||
}
|
}
|
||||||
RK_U32 size = hal_hor_stride * hal_ver_stride;
|
RK_U32 size = hal_hor_stride * hal_ver_stride;
|
||||||
size *= impl->numerator;
|
size *= impl->numerator;
|
||||||
|
@@ -863,6 +863,8 @@ MPP_RET mpp_dec_control(MppDec *dec, MpiCmd cmd, void *param)
|
|||||||
mpp_frame_init(&frame);
|
mpp_frame_init(&frame);
|
||||||
mpp_frame_set_width(frame, p->ImgWidth);
|
mpp_frame_set_width(frame, p->ImgWidth);
|
||||||
mpp_frame_set_height(frame, p->ImgHeight);
|
mpp_frame_set_height(frame, p->ImgHeight);
|
||||||
|
mpp_frame_set_hor_stride(frame, p->ImgHorStride);
|
||||||
|
mpp_frame_set_ver_stride(frame, p->ImgVerStride);
|
||||||
mpp_log_f("setting default w %4d h %4d\n", p->ImgWidth, p->ImgHeight);
|
mpp_log_f("setting default w %4d h %4d\n", p->ImgWidth, p->ImgHeight);
|
||||||
mpp_slots_set_prop(dec->frame_slots, SLOTS_FRAME_INFO, frame);
|
mpp_slots_set_prop(dec->frame_slots, SLOTS_FRAME_INFO, frame);
|
||||||
mpp_frame_deinit(&frame);
|
mpp_frame_deinit(&frame);
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include "vpu_api_legacy.h"
|
#include "vpu_api_legacy.h"
|
||||||
#include "mpp_mem.h"
|
#include "mpp_mem.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
#include "mpp_common.h"
|
||||||
|
|
||||||
VpuApi::VpuApi()
|
VpuApi::VpuApi()
|
||||||
{
|
{
|
||||||
@@ -69,8 +70,6 @@ RK_S32 VpuApi::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_size)
|
|||||||
vpug.CodecType = ctx->codecType;
|
vpug.CodecType = ctx->codecType;
|
||||||
vpug.ImgWidth = ctx->width;
|
vpug.ImgWidth = ctx->width;
|
||||||
vpug.ImgHeight = ctx->height;
|
vpug.ImgHeight = ctx->height;
|
||||||
vpug.ImgHStride = (ctx->codecType == HEVC) : (ctx->width aling 256); else
|
|
||||||
vpug.ImgVStride = ctx->height;
|
|
||||||
control(ctx, VPU_API_SET_DEFAULT_WIDTH_HEIGH, &vpug);
|
control(ctx, VPU_API_SET_DEFAULT_WIDTH_HEIGH, &vpug);
|
||||||
if (extraData != NULL) {
|
if (extraData != NULL) {
|
||||||
mpp_packet_init(&pkt, extraData, extra_size);
|
mpp_packet_init(&pkt, extraData, extra_size);
|
||||||
@@ -248,6 +247,20 @@ RK_S32 VpuApi::perform(RK_U32 cmd, RK_U32 *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RK_U32 hevc_ver_align_8(RK_U32 val)
|
||||||
|
{
|
||||||
|
return MPP_ALIGN(val, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RK_U32 hevc_ver_align_256_odd(RK_U32 val)
|
||||||
|
{
|
||||||
|
return MPP_ALIGN(val, 256) | 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
static RK_U32 default_align_16(RK_U32 val)
|
||||||
|
{
|
||||||
|
return MPP_ALIGN(val, 16);
|
||||||
|
}
|
||||||
RK_S32 VpuApi::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
RK_S32 VpuApi::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
||||||
{
|
{
|
||||||
mpp_log_f("in\n");
|
mpp_log_f("in\n");
|
||||||
@@ -264,7 +277,15 @@ RK_S32 VpuApi::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VPU_API_SET_DEFAULT_WIDTH_HEIGH: {
|
case VPU_API_SET_DEFAULT_WIDTH_HEIGH: {
|
||||||
|
VPU_GENERIC *p = (VPU_GENERIC *)param;
|
||||||
mpicmd = MPP_CODEC_SET_FRAME_INFO;
|
mpicmd = MPP_CODEC_SET_FRAME_INFO;
|
||||||
|
if (ctx->videoCoding == OMX_RK_VIDEO_CodingHEVC) {
|
||||||
|
p->ImgHorStride = hevc_ver_align_256_odd(p->ImgWidth);
|
||||||
|
p->ImgVerStride = hevc_ver_align_8(p->ImgHeight);
|
||||||
|
} else {
|
||||||
|
p->ImgHorStride = default_align_16(p->ImgWidth);
|
||||||
|
p->ImgVerStride = default_align_16(p->ImgHeight);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VPU_API_SET_INFO_CHANGE: {
|
case VPU_API_SET_INFO_CHANGE: {
|
||||||
|
Reference in New Issue
Block a user