summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaejeong Kim <backto.kim@samsung.com>2012-08-21 18:21:53 +0900
committerHaejeong Kim <backto.kim@samsung.com>2012-08-21 18:21:53 +0900
commitc47bcf19438edeba50e3ef20b19b18227bb9e551 (patch)
tree9d5b3984cd7d12c3b30e6f2b00f9bfc83f525d12
parent44d9209751977fa2a6ff189d966d73cf044dfdaf (diff)
downloadlibmm-fileinfo-c47bcf19438edeba50e3ef20b19b18227bb9e551.tar.gz
libmm-fileinfo-c47bcf19438edeba50e3ef20b19b18227bb9e551.tar.bz2
libmm-fileinfo-c47bcf19438edeba50e3ef20b19b18227bb9e551.zip
2.0_beta
-rwxr-xr-xMakefile.am3
-rwxr-xr-xTC/utc/utc_mm_file_create_content_attrs_from_memory_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_create_content_attrs_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_create_content_attrs_simple_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_create_tag_attrs_from_memory_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_create_tag_attrs_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_destroy_content_attrs_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_destroy_tag_attrs_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_get_attrs_func.c1
-rwxr-xr-xTC/utc/utc_mm_file_get_stream_info_func.c10
-rwxr-xr-xTC/utc/utc_mm_fileinfo_common.h4
-rwxr-xr-xconfigure.ac6
-rwxr-xr-x[-rw-r--r--]debian/changelog874
-rwxr-xr-xdebian/control8
-rwxr-xr-xformats/ffmpeg/Makefile.am11
-rwxr-xr-xformats/ffmpeg/include/mm_file_format_aac.h1
-rwxr-xr-xformats/ffmpeg/mm_file_format_aac.c8
-rwxr-xr-xformats/ffmpeg/mm_file_format_ffmpeg.c76
-rwxr-xr-xformats/ffmpeg/mm_file_format_frame.c250
-rwxr-xr-xformats/ffmpeg/mm_file_format_mmf.c45
-rwxr-xr-xformats/ffmpeg/mm_file_formats.c58
-rwxr-xr-xinclude/mm_file.h2
-rwxr-xr-xinclude/mm_file_format_frame.h24
-rwxr-xr-xmm_file.c41
-rwxr-xr-x[-rw-r--r--]packaging/libmm-fileinfo.spec20
-rwxr-xr-xtests/mm_file_test.c49
-rwxr-xr-xtests/mm_file_traverse.h2
-rwxr-xr-xtests/mm_file_traverser.c3
-rwxr-xr-xutils/Makefile.am6
-rwxr-xr-xutils/include/mm_file_utils.h2
-rwxr-xr-xutils/mm_file_util_io.c6
-rwxr-xr-xutils/mm_file_util_locale.c2
-rwxr-xr-xutils/mm_file_util_tag.c137
33 files changed, 1415 insertions, 241 deletions
diff --git a/Makefile.am b/Makefile.am
index 13edf4f..68052bb 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -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
diff --git a/TC/utc/utc_mm_file_create_content_attrs_from_memory_func.c b/TC/utc/utc_mm_file_create_content_attrs_from_memory_func.c
index 0f29d60..87db9bc 100755
--- a/TC/utc/utc_mm_file_create_content_attrs_from_memory_func.c
+++ b/TC/utc/utc_mm_file_create_content_attrs_from_memory_func.c
@@ -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"
diff --git a/TC/utc/utc_mm_file_create_content_attrs_func.c b/TC/utc/utc_mm_file_create_content_attrs_func.c
index 3721bcc..773d287 100755
--- a/TC/utc/utc_mm_file_create_content_attrs_func.c
+++ b/TC/utc/utc_mm_file_create_content_attrs_func.c
@@ -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 */
diff --git a/TC/utc/utc_mm_file_create_content_attrs_simple_func.c b/TC/utc/utc_mm_file_create_content_attrs_simple_func.c
index 66cda26..6d859c3 100755
--- a/TC/utc/utc_mm_file_create_content_attrs_simple_func.c
+++ b/TC/utc/utc_mm_file_create_content_attrs_simple_func.c
@@ -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"
///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/TC/utc/utc_mm_file_create_tag_attrs_from_memory_func.c b/TC/utc/utc_mm_file_create_tag_attrs_from_memory_func.c
index 30c8320..ff22c19 100755
--- a/TC/utc/utc_mm_file_create_tag_attrs_from_memory_func.c
+++ b/TC/utc/utc_mm_file_create_tag_attrs_from_memory_func.c
@@ -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) \
diff --git a/TC/utc/utc_mm_file_create_tag_attrs_func.c b/TC/utc/utc_mm_file_create_tag_attrs_func.c
index c0192b7..93e1733 100755
--- a/TC/utc/utc_mm_file_create_tag_attrs_func.c
+++ b/TC/utc/utc_mm_file_create_tag_attrs_func.c
@@ -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"
///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/TC/utc/utc_mm_file_destroy_content_attrs_func.c b/TC/utc/utc_mm_file_destroy_content_attrs_func.c
index 34ec6df..44f6679 100755
--- a/TC/utc/utc_mm_file_destroy_content_attrs_func.c
+++ b/TC/utc/utc_mm_file_destroy_content_attrs_func.c
@@ -57,7 +57,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_destroy_content_attrs"
struct tet_testlist tet_testlist[] = {
diff --git a/TC/utc/utc_mm_file_destroy_tag_attrs_func.c b/TC/utc/utc_mm_file_destroy_tag_attrs_func.c
index 85109da..a9c5520 100755
--- a/TC/utc/utc_mm_file_destroy_tag_attrs_func.c
+++ b/TC/utc/utc_mm_file_destroy_tag_attrs_func.c
@@ -57,7 +57,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_destroy_tag_attrs"
///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/TC/utc/utc_mm_file_get_attrs_func.c b/TC/utc/utc_mm_file_get_attrs_func.c
index 09eed96..4dca305 100755
--- a/TC/utc/utc_mm_file_get_attrs_func.c
+++ b/TC/utc/utc_mm_file_get_attrs_func.c
@@ -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_get_attrs"
///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/TC/utc/utc_mm_file_get_stream_info_func.c b/TC/utc/utc_mm_file_get_stream_info_func.c
index a4f33fa..7fb16e5 100755
--- a/TC/utc/utc_mm_file_get_stream_info_func.c
+++ b/TC/utc/utc_mm_file_get_stream_info_func.c
@@ -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);
}
diff --git a/TC/utc/utc_mm_fileinfo_common.h b/TC/utc/utc_mm_fileinfo_common.h
index 9d8ed3c..0e04e6b 100755
--- a/TC/utc/utc_mm_fileinfo_common.h
+++ b/TC/utc/utc_mm_fileinfo_common.h
@@ -54,6 +54,10 @@
#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();
diff --git a/configure.ac b/configure.ac
index 1ae5f56..0f29e31 100755
--- a/configure.ac
+++ b/configure.ac
@@ -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")
diff --git a/debian/changelog b/debian/changelog
index e9ef990..8986111 100644..100755
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
diff --git a/debian/control b/debian/control
index 7887ddf..41c0818 100755
--- a/debian/control
+++ b/debian/control
@@ -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
diff --git a/formats/ffmpeg/Makefile.am b/formats/ffmpeg/Makefile.am
index 331742e..9803421 100755
--- a/formats/ffmpeg/Makefile.am
+++ b/formats/ffmpeg/Makefile.am
@@ -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\"
diff --git a/formats/ffmpeg/include/mm_file_format_aac.h b/formats/ffmpeg/include/mm_file_format_aac.h
index a8f48cc..25f3328 100755
--- a/formats/ffmpeg/include/mm_file_format_aac.h
+++ b/formats/ffmpeg/include/mm_file_format_aac.h
@@ -64,6 +64,7 @@ typedef struct _mmfileaactaginfo {
char *copyright;
char *comment;
char *genre;
+ char *tracknum;
char *composer;
char *classification;
char *rating;
diff --git a/formats/ffmpeg/mm_file_format_aac.c b/formats/ffmpeg/mm_file_format_aac.c
index f479dea..1669064 100755
--- a/formats/ffmpeg/mm_file_format_aac.c
+++ b/formats/ffmpeg/mm_file_format_aac.c
@@ -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)
diff --git a/formats/ffmpeg/mm_file_format_ffmpeg.c b/formats/ffmpeg/mm_file_format_ffmpeg.c
index 7b519c9..8ebf66f 100755
--- a/formats/ffmpeg/mm_file_format_ffmpeg.c
+++ b/formats/ffmpeg/mm_file_format_ffmpeg.c
@@ -29,20 +29,11 @@
#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
index 0000000..3105c4a
--- /dev/null
+++ b/formats/ffmpeg/mm_file_format_frame.c
@@ -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;
+ }
diff --git a/formats/ffmpeg/mm_file_format_mmf.c b/formats/ffmpeg/mm_file_format_mmf.c
index 238c385..37a4bb1 100755
--- a/formats/ffmpeg/mm_file_format_mmf.c
+++ b/formats/ffmpeg/mm_file_format_mmf.c
@@ -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");
diff --git a/formats/ffmpeg/mm_file_formats.c b/formats/ffmpeg/mm_file_formats.c
index abbe22f..520dfed 100755
--- a/formats/ffmpeg/mm_file_formats.c
+++ b/formats/ffmpeg/mm_file_formats.c
@@ -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
diff --git a/include/mm_file.h b/include/mm_file.h
index d695865..bcaae86 100755
--- a/include/mm_file.h
+++ b/include/mm_file.h
@@ -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
index 0000000..4f1df94
--- /dev/null
+++ b/include/mm_file_format_frame.h
@@ -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
diff --git a/mm_file.c b/mm_file.c
index 903f242..43ad6f2 100755
--- 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
diff --git a/packaging/libmm-fileinfo.spec b/packaging/libmm-fileinfo.spec
index 618807d..4735c03 100644..100755
--- a/packaging/libmm-fileinfo.spec
+++ b/packaging/libmm-fileinfo.spec
@@ -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
diff --git a/tests/mm_file_test.c b/tests/mm_file_test.c
index 47f9466..b07673a 100755
--- a/tests/mm_file_test.c
+++ b/tests/mm_file_test.c
@@ -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;
diff --git a/tests/mm_file_traverse.h b/tests/mm_file_traverse.h
index cfca7cf..fc05bee 100755
--- a/tests/mm_file_traverse.h
+++ b/tests/mm_file_traverse.h
@@ -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);
diff --git a/tests/mm_file_traverser.c b/tests/mm_file_traverser.c
index 990ee04..7477c10 100755
--- a/tests/mm_file_traverser.c
+++ b/tests/mm_file_traverser.c
@@ -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);
}
}
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 90b858c..a47d845 100755
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -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)
diff --git a/utils/include/mm_file_utils.h b/utils/include/mm_file_utils.h
index 0a01ef5..5b14f95 100755
--- a/utils/include/mm_file_utils.h
+++ b/utils/include/mm_file_utils.h
@@ -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
diff --git a/utils/mm_file_util_io.c b/utils/mm_file_util_io.c
index f915b5a..adc8f0a 100755
--- a/utils/mm_file_util_io.c
+++ b/utils/mm_file_util_io.c
@@ -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);
diff --git a/utils/mm_file_util_locale.c b/utils/mm_file_util_locale.c
index 4368803..6d23d1a 100755
--- a/utils/mm_file_util_locale.c
+++ b/utils/mm_file_util_locale.c
@@ -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)
diff --git a/utils/mm_file_util_tag.c b/utils/mm_file_util_tag.c
index cb8dde9..ada0bd2 100755
--- a/utils/mm_file_util_tag.c
+++ b/utils/mm_file_util_tag.c
@@ -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