clean-up source 64/26164/3
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Fri, 8 Aug 2014 06:59:30 +0000 (15:59 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 19 Aug 2014 07:29:16 +0000 (16:29 +0900)
Remove unnecessary assignment.
Remove unnecessary structure.
Remove unnecessary ioctl.

Change-Id: I9ce0ce71537e4c7b6738a19d9fb9717a3f170957
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
src/gstmaru.c
src/gstmaru.h
src/gstmarudevice.c
src/gstmaruinterface.c

index e6a3ccfa09ac37edf6539386099975198149c44f..ff5c52df98e3d0550dbb18e02d80a95dd36a2b44 100644 (file)
@@ -49,10 +49,12 @@ static GList *codec_element = NULL;
 static gboolean codec_element_init = FALSE;
 static GMutex gst_maru_mutex;
 
+int device_version;
+
 static gboolean
 gst_maru_codec_element_init ()
 {
-  int fd = 0, version = 0;
+  int fd = 0;
   int i, elem_cnt = 0;
   uint32_t data_length = 0;
   void *buffer = MAP_FAILED;
@@ -69,12 +71,17 @@ gst_maru_codec_element_init ()
     return FALSE;
   }
 
-  ioctl (fd, CODEC_CMD_GET_VERSION, &version);
-  if (version != CODEC_VER) {
-    GST_LOG ("version conflict between device: %d, plugin: %d", version, CODEC_VER);
+  ioctl (fd, CODEC_CMD_GET_VERSION, &device_version);
+  GST_LOG ("pluigin version is [%u]", CODEC_VER);
+  GST_LOG ("device version is [%u]", device_version);
+  // FIXME: check version
+/*
+  if (device_version < CODEC_VER) {
+    GST_ERROR ("plugin version [%u] is not support device version [%u]", CODEC_VER, device_version);
     close (fd);
     return FALSE;
   }
+*/
 
   buffer = mmap (NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
   if (buffer == MAP_FAILED) {
index b9d9f83e55fb5e13bbea0f3cb026fef689cbafcd..dbb540cce18f7cf1475a5656374e8d43226fc8eb 100644 (file)
@@ -48,6 +48,8 @@ GST_DEBUG_CATEGORY_EXTERN (maru_debug);
 
 G_BEGIN_DECLS
 
+extern int device_version;
+
 enum codec_log_level {
   ERR,
   WARN,
@@ -58,6 +60,8 @@ enum codec_log_level {
 #define CODEC_DEV   "/dev/brillcodec"
 #define CODEC_VER   2
 
+#define CHECK_VERSION(version)        (device_version > version)
+
 #define CODEC_LOG(level, fmt, ...) \
   do { \
     if (level <= INFO) \
@@ -75,22 +79,10 @@ enum codec_log_level {
 #define ROUND_UP_8(x) ROUND_UP_X(x, 3)
 #define DIV_ROUND_UP_X(v, x) (((v) + GEN_MASK(x)) >> (x))
 
-typedef struct _CodecIOParams {
-  int32_t   api_index;
-  int32_t   ctx_index;
-  uint32_t  mem_offset;
-} CodecIOParams;
-
-typedef struct _CodecDeviceMem {
-  uint32_t  index;
-  uint32_t  offset;
-} CodecDeviceMem;
-
 typedef struct _CodecDevice {
   int       fd;
   uint8_t   *buf;
   uint32_t  buf_size;
-  CodecDeviceMem mem_info;
 } CodecDevice;
 
 typedef struct _CodecElement {
index 70ff395583193b5d8c47087dd1cd947911e5d59b..5221397497251dc91da4d03ab62cf7d09d873c8c 100644 (file)
@@ -71,7 +71,6 @@ gst_maru_codec_device_open (CodecDevice *dev, int media_type)
   // FIXME
   dev->buf_size = CODEC_DEVICE_MEM_SIZE;
   GST_DEBUG ("mmap_size: %d", dev->buf_size);
-  dev->mem_info.index = dev->buf_size;
 
   // g_mutex_lock (&gst_avcodec_mutex);
   if (device_mem == MAP_FAILED) {
index 94ff2e37fd1591c1b57ad4e054b3624e0a371d6d..06fbaeeb5c973275ef9f89704052d36f301a08f8 100644 (file)
@@ -52,26 +52,56 @@ typedef struct _CodecBufferId {
   uint32_t  buffer_size;
 } CodecBufferId;
 
+typedef struct _CodecIOParams {
+  int32_t   api_index;
+  int32_t   ctx_index;
+  uint32_t  mem_offset;
+
+  CodecBufferId buffer_id;
+} CodecIOParams;
+
+
 #define CODEC_META_DATA_SIZE    256
 #define GET_OFFSET(buffer)      ((uint32_t)buffer - (uint32_t)device_mem)
 #define SMALLDATA               0
 
-static void
-_codec_invoke_qemu (int32_t ctx_index, int32_t api_index,
-                          uint32_t mem_offset, int fd)
+static int
+_codec_invoke_qemu(int32_t ctx_index, int32_t api_index,
+                          uint32_t mem_offset, int fd, CodecBufferId *buffer_id)
 {
   CodecIOParams ioparam = { 0 };
+  int ret;
 
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
 
   ioparam.api_index = api_index;
   ioparam.ctx_index = ctx_index;
   ioparam.mem_offset = mem_offset;
-  if (ioctl (fd, CODEC_CMD_INVOKE_API_AND_RELEASE_BUFFER, &ioparam) < 0) {
-    GST_ERROR ("failed to invoke codec APIs");
+
+  if (CHECK_VERSION(3)) {
+    if (buffer_id) {
+      ioparam.buffer_id.buffer_index = buffer_id->buffer_index;
+      ioparam.buffer_id.buffer_size = buffer_id->buffer_size;
+    }
+
+    ret = ioctl(fd, CODEC_CMD_INVOKE_API_AND_RELEASE_BUFFER, &ioparam);
+
+    if (buffer_id) {
+      buffer_id->buffer_index = ioparam.buffer_id.buffer_index;
+      buffer_id->buffer_size = ioparam.buffer_id.buffer_size;
+    }
+  } else {
+    if (ioctl(fd, CODEC_CMD_INVOKE_API_AND_RELEASE_BUFFER, &ioparam) < 0) {
+      return -1;
+    }
+    if (buffer_id) {
+      ret = ioctl(fd, CODEC_CMD_INVOKE_API_AND_RELEASE_BUFFER, buffer_id);
+    }
   }
 
   CODEC_LOG (DEBUG, "leave: %s\n", __func__);
+
+  return ret;
 }
 
 static int
@@ -127,24 +157,27 @@ GstFlowReturn
 codec_buffer_alloc_and_copy (GstPad *pad, guint64 offset, guint size,
                   GstCaps *caps, GstBuffer **buf)
 {
+  int ret = 0;
   struct mem_info info;
   CodecBufferId opaque;
-  int ret = 0;
   GstMaruDec *marudec;
+  CodecContext *ctx;
+  CodecDevice *dev;
 
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
 
   *buf = gst_buffer_new ();
 
   marudec = (GstMaruDec *)gst_pad_get_element_private(pad);
+  ctx = marudec->context;
+  dev = marudec->dev;
 
-  opaque.buffer_index = marudec->context->index;
+  opaque.buffer_index = ctx->index;
   opaque.buffer_size = size;
 
-  GST_DEBUG ("buffer_and_copy. ctx_id: %d", marudec->context->index);
-  _codec_invoke_qemu (marudec->context->index, CODEC_PICTURE_COPY, 0, marudec->dev->fd);
+  GST_DEBUG ("buffer_and_copy. ctx_id: %d", ctx->index);
 
-  ret = ioctl (marudec->dev->fd, CODEC_CMD_PUT_DATA_INTO_BUFFER, &opaque);
+  ret = _codec_invoke_qemu(ctx->index, CODEC_PICTURE_COPY, 0, dev->fd, &opaque);
 
   if (ret < 0) {
     GST_DEBUG ("failed to get available buffer");
@@ -156,7 +189,7 @@ codec_buffer_alloc_and_copy (GstPad *pad, guint64 offset, guint size,
     GST_BUFFER_FREE_FUNC (*buf) = g_free;
 
     memcpy (info.start, device_mem + opaque.buffer_size, size);
-    release_device_mem(marudec->dev->fd, device_mem + opaque.buffer_size);
+    release_device_mem(dev->fd, device_mem + opaque.buffer_size);
 
     GST_DEBUG ("secured last buffer!! Use heap buffer");
   } else {
@@ -188,6 +221,7 @@ codec_init (CodecContext *ctx, CodecElement *codec, CodecDevice *dev)
   int opened = 0;
   gpointer buffer = NULL;
   CodecBufferId opaque;
+  int ret;
 
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
 
@@ -207,14 +241,12 @@ codec_init (CodecContext *ctx, CodecElement *codec, CodecDevice *dev)
 
   codec_init_data_to (ctx, codec, buffer);
 
-  dev->mem_info.offset = GET_OFFSET(buffer);
-  _codec_invoke_qemu (ctx->index, CODEC_INIT, GET_OFFSET(buffer), dev->fd);
-
   opaque.buffer_index = ctx->index;
   opaque.buffer_size = SMALLDATA;
 
-  if (ioctl (dev->fd, CODEC_CMD_PUT_DATA_INTO_BUFFER, &opaque) < 0) {
-    GST_ERROR ("failed to accquire a memory block");
+  ret = _codec_invoke_qemu (ctx->index, CODEC_INIT, GET_OFFSET(buffer), dev->fd, &opaque);
+
+  if (ret < 0) {
     return -1;
   }
 
@@ -240,7 +272,7 @@ codec_deinit (CodecContext *ctx, CodecDevice *dev)
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
 
   GST_INFO ("close context %d", ctx->index);
-  _codec_invoke_qemu (ctx->index, CODEC_DEINIT, 0, dev->fd);
+  _codec_invoke_qemu (ctx->index, CODEC_DEINIT, 0, dev->fd, NULL);
 
   CODEC_LOG (DEBUG, "leave: %s\n", __func__);
 }
@@ -251,7 +283,7 @@ codec_flush_buffers (CodecContext *ctx, CodecDevice *dev)
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
 
   GST_DEBUG ("flush buffers of context: %d", ctx->index);
-  _codec_invoke_qemu (ctx->index, CODEC_FLUSH_BUFFERS, 0, dev->fd);
+  _codec_invoke_qemu (ctx->index, CODEC_FLUSH_BUFFERS, 0, dev->fd, NULL);
 
   CODEC_LOG (DEBUG, "leave: %s\n", __func__);
 }
@@ -275,14 +307,12 @@ codec_decode_video (CodecContext *ctx, uint8_t *in_buf, int in_size,
 
   codec_decode_video_data_to (in_size, idx, in_offset, in_buf, buffer);
 
-  dev->mem_info.offset = GET_OFFSET(buffer);
-  _codec_invoke_qemu (ctx->index, CODEC_DECODE_VIDEO, GET_OFFSET(buffer), dev->fd);
-
   opaque.buffer_index = ctx->index;
   opaque.buffer_size = SMALLDATA;
 
-  if (ioctl (dev->fd, CODEC_CMD_PUT_DATA_INTO_BUFFER, &opaque) < 0) {
-    GST_ERROR ("failed to accquire a memory block");
+  ret = _codec_invoke_qemu(ctx->index, CODEC_DECODE_VIDEO, GET_OFFSET(buffer), dev->fd, &opaque);
+
+  if (ret < 0) {
     return -1;
   }
 
@@ -315,13 +345,11 @@ codec_decode_audio (CodecContext *ctx, int16_t *samples,
   GST_DEBUG ("decode_audio 1. in_buffer size %d", in_size);
   codec_decode_audio_data_to (in_size, in_buf, buffer);
 
-  dev->mem_info.offset = GET_OFFSET(buffer);
-  _codec_invoke_qemu (ctx->index, CODEC_DECODE_AUDIO, GET_OFFSET(buffer), dev->fd);
-
   opaque.buffer_index = ctx->index;
   opaque.buffer_size = SMALLDATA;
 
-  ret = ioctl (dev->fd, CODEC_CMD_PUT_DATA_INTO_BUFFER, &opaque);
+  ret = _codec_invoke_qemu(ctx->index, CODEC_DECODE_AUDIO, GET_OFFSET(buffer), dev->fd, &opaque);
+
   if (ret < 0) {
     return -1;
   }
@@ -362,20 +390,19 @@ codec_encode_video (CodecContext *ctx, uint8_t *out_buf,
 
   codec_encode_video_data_to (in_size, in_timestamp, in_buf, buffer);
 
-  dev->mem_info.offset = GET_OFFSET(buffer);
-  _codec_invoke_qemu (ctx->index, CODEC_ENCODE_VIDEO, GET_OFFSET(buffer), dev->fd);
-
   opaque.buffer_index = ctx->index;
   opaque.buffer_size = SMALLDATA;
+
   // FIXME: how can we know output data size ?
-  ret = ioctl (dev->fd, CODEC_CMD_PUT_DATA_INTO_BUFFER, &opaque);
+  ret = _codec_invoke_qemu(ctx->index, CODEC_ENCODE_VIDEO, GET_OFFSET(buffer), dev->fd, &opaque);
+
   if (ret < 0) {
     return -1;
   }
+
   GST_DEBUG ("encode_video. mem_offset = 0x%x", opaque.buffer_size);
 
   len = codec_encode_video_data_from (out_buf, coded_frame, is_keyframe, device_mem + opaque.buffer_size);
-  dev->mem_info.offset = opaque.buffer_size;
 
   release_device_mem(dev->fd, device_mem + opaque.buffer_size);
 
@@ -403,13 +430,11 @@ codec_encode_audio (CodecContext *ctx, uint8_t *out_buf,
 
   codec_encode_audio_data_to (in_size, max_size, in_buf, timestamp, buffer);
 
-  dev->mem_info.offset = GET_OFFSET(buffer);
-  _codec_invoke_qemu (ctx->index, CODEC_ENCODE_AUDIO, GET_OFFSET(buffer), dev->fd);
-
   opaque.buffer_index = ctx->index;
   opaque.buffer_size = SMALLDATA;
 
-  ret = ioctl (dev->fd, CODEC_CMD_PUT_DATA_INTO_BUFFER, &opaque);
+  ret = _codec_invoke_qemu(ctx->index, CODEC_ENCODE_AUDIO, GET_OFFSET(buffer), dev->fd, &opaque);
+
   if (ret < 0) {
     return -1;
   }