typedef struct {
uint32_t api_index;
uint32_t ctx_index;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
int32_t buffer_size;
} __attribute__((packed)) IOCTL_Data;
#define IOCTL_RW(CMD) (_IOWR(BRILLCODEC_KEY, CMD, IOCTL_Data))
#define CODEC_META_DATA_SIZE 256
-#define GET_OFFSET(buffer) ((uintptr_t)buffer - (uintptr_t)device_mem)
+#define GET_OFFSET32(buffer) ((uint32_t)((uintptr_t)buffer - (uintptr_t)device_mem))
+#define GET_OFFSET64(buffer) ((uint64_t)((uintptr_t)buffer - (uintptr_t)device_mem))
#define SMALLDATA 0
#define OFFSET_PICTURE_BUFFER 0x100
static int
invoke_device_api(int fd, int32_t ctx_index, int32_t api_index,
- uintptr_t *mem_offset, int32_t buffer_size)
+ uint32_t *mem_offset, int32_t buffer_size)
{
GST_DEBUG (" >> Enter");
IOCTL_Data ioctl_data = { 0, };
ret = ioctl (fd, IOCTL_RW(IOCTL_CMD_SECURE_BUFFER), &data);
- *buffer = (gpointer)(device_mem + data.mem_offset);
- GST_DEBUG ("device_mem %p, offset_size 0x%"PRIXPTR, device_mem, data.mem_offset);
+ *buffer = (gpointer)(device_mem + (uintptr_t)data.mem_offset);
+ GST_DEBUG ("device_mem %p, offset_size %u", device_mem, data.mem_offset);
GST_DEBUG (" >> Leave");
return ret;
{
GST_DEBUG (" >> Enter");
int ret;
- uint32_t offset = start - device_mem;
+ uint32_t offset = GET_OFFSET32(start);
GST_DEBUG ("release device_mem start: %p, offset: 0x%x", start, offset);
ret = ioctl (fd, IOCTL_RW(IOCTL_CMD_RELEASE_BUFFER), &offset);
int opened = 0;
gpointer buffer = NULL;
int ret;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
GST_DEBUG (" >> Enter");
if ((ctx->index = get_context_index(dev->fd)) <= 0) {
codec_init_data_to (ctx, codec, buffer);
- mem_offset = GET_OFFSET(buffer);
+ mem_offset = GET_OFFSET32(buffer);
ret = invoke_device_api (dev->fd, ctx->index, CODEC_INIT, &mem_offset, SMALLDATA);
if (ret < 0) {
}
opened =
- codec_init_data_from (ctx, codec->media_type, device_mem + mem_offset);
+ codec_init_data_from (ctx, codec->media_type, device_mem + (uintptr_t)mem_offset);
if (opened < 0) {
GST_ERROR ("failed to open Context for %s", codec->name);
ctx->codec = codec;
}
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
GST_DEBUG (" >> Leave");
return opened;
CodecDevice *dev = marudec->dev;
int len = 0, ret = 0;
gpointer buffer = NULL;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
size_t size = sizeof(inbuf_size) + sizeof(idx) + sizeof(in_offset) + inbuf_size;
ret = secure_device_mem(dev->fd, ctx->index, size, &buffer);
decode_input->in_offset = in_offset;
memcpy(&decode_input->inbuf, inbuf, inbuf_size);
- mem_offset = GET_OFFSET(buffer);
-
+ mem_offset = GET_OFFSET32(buffer);
marudec->is_using_new_decode_api = (can_use_new_decode_api() && (ctx->video.pix_fmt != -1));
if (marudec->is_using_new_decode_api) {
int picture_size = gst_maru_avpicture_size (ctx->video.pix_fmt,
return -1;
}
- struct video_decode_output *decode_output = device_mem + mem_offset;
+ struct video_decode_output *decode_output = device_mem + (uintptr_t)mem_offset;
len = decode_output->len;
*have_data = decode_output->got_picture;
memcpy(&ctx->video, &decode_output->data, sizeof(VideoData));
if (len >= 0 && *have_data > 0 && marudec->is_using_new_decode_api) {
marudec->is_last_buffer = ret;
- marudec->mem_offset = mem_offset;
+ marudec->mem_offset = (int)mem_offset;
} else {
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
}
GST_DEBUG (" >> Leave");
{
GST_DEBUG (" >> enter");
// bool is_last_buffer = 0;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
CodecContext *ctx;
CodecDevice *dev;
GstMapInfo mapinfo;
gst_buffer_map (*buf, &mapinfo, GST_MAP_READWRITE);
if (marudec->is_using_new_decode_api) {
- memcpy (mapinfo.data, device_mem + mem_offset + OFFSET_PICTURE_BUFFER, size);
+ memcpy (mapinfo.data, device_mem + (uintptr_t)mem_offset + OFFSET_PICTURE_BUFFER, size);
} else {
- memcpy (mapinfo.data, device_mem + mem_offset, size);
+ memcpy (mapinfo.data, device_mem + (uintptr_t)mem_offset, size);
}
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
GST_DEBUG ("secured last buffer!! Use heap buffer");
/*
{
GST_DEBUG (" >> enter");
// bool is_last_buffer = 0;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
GstMaruDec *marudec;
CodecContext *ctx;
CodecDevice *dev;
buffer = g_malloc (size);
if (marudec->is_using_new_decode_api) {
- memcpy (buffer, device_mem + mem_offset + OFFSET_PICTURE_BUFFER, size);
+ memcpy (buffer, device_mem + (uintptr_t)mem_offset + OFFSET_PICTURE_BUFFER, size);
} else {
- memcpy (buffer, device_mem + mem_offset, size);
+ memcpy (buffer, device_mem + (uintptr_t)mem_offset, size);
}
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
GST_DEBUG ("secured last buffer!! Use heap buffer");
/* } else {
{
int len = 0, ret = 0;
gpointer buffer = NULL;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
size_t size = sizeof(inbuf_size) + sizeof(in_timestamp) + inbuf_size;
ret = secure_device_mem(dev->fd, ctx->index, size, &buffer);
memcpy(&encode_input->inbuf, inbuf, inbuf_size);
GST_DEBUG ("insize: %d, inpts: %lld", encode_input->inbuf_size,(long long) encode_input->in_timestamp);
- mem_offset = GET_OFFSET(buffer);
+ mem_offset = GET_OFFSET32(buffer);
ret = invoke_device_api(dev->fd, ctx->index, CODEC_ENCODE_VIDEO, &mem_offset, SMALLDATA);
return -1;
}
- GST_DEBUG ("encode_video. mem_offset = 0x%"PRIXPTR, mem_offset);
+ GST_DEBUG ("encode_video. mem_offset = 0x%x", mem_offset);
- struct video_encode_output *encode_output = device_mem + mem_offset;
+ struct video_encode_output *encode_output = device_mem + (uintptr_t)mem_offset;
len = encode_output->len;
*coded_frame = encode_output->coded_frame;
*is_keyframe = encode_output->key_frame;
memcpy(outbuf, &encode_output->data, len);
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
return len;
}
{
int len = 0, ret = 0;
gpointer buffer = NULL;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
size_t size = sizeof(inbuf_size) + inbuf_size;
ret = secure_device_mem(dev->fd, ctx->index, size, &buffer);
decode_input->inbuf_size = inbuf_size;
memcpy(&decode_input->inbuf, inbuf, inbuf_size);
- mem_offset = GET_OFFSET(buffer);
+ mem_offset = GET_OFFSET32(buffer);
ret = invoke_device_api(dev->fd, ctx->index, CODEC_DECODE_AUDIO, &mem_offset, SMALLDATA);
}
GST_DEBUG ("decode_audio. ctx_id: %d, buffer = 0x%p",
- ctx->index, device_mem + mem_offset);
+ ctx->index, device_mem + (uintptr_t)mem_offset);
- struct audio_decode_output *decode_output = device_mem + mem_offset;
+ struct audio_decode_output *decode_output = device_mem + (uintptr_t)mem_offset;
len = decode_output->len;
*have_data = decode_output->got_frame;
memcpy(&ctx->audio, &decode_output->data, sizeof(AudioData));
- memcpy (samples, device_mem + mem_offset + OFFSET_PICTURE_BUFFER, len);
+ memcpy (samples, device_mem + (uintptr_t)mem_offset + OFFSET_PICTURE_BUFFER, len);
GST_DEBUG ("decode_audio. sample_fmt %d sample_rate %d, channels %d, ch_layout %" PRIu64 ", len %d",
ctx->audio.sample_fmt, ctx->audio.sample_rate, ctx->audio.channels,
ctx->audio.channel_layout, len);
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
return len;
}
{
int len = 0, ret = 0;
gpointer buffer = NULL;
- uintptr_t mem_offset;
+ uint32_t mem_offset;
size_t size = sizeof(inbuf_size) + inbuf_size;
ret = secure_device_mem(dev->fd, ctx->index, inbuf_size, &buffer);
encode_input->inbuf_size = inbuf_size;
memcpy(&encode_input->inbuf, inbuf, inbuf_size);
- mem_offset = GET_OFFSET(buffer);
+ mem_offset = GET_OFFSET32(buffer);
ret = invoke_device_api(dev->fd, ctx->index, CODEC_ENCODE_AUDIO, &mem_offset, SMALLDATA);
return -1;
}
- GST_DEBUG ("encode_audio. mem_offset = 0x%"PRIXPTR, mem_offset);
+ GST_DEBUG ("encode_audio. mem_offset = 0x%x", mem_offset);
- struct audio_encode_output *encode_output = device_mem + mem_offset;
+ struct audio_encode_output *encode_output = device_mem + (uintptr_t)mem_offset;
len = encode_output->len;
if (len > 0) {
memcpy (outbuf, &encode_output->data, len);
GST_DEBUG ("encode_audio. len: %d", len);
- release_device_mem(dev->fd, device_mem + mem_offset);
+ release_device_mem(dev->fd, device_mem + (uintptr_t)mem_offset);
return len;
}
return NULL;
}
- elem = g_malloc(size);
+ elem = g_malloc (size);
//FIXME
//An elem variable should be deallocated, will be fixed.