2.0_beta
authorHaejeong Kim <backto.kim@samsung.com>
Tue, 21 Aug 2012 09:21:53 +0000 (18:21 +0900)
committerHaejeong Kim <backto.kim@samsung.com>
Tue, 21 Aug 2012 09:21:53 +0000 (18:21 +0900)
33 files changed:
Makefile.am
TC/utc/utc_mm_file_create_content_attrs_from_memory_func.c
TC/utc/utc_mm_file_create_content_attrs_func.c
TC/utc/utc_mm_file_create_content_attrs_simple_func.c
TC/utc/utc_mm_file_create_tag_attrs_from_memory_func.c
TC/utc/utc_mm_file_create_tag_attrs_func.c
TC/utc/utc_mm_file_destroy_content_attrs_func.c
TC/utc/utc_mm_file_destroy_tag_attrs_func.c
TC/utc/utc_mm_file_get_attrs_func.c
TC/utc/utc_mm_file_get_stream_info_func.c
TC/utc/utc_mm_fileinfo_common.h
configure.ac
debian/changelog [changed mode: 0644->0755]
debian/control
formats/ffmpeg/Makefile.am
formats/ffmpeg/include/mm_file_format_aac.h
formats/ffmpeg/mm_file_format_aac.c
formats/ffmpeg/mm_file_format_ffmpeg.c
formats/ffmpeg/mm_file_format_frame.c [new file with mode: 0755]
formats/ffmpeg/mm_file_format_mmf.c
formats/ffmpeg/mm_file_formats.c
include/mm_file.h
include/mm_file_format_frame.h [new file with mode: 0755]
mm_file.c
packaging/libmm-fileinfo.spec [changed mode: 0644->0755]
tests/mm_file_test.c
tests/mm_file_traverse.h
tests/mm_file_traverser.c
utils/Makefile.am
utils/include/mm_file_utils.h
utils/mm_file_util_io.c
utils/mm_file_util_locale.c
utils/mm_file_util_tag.c

index 13edf4ff6aa0c6deb179d9eedb9f0ec33caeb28c..68052bb403bd4ef4194ac6107f94d79317c4d009 100755 (executable)
@@ -9,7 +9,8 @@ SUBDIRS = utils \
 lib_LTLIBRARIES = libmmffile.la
 
 noinst_HEADERS = include/mm_file_codecs.h \
-                include/mm_file_formats.h
+                include/mm_file_formats.h \
+                include/mm_file_format_frame.h
 
 libmmffile_la_SOURCES = mm_file.c 
 
index 0f29d604be8935bf8e8721d23556b4777ad9b99f..87db9bc31cca61a722c54b46ef12ce7de2f4bd55 100755 (executable)
@@ -56,7 +56,6 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Declare the global variables and registers and Internal Funntions
 //-------------------------------------------------------------------------------------------------
-#define MEDIA_PATH     "/opt/media/Sounds and music/Music/Over the horizon.mp3"
 #define TEST_API "mm_file_create_content_attrs_from_memory"
 
 
index 3721bccddc7885f6b081422e989bc29f815666ca..773d2870ea062aae31c4b5cf16823b08e5748c9a 100755 (executable)
@@ -56,7 +56,6 @@
 // Declare the global variables and registers and Internal Funntions
 //-------------------------------------------------------------------------------------------------
 #define TEST_API "mm_file_create_content_attrs"
-#define MEDIA_PATH     "/opt/media/Sounds and music/Music/Over the horizon.mp3"
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 /* Initialize TCM data structures */
index 66cda26b92db315c320a7dc4bddcb0f1222acb86..6d859c3f55913343a84b43b473ff3cad47dbb4bc 100755 (executable)
@@ -48,7 +48,6 @@
 #include "utc_mm_fileinfo_common.h"
 
 
-#define MEDIA_PATH     "/opt/media/Images and videos/My video clips/Helicopter.mp4"
 #define TEST_API "mm_file_create_content_attrs_simple"
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
index 30c83203191934bae66c961cd63929d29b3f5d79..ff22c19f96dc2c2968c6ef1b90150c39dd6c9723 100755 (executable)
@@ -56,7 +56,6 @@
 // Declare the global variables and registers and Internal Funntions
 //-------------------------------------------------------------------------------------------------
 
-#define MEDIA_PATH     "/opt/media/Sounds and music/Music/Over the horizon.mp3"
 #define TEST_API "mm_file_create_tag_attrs_from_memory"
 
 #define READ_FROM_FILE(FILE_PATH, data, size) \
index c0192b72438104efc3cb357d7baa2a197ba95009..93e17334012b5b76382aedad6737e60573bec683 100755 (executable)
@@ -56,7 +56,6 @@
 // Declare the global variables and registers and Internal Funntions
 //-------------------------------------------------------------------------------------------------
 
-#define MEDIA_PATH     "/opt/media/Sounds and music/Music/Over the horizon.mp3"
 #define TEST_API "mm_file_create_tag_attrs"
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
index 34ec6df92ed9a8dfeeb974e7bb5a5ef29a575aa3..44f6679dd9877f82d5df64898c18936d57ce37f8 100755 (executable)
@@ -57,7 +57,6 @@
 // Declare the global variables and registers and Internal Funntions\r
 //-------------------------------------------------------------------------------------------------\r
 \r
-#define MEDIA_PATH     "/opt/media/Sounds and music/Music/Over the horizon.mp3"\r
 #define TEST_API "mm_file_destroy_content_attrs"\r
 \r
 struct tet_testlist tet_testlist[] = {\r
index 85109dac433f517e2ce260d80b96f3bc44283b47..a9c552084c312028f86b4a652550468e861be1e8 100755 (executable)
@@ -57,7 +57,6 @@
 // Declare the global variables and registers and Internal Funntions\r
 //-------------------------------------------------------------------------------------------------\r
 \r
-#define MEDIA_PATH     "/opt/media/Sounds and music/Music/Over the horizon.mp3"\r
 #define TEST_API "mm_file_destroy_tag_attrs"\r
 \r
 ///////////////////////////////////////////////////////////////////////////////////////////////////\r
index 09eed96604f6f9b54a2c1432b2e8a018c594cee2..4dca3056eca9b41af82aa1e2235d8af32bc10a1a 100755 (executable)
@@ -56,7 +56,6 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////\r
 // Declare the global variables and registers and Internal Funntions\r
 //-------------------------------------------------------------------------------------------------\r
-#define MEDIA_PATH "/opt/media/Sounds and music/Music/Over the horizon.mp3"\r
 #define TEST_API "mm_file_get_attrs"\r
 \r
 ///////////////////////////////////////////////////////////////////////////////////////////////////\r
index a4f33faec716a99f1e95ed8ba5b8c3a34a87936f..7fb16e516c80d3d674a8fcbbf78b0945267ca2fc 100755 (executable)
@@ -56,8 +56,6 @@
 // Declare the global variables and registers and Internal Funntions
 //-------------------------------------------------------------------------------------------------
 
-#define MEDIA_PATH     "/opt/media/Images and videos/My video clips/Helicopter.mp4"
-#define MEDIA_PATH2 "/opt/media/Sounds and music/Music/Over the horizon.mp3"
 #define TEST_API "mm_file_get_stream_info"
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -88,7 +86,7 @@ void utc_mm_file_get_stream_info_func_01()
        int audio_stream_num = 0;
        int video_stream_num = 0;
 
-       err = mm_file_get_stream_info(MEDIA_PATH,&audio_stream_num,&video_stream_num);
+       err = mm_file_get_stream_info(MEDIA_PATH2,&audio_stream_num,&video_stream_num);
        dts_check_eq (TEST_API, err, MM_ERROR_NONE, "%x", err);
        dts_check_eq (TEST_API, audio_stream_num, 1);
        dts_check_eq (TEST_API, video_stream_num, 1);
@@ -102,7 +100,7 @@ void utc_mm_file_get_stream_info_func_02()
        int audio_stream_num = 0;
        int video_stream_num = 0;
 
-       err = mm_file_get_stream_info(MEDIA_PATH2,&audio_stream_num,&video_stream_num);
+       err = mm_file_get_stream_info(MEDIA_PATH,&audio_stream_num,&video_stream_num);
        dts_check_eq (TEST_API, err, MM_ERROR_NONE, "%x", err);
        dts_check_eq (TEST_API, audio_stream_num, 1);
        dts_check_eq (TEST_API, video_stream_num, 0);
@@ -113,7 +111,7 @@ void utc_mm_file_get_stream_info_func_03()
        int err = 0 ;
        int video_stream_num =0;
 
-       err = mm_file_get_stream_info(MEDIA_PATH, NULL, &video_stream_num);
+       err = mm_file_get_stream_info(MEDIA_PATH2, NULL, &video_stream_num);
        dts_check_ne (TEST_API, err, MM_ERROR_NONE, "%x", err);
 }
 
@@ -121,7 +119,7 @@ void utc_mm_file_get_stream_info_func_04()
 {
        int err = 0 ;
 
-       err = mm_file_get_stream_info(MEDIA_PATH,NULL,NULL);
+       err = mm_file_get_stream_info(MEDIA_PATH2,NULL,NULL);
        dts_check_ne (TEST_API, err, MM_ERROR_NONE, "%x", err);
 }
 
index 9d8ed3ca8fe58b8686b7ccd03664d027bd425125..0e04e6b3d438de049b2d13c1b9d30430f9b93f19 100755 (executable)
 #include <tet_api.h>
 #include <unistd.h>
 
+#define MEDIA_PATH             "/opt/media/Music/Over the horizon.mp3"
+#define MEDIA_PATH2    "/opt/media/Videos/Helicopter.mp4"
+
+
 void startup();
 void cleanup();
 
index 1ae5f563461c4931dab1a95a9ef6fe9a0951a096..0f29e3173865f71907572a697679b0705a2e49f2 100755 (executable)
@@ -93,9 +93,9 @@ AC_ARG_ENABLE(drm, AC_HELP_STRING([--enable-drm], [using drm]),
    esac
 ],[USE_DRM=yes])
 if test "x$USE_DRM" = "xyes"; then
-     PKG_CHECK_MODULES(DRMSERVICE, drm-service)
-     AC_SUBST(DRMSERVICE_CFLAGS)
-     AC_SUBST(DRMSERVICE_LIBS)
+     PKG_CHECK_MODULES(DRMCLIENT, drm-client)
+     AC_SUBST(DRMCLIENT_CFLAGS)
+     AC_SUBST(DRMCLIENT_LIBS)
 fi
 AM_CONDITIONAL(USE_DRM, test "x$USE_DRM" = "xyes")
  
old mode 100644 (file)
new mode 100755 (executable)
index e9ef990..8986111
@@ -1,8 +1,876 @@
+libmm-fileinfo (0.5.0-11) unstable; urgency=low
+
+  * increase retry search count when make video thumbnail 
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-11
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 16 Aug 2012 18:03:16 +0900
+
+libmm-fileinfo (0.5.0-10) unstable; urgency=low
+
+  * increase retry search count when make video thumbnail
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-10
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Mon, 13 Aug 2012 18:04:50 +0900
+
+libmm-fileinfo (0.5.0-9) unstable; urgency=low
+
+  * duration bug fix (temporary)
+  * extract metadata eventhough no file extension
+  * merger from old git
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-9
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Wed, 08 Aug 2012 17:18:20 +0900
+
+libmm-fileinfo (0.5.0-8) unstable; urgency=low
+
+  * version up
+  * merger from old git
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-8
+
+ -- root <backto.kim@samsung.com>  Tue, 07 Aug 2012 15:40:46 +0900
+
+libmm-fileinfo (0.5.0-7) unstable; urgency=low
+
+  * bug fix of parsing mmf
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-7
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 26 Jul 2012 14:05:10 +0900
+
+libmm-fileinfo (0.5.0-6) unstable; urgency=low
+
+  * fix get iTunes meta data
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-6
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Wed, 13 Jun 2012 17:21:03 +0900
+
+libmm-fileinfo (0.5.0-5) unstable; urgency=low
+
+  * bug fix of protocol for FFMpeg
+  * modify test code
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-5
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 07 Jun 2012 12:26:59 +0900
+
+libmm-fileinfo (0.5.0-4) unstable; urgency=low
+
+  * apply new DRM Service
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-4
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Tue, 22 May 2012 13:38:31 +0900
+
+libmm-fileinfo (0.5.0-3) unstable; urgency=low
+
+  * TYER(year) and TRDA are replaced by the TDRC in id3tag v2.4
+  * bug fix of extract copyright, genre, description, tracknumber
+  * fix TC fail
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-3
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Fri, 08 Feb 2012 12:58:32 +0900
+
 libmm-fileinfo (0.5.0-2) unstable; urgency=low
 
