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

Commit 2542bca0 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 meta-data buffer size check for decoder pull mode"

parents 759f5a97 848c587d
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -252,7 +252,8 @@ int mpq_streambuffer_pkt_write(
		packet->user_data_len;

	/* Make sure enough space available for packet header */
	if (dvb_ringbuffer_free(&sbuff->packet_data) < len) {
	if (dvb_ringbuffer_free(&sbuff->packet_data) <
		(len + DVB_RINGBUFFER_PKTHDRSIZE)) {
		spin_unlock(&sbuff->packet_data.lock);
		return -ENOSPC;
	}
@@ -727,3 +728,27 @@ int mpq_streambuffer_get_data_rw_offset(
	return 0;
}
EXPORT_SYMBOL(mpq_streambuffer_get_data_rw_offset);

ssize_t mpq_streambuffer_metadata_free(struct mpq_streambuffer *sbuff)
{
	ssize_t free;

	if (NULL == sbuff)
		return -EINVAL;

	spin_lock(&sbuff->packet_data.lock);

	/* check if buffer was released */
	if (sbuff->packet_data.error == -ENODEV) {
		spin_unlock(&sbuff->packet_data.lock);
		return -ENODEV;
	}

	free = dvb_ringbuffer_free(&sbuff->packet_data);

	spin_unlock(&sbuff->packet_data.lock);

	return free;
}
EXPORT_SYMBOL(mpq_streambuffer_metadata_free);
+12 −6
Original line number Diff line number Diff line
@@ -59,12 +59,13 @@
 */
#define VIDEO_NUM_OF_PES_PACKETS			500

#define VIDEO_META_DATA_BUFFER_SIZE              \
	(VIDEO_NUM_OF_PES_PACKETS *                  \
#define VIDEO_META_DATA_PACKET_SIZE	\
	(DVB_RINGBUFFER_PKTHDRSIZE +	\
		sizeof(struct mpq_streambuffer_packet_header) + \
	   sizeof(struct mpq_adapter_video_meta_data)))
		sizeof(struct mpq_adapter_video_meta_data))

#define VIDEO_META_DATA_BUFFER_SIZE	\
	(VIDEO_NUM_OF_PES_PACKETS * VIDEO_META_DATA_PACKET_SIZE)

/* Number of demux devices, has default of linux configuration */
static int mpq_demux_device_num = CONFIG_DVB_MPQ_NUM_DMX_DEVICES;
@@ -1798,7 +1799,12 @@ static inline int mpq_dmx_check_decoder_fullness(
	struct mpq_streambuffer *sbuff,
	size_t required_space)
{
	u32 free = mpq_streambuffer_data_free(sbuff);
	ssize_t free = mpq_streambuffer_data_free(sbuff);
	ssize_t free_meta = mpq_streambuffer_metadata_free(sbuff);

	/* Verify meta-data buffer can contain at least 1 packet */
	if (free_meta < VIDEO_META_DATA_PACKET_SIZE)
		return 0;

	/*
	 * For linear buffers, verify there's enough space for this TSP
+7 −0
Original line number Diff line number Diff line
@@ -441,5 +441,12 @@ int mpq_streambuffer_get_data_rw_offset(
	u32 *read_offset,
	u32 *write_offset);

/**
 * mpq_streambuffer_metadata_free - returns number of free bytes in the meta
 * data buffer, or error status.
 * @sbuff: the stream buffer object
 */
ssize_t mpq_streambuffer_metadata_free(struct mpq_streambuffer *sbuff);

#endif /* _MPQ_STREAM_BUFFER_H */