Hi all,

        I created PopplerMedia Object from the media file. It will be
helpful for creating rendition actions.
Please give your suggestions.

Thanks
--
A Srinivas
Index: poppler-0.16.2/glib/poppler-media.cc
===================================================================
--- poppler-0.16.2/glib/poppler-media.cc	(revision 14)
+++ poppler-0.16.2/glib/poppler-media.cc	(working copy)
@@ -109,7 +109,77 @@
   return media;
 }
 
+static gboolean
+_poppler_media_get_stream_from_file (XRef       *xrefA,
+				     const char *file,
+				     Stream    **media_stream)
+{
+  GError **error = NULL;
+  FILE *fp;
+  if (!(fp = fopen(file, "rb")))
+    {
+      g_set_error (error,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (errno),
+		   "Error opening file: %s",
+		   file);
+      return FALSE;
+    }  
+
+  unsigned int size = 0;
+  if (fseek(fp, 0, SEEK_END))
+    {
+      g_set_error (error,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (errno),
+		   "fseek() couldn't seek to the end of file: '%s'", 
+		   file);
+      return FALSE;
+    }
+  size = ftell(fp);
+
+  Object obj1, obj2;
+  obj1.initDict(xrefA);
+  obj1.dictSet("Length", obj2.initInt(size));
+  *media_stream = new FileStream(fp, 0, 0, size, &obj1);
+
+  return TRUE;
+}
+
 /**
+* poppler_media_from_file:
+* @doc:  a #PopplerDocument
+* @media_file: a media file to be embedded
+* @mimetype: mimetype of the video 
+* @is_embedded: if TRUE embed the video by passing stream, else embed it from file
+*
+* Return value: a #PopplerMedia 
+*
+* Since: 0.18
+*/
+PopplerMedia *
+poppler_media_from_file (PopplerDocument *doc,
+			 const char      *media_file,
+			 const char      *mimetype,
+			 gboolean         is_embedded)
+{
+  PopplerMedia *media;
+ 
+  g_return_val_if_fail (media_file != NULL, NULL);
+  g_return_val_if_fail (doc != NULL, NULL);
+
+  media = POPPLER_MEDIA (g_object_new (POPPLER_TYPE_MEDIA, NULL));
+  media->stream = NULL;
+  if (is_embedded) {
+    _poppler_media_get_stream_from_file (doc->doc->getXRef(), media_file, &media->stream);    
+    media->mime_type = g_strdup (mimetype);
+  }
+  media->filename = g_strdup (media_file);
+ 
+  return media;
+}
+
+/**
 * poppler_media_get_filename:
 * @poppler_media: a #PopplerMedia
 *
Index: poppler-0.16.2/glib/poppler-media.h
===================================================================
--- poppler-0.16.2/glib/poppler-media.h	(revision 14)
+++ poppler-0.16.2/glib/poppler-media.h	(working copy)
@@ -61,6 +61,10 @@
 gboolean     poppler_media_save             (PopplerMedia        *poppler_media,
 					     const char          *filename,
 					     GError             **error);
+PopplerMedia *poppler_media_from_file	    (PopplerDocument	*doc,
+					     const gchar	*media_file, 
+					     const gchar	*mimetype,
+					     gboolean		 is_embedded);
 gboolean     poppler_media_save_to_callback (PopplerMedia        *poppler_media,
 					     PopplerMediaSaveFunc save_func,
 					     gpointer             user_data,
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to