-  * Initial Release
-  * Git : pkgs/l/libmm-fileinfo
+  * link libld library
+  * code clean up
+  * Tizen Open Tag -  libmm-fileinfo_0.5.0-2
+  * Git : slp/pkgs/l/libmm-fileinfo
   * Tag : libmm-fileinfo_0.5.0-2
 
- -- Haejeong Kim <backto.kim@samsung.com>  Wed, 07 Dec 2011 12:03:48 +0900
+ -- Haejeong Kim <backto.kim@samsung.com>  Tue, 03 Jan 2012 17:03:09 +0900
+
+libmm-fileinfo (0.5.0-1) unstable; urgency=low
+
+  * using extracted metadata by ffmpeg
+  * Git : slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.5.0-1
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Fri, 30 Dec 2011 14:11:39 +0900
+
+libmm-fileinfo (0.4.0-6) unstable; urgency=low
+
+  * add code for check lyric size
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-6
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 08 Dec 2011 12:36:31 +0900
+
+libmm-fileinfo (0.4.0-5) unstable; urgency=low
+
+  * apply changed ffmpeg library. ffmpeg library changed to .so
+  * code clean up for SDK release
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-5
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Mon, 06 Dec 2011 18:03:48 +0900
+
+libmm-fileinfo (0.4.0-4) unstable; urgency=low
+
+  * resolution bug fix. 
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-4
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 24 Nov 2011 18:17:24 +0900
+
+libmm-fileinfo (0.4.0-3) unstable; urgency=low
+
+  * add code for getting Recording date(ID3tag)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-3
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Fri, 11 Nov 2011 14:18:43 +0900
+
+libmm-fileinfo (0.4.0-2) unstable; urgency=low
+
+  * fix prevent defect
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-2
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Mon, 07 Nov 2011 12:39:31 +0900
+
+libmm-fileinfo (0.4.0-1) unstable; urgency=low
+
+  * Add code for get SYLT
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-1
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 03 Nov 2011 16:13:11 +0900
+
+libmm-fileinfo (0.4.0-0) unstable; urgency=low
+
+  * apply new FFMPEG_0.8.5
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.4.0-0
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Fri, 28 Oct 2011 12:51:47 +0900
+
+libmm-fileinfo (0.3.2-4) unstable; urgency=low
+
+  * add code for get albumart mime type
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.2-4
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Mon, 24 Oct 2011 11:04:11 +0900
+
+libmm-fileinfo (0.3.2-3) unstable; urgency=low
+
+  * add code for extracting SYLT(synclyrics)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.2-3
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Thu, 13 Oct 2011 12:49:34 +0900
+
+libmm-fileinfo (0.3.2-2) unstable; urgency=low
+
+  * add code for extracting USLT(Unsynclyrics)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.2-2
+
+ -- Haejeong Kim <backto.kim@samsung.com>  Wed, 12 Oct 2011 13:09:13 +0900
+
+libmm-fileinfo (0.3.2-1) unstable; urgency=low
+
+  * Fix TC (update content path)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.2-1
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 06 Oct 2011 20:12:22 +0900
+
+libmm-fileinfo (0.3.2-0) unstable; urgency=low
+
+  * Enhance error handling in imy parsing
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.2-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 27 Sep 2011 14:55:21 +0900
+
+libmm-fileinfo (0.3.1-0) unstable; urgency=low
+
+  * Disable iTunes meta parsing
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.1-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 26 Sep 2011 13:17:33 +0900
+
+libmm-fileinfo (0.3.0-0) unstable; urgency=low
+
+  * Reupload due to ffmpeg update (VC-1 decoder enable)
+  * Disable iTunes meta parsing
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.3.0-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 16 Sep 2011 12:02:02 +0900
+
+libmm-fileinfo (0.2.9-2) unstable; urgency=low
+
+  * Remove GTK dependancy
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.9-2
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 06 Sep 2011 17:52:30 +0900
+
+libmm-fileinfo (0.2.9-1) unstable; urgency=low
+
+  * reupload for ffmpeg update
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.9-1
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 30 Aug 2011 11:14:27 +0900
+
+libmm-fileinfo (0.2.9-0) unstable; urgency=low
+
+  * Remove GPL code (thumbnail)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.9-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 26 Aug 2011 13:31:33 +0900
+
+libmm-fileinfo (0.2.8-0) unstable; urgency=low
+
+  * Fix for prevent
+  * update for storage path changed
+  * add build option. (enanble-gtk, disable-gtk)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.8-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 22 Aug 2011 14:54:56 +0900
+
+libmm-fileinfo (0.2.7-15) unstable; urgency=low
+
+  * Code cleanup
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-15
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 13 Jul 2011 19:43:07 +0900
+
+libmm-fileinfo (0.2.7-14) unstable; urgency=low
+
+  * Fix genre parsing
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-14
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 29 Jun 2011 12:05:54 +0900
+
+libmm-fileinfo (0.2.7-13) unstable; urgency=low
+
+  * add execstack 
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-13
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 22 Jun 2011 19:48:32 +0900
+
+libmm-fileinfo (0.2.7-12) unstable; urgency=low
+
+  * Support dlopen & mmap selection (both disabled yet)
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-12
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 08 Jun 2011 16:08:56 +0900
+
+libmm-fileinfo (0.2.7-11) unstable; urgency=low
+
+  * Modify CFLAGS
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-11
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 03 May 2011 13:23:21 +0900
+
+libmm-fileinfo (0.2.7-10) unstable; urgency=low
+
+  * Reupload for drm-service update
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-10
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 07 Apr 2011 19:44:49 +0900
+
+libmm-fileinfo (0.2.7-9) unstable; urgency=low
+
+  * Fix for prevent
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-9
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 15 Feb 2011 11:44:26 +0900
+
+libmm-fileinfo (0.2.7-8) unstable; urgency=low
+
+  * Update TC
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-8
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 24 Jan 2011 15:27:58 +0900
+
+libmm-fileinfo (0.2.7-7) unstable; urgency=low
+
+  * Fix for prevent
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-7
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 19 Jan 2011 19:24:03 +0900
+
+libmm-fileinfo (0.2.7-6) unstable; urgency=low
+
+  * remove mm_attrs.h from tc common header
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-6
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Tue, 04 Jan 2011 14:05:53 +0900
+
+libmm-fileinfo (0.2.7-5) unstable; urgency=low
+
+  * Fix checking mp3 header
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-5
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 14 Dec 2010 16:08:18 +0900
+
+libmm-fileinfo (0.2.7-4) unstable; urgency=low
+
+  * Fix to return proper result
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-4
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 10 Dec 2010 13:59:26 +0900
+
+libmm-fileinfo (0.2.7-3) unstable; urgency=low
+
+  * Support file:// & Code Cleanup
+  * Git : 165.213.180.234:slp/pkgs/l/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-3
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 06 Dec 2010 14:31:08 +0900
+
+libmm-fileinfo (0.2.7-2) unstable; urgency=low
+
+  * Remove ffmpeg dependancy from dev package
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-2
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 01 Dec 2010 12:30:22 +0900
+
+libmm-fileinfo (0.2.7-1) unstable; urgency=low
+
+  * Fix for as-needed
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-1
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 24 Nov 2010 20:46:57 +0900
+
+libmm-fileinfo (0.2.7-0) unstable; urgency=low
+
+  * threats playready drm content to normal contents
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.7-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Sat, 20 Nov 2010 15:48:38 +0900
+
+libmm-fileinfo (0.2.6-1) unstable; urgency=low
+
+  * Add fPIC, hash-style
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.6-1
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 19 Nov 2010 12:05:54 +0900
+
+libmm-fileinfo (0.2.6-0) unstable; urgency=low
+
+  * Fix bugs in tag attr memory api
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.6-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Sat, 13 Nov 2010 12:49:04 +0900
+
+libmm-fileinfo (0.2.5-0) unstable; urgency=low
+
+  * Remove aricent code & sconscript
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.5-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 10 Nov 2010 15:38:52 +0900
+
+libmm-fileinfo (0.2.4-0) unstable; urgency=low
+
+  * Implement matroska header check function.
+  * Check QT header with MP4 header check function.
+  * Enable gtk view on thumbnail testsuite
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.4-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 09 Nov 2010 11:06:48 +0900
+
+libmm-fileinfo (0.2.3-0) unstable; urgency=low
+
+  * Support iTunes artist tag in mp4
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.3-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 28 Oct 2010 15:38:41 +0900
+
+libmm-fileinfo (0.2.2-0) unstable; urgency=low
+
+  * Support iTunes genre tag in mp4
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.2-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 27 Oct 2010 18:03:17 +0900
+
+libmm-fileinfo (0.2.1-1) unstable; urgency=low
+
+  * Revise doxygen comment
+  * Revise COPYRIGHT
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.1-1
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Sat, 23 Oct 2010 16:58:05 +0900
+
+libmm-fileinfo (0.2.1-0) unstable; urgency=low
+
+  * 1. Support id3 tag extented header skip
+  * 2. Fix offset calculation when no explicit MIME type in APIC tag
+  * 3. Update doxygen
+  * Tag : libmm-fileinfo_0.2.1-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 20 Oct 2010 16:48:46 +0900
+
+libmm-fileinfo (0.2.0-0) unstable; urgency=low
+
+  * add api to get attributes and rename
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.2.0-0 
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Fri, 15 Oct 2010 17:06:29 +0900
+
+libmm-fileinfo (0.1.4-19) unstable; urgency=low
+
+  * add TCs and modify attrs api 
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo 
+  * Tag : libmm-fileinfo_0.1.4-19 
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Wed, 29 Sep 2010 13:17:32 +0900
+
+libmm-fileinfo (0.1.4-18) unstable; urgency=low
+
+  * fix build error 
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-18
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Sat, 18 Sep 2010 18:30:45 +0900
+
+libmm-fileinfo (0.1.4-17) unstable; urgency=low
+
+  * remove mm_attrs.h from header
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-17
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Sat, 18 Sep 2010 18:24:03 +0900
+
+libmm-fileinfo (0.1.4-16) unstable; urgency=low
+
+  :* 
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Sat, 18 Sep 2010 15:35:10 +0900
+
+libmm-fileinfo (0.1.4-15) unstable; urgency=low
+
+  * update control
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo 
+  * Tag : libmm-fileinfo_0.1.4-15
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Fri, 17 Sep 2010 12:19:26 +0900
+
+libmm-fileinfo (0.1.4-14) unstable; urgency=low
+
+  * Add common-internal-dev dependency
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-14
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Fri, 17 Sep 2010 12:14:27 +0900
+
+libmm-fileinfo (0.1.4-13) unstable; urgency=low
+
+  * Repackaging for EFL update
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-13
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Sat, 11 Sep 2010 09:56:17 +0900
+
+libmm-fileinfo (0.1.4-12) unstable; urgency=low
+
+  * Repackage for drm-service update
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-12
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 02 Sep 2010 17:15:31 +0900
+
+libmm-fileinfo (0.1.4-11) unstable; urgency=low
+
+  * Repackage for db-util update
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-11
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 31 Aug 2010 18:55:59 +0900
+  
+  * remove useless Depends pkgs
+  * Git : 165.213.180.234:/git/slp/pkgs/libmm-fileinfo
+  * Tag : libmm-fileinfo_0.1.4-10
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Thu, 12 Aug 2010 17:55:13 +0900
+
+libmm-fileinfo (0.1.4-9) unstable; urgency=low
+
+  * apply doxygen policy to generate doc
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-9
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Mon, 05 Jul 2010 14:29:57 +0900
+
+libmm-fileinfo (0.1.4-8) unstable; urgency=low
+
+  * remove old dlog dependency
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-8
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Fri, 25 Jun 2010 19:26:57 +0900
+
+libmm-fileinfo (0.1.4-7) unstable; urgency=low
+
+  * Reupload for mm-log update
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-7
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 17 Jun 2010 13:52:43 +0900
+
+libmm-fileinfo (0.1.4-6) unstable; urgency=low
+
+  * Reuploading to use new dlog
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-6
+
+ -- Heungsoon Rim <hs06.rim@samsung.com>  Wed, 16 Jun 2010 10:13:30 +0900
+
+libmm-fileinfo (0.1.4-5) unstable; urgency=low
+
+  * Remove mhal from depends
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-5
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 15 Jun 2010 19:30:32 +0900
+
+libmm-fileinfo (0.1.4-4) unstable; urgency=low
+
+  * Reupload for mm-log update
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-4
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 15 Jun 2010 19:01:10 +0900
+
+libmm-fileinfo (0.1.4-3) unstable; urgency=low
+
+  * Remove DEPRECATED define
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-3
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 11 Jun 2010 17:07:51 +0900
+
+libmm-fileinfo (0.1.4-2) unstable; urgency=low
+
+  * Repackaging for ffmpeg update (dv demuxer enable)
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-2
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 07 Jun 2010 12:28:38 +0900
+
+libmm-fileinfo (0.1.4-1) unstable; urgency=low
+
+  * Repackaging
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-1
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Fri, 04 Jun 2010 00:52:57 +0900
+
+libmm-fileinfo (0.1.4-0) unstable; urgency=low
+
+  * Remove old style APIs 
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.4-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 03 Jun 2010 21:18:33 +0900
+
+libmm-fileinfo (0.1.3-11) unstable; urgency=low
+
+  * Replace folat type of attribute as double
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-11
+
+ -- YoungHwan Ahn <younghwan_.an@samsung.com>  Sun, 30 May 2010 00:52:45 +0900
+
+libmm-fileinfo (0.1.3-10) unstable; urgency=low
+
+  * Reupload
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-10
+
+ -- KwangHui Cho <kwanghui.cho@samsung.com>  Sat, 29 May 2010 14:05:08 +0900
+
+libmm-fileinfo (0.1.3-9) unstable; urgency=low
+
+  * Use sync() instead of system()
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-9
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 24 May 2010 16:36:06 +0900
+
+libmm-fileinfo (0.1.3-8) unstable; urgency=low
+
+  * Add libmm-mhal-sdk-dev to dev depend
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-8
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 12 May 2010 13:25:59 +0900
+
+libmm-fileinfo (0.1.3-7) unstable; urgency=low
+
+  * Remove missing postinst
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-7
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 11 May 2010 21:14:02 +0900
+
+libmm-fileinfo (0.1.3-6) unstable; urgency=low
+
+  * Remove postinst & Remove MHAL dependancy
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-6
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 11 May 2010 15:57:53 +0900
+
+libmm-fileinfo (0.1.3-5) unstable; urgency=low
+
+  * Revert to install *.la
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-5
+
+ -- Jeon Hee Chul <heechul.jeon@samsung.com>  Tue, 04 May 2010 09:39:50 +0900
+
+libmm-fileinfo (0.1.3-4) unstable; urgency=low
+
+  * Change debian/control & exclude .la
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-4
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 03 May 2010 21:04:27 +0900
+
+libmm-fileinfo (0.1.3-3) unstable; urgency=low
+
+  * Add posix style API & Remove unused #ifdef
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-3
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 03 May 2010 12:44:20 +0900
+
+libmm-fileinfo (0.1.3-2) unstable; urgency=low
+
+  * Add postinst
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-2
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 20 Apr 2010 21:42:23 +0900
+
+libmm-fileinfo (0.1.3-1) unstable; urgency=low
+
+  * Repackage for mm-log update
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-1
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 14 Apr 2010 23:07:07 +0900
+
+libmm-fileinfo (0.1.3-0) unstable; urgency=low
+
+  * Check for OMA DRM
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.3-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 13 Apr 2010 12:45:38 +0900
+
+libmm-fileinfo (0.1.2-0) unstable; urgency=low
+
+  * Enable Matroska & QT
+  * Git : 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libmm-fileinfo-0.1
+  * Tag : libmm-fileinfo_0.1.2-0
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 09 Apr 2010 14:35:51 +0900
+
+libmm-fileinfo (0.1.1-1) unstable; urgency=low
+
+  * dos2unix
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 05 Apr 2010 14:05:06 +0900
+
+libmm-fileinfo (0.1.1-0) unstable; urgency=low
+
+  * Repackageing for DRM module update
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 01 Apr 2010 11:02:04 +0900
+
+libmm-fileinfo (0.1-26) unstable; urgency=low
+
+  *  1. Fix so linking in .pc
+  *  2. Fix dlopen/dlclose bug
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Sat, 27 Mar 2010 00:29:53 +0900
+
+libmm-fileinfo (0.1-25) unstable; urgency=low
+
+  * Repackaging for FFMPEG update
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 25 Mar 2010 16:36:51 +0900
+
+libmm-fileinfo (0.1-24) unstable; urgency=low
+
+  * Reupload because of ffmpeg building
+
+ -- Wonhyung Cho <wh01.cho@samsung.com>  Thu, 25 Mar 2010 14:22:50 +0900
+
+libmm-fileinfo (0.1-23) unstable; urgency=low
+
+  * Toolchain Upgrade
+
+ -- Wonhyung Cho <wh01.cho@samsung.com>  Thu, 25 Mar 2010 14:01:44 +0900
+
+libmm-fileinfo (0.1-22) unstable; urgency=low
+
+  * Add missing file for DRM
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 24 Mar 2010 20:50:15 +0900
+
+libmm-fileinfo (0.1-21) unstable; urgency=low
+
+  * Fix DRM dependancy
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 24 Mar 2010 19:53:23 +0900
+
+libmm-fileinfo (0.1-20) unstable; urgency=low
+
+  * Enable DRM
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 24 Mar 2010 19:04:28 +0900
+
+libmm-fileinfo (0.1-19) unstable; urgency=low
+
+  * Modify null check for MMFileGetContentAttrSimple() API
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 22 Mar 2010 11:56:39 +0900
+
+libmm-fileinfo (0.1-18) unstable; urgency=low
+
+  * Repackaging for rebuild on server side (to build debug package)
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 18 Mar 2010 14:33:18 +0900
+
+libmm-fileinfo (0.1-17) unstable; urgency=low
+
+  * Add debug package
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 18 Mar 2010 13:44:15 +0900
+
+libmm-fileinfo (0.1-16) unstable; urgency=low
+
+  * Add test for MMFileGetStreamInfo()
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 12 Mar 2010 14:56:02 +0900
+
+libmm-fileinfo (0.1-15) unstable; urgency=low
+
+  * Repacking for mm-common update
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 11 Mar 2010 12:04:20 +0900
+
+libmm-fileinfo (0.1-14) unstable; urgency=low
+
+  * argument NULL checking added
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Wed, 10 Mar 2010 20:25:43 +0900
+
+libmm-fileinfo (0.1-13) unstable; urgency=low
+
+  * Modify section to main
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 05 Mar 2010 16:39:28 +0900
+
+libmm-fileinfo (0.1-12) unstable; urgency=low
+
+  * Modify section to non-free
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Mon, 22 Feb 2010 14:19:13 +0900
+
+libmm-fileinfo (0.1-11) unstable; urgency=low
+
+  * Fix for prevent
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 19 Feb 2010 20:27:57 +0900
+
+libmm-fileinfo (0.1-10) unstable; urgency=low
+
+  * Enable new algorithm
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 05 Feb 2010 00:40:23 +0900
+
+libmm-fileinfo (0.1-9) unstable; urgency=low
+
+  * Apply new algorithm to search good thumbnail
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Thu, 04 Feb 2010 17:14:26 +0900
+
+libmm-fileinfo (0.1-8) unstable; urgency=low
+
+  * enable WMV support
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Tue, 02 Feb 2010 19:38:24 +0900
+
+libmm-fileinfo (0.1-7) unstable; urgency=low
+
+  * Modify for easy debugging (TESTMODE & DUMP)
+
+ -- Seungbae Shin <seungbae.shin@samsung.com>  Fri, 29 Jan 2010 19:58:05 +0900
+
+libmm-fileinfo (0.1-6) unstable; urgency=low
+
+  * Merge from H2 (fix author/composer issue, add conductor)
+
+ -- Shin Seung Bae <seungbae.shin@samsung.com>  Tue, 26 Jan 2010 15:06:36 +0900
+
+libmm-fileinfo (0.1-5) unstable; urgency=low
+
+  * Add to group FILEINFO in mm_file.h 
+
+ -- Shin Seung Bae <seungbae.shin@samsung.com>  Sat, 23 Jan 2010 18:08:58 +0900
+
+libmm-fileinfo (0.1-4) unstable; urgency=low
+
+  * Enable thumbnail-viewer
+
+ -- Shin Seung Bae <seungbae.shin@samsung.com>  Fri, 15 Jan 2010 21:57:54 +0900
+
+libmm-fileinfo (0.1-3) unstable; urgency=low
+
+  * Fix build break
+
+ -- Shin Seung Bae <seungbae.shin@samsung.com>  Wed, 30 Dec 2009 19:09:59 +0900
+
+libmm-fileinfo (0.1-2) unstable; urgency=low
+
+  * Fix static link issue
+
+ -- Shin Seung Bae <seungbae.shin@samsung.com>  Wed, 30 Dec 2009 19:09:59 +0900
+
+libmm-fileinfo (0.1-1) unstable; urgency=low
+
+  * Initial Release.
 
