@ -344,7 +344,7 @@ static int vidioc_g_fmt(struct file *file, void *priv, struct v4l2_format *f)
pix_mp - > num_planes = 2 ;
/* Set pixelformat to the format in which MFC
outputs the decoded frame */
pix_mp - > pixelformat = V4L2_PIX_FMT_NV12MT ;
pix_mp - > pixelformat = ctx - > dst_fmt - > fourcc ;
pix_mp - > plane_fmt [ 0 ] . bytesperline = ctx - > buf_width ;
pix_mp - > plane_fmt [ 0 ] . sizeimage = ctx - > luma_size ;
pix_mp - > plane_fmt [ 1 ] . bytesperline = ctx - > buf_width ;
@ -382,10 +382,20 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f)
mfc_err ( " Unsupported format for source. \n " ) ;
return - EINVAL ;
}
if ( fmt - > codec_mode = = S5P_FIMV_CODEC_NONE ) {
mfc_err ( " Unknown codec \n " ) ;
return - EINVAL ;
}
if ( ! IS_MFCV6_PLUS ( dev ) & & ( fmt - > fourcc = = V4L2_PIX_FMT_VP8 ) ) {
mfc_err ( " Not supported format. \n " ) ;
return - EINVAL ;
}
if ( ! IS_MFCV6_PLUS ( dev ) ) {
if ( fmt - > fourcc = = V4L2_PIX_FMT_VP8 ) {
mfc_err ( " Not supported format. \n " ) ;
return - EINVAL ;
}
}
} else if ( f - > type = = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE ) {
fmt = find_format ( f , MFC_FMT_RAW ) ;
if ( ! fmt ) {
@ -412,7 +422,6 @@ static int vidioc_s_fmt(struct file *file, void *priv, struct v4l2_format *f)
struct s5p_mfc_dev * dev = video_drvdata ( file ) ;
struct s5p_mfc_ctx * ctx = fh_to_ctx ( priv ) ;
int ret = 0 ;
struct s5p_mfc_fmt * fmt ;
struct v4l2_pix_format_mplane * pix_mp ;
mfc_debug_enter ( ) ;
@ -426,55 +435,32 @@ static int vidioc_s_fmt(struct file *file, void *priv, struct v4l2_format *f)
goto out ;
}
if ( f - > type = = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE ) {
fmt = find_format ( f , MFC_FMT_RAW ) ;
if ( ! fmt ) {
mfc_err ( " Unsupported format for source. \n " ) ;
return - EINVAL ;
}
if ( ! IS_MFCV6_PLUS ( dev ) & &
( fmt - > fourcc ! = V4L2_PIX_FMT_NV12MT ) ) {
mfc_err ( " Not supported format. \n " ) ;
return - EINVAL ;
} else if ( IS_MFCV6_PLUS ( dev ) & &
( fmt - > fourcc = = V4L2_PIX_FMT_NV12MT ) ) {
mfc_err ( " Not supported format. \n " ) ;
return - EINVAL ;
}
ctx - > dst_fmt = fmt ;
mfc_debug_leave ( ) ;
return ret ;
} else if ( f - > type ! = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ) {
mfc_err ( " Wrong type error for S_FMT : %d " , f - > type ) ;
return - EINVAL ;
}
fmt = find_format ( f , MFC_FMT_DEC ) ;
if ( ! fmt | | fmt - > codec_mode = = S5P_MFC_CODEC_NONE ) {
mfc_err ( " Unknown codec \n " ) ;
ret = - EINVAL ;
/* dst_fmt is validated by call to vidioc_try_fmt */
ctx - > dst_fmt = find_format ( f , MFC_FMT_RAW ) ;
ret = 0 ;
goto out ;
}
if ( fmt - > type ! = MFC_FMT_DEC ) {
mfc_err ( " Wrong format selected, you should choose "
" format for decoding \n " ) ;
} else if ( f - > type = = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ) {
/* src_fmt is validated by call to vidioc_try_fmt */
ctx - > src_fmt = find_format ( f , MFC_FMT_DEC ) ;
ctx - > codec_mode = ctx - > src_fmt - > codec_mode ;
mfc_debug ( 2 , " The codec number is: %d \n " , ctx - > codec_mode ) ;
pix_mp - > height = 0 ;
pix_mp - > width = 0 ;
if ( pix_mp - > plane_fmt [ 0 ] . sizeimage )
ctx - > dec_src_buf_size = pix_mp - > plane_fmt [ 0 ] . sizeimage ;
else
pix_mp - > plane_fmt [ 0 ] . sizeimage = ctx - > dec_src_buf_size =
DEF_CPB_SIZE ;
pix_mp - > plane_fmt [ 0 ] . bytesperline = 0 ;
ctx - > state = MFCINST_INIT ;
ret = 0 ;
goto out ;
} else {
mfc_err ( " Wrong type error for S_FMT : %d " , f - > type ) ;
ret = - EINVAL ;
goto out ;
}
if ( ! IS_MFCV6_PLUS ( dev ) & & ( fmt - > fourcc = = V4L2_PIX_FMT_VP8 ) ) {
mfc_err ( " Not supported format. \n " ) ;
return - EINVAL ;
}
ctx - > src_fmt = fmt ;
ctx - > codec_mode = fmt - > codec_mode ;
mfc_debug ( 2 , " The codec number is: %d \n " , ctx - > codec_mode ) ;
pix_mp - > height = 0 ;
pix_mp - > width = 0 ;
if ( pix_mp - > plane_fmt [ 0 ] . sizeimage )
ctx - > dec_src_buf_size = pix_mp - > plane_fmt [ 0 ] . sizeimage ;
else
pix_mp - > plane_fmt [ 0 ] . sizeimage = ctx - > dec_src_buf_size =
DEF_CPB_SIZE ;
pix_mp - > plane_fmt [ 0 ] . bytesperline = 0 ;
ctx - > state = MFCINST_INIT ;
out :
mfc_debug_leave ( ) ;
return ret ;