fixed prevent issues.
authorKitae Kim <kt920.kim@samsung.com>
Thu, 27 Jun 2013 15:31:26 +0000 (00:31 +0900)
committerKitae Kim <kt920.kim@samsung.com>
Fri, 28 Jun 2013 07:11:11 +0000 (16:11 +0900)
Change-Id: I71151ae0837d074b21dfb6389a305fb9b27e54c3
Signed-off-by: Kitae Kim <kt920.kim@samsung.com>
packaging/gst-plugins-emulator.changes
packaging/gst-plugins-emulator.spec
src/gstemul.c
src/gstemulapi.c
src/gstemulapi2.c
src/gstemuldec.c
src/gstemuldev.c
src/gstemulenc.c

index 15a3d16..b182845 100644 (file)
@@ -1,2 +1,5 @@
-* Fri Jun 21 11:49:35 UTC 2013 Kitae Kim kt920.kim@samsung.com 
+* Thu Jun 27 15:04:20 UTC 2013 Kitae Kim <kt920.kim@samsung.com>
+- fixed prevent issues.
+
+* Fri Jun 21 11:49:35 UTC 2013 Kitae Kim <kt920.kim@samsung.com>
 - improved architecture of gstreamer codec plugin.
index ae50422..542bc55 100644 (file)
@@ -1,12 +1,12 @@
 Name: gst-plugins-emulator
-Version: 0.1.1
+Version: 0.1.2
 Release: 2 
 Summary: GStreamer Streaming-media framework plug-in for Tizen emulator.
 Group: TO_BE/FILLED_IN
 License: LGPLv2+
 URL: http://gstreamer.net/
 Source0: %{name}-%{version}.tar.gz
-Source1001: packaging/gst-plugins-emulator.manifest
+Source1001: packaging/%{name}.manifest
 BuildRequires:  gettext
 BuildRequires:  which
 BuildRequires:  gstreamer-tools