+ -- Shin Seung Bae <seungbae.shin@samsung.com>  Tue, 08 Dec 2009 23:38:34 +0900
index 7887ddff831f361bbf70f215163ffd833742bbcc..41c0818a25bc105c276faee5e4540031adeb302d 100755 (executable)
@@ -3,20 +3,20 @@ Section: libs
 Priority: extra
 Maintainer: Shin Seung Bae <seungbae.shin@samsung.com>, JongHyuk Choi <jhchoi.choi@samsung.com>, Haejeong Kim <backto.kim@samsung.com> 
 Uploaders: Shin Seung Bae <seungbae.shin@samsung.com>, JongHyuk Choi <jhchoi.choi@samsung.com>, Haejeong Kim <backto.kim@samsung.com>, YoungHwan Ahn <younghwan_.an@samsung.com>
-Build-Depends: debhelper (>= 5), autotools-dev, libmm-common-dev, libglib2.0-dev, libmm-log-dev, libavutil-dev, libavcodec-dev, libavformat-dev, drm-service-dev, libmm-common-internal-dev, execstack, libswscale-dev
+Build-Depends: debhelper (>= 5), autotools-dev, libmm-common-dev, libglib2.0-dev, libmm-log-dev, libavutil-dev, libavcodec-dev, libavformat-dev, drm-client-dev, libmm-common-internal-dev, execstack, libswscale-dev
 Standards-Version: 3.7.2
 
 Package: libmm-fileinfo
 Section: libs
 Architecture: any
-Depends: libmm-common, libglib2.0-0, libmm-log, drm-service-0, libavcodec, libavutil, libavformat, libswscale
+Depends: libmm-common, libglib2.0-0, libmm-log, drm-client-0, libavcodec, libavutil, libavformat, libswscale
 Description: Multimedia Framework FileInfo Library
 
 Package: libmm-fileinfo-dev
 XB-Generate-Docs: yes
 Section: libdevel
 Architecture: any
