video: driver: fixes for nv12 format and dpb buffer
fixes for nv12 format and dpb buffers. modified PIX_FMTS and corresponding driver color format structure, therby fixing enum_fmts. Change-Id: I955b76dd4938e96fe259311e107a0cdca39425bc Signed-off-by: Darshana Patil <darshana@codeaurora.org>
This commit is contained in:
@@ -117,13 +117,13 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
{PIX_FMTS, ENC, H264,
|
{PIX_FMTS, ENC, H264,
|
||||||
MSM_VIDC_FMT_NV12,
|
MSM_VIDC_FMT_NV12,
|
||||||
MSM_VIDC_FMT_NV12C,
|
MSM_VIDC_FMT_NV12C,
|
||||||
BIT(MSM_VIDC_FMT_NV12) | BIT(MSM_VIDC_FMT_NV21) | BIT(MSM_VIDC_FMT_NV12C),
|
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C,
|
||||||
MSM_VIDC_FMT_NV12C},
|
MSM_VIDC_FMT_NV12C},
|
||||||
{PIX_FMTS, ENC, HEVC,
|
{PIX_FMTS, ENC, HEVC,
|
||||||
MSM_VIDC_FMT_NV12,
|
MSM_VIDC_FMT_NV12,
|
||||||
MSM_VIDC_FMT_TP10C,
|
MSM_VIDC_FMT_TP10C,
|
||||||
BIT(MSM_VIDC_FMT_NV12) | BIT(MSM_VIDC_FMT_NV21) | BIT(MSM_VIDC_FMT_NV12C ) |
|
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
|
||||||
BIT(MSM_VIDC_FMT_P010) | BIT(MSM_VIDC_FMT_TP10C),
|
MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
|
||||||
MSM_VIDC_FMT_NV12C,
|
MSM_VIDC_FMT_NV12C,
|
||||||
0, 0,
|
0, 0,
|
||||||
CAP_FLAG_ROOT,
|
CAP_FLAG_ROOT,
|
||||||
@@ -133,8 +133,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
{PIX_FMTS, DEC, HEVC,
|
{PIX_FMTS, DEC, HEVC,
|
||||||
MSM_VIDC_FMT_NV12,
|
MSM_VIDC_FMT_NV12,
|
||||||
MSM_VIDC_FMT_TP10C,
|
MSM_VIDC_FMT_TP10C,
|
||||||
BIT(MSM_VIDC_FMT_NV12) | BIT(MSM_VIDC_FMT_NV21) | BIT(MSM_VIDC_FMT_NV12C ) |
|
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
|
||||||
BIT(MSM_VIDC_FMT_P010) | BIT(MSM_VIDC_FMT_TP10C),
|
MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
|
||||||
MSM_VIDC_FMT_NV12C,
|
MSM_VIDC_FMT_NV12C,
|
||||||
0, 0,
|
0, 0,
|
||||||
CAP_FLAG_ROOT,
|
CAP_FLAG_ROOT,
|
||||||
@@ -144,14 +144,14 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
{PIX_FMTS, DEC, H264,
|
{PIX_FMTS, DEC, H264,
|
||||||
MSM_VIDC_FMT_NV12,
|
MSM_VIDC_FMT_NV12,
|
||||||
MSM_VIDC_FMT_NV12C,
|
MSM_VIDC_FMT_NV12C,
|
||||||
BIT(MSM_VIDC_FMT_NV12) | BIT(MSM_VIDC_FMT_NV21) | BIT(MSM_VIDC_FMT_NV12C),
|
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C,
|
||||||
MSM_VIDC_FMT_NV12C},
|
MSM_VIDC_FMT_NV12C},
|
||||||
|
|
||||||
{PIX_FMTS, DEC, VP9,
|
{PIX_FMTS, DEC, VP9,
|
||||||
MSM_VIDC_FMT_NV12,
|
MSM_VIDC_FMT_NV12,
|
||||||
MSM_VIDC_FMT_TP10C,
|
MSM_VIDC_FMT_TP10C,
|
||||||
BIT(MSM_VIDC_FMT_NV12) | BIT(MSM_VIDC_FMT_NV21) | BIT(MSM_VIDC_FMT_NV12C) |
|
MSM_VIDC_FMT_NV12 | MSM_VIDC_FMT_NV21 | MSM_VIDC_FMT_NV12C |
|
||||||
BIT(MSM_VIDC_FMT_P010) | BIT(MSM_VIDC_FMT_TP10C),
|
MSM_VIDC_FMT_P010 | MSM_VIDC_FMT_TP10C,
|
||||||
MSM_VIDC_FMT_NV12C},
|
MSM_VIDC_FMT_NV12C},
|
||||||
|
|
||||||
{MIN_BUFFERS_INPUT, ENC|DEC, CODECS_ALL, 0, 64, 1, 4,
|
{MIN_BUFFERS_INPUT, ENC|DEC, CODECS_ALL, 0, 64, 1, 4,
|
||||||
|
@@ -125,7 +125,7 @@ static u32 msm_vidc_decoder_line_size_iris2(struct msm_vidc_inst *inst)
|
|||||||
u32 width, height, out_min_count, num_vpp_pipes, vpp_delay;
|
u32 width, height, out_min_count, num_vpp_pipes, vpp_delay;
|
||||||
struct v4l2_format *f;
|
struct v4l2_format *f;
|
||||||
bool is_opb;
|
bool is_opb;
|
||||||
u32 pixelformat;
|
u32 color_fmt;
|
||||||
|
|
||||||
if (!inst || !inst->core) {
|
if (!inst || !inst->core) {
|
||||||
d_vpr_e("%s: invalid params\n", __func__);
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
@@ -138,12 +138,17 @@ static u32 msm_vidc_decoder_line_size_iris2(struct msm_vidc_inst *inst)
|
|||||||
}
|
}
|
||||||
num_vpp_pipes = core->capabilities[NUM_VPP_PIPE].value;
|
num_vpp_pipes = core->capabilities[NUM_VPP_PIPE].value;
|
||||||
|
|
||||||
pixelformat = inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat;
|
color_fmt = v4l2_colorformat_to_driver(
|
||||||
if (pixelformat == MSM_VIDC_FMT_NV12 ||
|
inst->fmts[OUTPUT_PORT].fmt.pix_mp.pixelformat, __func__);
|
||||||
pixelformat == MSM_VIDC_FMT_P010)
|
if (is_linear_colorformat(color_fmt))
|
||||||
is_opb = true;
|
is_opb = true;
|
||||||
else
|
else
|
||||||
is_opb = false;
|
is_opb = false;
|
||||||
|
/*
|
||||||
|
* assume worst case, since color format is unknown at this
|
||||||
|
* time
|
||||||
|
*/
|
||||||
|
is_opb = true;
|
||||||
|
|
||||||
if (inst->decode_vpp_delay.enable)
|
if (inst->decode_vpp_delay.enable)
|
||||||
vpp_delay = inst->decode_vpp_delay.size;
|
vpp_delay = inst->decode_vpp_delay.size;
|
||||||
@@ -155,7 +160,6 @@ static u32 msm_vidc_decoder_line_size_iris2(struct msm_vidc_inst *inst)
|
|||||||
height = f->fmt.pix_mp.height;
|
height = f->fmt.pix_mp.height;
|
||||||
out_min_count = inst->buffers.output.min_count;
|
out_min_count = inst->buffers.output.min_count;
|
||||||
out_min_count = max(vpp_delay + 1, out_min_count);
|
out_min_count = max(vpp_delay + 1, out_min_count);
|
||||||
|
|
||||||
if (inst->codec == MSM_VIDC_H264)
|
if (inst->codec == MSM_VIDC_H264)
|
||||||
HFI_BUFFER_LINE_H264D(size, width, height, is_opb,
|
HFI_BUFFER_LINE_H264D(size, width, height, is_opb,
|
||||||
num_vpp_pipes);
|
num_vpp_pipes);
|
||||||
|
@@ -49,10 +49,10 @@ enum color_fmts {
|
|||||||
* . . . . . . . . . . . . . . . . V
|
* . . . . . . . . . . . . . . . . V
|
||||||
* . . . . . . . . . . . . . . . . --> Buffer size alignment
|
* . . . . . . . . . . . . . . . . --> Buffer size alignment
|
||||||
*
|
*
|
||||||
* Y_Stride : Width aligned to 512
|
* Y_Stride : Width aligned to 128
|
||||||
* UV_Stride : Width aligned to 512
|
* UV_Stride : Width aligned to 128
|
||||||
* Y_Scanlines: Height aligned to 512
|
* Y_Scanlines: Height aligned to 32
|
||||||
* UV_Scanlines: Height/2 aligned to 256
|
* UV_Scanlines: Height/2 aligned to 16
|
||||||
* Total size = align(Y_Stride * Y_Scanlines
|
* Total size = align(Y_Stride * Y_Scanlines
|
||||||
* + UV_Stride * UV_Scanlines, 4096)
|
* + UV_Stride * UV_Scanlines, 4096)
|
||||||
*/
|
*/
|
||||||
@@ -84,10 +84,10 @@ enum color_fmts {
|
|||||||
* . . . . . . . . . . . . . . . . V
|
* . . . . . . . . . . . . . . . . V
|
||||||
* . . . . . . . . . . . . . . . . --> Padding & Buffer size alignment
|
* . . . . . . . . . . . . . . . . --> Padding & Buffer size alignment
|
||||||
*
|
*
|
||||||
* Y_Stride : Width aligned to 512
|
* Y_Stride : Width aligned to 128
|
||||||
* UV_Stride : Width aligned to 512
|
* UV_Stride : Width aligned to 128
|
||||||
* Y_Scanlines: Height aligned to 512
|
* Y_Scanlines: Height aligned to 32
|
||||||
* UV_Scanlines: Height/2 aligned to 256
|
* UV_Scanlines: Height/2 aligned to 16
|
||||||
* Total size = align(Y_Stride * Y_Scanlines
|
* Total size = align(Y_Stride * Y_Scanlines
|
||||||
* + UV_Stride * UV_Scanlines, 4096)
|
* + UV_Stride * UV_Scanlines, 4096)
|
||||||
*/
|
*/
|
||||||
@@ -731,41 +731,6 @@ enum color_fmts {
|
|||||||
* + UV_Stride * UV_Scanlines, 4096)
|
* + UV_Stride * UV_Scanlines, 4096)
|
||||||
*/
|
*/
|
||||||
COLOR_FMT_P010,
|
COLOR_FMT_P010,
|
||||||
/* Venus NV12_512:
|
|
||||||
* YUV 4:2:0 image with a plane of 8 bit Y samples followed
|
|
||||||
* by an interleaved U/V plane containing 8 bit 2x2 subsampled
|
|
||||||
* colour difference samples.
|
|
||||||
*
|
|
||||||
* <-------- Y/UV_Stride -------->
|
|
||||||
* <------- Width ------->
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
|
|
||||||
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
|
|
||||||
* . . . . . . . . . . . . . . . . |
|
|
||||||
* . . . . . . . . . . . . . . . . |
|
|
||||||
* . . . . . . . . . . . . . . . . |
|
|
||||||
* . . . . . . . . . . . . . . . . V
|
|
||||||
* U V U V U V U V U V U V . . . . ^
|
|
||||||
* U V U V U V U V U V U V . . . . |
|
|
||||||
* U V U V U V U V U V U V . . . . |
|
|
||||||
* U V U V U V U V U V U V . . . . UV_Scanlines
|
|
||||||
* . . . . . . . . . . . . . . . . |
|
|
||||||
* . . . . . . . . . . . . . . . . V
|
|
||||||
* . . . . . . . . . . . . . . . . --> Buffer size alignment
|
|
||||||
*
|
|
||||||
* Y_Stride : Width aligned to 512
|
|
||||||
* UV_Stride : Width aligned to 512
|
|
||||||
* Y_Scanlines: Height aligned to 512
|
|
||||||
* UV_Scanlines: Height/2 aligned to 256
|
|
||||||
* Total size = align((Y_Stride * Y_Scanlines
|
|
||||||
* + UV_Stride * UV_Scanlines), 4096)
|
|
||||||
*/
|
|
||||||
COLOR_FMT_NV12_512,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -786,10 +751,6 @@ static inline unsigned int VENUS_Y_STRIDE(unsigned int color_fmt,
|
|||||||
switch (color_fmt) {
|
switch (color_fmt) {
|
||||||
case COLOR_FMT_NV12:
|
case COLOR_FMT_NV12:
|
||||||
case COLOR_FMT_NV21:
|
case COLOR_FMT_NV21:
|
||||||
case COLOR_FMT_NV12_512:
|
|
||||||
alignment = 512;
|
|
||||||
stride = MSM_MEDIA_ALIGN(width, alignment);
|
|
||||||
break;
|
|
||||||
case COLOR_FMT_NV12_UBWC:
|
case COLOR_FMT_NV12_UBWC:
|
||||||
alignment = 128;
|
alignment = 128;
|
||||||
stride = MSM_MEDIA_ALIGN(width, alignment);
|
stride = MSM_MEDIA_ALIGN(width, alignment);
|
||||||
@@ -829,10 +790,6 @@ static inline unsigned int VENUS_UV_STRIDE(unsigned int color_fmt,
|
|||||||
switch (color_fmt) {
|
switch (color_fmt) {
|
||||||
case COLOR_FMT_NV21:
|
case COLOR_FMT_NV21:
|
||||||
case COLOR_FMT_NV12:
|
case COLOR_FMT_NV12:
|
||||||
case COLOR_FMT_NV12_512:
|
|
||||||
alignment = 512;
|
|
||||||
stride = MSM_MEDIA_ALIGN(width, alignment);
|
|
||||||
break;
|
|
||||||
case COLOR_FMT_NV12_UBWC:
|
case COLOR_FMT_NV12_UBWC:
|
||||||
alignment = 128;
|
alignment = 128;
|
||||||
stride = MSM_MEDIA_ALIGN(width, alignment);
|
stride = MSM_MEDIA_ALIGN(width, alignment);
|
||||||
@@ -872,9 +829,6 @@ static inline unsigned int VENUS_Y_SCANLINES(unsigned int color_fmt,
|
|||||||
switch (color_fmt) {
|
switch (color_fmt) {
|
||||||
case COLOR_FMT_NV12:
|
case COLOR_FMT_NV12:
|
||||||
case COLOR_FMT_NV21:
|
case COLOR_FMT_NV21:
|
||||||
case COLOR_FMT_NV12_512:
|
|
||||||
alignment = 512;
|
|
||||||
break;
|
|
||||||
case COLOR_FMT_NV12_UBWC:
|
case COLOR_FMT_NV12_UBWC:
|
||||||
case COLOR_FMT_P010:
|
case COLOR_FMT_P010:
|
||||||
alignment = 32;
|
alignment = 32;
|
||||||
@@ -909,9 +863,6 @@ static inline unsigned int VENUS_UV_SCANLINES(unsigned int color_fmt,
|
|||||||
switch (color_fmt) {
|
switch (color_fmt) {
|
||||||
case COLOR_FMT_NV21:
|
case COLOR_FMT_NV21:
|
||||||
case COLOR_FMT_NV12:
|
case COLOR_FMT_NV12:
|
||||||
case COLOR_FMT_NV12_512:
|
|
||||||
alignment = 256;
|
|
||||||
break;
|
|
||||||
case COLOR_FMT_NV12_BPP10_UBWC:
|
case COLOR_FMT_NV12_BPP10_UBWC:
|
||||||
case COLOR_FMT_P010_UBWC:
|
case COLOR_FMT_P010_UBWC:
|
||||||
case COLOR_FMT_P010:
|
case COLOR_FMT_P010:
|
||||||
@@ -1211,7 +1162,6 @@ static inline unsigned int VENUS_BUFFER_SIZE(unsigned int color_fmt,
|
|||||||
case COLOR_FMT_NV21:
|
case COLOR_FMT_NV21:
|
||||||
case COLOR_FMT_NV12:
|
case COLOR_FMT_NV12:
|
||||||
case COLOR_FMT_P010:
|
case COLOR_FMT_P010:
|
||||||
case COLOR_FMT_NV12_512:
|
|
||||||
y_plane = y_stride * y_sclines;
|
y_plane = y_stride * y_sclines;
|
||||||
uv_plane = uv_stride * uv_sclines;
|
uv_plane = uv_stride * uv_sclines;
|
||||||
size = y_plane + uv_plane;
|
size = y_plane + uv_plane;
|
||||||
|
@@ -116,13 +116,13 @@ enum msm_vidc_codec_type {
|
|||||||
|
|
||||||
enum msm_vidc_colorformat_type {
|
enum msm_vidc_colorformat_type {
|
||||||
MSM_VIDC_FMT_NONE = 0,
|
MSM_VIDC_FMT_NONE = 0,
|
||||||
MSM_VIDC_FMT_NV12 = 1,
|
MSM_VIDC_FMT_NV12 = BIT(0),
|
||||||
MSM_VIDC_FMT_NV12C = 2,
|
MSM_VIDC_FMT_NV21 = BIT(1),
|
||||||
MSM_VIDC_FMT_P010 = 3,
|
MSM_VIDC_FMT_NV12C = BIT(2),
|
||||||
MSM_VIDC_FMT_TP10C = 4,
|
MSM_VIDC_FMT_P010 = BIT(3),
|
||||||
MSM_VIDC_FMT_RGBA8888 = 5,
|
MSM_VIDC_FMT_TP10C = BIT(4),
|
||||||
MSM_VIDC_FMT_RGBA8888C = 6,
|
MSM_VIDC_FMT_RGBA8888 = BIT(5),
|
||||||
MSM_VIDC_FMT_NV21 = 7,
|
MSM_VIDC_FMT_RGBA8888C = BIT(6),
|
||||||
};
|
};
|
||||||
|
|
||||||
enum msm_vidc_buffer_type {
|
enum msm_vidc_buffer_type {
|
||||||
|
@@ -66,7 +66,6 @@ u32 get_hfi_port_from_buffer_type(struct msm_vidc_inst *inst,
|
|||||||
case MSM_VIDC_BUF_COMV:
|
case MSM_VIDC_BUF_COMV:
|
||||||
case MSM_VIDC_BUF_NON_COMV:
|
case MSM_VIDC_BUF_NON_COMV:
|
||||||
case MSM_VIDC_BUF_LINE:
|
case MSM_VIDC_BUF_LINE:
|
||||||
case MSM_VIDC_BUF_DPB:
|
|
||||||
hfi_port = HFI_PORT_BITSTREAM;
|
hfi_port = HFI_PORT_BITSTREAM;
|
||||||
break;
|
break;
|
||||||
case MSM_VIDC_BUF_PERSIST:
|
case MSM_VIDC_BUF_PERSIST:
|
||||||
@@ -75,6 +74,7 @@ u32 get_hfi_port_from_buffer_type(struct msm_vidc_inst *inst,
|
|||||||
break;
|
break;
|
||||||
case MSM_VIDC_BUF_OUTPUT:
|
case MSM_VIDC_BUF_OUTPUT:
|
||||||
case MSM_VIDC_BUF_OUTPUT_META:
|
case MSM_VIDC_BUF_OUTPUT_META:
|
||||||
|
case MSM_VIDC_BUF_DPB:
|
||||||
hfi_port = HFI_PORT_RAW;
|
hfi_port = HFI_PORT_RAW;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -787,9 +787,9 @@ static int msm_vdec_get_output_internal_buffers(struct msm_vidc_inst *inst)
|
|||||||
|
|
||||||
s_vpr_h(inst->sid, "output internal buffer: min size reuse\n");
|
s_vpr_h(inst->sid, "output internal buffer: min size reuse\n");
|
||||||
s_vpr_h(inst->sid, "dpb buffer: %d %d %d\n",
|
s_vpr_h(inst->sid, "dpb buffer: %d %d %d\n",
|
||||||
inst->buffers.bin.min_count,
|
inst->buffers.dpb.min_count,
|
||||||
inst->buffers.bin.size,
|
inst->buffers.dpb.size,
|
||||||
inst->buffers.bin.reuse);
|
inst->buffers.dpb.reuse);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -1519,11 +1519,11 @@ int msm_vdec_streamon_output(struct msm_vidc_inst *inst)
|
|||||||
if (rc)
|
if (rc)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
rc = msm_vdec_queue_output_internal_buffers(inst);
|
rc = msm_vidc_session_streamon(inst, OUTPUT_PORT);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
rc = msm_vidc_session_streamon(inst, OUTPUT_PORT);
|
rc = msm_vdec_queue_output_internal_buffers(inst);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@@ -1704,6 +1704,10 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
|
|||||||
} else if (f->type == OUTPUT_MPLANE) {
|
} else if (f->type == OUTPUT_MPLANE) {
|
||||||
fmt = &inst->fmts[OUTPUT_PORT];
|
fmt = &inst->fmts[OUTPUT_PORT];
|
||||||
fmt->type = OUTPUT_MPLANE;
|
fmt->type = OUTPUT_MPLANE;
|
||||||
|
if (inst->vb2q[INPUT_PORT].streaming) {
|
||||||
|
f->fmt.pix_mp.height = fmt->fmt.pix_mp.height;
|
||||||
|
f->fmt.pix_mp.width = fmt->fmt.pix_mp.width;
|
||||||
|
}
|
||||||
fmt->fmt.pix_mp.pixelformat = f->fmt.pix_mp.pixelformat;
|
fmt->fmt.pix_mp.pixelformat = f->fmt.pix_mp.pixelformat;
|
||||||
fmt->fmt.pix_mp.width = VENUS_Y_STRIDE(
|
fmt->fmt.pix_mp.width = VENUS_Y_STRIDE(
|
||||||
v4l2_colorformat_to_media(
|
v4l2_colorformat_to_media(
|
||||||
@@ -1718,8 +1722,10 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
|
|||||||
fmt->fmt.pix_mp.width;
|
fmt->fmt.pix_mp.width;
|
||||||
fmt->fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core,
|
fmt->fmt.pix_mp.plane_fmt[0].sizeimage = call_session_op(core,
|
||||||
buffer_size, inst, MSM_VIDC_BUF_OUTPUT);
|
buffer_size, inst, MSM_VIDC_BUF_OUTPUT);
|
||||||
inst->buffers.output.min_count = call_session_op(core,
|
|
||||||
min_count, inst, MSM_VIDC_BUF_OUTPUT);
|
if (!inst->vb2q[INPUT_PORT].streaming)
|
||||||
|
inst->buffers.output.min_count = call_session_op(core,
|
||||||
|
min_count, inst, MSM_VIDC_BUF_OUTPUT);
|
||||||
inst->buffers.output.extra_count = call_session_op(core,
|
inst->buffers.output.extra_count = call_session_op(core,
|
||||||
extra_count, inst, MSM_VIDC_BUF_OUTPUT);
|
extra_count, inst, MSM_VIDC_BUF_OUTPUT);
|
||||||
if (inst->buffers.output.actual_count <
|
if (inst->buffers.output.actual_count <
|
||||||
@@ -1731,7 +1737,8 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
|
|||||||
}
|
}
|
||||||
inst->buffers.output.size =
|
inst->buffers.output.size =
|
||||||
fmt->fmt.pix_mp.plane_fmt[0].sizeimage;
|
fmt->fmt.pix_mp.plane_fmt[0].sizeimage;
|
||||||
|
inst->capabilities->cap[PIX_FMTS].value =
|
||||||
|
v4l2_colorformat_to_driver(f->fmt.pix_mp.pixelformat, __func__);
|
||||||
//rc = msm_vidc_check_session_supported(inst);
|
//rc = msm_vidc_check_session_supported(inst);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_invalid_fmt;
|
goto err_invalid_fmt;
|
||||||
@@ -1982,14 +1989,13 @@ int msm_vdec_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
u32 codecs = core->capabilities[DEC_CODECS].value;
|
u32 codecs = core->capabilities[DEC_CODECS].value;
|
||||||
|
|
||||||
while (codecs) {
|
while (codecs) {
|
||||||
if (idx > 31)
|
if (i > 31)
|
||||||
break;
|
break;
|
||||||
if (codecs & BIT(i)) {
|
if (codecs & BIT(i)) {
|
||||||
array[idx] = codecs & BIT(i);
|
array[idx] = codecs & BIT(i);
|
||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
codecs >>= 1;
|
|
||||||
}
|
}
|
||||||
f->pixelformat = v4l2_codec_from_driver(array[f->index],
|
f->pixelformat = v4l2_codec_from_driver(array[f->index],
|
||||||
__func__);
|
__func__);
|
||||||
@@ -2001,7 +2007,7 @@ int msm_vdec_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
u32 formats = inst->capabilities->cap[PIX_FMTS].step_or_mask;
|
u32 formats = inst->capabilities->cap[PIX_FMTS].step_or_mask;
|
||||||
|
|
||||||
while (formats) {
|
while (formats) {
|
||||||
if (idx > 31)
|
if (i > 31)
|
||||||
break;
|
break;
|
||||||
if (formats & BIT(i)) {
|
if (formats & BIT(i)) {
|
||||||
if (msm_vdec_check_colorformat_supported(inst,
|
if (msm_vdec_check_colorformat_supported(inst,
|
||||||
@@ -2011,7 +2017,6 @@ int msm_vdec_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
formats >>= 1;
|
|
||||||
}
|
}
|
||||||
f->pixelformat = v4l2_colorformat_from_driver(array[f->index],
|
f->pixelformat = v4l2_colorformat_from_driver(array[f->index],
|
||||||
__func__);
|
__func__);
|
||||||
@@ -2028,8 +2033,9 @@ int msm_vdec_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
}
|
}
|
||||||
memset(f->reserved, 0, sizeof(f->reserved));
|
memset(f->reserved, 0, sizeof(f->reserved));
|
||||||
|
|
||||||
s_vpr_h(inst->sid, "%s: index %d, %s : %#x, flags %#x\n",
|
s_vpr_h(inst->sid, "%s: index %d, %s : %#x, flags %#x, driver colorfmt %#x\n",
|
||||||
__func__, f->index, f->description, f->pixelformat, f->flags);
|
__func__, f->index, f->description, f->pixelformat, f->flags,
|
||||||
|
v4l2_colorformat_to_driver(f->pixelformat, __func__));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1463,14 +1463,13 @@ int msm_venc_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
u32 codecs = core->capabilities[DEC_CODECS].value;
|
u32 codecs = core->capabilities[DEC_CODECS].value;
|
||||||
|
|
||||||
while (codecs) {
|
while (codecs) {
|
||||||
if (idx > 31)
|
if (i > 31)
|
||||||
break;
|
break;
|
||||||
if (codecs & BIT(i)) {
|
if (codecs & BIT(i)) {
|
||||||
array[idx] = codecs & BIT(i);
|
array[idx] = codecs & BIT(i);
|
||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
codecs >>= 1;
|
|
||||||
}
|
}
|
||||||
f->pixelformat = v4l2_codec_from_driver(array[f->index],
|
f->pixelformat = v4l2_codec_from_driver(array[f->index],
|
||||||
__func__);
|
__func__);
|
||||||
@@ -1489,7 +1488,6 @@ int msm_venc_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
formats >>= 1;
|
|
||||||
}
|
}
|
||||||
f->pixelformat = v4l2_colorformat_from_driver(array[f->index],
|
f->pixelformat = v4l2_colorformat_from_driver(array[f->index],
|
||||||
__func__);
|
__func__);
|
||||||
@@ -1506,8 +1504,9 @@ int msm_venc_enum_fmt(struct msm_vidc_inst *inst, struct v4l2_fmtdesc *f)
|
|||||||
}
|
}
|
||||||
memset(f->reserved, 0, sizeof(f->reserved));
|
memset(f->reserved, 0, sizeof(f->reserved));
|
||||||
|
|
||||||
s_vpr_h(inst->sid, "%s: index %d, %s : %#x, flags %#x\n",
|
s_vpr_h(inst->sid, "%s: index %d, %s : %#x, flags %#x, driver colorfmt %#x\n",
|
||||||
__func__, f->index, f->description, f->pixelformat, f->flags);
|
__func__, f->index, f->description, f->pixelformat, f->flags,
|
||||||
|
v4l2_colorformat_to_driver(f->pixelformat, __func__));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1707,8 +1707,11 @@ int msm_vidc_create_internal_buffers(struct msm_vidc_inst *inst,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < buffers->min_count; i++)
|
for (i = 0; i < buffers->min_count; i++) {
|
||||||
rc = msm_vidc_create_internal_buffer(inst, buffer_type, i);
|
rc = msm_vidc_create_internal_buffer(inst, buffer_type, i);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user