Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a741366f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "media: dvb: add support for extradata handling and trickmode play"

parents 10950faa 466a22af
Loading
Loading
Loading
Loading
+1127 −252

File changed.

Preview size limit exceeded, changes collapsed.

+49 −7
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#define MPQ_DBG_INFO  "mpq_video:%d "
#define MPQ_VID_DEC_NAME "mpq_vidc_dec"

#define TRICKMODE_SUPPORT

extern int mpq_debug;
enum {
	MPQ_ERR = 0x001,
@@ -28,7 +30,7 @@ enum {
#define dprintk(dbg_mask, fmt, arg...)    \
	do { \
		if (mpq_debug & dbg_mask) { \
			pr_debug(MPQ_DBG_INFO fmt, dbg_mask, ## arg); \
			printk(MPQ_DBG_INFO fmt, dbg_mask, ## arg); \
		} \
	} while (0)

@@ -51,13 +53,15 @@ enum {
#define MPQ_DVB_OUTPUT_BUF_SETUP_BIT	0x00000020
#define MPQ_DVB_INPUT_STREAMON_BIT		0x00000040
#define MPQ_DVB_OUTPUT_STREAMON_BIT		0x00000080
#define MPQ_DVB_FLUSH_DONE_BIT			0x00000100
#define MPQ_DVB_FLUSH_IN_PROGRESS_BIT	0x00000200
#define MPQ_DVB_EVENT_FLUSH_DONE_BIT		0x00000100
#define MPQ_DVB_INPUT_FLUSH_IN_PROGRESS_BIT	0x00000200
#define MPQ_DVB_OUTPUT_FLUSH_IN_PROGRESS_BIT	0x00000400

#define DEFAULT_INPUT_BUF_SIZE	        (1024*1024)
#define DEFAULT_INPUT_BUF_NUM		16

#define MPQ_VID_DEC_NAME "mpq_vidc_dec"
#define EXTRADATA_HANDLING
#define EXTRADATA_IDX(__num_planes) (__num_planes - 1)

enum {
@@ -71,6 +75,11 @@ enum {
	INPUT_MODE_RING
};

enum {
	MPQ_INPUT_BUFFER_FREE,
	MPQ_INPUT_BUFFER_IN_USE
};

enum {
	MPQ_MSG_OUTPUT_BUFFER_DONE,
	MPQ_MSG_VIDC_EVENT
@@ -99,7 +108,16 @@ struct mpq_msg_q_msg {
	struct list_head	list;
	u32			msg_type;
};
#ifdef EXTRADATA_HANDLING

struct mpq_pkt_msg {
	struct list_head	list;
	int	ion_fd;
	u32		offset;
	u32		len;
	u64		pts;
};


struct mpq_extradata {
	int index;
	u32	uaddr;
@@ -108,9 +126,10 @@ struct mpq_extradata {
	int	ion_fd;
	int fd_offset;
};
#endif

struct buffer_info {
	int			index;
	int			state;
	enum v4l2_buf_type	buf_type;
	u32			size;
	u32			offset;
@@ -120,10 +139,11 @@ struct buffer_info {
	u32			dev_addr;
	u32			kernel_vaddr;
	u32			buf_offset;
	u64			pts;
	struct msm_smem     *handle;
#ifdef EXTRADATA_HANDLING

	struct mpq_extradata extradata;
#endif

};

struct mpq_ring_buffer {
@@ -162,13 +182,35 @@ struct v4l2_instance {
	u32				input_buf_count;
	u32				num_output_buffers;
	u32				output_buf_count;

	u32				flag;
	u32				state;
	u32		vidc_etb;
	u32		vidc_ebd;
	u32		vidc_ftb;
	u32		vidc_fbd;
	struct mutex flush_lock;

	struct msm_smem     *extradata_handle;
	u32					extradata_types;
	u32					extradata_size;
	struct extradata_buffer extradata;


	int		playback_mode;

};

struct mpq_dmx_source {
	struct mpq_streambuffer *stream_buffer;
	wait_queue_head_t		dmx_wait;
	int						device_id;
#ifdef DMX_NO_COPY
	struct video_data_buffer dmx_video_buf;
	struct list_head		pkt_queue;
	struct semaphore		pkt_sem;
	wait_queue_head_t		pkt_wait;
#endif
};

struct mpq_dvb_video_instance {
+2 −0
Original line number Diff line number Diff line
@@ -1051,6 +1051,8 @@ void *msm_vidc_smem_get_client(void *instance)

	return inst->mem_client;
}
EXPORT_SYMBOL(msm_vidc_smem_get_client);

static void *vidc_get_userptr(void *alloc_ctx, unsigned long vaddr,
				unsigned long size, int write)
{
+39 −0
Original line number Diff line number Diff line
@@ -30,6 +30,25 @@
#include <time.h>
#endif

#define V4L2_MPEG_VIDC_EXTRADATA_MB_QUANTIZATION_BIT	0x00000001
#define V4L2_MPEG_VIDC_EXTRADATA_INTERLACE_VIDEO_BIT	0x00000002
#define V4L2_MPEG_VIDC_EXTRADATA_VC1_FRAMEDISP_BIT		0x00000004
#define V4L2_MPEG_VIDC_EXTRADATA_VC1_SEQDISP_BIT		0x00000008
#define V4L2_MPEG_VIDC_EXTRADATA_TIMESTAMP_BIT			0x00000010
#define V4L2_MPEG_VIDC_EXTRADATA_S3D_FRAME_PACKING_BIT	0x00000020
#define V4L2_MPEG_VIDC_EXTRADATA_FRAME_RATE_BIT			0x00000040
#define V4L2_MPEG_VIDC_EXTRADATA_PANSCAN_WINDOW_BIT		0x00000080
#define V4L2_MPEG_VIDC_EXTRADATA_RECOVERY_POINT_SEI_BIT	0x00000100
#define V4L2_MPEG_VIDC_EXTRADATA_CLOSED_CAPTION_UD_BIT	0x00000200
#define V4L2_MPEG_VIDC_EXTRADATA_AFD_UD_BIT 0x00000400
#define V4L2_MPEG_VIDC_EXTRADATA_MULTISLICE_INFO_BIT	0x00000800
#define V4L2_MPEG_VIDC_EXTRADATA_NUM_CONCEALED_MB_BIT	0x00001000
#define V4L2_MPEG_VIDC_EXTRADATA_METADATA_FILLER_BIT	0x00002000
#define V4L2_MPEG_VIDC_INDEX_EXTRADATA_INPUT_CROP_BIT	0x00004000
#define V4L2_MPEG_VIDC_INDEX_EXTRADATA_DIGITAL_ZOOM_BIT	0x00008000
#define V4L2_MPEG_VIDC_INDEX_EXTRADATA_ASPECT_RATIO_BIT	0x00010000
#define V4L2_MPEG_VIDC_EXTRADATA_MPEG2_SEQDISP_BIT		0x00020000

typedef enum {
	VIDEO_FORMAT_4_3,     /* Select 4:3 format */
	VIDEO_FORMAT_16_9,    /* Select 16:9 format. */
@@ -68,6 +87,12 @@ enum video_out_format_t {
	VIDEO_YUV_FORMAT_TILE_4x2
};

enum video_playback_mode_t {
	VIDEO_PLAYBACK_NORMAL = 0,
	VIDEO_PLAYBACK_TRICKMODE_COARSE = 1,
	VIDEO_PLAYBACK_TRICKMODE_SMOOTH = 2
};

typedef struct {
	int w;
	int h;
@@ -112,6 +137,9 @@ typedef enum {
#define VIDEO_CMD_CLEAR_INPUT_BUFFER  (18)
#define VIDEO_CMD_CLEAR_OUTPUT_BUFFER (19)
#define VIDEO_CMD_SET_BUFFER_COUNT    (20)
#define VIDEO_CMD_SET_EXTRADATA_TYPES  (21)
#define VIDEO_CMD_SET_EXTRADATA_BUFFER (22)
#define VIDEO_CMD_SET_PLAYBACK_MODE		(23)

/* Flags for VIDEO_CMD_FREEZE */
#define VIDEO_CMD_FREEZE_TO_BLACK	(1 << 0)
@@ -147,6 +175,7 @@ struct video_buffer_req {
	unsigned int num_output_buffers; /* Number of Output Buffers */
	struct video_buffer_prop input_buf_prop; /* Input Buffer Properties */
	struct video_buffer_prop output_buf_prop; /* Output Buffer Prop */
	size_t	extradata_size;
};

enum scan_format {
@@ -168,6 +197,13 @@ struct video_data_buffer {
	enum scan_format interlaced_format;
};

struct extradata_buffer {
	void __user	*bufferaddr;
	size_t buffer_len;
	int	ion_fd;
	size_t offset;
};

struct video_h264_mv {
	size_t size;
	int count;
@@ -213,6 +249,9 @@ struct video_command {
			struct video_data_buffer buffer; /* Buffer Details */
			struct video_mv_buff_size mv_buffer_req;
			struct video_h264_mv mv_buffer_prop;
			unsigned int extradata_type;
			struct extradata_buffer extradata_buffer;
			enum video_playback_mode_t video_mode;
		};

		struct {