Skip to content

Commit

Permalink
media: hantro: Add core bits to support H264 decoding
Browse files Browse the repository at this point in the history
Add helpers and patch hantro_{drv,v4l2}.c to prepare addition of H264
decoding support.

Signed-off-by: Hertz Wong <hertz.wong@rock-chips.com>
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
  • Loading branch information
Hertz Wong authored and Mauro Carvalho Chehab committed Aug 19, 2019
1 parent 6c2eb77 commit a9471e2
Show file tree
Hide file tree
Showing 6 changed files with 762 additions and 1 deletion.
1 change: 1 addition & 0 deletions drivers/staging/media/hantro/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ hantro-vpu-y += \
rk3399_vpu_hw_mpeg2_dec.o \
rk3399_vpu_hw_vp8_dec.o \
hantro_jpeg.o \
hantro_h264.o \
hantro_mpeg2.o \
hantro_vp8.o

Expand Down
9 changes: 8 additions & 1 deletion drivers/staging/media/hantro/hantro.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
#define VP8_MB_WIDTH(w) DIV_ROUND_UP(w, VP8_MB_DIM)
#define VP8_MB_HEIGHT(h) DIV_ROUND_UP(h, VP8_MB_DIM)

#define H264_MB_DIM 16
#define H264_MB_WIDTH(w) DIV_ROUND_UP(w, H264_MB_DIM)
#define H264_MB_HEIGHT(h) DIV_ROUND_UP(h, H264_MB_DIM)

#define MPEG2_MB_DIM 16
#define MPEG2_MB_WIDTH(w) DIV_ROUND_UP(w, MPEG2_MB_DIM)
#define MPEG2_MB_HEIGHT(h) DIV_ROUND_UP(h, MPEG2_MB_DIM)
Expand All @@ -43,9 +47,9 @@ struct hantro_codec_ops;

#define HANTRO_JPEG_ENCODER BIT(0)
#define HANTRO_ENCODERS 0x0000ffff

#define HANTRO_MPEG2_DECODER BIT(16)
#define HANTRO_VP8_DECODER BIT(17)
#define HANTRO_H264_DECODER BIT(18)
#define HANTRO_DECODERS 0xffff0000

/**
Expand Down Expand Up @@ -102,12 +106,14 @@ struct hantro_variant {
* enum hantro_codec_mode - codec operating mode.
* @HANTRO_MODE_NONE: No operating mode. Used for RAW video formats.
* @HANTRO_MODE_JPEG_ENC: JPEG encoder.
* @HANTRO_MODE_H264_DEC: H264 decoder.
* @HANTRO_MODE_MPEG2_DEC: MPEG-2 decoder.
* @HANTRO_MODE_VP8_DEC: VP8 decoder.
*/
enum hantro_codec_mode {
HANTRO_MODE_NONE = -1,
HANTRO_MODE_JPEG_ENC,
HANTRO_MODE_H264_DEC,
HANTRO_MODE_MPEG2_DEC,
HANTRO_MODE_VP8_DEC,
};
Expand Down Expand Up @@ -246,6 +252,7 @@ struct hantro_ctx {

/* Specific for particular codec modes. */
union {
struct hantro_h264_dec_hw_ctx h264_dec;
struct hantro_jpeg_enc_hw_ctx jpeg_enc;
struct hantro_mpeg2_dec_hw_ctx mpeg2_dec;
struct hantro_vp8_dec_hw_ctx vp8_dec;
Expand Down
42 changes: 42 additions & 0 deletions drivers/staging/media/hantro/hantro_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,48 @@ static const struct hantro_ctrl controls[] = {
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_SPS,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_PPS,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE,
.min = V4L2_MPEG_VIDEO_H264_DECODE_MODE_FRAME_BASED,
.def = V4L2_MPEG_VIDEO_H264_DECODE_MODE_FRAME_BASED,
.max = V4L2_MPEG_VIDEO_H264_DECODE_MODE_FRAME_BASED,
},
}, {
.codec = HANTRO_H264_DECODER,
.cfg = {
.id = V4L2_CID_MPEG_VIDEO_H264_START_CODE,
.min = V4L2_MPEG_VIDEO_H264_START_CODE_ANNEX_B,
.def = V4L2_MPEG_VIDEO_H264_START_CODE_ANNEX_B,
.max = V4L2_MPEG_VIDEO_H264_START_CODE_ANNEX_B,
},
}, {
},
};

Expand Down
Loading

0 comments on commit a9471e2

Please sign in to comment.