-Depends: libmm-fileinfo (= ${Source-Version}),  libmm-common-dev, libglib2.0-dev, libmm-log-sdk-dev, drm-service-dev, libavutil-dev, libavcodec-dev, libavformat-dev, libswscale-dev
+Depends: libmm-fileinfo (= ${Source-Version}),  libmm-common-dev, libglib2.0-dev, libmm-log-sdk-dev, drm-client-dev, libavutil-dev, libavcodec-dev, libavformat-dev, libswscale-dev
 Description: Multimedia Framework FileInfo Library (DEV)
 
 Package: libmm-fileinfo-dbg
@@ -29,5 +29,5 @@ Description: Multimedia Framework FileInfo Library (unstripped)
 Package: mm-fileinfo-tools
 Section: libs
 Architecture: any
-Depends: libmm-common, libglib2.0-0, libmm-log, drm-service-0
+Depends: libmm-common, libglib2.0-0, libmm-log, drm-client-0
 Description: Multimedia Framework FileInfo Tools
index 331742e7ab30e9b3796f9988a1d2188facaa9cf0..98034211818fb4c4d5cc0d824e716699b37f6ded 100755 (executable)
@@ -13,7 +13,7 @@ noinst_HEADERS = include/mm_file_format_dummy.h \
                include/mm_file_format_mmf.h \
                include/mm_file_format_mp3.h \
                include/mm_file_format_wav.h \
-               include/mm_file_format_private.h 
+               include/mm_file_format_private.h
 
 libmmfile_formats_la_SOURCES = mm_file_formats.c \
                        mm_file_format_dummy.c \
@@ -25,7 +25,8 @@ libmmfile_formats_la_SOURCES = mm_file_formats.c \
                        mm_file_format_amr.c \
                        mm_file_format_midi.c \
                        mm_file_format_imelody.c \
-                       mm_file_format_wav.c 
+                       mm_file_format_wav.c \
+                       mm_file_format_frame.c
 
 libmmfile_formats_la_CFLAGS = -I$(srcdir)/include \
                              $(MMCOMMON_CFLAGS) \
@@ -47,9 +48,7 @@ libmmfile_formats_la_CFLAGS += -DMMFILE_FORMAT_DEBUG_DUMP
 endif  
 
 if USE_DRM
-noinst_HEADERS += include/mm_file_format_ffmpeg_drm.h
-libmmfile_formats_la_SOURCES += mm_file_format_ffmpeg_drm.c
-libmmfile_formats_la_CFLAGS += $(DRMSERVICE_CFLAGS) -DDRM_SUPPORT
+libmmfile_formats_la_CFLAGS += $(DRMCLIENT_CFLAGS) -DDRM_SUPPORT
 endif
 
 if USE_IOMMAP
@@ -65,7 +64,7 @@ libmmfile_formats_la_LIBADD = $(MMCOMMON_LIBS) \
                          $(top_builddir)/utils/libmmfile_utils.la 
 
 if USE_DRM
-libmmfile_formats_la_LIBADD += $(DRMSERVICE_LIBS)
+libmmfile_formats_la_LIBADD += $(DRMCLIENT_LIBS)
 endif
 
 libmmfile_formats_la_CFLAGS += $(MMLOG_CFLAGS) -DMMF_LOG_OWNER=0x040 -DMMF_DEBUG_PREFIX=\"MMF-FILE-FORMAT-FFMPEG\"
index a8f48ccdff415e72bfe5e4b2f1586d3be61e4124..25f3328f439201c1201e18c9d3229d08cdcd8e66 100755 (executable)
@@ -64,6 +64,7 @@ typedef struct _mmfileaactaginfo {
   char *copyright;
   char *comment;
   char *genre;
+  char *tracknum;
   char *composer;
   char *classification;
   char *rating;
index f479dea7a4e09b208b68b24c9eccc2375627d218..1669064bab8906d1cdbc69f4965bddda52beec05 100755 (executable)
@@ -237,14 +237,17 @@ int _parse_id3_tag(tMMFILE_AAC_HANDLE* pData)
     goto failure;
   }
 
+  mm_file_id3tag_restore_content_info(hTag);
+
   pData->tagInfo.title = hTag->pTitle;
   pData->tagInfo.author = hTag->pAuthor;
   pData->tagInfo.artist = hTag->pArtist;
   pData->tagInfo.album = hTag->pAlbum;
   pData->tagInfo.year = hTag->pYear;
   pData->tagInfo.copyright = hTag->pCopyright;
-  pData->tagInfo.comment = hTag->pComment;
+  pData->tagInfo.comment = hTag->pDescription;
   pData->tagInfo.genre = hTag->pGenre;
+  pData->tagInfo.tracknum = hTag->pTrackNum;
   pData->tagInfo.composer = hTag->pComposer;
   pData->tagInfo.classification = hTag->pContentGroup;
   pData->tagInfo.rating = hTag->pRating;
@@ -256,7 +259,6 @@ int _parse_id3_tag(tMMFILE_AAC_HANDLE* pData)
 
   ret = MMFILE_AAC_PARSER_SUCCESS;
 
