static void default_get_data(void *dst, void *src, size_t size)
{
memcpy(dst, src, size);
-}
-static void default_release(void *opaque)
-{
- g_free(opaque);
+ g_free(src);
}
-static DataHandler default_data_handler = {
- .get_data = default_get_data,
- .release = default_release,
-};
-
// queue
static void *brillcodec_store_inbuf(uint8_t *mem_base,
CodecParam *ioparam)
}
static void brillcodec_push_writequeue(MaruBrillCodecState *s, void* opaque,
- size_t data_size, int ctx_id,
- DataHandler *handler)
+ size_t data_size, int ctx_id,
+ void (*get_data)(void *, void *, size_t))
{
DeviceMemEntry *elem = NULL;
elem = g_malloc0(sizeof(DeviceMemEntry));
elem->data_size = data_size;
elem->ctx_id = ctx_id;
- if (handler) {
- elem->handler = handler;
+ if (get_data) {
+ elem->get_data = get_data;
} else {
- elem->handler = &default_data_handler;
+ elem->get_data = default_get_data;
}
qemu_mutex_lock(&s->context_queue_mutex);
// check corrupted mem_offset
if (mem_offset < CODEC_MEM_SIZE) {
- elem->handler->get_data(s->vaddr + mem_offset, elem->opaque, elem->data_size);
- elem->handler->release(elem->opaque);
+ elem->get_data(s->vaddr + mem_offset, elem->opaque, elem->data_size);
} else {
TRACE("mem_offset is corrupted!!\n");
}
// video decode data handler
// FIXME: ignore "size" now...
-static void copy_decode_video_data(void *dst, void *opaque, size_t dummy)
+static void copy_video_decode_data(void *dst, void *opaque, size_t dummy)
{
DataContainer *dc = (DataContainer *)opaque;
CodecContext *context = (CodecContext *)dc->avctx->opaque;
default_get_picture(dst + dc->picture_buffer_offset, dc->frame, dc->avctx->pix_fmt);
}
}
-}
-static void release(void *opaque) {
- g_free(opaque);
+ g_free(dc);
}
-static DataHandler video_decode_data_handler = {
- .get_data = copy_decode_video_data,
- .release = release,
-};
-
-static void copy_encode_video_data(void *dst, void *opaque, size_t dummy)
+static void copy_video_encode_data(void *dst, void *opaque, size_t dummy)
{
DataContainer *dc = (DataContainer *)opaque;
struct video_encode_output *encode_output =
g_free(dc->avpkt->data);
g_free(dc->avpkt);
+ g_free(dc);
}
-static DataHandler video_encode_data_handler = {
- .get_data = copy_encode_video_data,
- .release = release,
-};
-
static uint32_t parse_and_decode_video(AVCodecContext *avctx, AVFrame *picture,
AVCodecParserContext *pctx, int ctx_id,
AVPacket *packet, uint32_t *got_picture,
dc->frame = frame;
}
- brillcodec_push_writequeue(s, dc, 0, ctx_id, &video_decode_data_handler);
+ brillcodec_push_writequeue(s, dc, 0, ctx_id, copy_video_decode_data);
TRACE("leave: %s\n", __func__);
dc->avctx = CONTEXT(s, ctx_id)->avctx;
dc->frame = CONTEXT(s, ctx_id)->frame;
- brillcodec_push_writequeue(s, dc, 0, ctx_id, &video_decode_data_handler);
+ brillcodec_push_writequeue(s, dc, 0, ctx_id, copy_video_decode_data);
TRACE("leave: %s\n", __func__);
dc->avctx = avctx;
dc->avpkt = avpkt;
- brillcodec_push_writequeue(s, dc, 0, ctx_id, &video_encode_data_handler);
+ brillcodec_push_writequeue(s, dc, 0, ctx_id, copy_video_encode_data);
TRACE("leave: %s\n", __func__);
return true;
}
// FIXME: ignore "size" now...
-static void copy_decode_audio_data(void *dst, void *opaque, size_t dummy)
+static void copy_audio_decode_data(void *dst, void *opaque, size_t dummy)
{
DataContainer *dc = (DataContainer *)opaque;
av_free(dc->frame);
}
}
-}
-
-static DataHandler audio_decode_data_handler = {
- .get_data = copy_decode_audio_data,
- .release = release,
-};
+ g_free(dc);
+}
/*
* dc->resampled = resample_frame ? true : false;
dc->out_sample_fmt = out_sample_fmt;
dc->frame = resample_frame ? resample_frame : frame;
- brillcodec_push_writequeue(s, dc, 0, ctx_id, &audio_decode_data_handler);
+ brillcodec_push_writequeue(s, dc, 0, ctx_id, ©_audio_decode_data);
TRACE("leave: %s\n", __func__);
return true;