index 97e93e6..07206c5 100644 (file)
@@ -58,62 +58,59 @@ static GList *codec_element = NULL;
 static gboolean
 gst_emul_codec_element_init ()
 {
-  int fd, size = 0;
+  int fd = 0, size = 0;
   int version = 0;
   int data_length = 0;
-  int ret = TRUE;
   int i, elem_cnt = 0;
   void *buffer = NULL;
-//  GList *element = NULL;
   CodecElement *elem = NULL;
 
   fd = open (CODEC_DEV, O_RDWR);
   if (fd < 0) {
     perror ("failed to open codec device");
+    return FALSE;
   }
 
   ioctl (fd, CODEC_CMD_GET_VERSION, &version);
   if (version != CODEC_VER) {
     CODEC_LOG (INFO, "version conflict between device: %d, plugin: %d\n",
               version, CODEC_VER);
+    close (fd);
     return FALSE;
   }
 
   buffer = mmap (NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
   if (!buffer) {
     perror ("failure memory mapping.");
+    close (fd);
+       return FALSE;
   }
 
-//  CODEC_LOG (DEBUG, "request a device to get codec element.\n");
+  CODEC_LOG (DEBUG, "request a device to get codec element.\n");
   ioctl(fd, CODEC_CMD_GET_ELEMENT, NULL);
 
   memcpy(&data_length, (uint8_t *)buffer, sizeof(data_length));
   size += sizeof(data_length);
 
-//  printf("[gst-emul][%d] data_length = %d\n", __LINE__, data_length);
-
   elem = g_malloc0 (data_length);
   if (!elem) {
     CODEC_LOG (ERR, "Failed to allocate memory.\n");
-    ret = FALSE;
     munmap (buffer, 4096);
     close (fd);
-    return ret;
+    return FALSE;
   }
 
   memcpy (elem, (uint8_t *)buffer + size, data_length);
 
   elem_cnt = data_length / sizeof(CodecElement);
   for (i = 0; i < elem_cnt; i++) {
-//  element = g_list_append (element, &elem[i]);
     codec_element = g_list_append (codec_element, &elem[i]);
   }
-//  codec_element = element;
 
   munmap (buffer, 4096);
   close (fd);
 
-  return ret;
+  return TRUE;
 }
 
 static gboolean
index 4ec8d48..aac534d 100644 (file)
@@ -37,6 +37,7 @@ void emul_codec_write_to_qemu (int ctx_index, int api_index, CodecDevice *dev)
 {
   CodecIOParams ioparam;
 
+  memset(&ioparam, 0, sizeof(ioparam));
   ioparam.api_index = api_index;
   ioparam.ctx_index = ctx_index;
   ioparam.mem_offset = dev->mem_info.offset;
@@ -254,7 +255,6 @@ emul_av_picture_copy (CodecContext *ctx, uint8_t *pict,
   CODEC_LOG (DEBUG, "[%s] caramis1 = 0x%x\n", __func__, mem_offset);
 #if 0
   memcpy (pict, mmapbuf, pict_size);
-
   ioctl (fd, CODEC_CMD_REMOVE_TASK_QUEUE, &mem_offset);
 #endif
 
@@ -269,7 +269,6 @@ emul_avcodec_decode_audio (CodecContext *ctx, int16_t *samples,
   int fd;
   uint8_t *mmapbuf = NULL;
   int len;
-//  int copyback, usable;
   uint32_t mem_offset = 0;
 
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
index c9e61a3..9a77564 100644 (file)
@@ -47,37 +47,37 @@ emul_avcodec_init_to (CodecContext *ctx,
 
   if (codec->media_type == AVMEDIA_TYPE_VIDEO) {
     CODEC_LOG (DEBUG, "before avcodec_open. pixel format: %d\n", ctx->video.pix_fmt);
-//    memcpy (device_buf + size, &ctx->video, sizeof(ctx->video));
-    *(VideoData *)(device_buf + size) = ctx->video;
+    memcpy (device_buf + size, &ctx->video, sizeof(ctx->video));
+//    *(VideoData *)(device_buf + size) = ctx->video;
     size += sizeof(ctx->video);
   } else if (codec->media_type == AVMEDIA_TYPE_AUDIO) {
-//    memcpy (device_buf + size, &ctx->audio, sizeof(ctx->audio));
-    *(AudioData *)(device_buf + size) = ctx->audio;
+    memcpy (device_buf + size, &ctx->audio, sizeof(ctx->audio));
+//    *(AudioData *)(device_buf + size) = ctx->audio;
     size += sizeof(ctx->audio);
   } else {
     CODEC_LOG (ERR, "media type is unknown.\n");
     return;
   }
 
-//  memcpy (device_buf + size,
-//      &ctx->bit_rate, sizeof(ctx->bit_rate));
-  *(int *)(device_buf + size) = ctx->bit_rate;
+  memcpy (device_buf + size,
+      &ctx->bit_rate, sizeof(ctx->bit_rate));
+//  *(int *)(device_buf + size) = ctx->bit_rate;
   size += sizeof(ctx->bit_rate);
-//  memcpy (device_buf + size,
-//      &ctx->codec_tag, sizeof(ctx->codec_tag));
-  *(int *)(device_buf + size) = ctx->codec_tag;
+  memcpy (device_buf + size,
+      &ctx->codec_tag, sizeof(ctx->codec_tag));
+//  *(int *)(device_buf + size) = ctx->codec_tag;
   size += sizeof(ctx->codec_tag);
-//  memcpy (device_buf + size,
-//      &ctx->codecdata_size, sizeof(ctx->codecdata_size));
-  *(int *)(device_buf + size) = ctx->codecdata_size;
+  memcpy (device_buf + size,
+      &ctx->codecdata_size, sizeof(ctx->codecdata_size));
+//  *(int *)(device_buf + size) = ctx->codecdata_size;
   size += sizeof(ctx->codecdata_size);
   if (ctx->codecdata_size > 0) {
     memcpy (device_buf + size, ctx->codecdata, ctx->codecdata_size);
     size += ctx->codecdata_size;
   }
   size -= sizeof(size);
-//  memcpy (device_buf, &size, sizeof(size));
-  *(int *)device_buf = size;
+  memcpy (device_buf, &size, sizeof(size));
+//  *(int *)device_buf = size;
 
   CODEC_LOG (DEBUG, "[init] write data: %d\n", size);
 }
@@ -90,28 +90,27 @@ emul_avcodec_init_from (CodecContext *ctx,
   int ret = 0, size = 0;
 
   CODEC_LOG (DEBUG, "[init] read data from qemu.\n");
-//  memcpy (&ret, (uint8_t *)device_buf, sizeof(ret));
-  ret = *(int *)device_buf;
+  memcpy (&ret, (uint8_t *)device_buf, sizeof(ret));
+//  ret = *(int *)device_buf;
   size = sizeof(ret);
 
   if (!ret) {
     if (codec->media_type == AVMEDIA_TYPE_AUDIO) {
-//      memcpy (&ctx->audio.sample_fmt,
-//          (uint8_t *)device_buf + size, sizeof(ctx->audio.sample_fmt));
-      ctx->audio.sample_fmt = *(int *)(device_buf + size);
+      memcpy (&ctx->audio.sample_fmt,
+          (uint8_t *)device_buf + size, sizeof(ctx->audio.sample_fmt));
+//      ctx->audio.sample_fmt = *(int *)(device_buf + size);
       size += sizeof(ctx->audio.sample_fmt);
-//      memcpy (&ctx->audio.frame_size,
-//          (uint8_t *)device_buf + size, sizeof(ctx->audio.frame_size));
-      ctx->audio.frame_size = *(int *)(device_buf + size);
+      memcpy (&ctx->audio.frame_size,
+          (uint8_t *)device_buf + size, sizeof(ctx->audio.frame_size));
+//      ctx->audio.frame_size = *(int *)(device_buf + size);
       size += sizeof(ctx->audio.frame_size);
-//      memcpy (&ctx->audio.bits_per_smp_fmt,
-//          (uint8_t *)device_buf + size, sizeof(ctx->audio.bits_per_smp_fmt));
-      ctx->audio.bits_per_smp_fmt = *(int *)(device_buf + size);
+      memcpy (&ctx->audio.bits_per_smp_fmt,
+          (uint8_t *)device_buf + size, sizeof(ctx->audio.bits_per_smp_fmt));
+//      ctx->audio.bits_per_smp_fmt = *(int *)(device_buf + size);
       size += sizeof(ctx->audio.bits_per_smp_fmt);
 
       CODEC_LOG (DEBUG, "[init] sample_fmt %d\n", ctx->audio.sample_fmt);
     }
-//    memcpy (&ctx->index, (uint8_t *)device_buf + size, sizeof(ctx->index));
     ctx->codec = codec;
   } else {
     CODEC_LOG (ERR, "failed to open codec context\n");
@@ -131,14 +130,14 @@ emul_avcodec_decode_video_to (uint8_t *in_buf, int in_size,
 
   CODEC_LOG (DEBUG, "[decode_video] write data to qemu\n");
   size = sizeof(size);
-//  memcpy (device_buf + size, &in_size, sizeof(in_size));
-  *(int *)(device_buf + size) = in_size;
+  memcpy (device_buf + size, &in_size, sizeof(in_size));
+//  *(int *)(device_buf + size) = in_size;
   size += sizeof(in_size);
-//  memcpy (device_buf + size, &idx, sizeof(idx));
-  *(int *)(device_buf + size) = idx;
+  memcpy (device_buf + size, &idx, sizeof(idx));
+//  *(int *)(device_buf + size) = idx;
   size += sizeof(idx);
-//  memcpy (device_buf + size, &in_offset, sizeof(in_offset));
-  *(int64_t *)(device_buf + size) = in_offset;
+  memcpy (device_buf + size, &in_offset, sizeof(in_offset));
+//  *(int64_t *)(device_buf + size) = in_offset;
   size += sizeof(in_offset);
   if (in_size > 0) {
     memcpy (device_buf + size, in_buf, in_size);
@@ -147,8 +146,8 @@ emul_avcodec_decode_video_to (uint8_t *in_buf, int in_size,
 
   size -= sizeof(size);
   CODEC_LOG (DEBUG, "[decode_video] total: %d, inbuf size: %d\n", size, in_size);
-//  memcpy(device_buf, &size, sizeof(size));
-  *(int *)device_buf = size;
+  memcpy(device_buf, &size, sizeof(size));
+//  *(int *)device_buf = size;
   CODEC_LOG (DEBUG, "[decode_video] leave\n");
 }
 
@@ -183,8 +182,8 @@ emul_avcodec_decode_audio_to (uint8_t *in_buf,
   int size = 0;
 
   size = sizeof(size);
-//  memcpy (device_buf + size, &in_size, sizeof(in_size));
-  *(int *)(device_buf + size) = in_size;
+  memcpy (device_buf + size, &in_size, sizeof(in_size));
+//  *(int *)(device_buf + size) = in_size;
   size += sizeof(in_size);
   if (in_size > 0) {
     memcpy (device_buf + size, in_buf, in_size);
@@ -193,7 +192,7 @@ emul_avcodec_decode_audio_to (uint8_t *in_buf,
 
   size -= sizeof(size);
   memcpy (device_buf, &size, sizeof(size));
-  *(int *)device_buf = size;
+//  *(int *)device_buf = size;
 
   CODEC_LOG (DEBUG, "[decode_audio] write size: %d, inbuf_size: %d\n", size, in_size);
 }
@@ -218,7 +217,7 @@ emul_avcodec_decode_audio_from (CodecContext *ctx, int *frame_size_ptr,
   size += sizeof(*frame_size_ptr);
   CODEC_LOG (DEBUG, "[decode_audio] len: %d, frame_size: %d\n",
           len, (*frame_size_ptr));
-#if 1
+#if 0
   if (len > 0) {
     memcpy (samples,
       (uint8_t *)device_buf + size, FF_MAX_AUDIO_FRAME_SIZE);
index f390bff..4160f47 100644 (file)
@@ -329,7 +329,7 @@ static void
 gst_emuldec_base_init (GstEmulDecClass *klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  GstCaps *sinkcaps, *srccaps;
+  GstCaps *sinkcaps = NULL, *srccaps = NULL;
   GstPadTemplate *sinktempl, *srctempl;
   CodecElement *codec;
   gchar *longname, *classification, *description;
@@ -786,13 +786,17 @@ gst_emuldec_open (GstEmulDec *emuldec)
 static int
 gst_emuldec_close (GstEmulDec *emuldec)
 {
-  int ret;
+  int ret = 0;
 
   if (emuldec->context->codecdata) {
     g_free(emuldec->context->codecdata);
     emuldec->context->codecdata = NULL;
   }
 
+  if (!emuldec->dev) {
+    return -1;
+  }
+
   ret = gst_emul_avcodec_close (emuldec->context, emuldec->dev);
 
   if (emuldec->dev) {
@@ -1549,10 +1553,13 @@ gst_emuldec_register (GstPlugin *plugin, GList *element)
   GList *elem = element;
   CodecElement *codec = NULL;
 
+  if (!elem) {
+         return FALSE;
+  }
+
   /* register element */
-//  while ((elem = g_list_next (elem))) {
   do {
-    codec = (CodecElement *)elem->data;
+    codec = (CodecElement *)(elem->data);
     if (!codec) {
       return FALSE;
     }
index 150e15b..a24e08d 100644 (file)
@@ -114,9 +114,7 @@ gst_emul_codec_device_close (CodecDevice *dev)
     return -1;
   }
 
-//  GST_DEBUG("Release memory region of %s.\n", CODEC_DEV);
   CODEC_LOG (INFO, "Release memory region of %p.\n", mmapbuf);
-
   if (munmap(mmapbuf, CODEC_DEVICE_MEM_SIZE) != 0) {
     CODEC_LOG(ERR, "Failed to release memory region of %s.\n", CODEC_DEV);
   }
@@ -124,9 +122,7 @@ gst_emul_codec_device_close (CodecDevice *dev)
 
   ioctl(fd, CODEC_CMD_RELEASE_DEVICE_MEM, &dev->mem_info);
 
-//  GST_DEBUG("close %s.\n", CODEC_DEV);
   CODEC_LOG (INFO, "close %s.\n", CODEC_DEV);
-
   if (close(fd) != 0) {
     GST_ERROR("Failed to close %s. fd: %d\n", CODEC_DEV, fd);
   }
index 41ccfaa..6013ab3 100644 (file)
@@ -351,7 +351,7 @@ gst_emulenc_getcaps (GstPad *pad)
 
   GST_DEBUG_OBJECT (emulenc, "getting caps");
 
-  if (oclass->codec->media_type == AVMEDIA_TYPE_AUDIO) {
+  if (oclass->codec && oclass->codec->media_type == AVMEDIA_TYPE_AUDIO) {
     caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
 
     GST_DEBUG_OBJECT (emulenc, "audio caps, return template %" GST_PTR_FORMAT,
@@ -373,26 +373,26 @@ gst_emulenc_getcaps (GstPad *pad)
   for (pixfmt = 0;; pixfmt++) {
     GstCaps *tmpcaps;
 
-    if (oclass->codec->pix_fmts) {
-      if ((pixfmt = oclass->codec->pix_fmts[i++]) == PIX_FMT_NONE) {
-        GST_DEBUG_OBJECT (emulenc,
-          "At the end of official pixfmt for this codec, breaking out");
-        break;
-      }
-      GST_DEBUG_OBJECT (emulenc,
-        "Got an official pixfmt [%d], attempting to get caps", pixfmt);
-      tmpcaps = gst_emul_pixfmt_to_caps (pixfmt, NULL, oclass->codec->name);
-      if (tmpcaps) {
-        GST_DEBUG_OBJECT (emulenc, "Got caps, breaking out");
-        if (!caps) {
-          caps = gst_caps_new_empty ();
-        }
-        gst_caps_append (caps, tmpcaps);
-        continue;
-      }
-      GST_DEBUG_OBJECT (emulenc,
-        "Couldn't figure out caps without context, trying again with a context");
-    }
+//    if (oclass->codec->pix_fmts) {
+       if ((pixfmt = oclass->codec->pix_fmts[i++]) == PIX_FMT_NONE) {
+               GST_DEBUG_OBJECT (emulenc,
+                               "At the end of official pixfmt for this codec, breaking out");
+               break;
+       }
+       GST_DEBUG_OBJECT (emulenc,
+                       "Got an official pixfmt [%d], attempting to get caps", pixfmt);
+       tmpcaps = gst_emul_pixfmt_to_caps (pixfmt, NULL, oclass->codec->name);
+       if (tmpcaps) {
+               GST_DEBUG_OBJECT (emulenc, "Got caps, breaking out");
+               if (!caps) {
+                       caps = gst_caps_new_empty ();
+               }
+               gst_caps_append (caps, tmpcaps);
+               continue;
+       }
+       GST_DEBUG_OBJECT (emulenc,
+                       "Couldn't figure out caps without context, trying again with a context");
+//    }
 
     GST_DEBUG_OBJECT (emulenc, "pixfmt: %d", pixfmt);
     if (pixfmt >= PIX_FMT_NB) {
@@ -1114,16 +1114,18 @@ gst_emulenc_register (GstPlugin *plugin, GList *element)
   GType type;
   gchar *type_name;
   gint rank = GST_RANK_NONE;
-  gboolean ret = TRUE;
   GList *elem = element;
   CodecElement *codec = NULL;
 
+  if (!elem) {
+         return FALSE;
+  }
+
   /* register element */
-//  while ((elem = g_list_next (elem))) {
   do {
-    codec = (CodecElement *)elem->data;
+    codec = (CodecElement *)(elem->data);
     if (!codec) {
-      ret = FALSE;
+      return FALSE;
       break;
     }
 
@@ -1145,5 +1147,5 @@ gst_emulenc_register (GstPlugin *plugin, GList *element)
     g_free (type_name);
   } while ((elem = g_list_next (elem)));
 
-  return ret;
+  return TRUE;
 }