-  mm_file_id3tag_restore_content_info(hTag);
   
 failure:
   if(tagBuff) {
@@ -864,6 +866,8 @@ int mmfile_format_read_tag_aac (MMFileFormatContext *formatContext)
     formatContext->comment = mmfile_strdup(aacinfo.comment);
   if(aacinfo.genre) 
     formatContext->genre = mmfile_strdup(aacinfo.genre);
+  if(aacinfo.tracknum)
+    formatContext->tagTrackNum= mmfile_strdup(aacinfo.tracknum);
   if(aacinfo.composer) 
     formatContext->composer = mmfile_strdup(aacinfo.composer);
   if(aacinfo.classification) 
index 7b519c9af6ff4fed8f82f7ac8259c81f314a974d..8ebf66f6b3415f0363bcb264e412a0817ef50554 100755 (executable)
 #endif
 #include <mm_error.h>
 #include <mm_types.h>
-
-#ifdef DRM_SUPPORT
-#include <drm-service.h>
-#endif
-
 #include "mm_debug.h"
 #include "mm_file_formats.h"
 #include "mm_file_utils.h"
 #include "mm_file_format_ffmpeg.h"
 
-#ifdef DRM_SUPPORT
-#include "mm_file_format_ffmpeg_drm.h"
-#endif
-
 #include "mm_file_format_ffmpeg_mem.h"
 #include <sys/time.h>
 
@@ -83,9 +74,6 @@ int mmfile_format_open_ffmpg (MMFileFormatContext *formatContext)
        AVInputFormat       *grab_iformat = NULL;
        int ret = 0;
        int i;
-#ifdef DRM_SUPPORT
-       drm_content_info_t contentInfo = {0,};
-#endif
        char ffmpegFormatName[MMFILE_FILE_FMT_MAX_LEN] = {0,};
        char mimeType[MMFILE_MIMETYPE_MAX_LEN] = {0,};
 
@@ -156,54 +144,8 @@ int mmfile_format_open_ffmpg (MMFileFormatContext *formatContext)
        if (formatContext->filesrc->type  == MM_FILE_SRC_TYPE_FILE) {
 
                if (formatContext->isdrm == MM_FILE_DRM_OMA) {
-#ifdef DRM_SUPPORT
-                       if (formatContext->formatType == MM_FILE_FORMAT_DIVX || formatContext->formatType == MM_FILE_FORMAT_AVI) {
-                               goto HANDLING_DRM_DIVX;
-                       }
-
-#ifdef __MMFILE_FFMPEG_V085__ 
-                       ffurl_register_protocol(&MMFileDRMProtocol, sizeof (URLProtocol));
-#else
-                       register_protocol (&MMFileDRMProtocol);
-#endif 
-
-                       if (DRM_RESULT_SUCCESS != drm_svc_get_content_info (formatContext->filesrc->file.path, &contentInfo)) {
-                               debug_error ("error: drm_svc_get_content_info\n");
-                               return MMFILE_FORMAT_FAIL;
-                       }
-
-                       memset (ffmpegFormatName, 0x00, MMFILE_FILE_FMT_MAX_LEN);
-
-                       ret = mmfile_util_get_ffmpeg_format (contentInfo.contentType, ffmpegFormatName);
-                       if (MMFILE_UTIL_SUCCESS != ret) {
-                               debug_error ("error: mmfile_util_get_ffmpeg_format\n");
-                               return MMFILE_FORMAT_FAIL;
-                       }
-
-                       #ifdef __MMFILE_TEST_MODE__
-                       debug_warning ("FFMPEG: test........... : %s\n", ffmpegFormatName);
-                       debug_warning ("FFMPEG: DRM URI = %s\n", formatContext->uriFileName);
-                       debug_warning ("FFMPEG: ffmpeg name = %s\n", ffmpegFormatName);
-                       #endif
-
-                       grab_iformat = av_find_input_format (ffmpegFormatName);
-
-                       if (NULL == grab_iformat) {
-                               debug_error ("error: cannot find format\n");
-                               goto exception;
-                       }
-
-#ifdef __MMFILE_FFMPEG_V085__
-                       ret = avformat_open_input (&pFormatCtx, formatContext->uriFileName, grab_iformat, NULL);
-#else
-                       ret = av_open_input_file (&pFormatCtx, formatContext->uriFileName, grab_iformat, 0, NULL);
-#endif
-                       if (ret < 0) {
-                               debug_error("error: cannot open %s %d\n", formatContext->uriFileName, ret);
-                               goto exception;
-                       }
-                       formatContext->privateFormatData = pFormatCtx;
-#endif
+                       debug_error ("error: drm content\n");
+                       goto exception;
                } else {
 HANDLING_DRM_DIVX:
 #ifdef __MMFILE_FFMPEG_V085__
@@ -316,7 +258,9 @@ int mmfile_format_read_stream_ffmpg (MMFileFormatContext * formatContext)
        /**
         *@note asf has long duration bug.
         */
-       formatContext->duration = (long long)(pFormatCtx->duration + pFormatCtx->start_time) * 1000 / AV_TIME_BASE;
+        /*hjkim, 120808, FIX_ME. I modified this code for temporary*/
+       //formatContext->duration = (long long)(pFormatCtx->duration + pFormatCtx->start_time) * 1000 / AV_TIME_BASE;
+       formatContext->duration = (long long)(pFormatCtx->duration) * 1000 / AV_TIME_BASE;
 
        formatContext->videoStreamId = -1;
        formatContext->audioStreamId = -1;
@@ -444,7 +388,7 @@ int mmfile_format_read_tag_ffmpg (MMFileFormatContext *formatContext)
        }
 
 #ifdef __MMFILE_FFMPEG_V085__
-/*hjkim, 111221, use metadata extracted by ffmpeg*/
+/*metadata extracted by ffmpeg*/
        if( (pFormatCtx != NULL) && (pFormatCtx->metadata != NULL) ) {
                AVDictionary *metainfo = pFormatCtx->metadata;
                AVDictionaryEntry *tag=NULL;
@@ -631,7 +575,7 @@ int mmfile_format_read_frame_ffmpg  (MMFileFormatContext *formatContext, unsigne
                #endif
 
                /*sometimes, ffmpeg's width/height is wrong*/
-               #if 0   /*hjkim, 111124, coded_width/height sometimes wrong. so use width/height*/
+               #if 0   /*coded_width/height sometimes wrong. so use width/height*/
                width = pVideoCodecCtx->coded_width == 0 ? pVideoCodecCtx->width : pVideoCodecCtx->coded_width;
                height = pVideoCodecCtx->coded_height == 0 ? pVideoCodecCtx->height : pVideoCodecCtx->coded_height;
                #endif
@@ -871,8 +815,8 @@ static void _dump_av_packet (AVPacket *pkt)
        debug_msg (" pts: %lld\n", pkt->pts);
        debug_msg (" dts: %lld\n", pkt->dts);
        debug_msg (" data: %p\n", pkt->data);
-       debug_msg (" size: %d\n", pkt->pts);
-       debug_msg (" stream_index: %d\n", pkt->size);
+       debug_msg (" size: %d\n", pkt->size);
+       debug_msg (" stream_index: %d\n", pkt->stream_index);
 #ifdef __MMFILE_FFMPEG_V085__  
        debug_msg (" flags: 0x%08X, %s\n", pkt->flags, (pkt->flags & AV_PKT_FLAG_KEY) ? "Keyframe" : "_");
 #else
@@ -907,7 +851,7 @@ static int _get_first_good_video_frame (AVFormatContext *pFormatCtx, AVCodecCont
        char pgm_name[256] = {0,};
 #endif
 
-#define        _RETRY_SEARCH_LIMIT             10
+#define        _RETRY_SEARCH_LIMIT             150
 #define        _KEY_SEARCH_LIMIT               (_RETRY_SEARCH_LIMIT*2)         /*2 = 1 read. some frame need to read one more*/
 #define        _FRAME_SEARCH_LIMIT             1000
 
diff --git a/formats/ffmpeg/mm_file_format_frame.c b/formats/ffmpeg/mm_file_format_frame.c
new file mode 100755 (executable)
index 0000000..3105c4a
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * libmm-fileinfo
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Haejeong Kim <backto.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <stdbool.h>
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libswscale/swscale.h>
+
+#include "mm_debug.h"
+#include "mm_file_formats.h"
+#include "mm_file_utils.h"
+#include "mm_file_format_frame.h"
+
+#define MILLION 1000000
+
+int mmfile_format_get_frame(const char* path, double timestamp, bool keyframe, unsigned char **data, int *size, int *width, int *height)
+{
+       int i;
+       int ret;
+       int videoStream = -1;
+       int frameFinished;
+       double pos = timestamp;
+       bool find = false ;
+       bool first_seek = true;
+       int64_t pts = 0;
+       AVFormatContext *pFormatCtx = NULL;
+       AVCodecContext *pVideoCodecCtx;
+       AVCodec *pCodec = NULL;
+       AVFrame *pFrame = NULL, *pFrameRGB = NULL;
+       AVPacket packet;
+
+       if (!size || !width || !height) {
+               return MMFILE_FORMAT_FAIL;
+       }
+
+       av_register_all();
+
+       /* Open video file */
+       if(avformat_open_input(&pFormatCtx, path, NULL, NULL) != 0) {
+               debug_error("error : avformat_open_input failed");
+               return MMFILE_FORMAT_FAIL; /* Couldn't open file */
+       }
+
+       /* Retrieve stream information */
+       if(av_find_stream_info(pFormatCtx) < 0) {
+               debug_error("error : av_find_stream_info failed");
+               return MMFILE_FORMAT_FAIL; /* Couldn't find stream information */
+       }
+
+       /* Find the first video stream */
+       for(i = 0; i < pFormatCtx->nb_streams; i++) {
+               if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
+                       videoStream = i;
+                       break;
+               }
+       }
+
+       if(videoStream == -1) {
+               debug_error("error : videoStream == -1");
+               return MMFILE_FORMAT_FAIL; /* Didn't find a video stream */
+       }
+
+       /* Get a pointer to the codec context for the video stream */
+       pVideoCodecCtx=pFormatCtx->streams[videoStream]->codec;
+
+       /* Find the decoder for the video stream */
+       pCodec = avcodec_find_decoder(pVideoCodecCtx->codec_id);
+       if(pCodec == NULL) {
+               debug_error("error : Unsupported codec");
+               return MMFILE_FORMAT_FAIL; /* Codec not found */
+       }
+
+       /* Open codec */
+       if(avcodec_open(pVideoCodecCtx, pCodec) < 0) {
+               debug_error("error : avcodec_open failed");
+               return MMFILE_FORMAT_FAIL; /*Could not open codec */
+       }
+
+       /* Storing Data  */
+       /* Allocate video frame */
+       pFrame = avcodec_alloc_frame();
+       if(pFrame == NULL) {
+               debug_error ("error: pFrame is NULL\n");
+               ret = MMFILE_FORMAT_FAIL;
+               goto exception;
+       }
+
+       /* Allocate an AVFrame structure */
+       pFrameRGB = avcodec_alloc_frame();
+       if(pFrameRGB == NULL) {
+               debug_error ("error: pFrameRGB is NULL\n");
+               ret = MMFILE_FORMAT_FAIL;
+               goto exception;
+       }
+
+       /* Seeking */
+       AVStream *pStream = pFormatCtx->streams[videoStream];
+       double duration = (double) pFormatCtx->duration / AV_TIME_BASE;
+       if (duration <= 0) {
+               double tmpDuration = 0.0;
+
+               if (pStream->codec->bit_rate > 0 && pFormatCtx->file_size > 0) {
+                       if (pStream->codec->bit_rate >= 8)
+                               tmpDuration = 0.9 * pFormatCtx->file_size / (pStream->codec->bit_rate / 8);
+
+                       if (tmpDuration > 0)
+                               duration = tmpDuration;
+               }
+       }
+       duration = duration * MILLION;
+       if (duration <= 0 || duration <= pos) {
+               debug_error("duration error");
+               ret = MMFILE_FORMAT_FAIL;
+               goto exception;
+       }
+
+       if (keyframe)
+               av_seek_frame(pFormatCtx, -1, pos, 0);
+       else
+               av_seek_frame(pFormatCtx, -1, pos, AVSEEK_FLAG_ANY);
+
+       /* Reading Data */
+       int64_t tmpPts;
+
+       while(av_read_frame(pFormatCtx, &packet) >= 0) {
+               // Is this a packet from the video stream?
+               if(packet.stream_index == videoStream) {
+                       /* Decode video frame*/
+                       avcodec_decode_video2(pVideoCodecCtx, pFrame, &frameFinished, &packet);
+                       if (packet.flags & AV_PKT_FLAG_KEY) {
+                               if (first_seek) {
+                                       //This is first seeking.
+                                       find = true;
+                               }
+                       } else {
+                               if (first_seek) {
+                                       pts = (packet.pts == AV_NOPTS_VALUE) ? (packet.dts * av_q2d(pStream->time_base)) : packet.pts;
+                                       first_seek = false;
+
+                                       av_seek_frame(pFormatCtx, -1, pos, AVSEEK_FLAG_BACKWARD);
+                               } else {
+                                       tmpPts = (packet.pts == AV_NOPTS_VALUE) ? (packet.dts * av_q2d(pStream->time_base)) : packet.pts;
+                                       if (pts == tmpPts)
+                                               find = true;
+                               }
+                       }
+
+                       if (find)
+                               break;
+               }
+
+               /* Free the packet that was allocated by av_read_frame*/
+               av_free_packet(&packet);
+       }
+
+       /* Did we get a video frame?*/
+       if(frameFinished && find) {
+               debug_msg("FIND");
+
+               /* return frame infromations*/
+               if((pVideoCodecCtx->width == 0) || (pVideoCodecCtx->height == 0)) {
+                       *width = pVideoCodecCtx->coded_width;
+                       *height = pVideoCodecCtx->coded_height;
+               } else {
+                       *width = pVideoCodecCtx->width;
+                       *height = pVideoCodecCtx->height;
+               }
+
+               *size = avpicture_get_size(PIX_FMT_RGB24, *width, *height);
+               *data = mmfile_malloc (*size);
+               if (NULL == *data) {
+                       debug_error ("error: avpicture_get_size. [%d]\n", size);
+                       ret = MMFILE_FORMAT_FAIL;
+                       goto exception;
+               }
+
+               debug_msg("size : %d", *size);
+               debug_msg("width : %d", *width);
+               debug_msg("height : %d", *height);
+               debug_msg("data : %x", *data);
+
+               ret = avpicture_fill ((AVPicture *)pFrameRGB, *data, PIX_FMT_RGB24, *width, *height);
+               if (ret < 0) {
+                       debug_error ("error: avpicture_fill fail. errcode = 0x%08X\n", ret);
+                       ret = MMFILE_FORMAT_FAIL;
+                       goto exception;
+               }
+
+#ifdef __MMFILE_FFMPEG_V085__
+               static struct SwsContext *img_convert_ctx;
+
+               img_convert_ctx = sws_getContext (*width, *height, pVideoCodecCtx->pix_fmt,
+                                         *width, *height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);
+
+               if (NULL == img_convert_ctx) {
+                       debug_error ("failed to get img convet ctx\n");
+                       ret = MMFILE_FORMAT_FAIL;
+                       goto exception;
+               }
+
+               ret = sws_scale (img_convert_ctx, (const uint8_t* const*)pFrame->data, pFrame->linesize,
+                    0, *height, pFrameRGB->data, pFrameRGB->linesize);
+               if ( ret < 0 ) {
+                       debug_error ("failed to convet image\n");
+                       ret = MMFILE_FORMAT_FAIL;
+                       goto exception;
+               }
+
+               sws_freeContext(img_convert_ctx);
+#else
+               ret = img_convert ((AVPicture *)pFrameRGB, PIX_FMT_RGB24, (AVPicture*)pFrame, pVideoCodecCtx->pix_fmt, *width, *height);
+               if ( ret < 0 ) {
+                       debug_error ("failed to convet image\n");
+                       ret = MMFILE_FORMAT_FAIL;
+                       goto exception;
+               }
+#endif
+
+               if (pFrame)                     av_free (pFrame);
+               if (pFrameRGB)          av_free (pFrameRGB);
+               if (pVideoCodecCtx)     avcodec_close(pVideoCodecCtx);
+       }
+
+       return MMFILE_FORMAT_SUCCESS;
+
+exception:
+       if (pVideoCodecCtx)             avcodec_close (pVideoCodecCtx);
+       if (*data)      { mmfile_free (*data); *data = NULL; }
+       if (pFrame)                             av_free (pFrame);
+       if (pFrameRGB)                  av_free (pFrameRGB);
+
+       return ret;
+  }
index 238c385e8fda30672736be03ad18514ca7262e94..37a4bb19b7c2a99085b892f1dafc2b726ec071a3 100755 (executable)
@@ -1846,11 +1846,20 @@ _mmf_SeqDataCheck3(PLOADINFO psLoad, unsigned char bSmafType)
                switch (bTemp & 0xF0)
                {
                case 0x90 :
-                       psLoad->pfnGetByte(psHuf);
+                       psLoad->pfnGetByte(psHuf);      /*Note number*/
                        dIndex ++;
-                       break; // added for prevent
+                       psLoad->pfnGetByte(psHuf);      /*Key Velocity*/
+                       dIndex ++;
+                       sdTemp = _mmf_GetFlex3L(psLoad, &dReadSize);
+                       if (sdTemp < 0) {
+                               return AV_MMF_ERR_CHUNK;
+                       }
+                       dIndex += dReadSize;
+                       if ((unsigned int)sdTemp > dGate)
+                               dGate = sdTemp;
+                       break;
                case 0x80 :
-                       psLoad->pfnGetByte(psHuf);
+                       psLoad->pfnGetByte(psHuf);      /*Note number*/
                        dIndex ++;
                        sdTemp = _mmf_GetFlex3L(psLoad, &dReadSize);
                        if (sdTemp < 0) {
@@ -1863,9 +1872,11 @@ _mmf_SeqDataCheck3(PLOADINFO psLoad, unsigned char bSmafType)
                case 0xA0 :
                case 0xB0 :
                case 0xE0 :
-                       bTemp = psLoad->pfnGetByte(psHuf);
+                       bTemp = psLoad->pfnGetByte(psHuf);      /*B0: Conrol number, E0:Pitch Bend Change LSB*/
                        dIndex ++;
-                       break; // added for prevent
+                       bTemp = psLoad->pfnGetByte(psHuf);      /*B0: Conrol value, E0:Pitch Bend Change MSB*/
+                       dIndex ++;
+                       break;
                case 0xC0 :
                case 0xD0 :
                        bTemp = psLoad->pfnGetByte(psHuf);
@@ -2549,15 +2560,15 @@ _mmf_MalibMakeCRC(unsigned int dSize, unsigned char* pbData)
 static int
 _mmf_MALoad(   unsigned char* pbFile, unsigned int dFSize)
 {
-       PLOADINFO                       psLoad_Info;
-       unsigned int                            bNo;
-       unsigned int                            dChunkID, dChunkNo;
-       unsigned char*                          pbBuf;
-       unsigned int                            dSize, dIndex;
-       int                             sdChunkSize, sdResult;
-       unsigned int                            dCalcCrc, dFileCrc;
-       int                             rVal;
-       bNo = 0;
+       PLOADINFO               psLoad_Info;
+       unsigned int            bNo = 0;
+       unsigned int            dChunkID = 0, dChunkNo = 0;
+       unsigned char*  pbBuf = NULL;
+       unsigned int            dSize = 0, dIndex = 0;
+       int                             sdChunkSize = 0, sdResult = 0;
+       unsigned int            dCalcCrc = 0, dFileCrc = 0;
+       int                             rVal = 0;
+
        pbBuf = pbFile;
        dSize = dFSize;
        psLoad_Info = &(g_sSmaf_Info.sLoad_Info[bNo]);
@@ -2844,12 +2855,12 @@ mmf_file_mmf_get_duration (char *src, int is_xmf)
        long long               src_size = 0L;
 
        PLOADINFO               load_info;
-       unsigned char   *p_crc;
-       unsigned int    dCrc;
+       unsigned char   *p_crc = NULL;
+       unsigned int            dCrc = 0;
        int                             ret = 0;
 
        /*total time (millisecond)*/
-       int     ret_msec;
+       int     ret_msec = 0;
 
        debug_msg ( "\n");
 
index abbe22f44f57597744fb6ebca2bbdd9a31668048..520dfed8a237844944738d4552a105604730b1cd 100755 (executable)
@@ -24,7 +24,7 @@
 #include <stdlib.h>
 
 #ifdef DRM_SUPPORT
-#include <drm-service.h>
+#include <drm_client.h>
 #endif
 
 
@@ -137,9 +137,6 @@ _PreprocessFile (MMFileSourceType *fileSrc, char **urifilename, int *formatEnum,
        int                     pos = 0;
        int                     filename_len = 0;
        int                     index = 0, skip_index = 0;
-#ifdef DRM_SUPPORT
-       drm_content_info_t      contentInfo = {0,};
-#endif
 
        if (fileSrc->type == MM_FILE_SRC_TYPE_FILE) {
                fileName = (const char *)(fileSrc->file.path);
@@ -155,12 +152,14 @@ _PreprocessFile (MMFileSourceType *fileSrc, char **urifilename, int *formatEnum,
                                break;
                }
 
+               memset (extansion_name, 0x00, _MMF_FILE_FILEEXT_MAX);
+
+               /*extract metadata for all file. ex)a , a. , a.mp3*/
                if (pos == 0) {
-                       debug_error ("invalid file format");
-                       return MMFILE_FORMAT_FAIL;      /*invalid file*/
+                       /*even though there is no file extension, extracto metadata*/
+                       debug_msg ("no file extension");
                }
-
-               if (_MMF_FILE_FILEEXT_MAX > (filename_len - pos - 1)) {
+               else if (_MMF_FILE_FILEEXT_MAX > (filename_len - pos - 1)) {
                        strncpy (extansion_name, fileName + pos +1 , (filename_len - pos - 1));
                        extansion_name[filename_len - pos - 1] = '\0';
                } else {
@@ -172,35 +171,26 @@ _PreprocessFile (MMFileSourceType *fileSrc, char **urifilename, int *formatEnum,
                /**
                 * Make URI name with file name
                 */
-               if (DRM_TRUE == drm_svc_is_drm_file (fileSrc->file.path) &&
-                       DRM_FILE_TYPE_OMA == drm_svc_get_drm_type (fileSrc->file.path))
-               {
-                       *isdrm = MM_FILE_DRM_OMA;
-                       #ifdef __MMFILE_TEST_MODE__
-                       debug_msg ("OMA DRM detected.\n");
-                       #endif
-
-                       if (DRM_RESULT_SUCCESS != drm_svc_get_content_info (fileSrc->file.path, &contentInfo)) {
-                               debug_error ("error: drm_svc_get_content_info\n");
-                               return MMFILE_FORMAT_FAIL;
-                       }
-
-                       memset (extansion_name, 0x00, _MMF_FILE_FILEEXT_MAX);
-                       if (MMFILE_UTIL_SUCCESS != mmfile_util_get_file_ext (contentInfo.contentType, extansion_name)) {
-                               debug_error ("error: mmfile_util_get_ffmpeg_format\n");
-                               return MMFILE_FORMAT_FAIL;
-                       }
+               drm_bool_type_e res = DRM_TRUE;
+               drm_file_type_e file_type = DRM_TYPE_UNDEFINED;
+               int ret = 0;
+               bool is_drm = FALSE;
 
-                       *urifilename = mmfile_malloc (MMFILE_DRM_URI_LEN + filename_len + 1);
-                       if (!*urifilename) {
-                               debug_error ("error: mmfile_malloc uriname\n");
-                               return MMFILE_FORMAT_FAIL;
+               ret = drm_is_drm_file (fileSrc->file.path, &res);
+               if (ret == DRM_RETURN_SUCCESS && DRM_TRUE == res)
+               {
+                       ret = drm_get_file_type(fileSrc->file.path, &file_type);
+                       if((ret == DRM_RETURN_SUCCESS) && ((file_type == DRM_TYPE_OMA_V1) ||(file_type == DRM_TYPE_OMA_V2)))
+                       {
+                               is_drm = TRUE;
                        }
+               }
 
-                       memset (*urifilename, 0x00, MMFILE_DRM_URI_LEN + filename_len + 1);
-                       strncpy (*urifilename, MMFILE_DRM_URI, MMFILE_DRM_URI_LEN);
-                       strncat (*urifilename, fileName, filename_len);
-                       (*urifilename)[MMFILE_DRM_URI_LEN + filename_len] = '\0';
+               if (is_drm)
+               {
+                       *isdrm = MM_FILE_DRM_OMA;
+                       debug_error ("OMA DRM detected. Not Support DRM Content\n");
+                       return MMFILE_FORMAT_FAIL;              /*Not Support DRM Content*/
                } 
                else 
 #endif // DRM_SUPPORT                  
index d695865a22ee212ad6329ececb3b598248bbed00..bcaae86693cc581a261e41a3a9547d4ab029d14a 100755 (executable)
@@ -552,6 +552,8 @@ int mm_file_create_content_attrs_simple(MMHandleType *content_attrs, const char
 
 int mm_file_get_synclyrics_info(MMHandleType tag_attrs, int index, unsigned long *time_info, char **lyrics);
 
+int mm_file_get_video_frame(const char* path, double timestamp, bool keyframe, unsigned char **data, int *size, int *width, int *height);
+
 /**
        @}
  */
diff --git a/include/mm_file_format_frame.h b/include/mm_file_format_frame.h
new file mode 100755 (executable)
index 0000000..4f1df94
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * libmm-fileinfo
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Haejeong Kim <backto.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __MMFILE_DYN_LOADING__
+int mmfile_format_get_frame(const char* path, double timestamp, bool keyframe, unsigned char **data, int *size, int *width, int *height);
+#endif
index 903f242648c7cdc825650a3a7cba9aaecf1024fa..43ad6f2ab8ae42b0c939896d55746de6bf8fd548 100755 (executable)
--- a/mm_file.c
+++ b/mm_file.c
@@ -36,6 +36,7 @@
 
 /* internal MM File headers */
 #include "mm_file_formats.h"
+#include "mm_file_format_frame.h"
 #include "mm_file_codecs.h"
 #include "mm_file_utils.h"
 
@@ -147,9 +148,10 @@ int (*mmfile_format_read_stream)   (MMFileFormatContext *formatContext);
 int (*mmfile_format_read_frame)                (MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
 int (*mmfile_format_read_tag)          (MMFileFormatContext *formatContext);
 int (*mmfile_format_close)                     (MMFileFormatContext *formatContext);
-int (*mmfile_codec_open)                       (MMFileCodecContext **codecContext, int codecType, int codecId, MMFileCodecFrame *input);
+int (*mmfile_codec_open)                               (MMFileCodecContext **codecContext, int codecType, int codecId, MMFileCodecFrame *input);
 int (*mmfile_codec_decode)                     (MMFileCodecContext *codecContext, MMFileCodecFrame *output);
 int (*mmfile_codec_close)                      (MMFileCodecContext *codecContext);
+int (*mmfile_format_get_frame)         (const char* path, double timestamp, bool keyframe, unsigned char **data, int *size, int *width, int *height);
 #endif
 
 #ifdef __MMFILE_DYN_LOADING__
@@ -280,6 +282,7 @@ _info_set_attr_media (mmf_attrs_t *attrs, MMFileFormatContext *formatContext)
                if (formatContext->composer && formatContext->author == NULL)   
                                                                                        mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_AUTHOR, formatContext->composer);
                if (formatContext->album)                               mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_ALBUM   , formatContext->album);
+               if (formatContext->copyright)                   mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_COPYRIGHT, formatContext->copyright);
                if (formatContext->comment)                     mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_DESCRIPTION, formatContext->comment);
                if (formatContext->genre)                               mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_GENRE, formatContext->genre);
                if (formatContext->classification)              mm_attrs_set_string_by_name(hattrs, MM_FILE_TAG_CLASSIFICATION, formatContext->classification);
@@ -665,7 +668,7 @@ int mm_file_get_synclyrics_info(MMHandleType tag_attrs, int index, unsigned long
                return MM_ERROR_INVALID_ARGUMENT;
        }
 
-       ret = mm_attrs_get_data_by_name (tag_attrs, MM_FILE_TAG_SYNCLYRICS, &synclyrics_list);
+       ret = mm_attrs_get_data_by_name (tag_attrs, MM_FILE_TAG_SYNCLYRICS, (void **)&synclyrics_list);
        if(ret != MM_ERROR_NONE) {
                #ifdef __MMFILE_TEST_MODE__
                        debug_warning (  "get data fail");
@@ -784,7 +787,7 @@ int mm_file_destroy_tag_attrs(MMHandleType tag_attrs)
                mmfile_free (artwork);
        }
 
-       ret = mm_attrs_get_data_by_name (tag_attrs, MM_FILE_TAG_SYNCLYRICS, &synclyrics_list);
+       ret = mm_attrs_get_data_by_name (tag_attrs, MM_FILE_TAG_SYNCLYRICS, (void **)&synclyrics_list);
 
        if(synclyrics_list != NULL) {
                mm_file_free_synclyrics_list(synclyrics_list);
@@ -1128,6 +1131,38 @@ int mm_file_create_content_attrs_simple(MMHandleType *contents_attrs, const char
        return ret;
 }
 
+EXPORT_API
+int mm_file_get_video_frame(const char* path, double timestamp, bool keyframe, unsigned char **data, int *size, int *width, int *height)
+{
+       int ret = 0;
+       void *formatFuncHandle = NULL;
+#ifdef __MMFILE_DYN_LOADING__
+       /* Get from function argument */
+       formatFuncHandle = dlopen (MMFILE_FORMAT_SO_FILE_NAME, RTLD_LAZY);
+       if (!formatFuncHandle) {
+               debug_error ("error : dlopen");
+               goto exception;
+       }
 
+       mmfile_format_get_frame = dlsym (formatFuncHandle, "mmfile_format_get_frame");
+       if ( !mmfile_format_get_frame ) {
+               debug_error ("error : load library");
+               goto exception;
+       }
+#endif
+       ret = mmfile_format_get_frame(path, timestamp, keyframe, data, size, width, height);
+       if (ret  == MMFILE_FORMAT_FAIL) {
+               debug_error ("error : get frame");
+               goto exception;
+       }
 
+       if (formatFuncHandle) dlclose (formatFuncHandle);
+
+       return MM_ERROR_NONE;
+
+exception:
+       if (formatFuncHandle) dlclose (formatFuncHandle);
+
+       return MM_ERROR_FILE_INTERNAL;
 
+}
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 618807d..4735c03
@@ -1,15 +1,16 @@
 Name:      libmm-fileinfo
 Summary:    Media Fileinfo
-Version:    0.3.0
-Release:    15
+Version:    0.5.0
+Release:    12
 Group:      System/Libraries
-License:    LGPL
+License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
 
 BuildRequires: pkgconfig(mm-common)
 BuildRequires: pkgconfig(mm-log)
+BuildRequires: pkgconfig(libswscale)
 BuildRequires: pkgconfig(glib-2.0)
 BuildRequires: pkgconfig(libavcodec)
 BuildRequires: pkgconfig(libavutil)
@@ -19,7 +20,7 @@ BuildRequires: pkgconfig(libavformat)
 
 %if %{use_drm}
 BuildRequires: libss-client-devel
-BuildRequires: pkgconfig(drm-service)
+BuildRequires: pkgconfig(drm-client)
 %endif
 
 %description
@@ -49,7 +50,6 @@ CFLAGS="${CFLAGS} -D_MM_PROJECT_FLOATER -DEXPORT_API=\"__attribute__((visibility
 make
 
 %install
-rm -rf %{buildroot}
 %make_install
 
 
@@ -59,7 +59,6 @@ rm -rf %{buildroot}
 
 
 %files
-%defattr(-,root,root,-)
 /usr/bin/memtrace_reader
 /usr/bin/mm_file_test
 /usr/lib/libmmffile.so.0
@@ -70,14 +69,13 @@ rm -rf %{buildroot}
 /usr/lib/libmmfile_formats.so.0.0.0
 /usr/lib/libmmfile_utils.so.0
 /usr/lib/libmmfile_utils.so.0.0.0
+/usr/lib/libmmffile.so
+/usr/lib/libmmfile_codecs.so
+/usr/lib/libmmfile_formats.so
+/usr/lib/libmmfile_utils.so
 
 
 %files devel
-%defattr(-,root,root,-)
 /usr/include/mmf/mm_file.h
 /usr/lib/pkgconfig/mm-fileinfo.pc
 
-/usr/lib/libmmffile.so
-/usr/lib/libmmfile_codecs.so
-/usr/lib/libmmfile_formats.so
-/usr/lib/libmmfile_utils.so
index 47f94662529c3aa49b6479f7d4390c7f513110df..b07673a4cc7813de700e8bcd84e72c70067471f7 100755 (executable)
@@ -22,6 +22,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdbool.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -120,7 +121,7 @@ char * VideoCodecTypeString [] = {
 
 FILE *fpFailList = NULL;
 
-static int mmfile_get_file_infomation (void *data, void* user_data);
+static int mmfile_get_file_infomation (void *data, void* user_data, bool file_test);
 
 inline static int mm_file_is_little_endian (void)
 {
@@ -128,6 +129,20 @@ inline static int mm_file_is_little_endian (void)
     return ((char *)&i)[0];
 }
 
+#define READ_FROM_FILE(FILE_PATH, data, size) \
+do{    \
+       FILE * fp = fopen (FILE_PATH, "r");     \
+       if (fp) {       \
+                       fseek (fp, 0, SEEK_END);        \
+                       size = ftell(fp);       \
+                       fseek (fp, 0, SEEK_SET);        \
+                       data = malloc (size);   \
+                       fread (data, size, sizeof(char), fp);   \
+                       fclose (fp);    \
+                       printf("file size = %d\n", size );      \
+       }       \
+}while(0)
+
 static int
 _is_file_exist (const char *filename)
 {
@@ -146,7 +161,7 @@ _is_file_exist (const char *filename)
 int main(int argc, char **argv)
 {
     struct stat statbuf;
-
+       bool file_test = true;          //if you want to test mm_file_create_content_XXX_from_memory() set file_test to false
 
     if (_is_file_exist (argv[1])) {
        int ret = lstat (argv[1], &statbuf);
@@ -162,7 +177,7 @@ int main(int argc, char **argv)
                if ( S_ISDIR (statbuf.st_mode) )        {
                        mmfile_get_file_names (argv[1], mmfile_get_file_infomation, NULL);
                } else {
-                       mmfile_get_file_infomation (argv[1], NULL);
+                       mmfile_get_file_infomation (argv[1], NULL, file_test);
                }
 
                if (fpFailList != NULL) {
@@ -174,7 +189,7 @@ int main(int argc, char **argv)
     exit(0);
 }
 
-static int mmfile_get_file_infomation (void *data, void* user_data)
+static int mmfile_get_file_infomation (void *data, void* user_data, bool file_test)
 {
        MMHandleType content_attrs = 0;
        MMHandleType tag_attrs = 0;
@@ -198,8 +213,17 @@ static int mmfile_get_file_infomation (void *data, void* user_data)
                printf ("Failed to mm_file_get_stream_info() error=[%x]\n", ret);
        }
 
-       /* get content handle */
-       ret = mm_file_create_content_attrs(&content_attrs, filename);
+       if(file_test) {
+               /* get content handle */
+               ret = mm_file_create_content_attrs(&content_attrs, filename);
+       } else {
+               int file_size = 0;
+               unsigned char * buffer = NULL;
+               /* Read file */
+               READ_FROM_FILE(filename, buffer, file_size);
+
+               ret =mm_file_create_content_attrs_from_memory(&content_attrs, buffer, file_size, MM_FILE_FORMAT_3GP);
+       }
 
        if (ret == MM_ERROR_NONE && content_attrs) {
                ContentContext_t ccontent;
@@ -264,8 +288,17 @@ static int mmfile_get_file_infomation (void *data, void* user_data)
                printf ("Failed to mm_file_create_content_attrs() error=[%x]\n", ret);
        }
 
-       /* get tag handle */
-       ret = mm_file_create_tag_attrs(&tag_attrs, filename);
+       if(file_test) {
+               /* get tag handle */
+               ret = mm_file_create_tag_attrs(&tag_attrs, filename);
+       } else {
+               int file_size = 0;
+               unsigned char * buffer = NULL;
+               /* Read file */
+               READ_FROM_FILE(filename, buffer, file_size);
+
+               ret =mm_file_create_tag_attrs_from_memory(&tag_attrs, buffer, file_size, MM_FILE_FORMAT_3GP);
+       }
 
        if (ret == MM_ERROR_NONE && tag_attrs) {
                TagContext_t ctag;
index cfca7cf67d53e1dcdfeb2afa5870672050146fb5..fc05bee5f3ee516a5490469764c5cbcefe85e6d0 100755 (executable)
@@ -30,7 +30,7 @@ typedef enum
        MMFILE_SUCCESS          
 } MMFILE_RETURN;
 
-typedef int (*MMFunc) (void *data, void* user_data);
+typedef int (*MMFunc) (void *data, void* user_data, bool file_test);
 
 int mmfile_get_file_names (char *root_dir, MMFunc cbfunc, void* user_data);
 
index 990ee0443fd88432c57b47b2373ede32db4f2111..7477c1073e7d9d984bc1ef911441588c453d7d42 100755 (executable)
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <stdbool.h>
 #include <glib.h>
 
 #include "mm_file_traverse.h"
@@ -98,7 +99,7 @@ int mmfile_get_file_names (char *root_dir, MMFunc cbfunc, void* user_data)
                                                printf ("file: %s\n", cdirname);
                                                if ( cbfunc != NULL )
                                                {
-                                                       cbfunc (cdirname, user_data);
+                                                       cbfunc (cdirname, user_data, true);
                                                }
                                        }
                                        
index 90b858cfd85a30995d8e10cae911942580187b80..a47d8455912cf28acb86647e571f78d828a9741a 100755 (executable)
@@ -26,11 +26,5 @@ endif
 
 libmmfile_utils_la_LIBADD = $(MMCOMMON_LIBS)
 
-if USE_DRM
-libmmfile_utils_la_SOURCES += mm_file_util_io_drm.c 
-libmmfile_utils_la_CFLAGS += $(DRMSERVICE_CFLAGS) -DDRM_SUPPORT
-libmmfile_utils_la_LIBADD += $(DRMSERVICE_LIBS)
-endif
-
 libmmfile_utils_la_CFLAGS += $(MMLOG_CFLAGS) -DMMF_LOG_OWNER=0x040 -DMMF_DEBUG_PREFIX=\"MMF-FILE-UTILS\"
 libmmfile_utils_la_LIBADD += $(MMLOG_LIBS)
index 0a01ef5b8c87145e4f727089e02747b0147017eb..5b14f9536230e36bf575f80b428d9745afe7974f 100755 (executable)
@@ -40,7 +40,7 @@ extern "C" {
 #include "mm_file_codecs.h"
 
 #define MMFILE_UTIL_FAIL               -1
-#define MMFILE_UTIL_SUCCESS            1
+#define MMFILE_UTIL_SUCCESS    0
 
 #define MMFILE_IO_FAILED               MMFILE_UTIL_FAIL
 #define MMFILE_IO_SUCCESS              MMFILE_UTIL_SUCCESS
index f915b5a9580dbc32ba59b56c31b3962d17ae413d..adc8f0a9d8339980d194de1a0048f97996205542 100755 (executable)
@@ -302,16 +302,10 @@ int mmfile_register_io_all ()
        initialized = 1;
 
        extern MMFileIOFunc mmfile_file_io_handler;
-#ifdef DRM_SUPPORT
-       extern MMFileIOFunc mmfile_drm_io_handler;
-#endif
        extern MMFileIOFunc mmfile_mem_io_handler;
        extern MMFileIOFunc mmfile_mmap_io_handler;
 
        mmfile_register_io_func (&mmfile_file_io_handler);
-#ifdef DRM_SUPPORT
-       mmfile_register_io_func (&mmfile_drm_io_handler);
-#endif
        mmfile_register_io_func (&mmfile_mem_io_handler);    
        mmfile_register_io_func (&mmfile_mmap_io_handler);
 
index 436880377200f2d83f9ec3faf962de7675923d0f..6d23d1a7df5b320935d68b082fe6bb6c4713f88a 100755 (executable)
@@ -92,7 +92,7 @@ char *MMFileUtilGetLocale (int *error)
 #endif
     {
         index = 0;
-        debug_warning ("fail to get gconf-client\n");
+        //debug_warning ("fail to get gconf-client\n");
     }
     
     if (index < 0 || index >= MMFILE_LANGUAGE_MAX)
index cb8dde98d9fd35cbc3e5ff8d37bd2b4ec32d0f51..ada0bd21d81ac40ba39f3f61768b58623c48b530 100755 (executable)
@@ -719,6 +719,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
        unsigned int meta_version = 0;
        MMFILE_3GP_HANDLER_BOX hdlrBox = {0,};
        int encSize = 0;
+       int id3_meta = 0;
 #ifdef ENABLE_ITUNES_META /* We don't support itunes meta now. so this is not defined yet */
        int iTunes_meta = 0;
 #endif
@@ -761,7 +762,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                debug_msg ("ID3v2 tag detected.\n");
                #endif
 
-
+               id3_meta = 1;
 #ifdef ENABLE_ITUNES_META
                iTunes_meta = 0;
 #endif
@@ -769,7 +770,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                                mmfile_io_le_uint32 (hdlrBox.reserved[0]) == FOURCC ('a', 'p', 'p', 'l')) {
 
                #ifdef __MMFILE_TEST_MODE__
-               debug_msg ("Apple iTunes tag detected.\n");
+               debug_msg ("Apple iTunes tag detected by mdir.\n");
                #endif
 
 #ifdef ENABLE_ITUNES_META
@@ -780,9 +781,40 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                                                                                                                                ((char*)&hdlrBox.handler_type)[1],
                                                                                                                                ((char*)&hdlrBox.handler_type)[2],
                                                                                                                                ((char*)&hdlrBox.handler_type)[3]);
-               goto exception;
+               //goto exception;
        }
 
+#ifdef ENABLE_ITUNES_META
+       if(!id3_meta && !iTunes_meta) {
+               /*Check ilst.
+               APPLE meta data for iTunes reader = 'mdir.' so if handler type is 'mdir', this content may has itunes meta.
+               most of contents has 'mdir' + 'appl'. but some contents just has 'mdir'
+               but 'ilst' is meta for iTunes. so find 'ilst' is more correct to check if this contents has iTunes meta or not.*/
+
+               char *ilst_box = "ilst";
+               int buf_size = strlen(ilst_box);
+
+               unsigned char read_buf[buf_size+1];
+               memset(read_buf, 0x00, buf_size+1);
+
+               /* skip hdlr box */
+               mmfile_seek (fp, hdlrBoxHeader.size - MMFILE_MP4_BASIC_BOX_HEADER_LEN - MMFILE_3GP_HANDLER_BOX_LEN +4, SEEK_CUR);       //+4 is hdlr size field
+
+               readed = mmfile_read (fp, read_buf, buf_size);  // to find 'ilst'
+               if (readed != buf_size) {
+                       debug_error ("read fail [%d]\n", readed);
+                       goto exception;
+               }
+
+               if(read_buf[0] == 'i' && read_buf[1] == 'l' && read_buf[2] == 's' && read_buf[3] == 't') {
+                       #ifdef __MMFILE_TEST_MODE__
+                               debug_msg ("Apple iTunes tag detected by ilst.\n");
+                       #endif
+
+                       iTunes_meta = 1;
+               }
+       }
+#endif
 
 #ifdef ENABLE_ITUNES_META
        if (iTunes_meta) {
@@ -815,7 +847,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                        if (readed != _ITUNES_READ_BUF_SZ)
                                goto exception;
 
-/*hjkim, 111221, ffmpeg extract artist, genre, tracknum, excep cover image. see mov_read_udta_string()*/
+/*ffmpeg extract artist, tracknum, excep cover image. see mov_read_udta_string()*/
 #if 0
                        /**
                         * Artist : Added 2010.10.28
@@ -834,36 +866,36 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                        }
 
                        /**
-                        * Genre : Added 2010.10.27
+                        * Track number
                         */
-                       if (genre_found == 0 &&
-                               read_buf[0] == 'g' && read_buf[1] == 'n' && read_buf[2] == 'r' && read_buf[3] == 'e' &&
+                       if (track_found == 0 &&
+                               read_buf[0] == 't' && read_buf[1] == 'r' && read_buf[2] == 'k' && read_buf[3] == 'n' &&
                                read_buf[8] == 'd' && read_buf[9] == 'a' && read_buf[10] == 't' && read_buf[11] == 'a') {
 
-                               genre_found = 1;
-                               genre_offset = mmfile_tell (fp);
+                               track_found = 1;
+                               track_offset = mmfile_tell (fp);
 
                                #ifdef __MMFILE_TEST_MODE__
-                               debug_msg ("[%s][%d]----------------------------------- genre found, offset=[%lld]\n", __func__, __LINE__, genre_offset);
+                               debug_msg ("[%s][%d]----------------------------------- Track found, offset=[%lld]\n", __func__, __LINE__, track_offset);
                                #endif
                        }
-
-
+#endif
                        /**
-                        * Track number
+                        * Genre : Added 2010.10.27
                         */
-                       if (track_found == 0 &&
-                               read_buf[0] == 't' && read_buf[1] == 'r' && read_buf[2] == 'k' && read_buf[3] == 'n' &&
+                       /*ffmpeg extract genre but only (0xa9,'g','e','n'). see mov_read_udta_string()*/
+                       if (genre_found == 0 &&
+                               read_buf[0] == 'g' && read_buf[1] == 'n' && read_buf[2] == 'r' && read_buf[3] == 'e' &&
                                read_buf[8] == 'd' && read_buf[9] == 'a' && read_buf[10] == 't' && read_buf[11] == 'a') {
 
-                               track_found = 1;
-                               track_offset = mmfile_tell (fp);
+                               genre_found = 1;
+                               genre_offset = mmfile_tell (fp);
 
                                #ifdef __MMFILE_TEST_MODE__
-                               debug_msg ("[%s][%d]----------------------------------- Track found, offset=[%lld]\n", __func__, __LINE__, track_offset);
+                               debug_msg ("[%s][%d]----------------------------------- genre found, offset=[%lld]\n", __func__, __LINE__, genre_offset);
                                #endif
                        }
-#endif
+
                        /**
                         * Cover image
                         */
@@ -886,7 +918,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                        mmfile_seek (fp, -(_ITUNES_READ_BUF_SZ - 1), SEEK_CUR); /*FIXME: poor search*/
                } /*loop*/
 
-/*hjkim, 111221, ffmpeg extract artist, genre, tracknum, excep cover image. see mov_read_udta_string()*/
+/*ffmpeg extract artist, tracknum, excep cover image. see mov_read_udta_string()*/
 #if 0
                if (artist_found) {
                        if (artist_sz > 0) {
@@ -919,30 +951,6 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                        }
                }
 
-               if (genre_found) {
-                               mmfile_seek (fp, genre_offset, SEEK_SET);
-                               readed = mmfile_read (fp, read_buf, _ITUNES_GENRE_NUM_SZ);
-                               if (readed != _ITUNES_GENRE_NUM_SZ) {
-                                       debug_error ("failed to read. ret = %d, in = %d\n", readed, _ITUNES_GENRE_NUM_SZ);
-                               } else {
-                                       genre_index = mmfile_io_be_uint16 (*(int*)read_buf);
-                                       #ifdef __MMFILE_TEST_MODE__
-                                       debug_msg ("[%s][%d] genre index=[%d] \n", __func__, __LINE__, genre_index);
-                                       #endif
-                                       if (genre_index > 0 && genre_index < GENRE_COUNT)       {
-                                               if (!formatContext->genre) {
-                                                       memset (read_buf, 0x00, _ITUNES_READ_BUF_SZ);
-                                                       snprintf ((char*)read_buf, sizeof(read_buf),"%s", MpegAudio_Genre[genre_index-1]);
-                                                       #ifdef __MMFILE_TEST_MODE__
-                                                       debug_msg ("[%s][%d] genre string=[%s] \n", __func__, __LINE__, read_buf);
-                                                       #endif
-                                                       formatContext->genre = mmfile_strdup ((const char*)read_buf);
-                                               }
-                                       }
-                               }
-                       }
-
-
                if (track_found) {
                        mmfile_seek (fp, track_offset, SEEK_SET);
                        readed = mmfile_read (fp, read_buf, _ITUNES_TRACK_NUM_SZ);
@@ -958,9 +966,29 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
                        }
                }
 #endif
+               if (genre_found) {
+                       mmfile_seek (fp, genre_offset, SEEK_SET);
+                       readed = mmfile_read (fp, read_buf, _ITUNES_GENRE_NUM_SZ);
+                       if (readed != _ITUNES_GENRE_NUM_SZ) {
+                               debug_error ("failed to read. ret = %d, in = %d\n", readed, _ITUNES_GENRE_NUM_SZ);
+                       } else {
+                               genre_index = mmfile_io_be_uint16 (*(int*)read_buf);
+                               #ifdef __MMFILE_TEST_MODE__
+                               debug_msg ("[%s][%d] genre index=[%d] \n", __func__, __LINE__, genre_index);
+                               #endif
+                               if (genre_index > 0 && genre_index < GENRE_COUNT)       {
+                                       if (!formatContext->genre) {
+                                               memset (read_buf, 0x00, _ITUNES_READ_BUF_SZ);
+                                               snprintf ((char*)read_buf, sizeof(read_buf),"%s", MpegAudio_Genre[genre_index-1]);
+                                               #ifdef __MMFILE_TEST_MODE__
+                                               debug_msg ("[%s][%d] genre string=[%s] \n", __func__, __LINE__, read_buf);
+                                               #endif
+                                               formatContext->genre = mmfile_strdup ((const char*)read_buf);
+                                       }
+                               }
+                       }
+               }
 /*
-       hjkim, 11220.
-
        1) below spec is in "iTunes Package Asset Specification 4.3" published by apple.
        Music Cover Art Image Profile
        - TIFF with ".tif" extension (32-bit uncompressed), JPEG with ".jpg" extension (quality unconstrained), or PNG with ".png" extension
@@ -1007,8 +1035,9 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
 
                return MMFILE_UTIL_SUCCESS;
 
-       } else {
+       } else
 #endif
+       if(id3_meta) {
                /**
                 * ID3v2
                 */
@@ -1144,9 +1173,7 @@ static int GetTagFromMetaBox (MMFileFormatContext *formatContext, MMFileIOHandle
 
                return MMFILE_UTIL_SUCCESS;
 
-#ifdef ENABLE_ITUNES_META
        }
-#endif
 
 
 exception:
@@ -2485,6 +2512,10 @@ bool mm_file_id3tag_parse_v223(AvFileContentInfo* pInfo, unsigned char *buffer)
                                                                pInfo->pGenre = mmfile_string_convert ((const char*)pExtContent, realCpyFrameNum, "UTF-8", locale, NULL, (unsigned int*)&pInfo->genreLen);
                                                        }
 
+                                                               #ifdef __MMFILE_TEST_MODE__
+                                                                       debug_msg ( "pInfo->pGenre returned = (%s), pInfo->genreLen(%d)\n", pInfo->pGenre, pInfo->genreLen);
+                                                               #endif
+
                                                        pInfo->tagV2Info.bGenreMarked = true;
                                                }
                                                else if(strncmp((char *)CompTmp, "TRCK", 4) == 0 && pInfo->tagV2Info.bTrackNumMarked == false)
@@ -3071,7 +3102,7 @@ bool mm_file_id3tag_parse_v224(AvFileContentInfo* pInfo, unsigned char *buffer)
                                                        #endif
                                                        pInfo->tagV2Info.bAlbumMarked = true;
                                                }
-                                               else if(strncmp((char *)CompTmp, "TYER", 4) == 0 && pInfo->tagV2Info.bYearMarked == false)
+                                               else if(strncmp((char *)CompTmp, "TYER", 4) == 0 && pInfo->tagV2Info.bYearMarked == false)      //TODO. TYER is replaced by the TDRC. but many files use TYER in v2.4
                                                {
                                                        if(textEncodingType == AV_ID3V2_UTF16)
                                                        {
@@ -3598,7 +3629,7 @@ bool mm_file_id3tag_parse_v224(AvFileContentInfo* pInfo, unsigned char *buffer)
                                                        #endif
                                                        pInfo->tagV2Info.bComposerMarked = true;
                                                }
-                                               else if(strncmp((char *)CompTmp, "TRDA", 4) == 0 && pInfo->tagV2Info.bRecDateMarked== false)
+                                               else if(strncmp((char *)CompTmp, "TDRC", 4) == 0 && pInfo->tagV2Info.bRecDateMarked== false)    //TYER(year) and TRDA are replaced by the TDRC
                                                {
                                                        if(textEncodingType == AV_ID3V2_UTF16)
                                                        {
@@ -3848,7 +3879,7 @@ void mm_file_id3tag_restore_content_info(AvFileContentInfo* pInfo)
                else
                {
                        #ifdef __MMFILE_TEST_MODE__
-                       debug_msg (  "pInfo->genreLen size is Zero Or not UTF16 code! %d %s\n",pInfo->genreLen,pInfo->pGenre);
+                       debug_msg (  "pInfo->genreLen size is Zero Or not UTF16 code! genreLen[%d] genre[%s]\n",pInfo->genreLen,pInfo->pGenre);
                        #endif
                        if (pInfo->pGenre) {
                                pInfo->genreLen = strlen(pInfo->pGenre);
@@ -3924,7 +3955,7 @@ void mm_file_id3tag_restore_content_info(AvFileContentInfo* pInfo)
                                        pInfo->pGenre[pInfo->genreLen] = '\0';
                                }
                                #ifdef __MMFILE_TEST_MODE__
-                               debug_msg ( "pInfo->pGenre = %s\n", pInfo->pGenre);
+                               debug_msg ( "pInfo->pGenre = %s, pInfo->genreLen = %d\n", pInfo->pGenre, pInfo->genreLen);
                                #endif
                        }
                        else