Fix : Extract the video meta data on demand to enhance performance 73/12673/2
authorSeokpil Park <seokpil.park@samsung.com>
Fri, 30 Aug 2013 11:54:55 +0000 (20:54 +0900)
committerJaehwa Shin <jaehwa.shin@samsung.com>
Thu, 21 Nov 2013 07:11:56 +0000 (23:11 -0800)
Change-Id: I361f158086691c7812cde4562fd02391998bb31a
Signed-off-by: Seokpil Park <seokpil.park@samsung.com>
src/FCnt_ContentManagerImpl.cpp
src/FCnt_VideoContentInfoImpl.cpp
src/inc/FCnt_VideoContentInfoImpl.h

index b7be808..6d25bb4 100644 (file)
@@ -2019,14 +2019,7 @@ _ContentManagerImpl::MakeVideoContentInfo(const media_info_h pMediaInfo, void* p
        pVideoContentInfoImpl->SetDuration(intValue);
        SysLog(NID_CNT, "META: duration[%d]", intValue);
 
-       // Get from metadata extractor (framerate, audio bitrate, video bitrate)
-       VideoMetadata* pVideoMetadata = ContentManagerUtil::GetVideoMetaN(pVideoContentInfoImpl->GetContentPath());
-       result r = GetLastResult();
-       SysTryReturnResult(NID_CNT, pVideoMetadata != null, r, "GetVideoMetadata() failed.");
-
-       pVideoContentInfoImpl->SetFramerate(pVideoMetadata->GetFramerate());
-       pVideoContentInfoImpl->SetAudioBitrate(pVideoMetadata->GetAudioBitrate());
-       pVideoContentInfoImpl->SetVideoBitrate(pVideoMetadata->GetVideoBitrate());
+       // Get some information from metadata extractor when calling VideoContentInfo (framerate, audio bitrate, video bitrate)
 
        return E_SUCCESS;
 }
index ea5f45d..46ee88a 100644 (file)
@@ -20,6 +20,7 @@
  * This file contains implementation of the %VideoContentInfo class.
  */
 
+#include <unique_ptr.h>
 #include <FBaseSysLog.h>
 #include <FCntContentManagerUtil.h>
 #include <FCntVideoMetadata.h>
@@ -214,18 +215,36 @@ _VideoContentInfoImpl::GetBitrate(void) const
 int
 _VideoContentInfoImpl::GetAudioBitrate(void) const
 {
+       if (__audioBitrate == 0)
+       {
+               result r = GetVideoMetadata();
+               SysTryLogReturn(NID_CNT, !IsFailed(r), __audioBitrate, "GetVideoMetadata failed.");
+       }
+
        return __audioBitrate;
 }
 
 int
 _VideoContentInfoImpl::GetVideoBitrate(void) const
 {
+       if (__videoBitrate == 0)
+       {
+               result r = GetVideoMetadata();
+               SysTryLogReturn(NID_CNT, !IsFailed(r), __videoBitrate, "GetVideoMetadata failed.");
+       }
+
        return __videoBitrate;
 }
 
 int
 _VideoContentInfoImpl::GetFramerate(void) const
 {
+       if (__framerate == 0)
+       {
+               result r = GetVideoMetadata();
+               SysTryLogReturn(NID_CNT, !IsFailed(r), __framerate, "GetVideoMetadata failed.");
+       }
+
        return __framerate;
 }
 
@@ -337,4 +356,23 @@ _VideoContentInfoImpl::SetDuration(long duration)
        __duration = duration;
 }
 
+result
+_VideoContentInfoImpl::GetVideoMetadata(void) const
+{
+       unique_ptr< VideoMetadata > pVideoMetadata(ContentManagerUtil::GetVideoMetaN(GetContentPath()));
+       result r = GetLastResult();
+       SysTryReturn(NID_CNT, pVideoMetadata != null, r, r, "[%s] Failed to perform GetVideoMetadata operation.", GetErrorMessage(r));
+
+       // framerate
+       __framerate = pVideoMetadata->GetFramerate();
+
+       // audio bitrate
+       __audioBitrate = pVideoMetadata->GetAudioBitrate();
+
+       // video bitrate
+       __videoBitrate = pVideoMetadata->GetVideoBitrate();
+
+       return E_SUCCESS;
+}
+
 }}
index 1b5f181..f56621e 100644 (file)
@@ -97,11 +97,13 @@ private:
 
        _VideoContentInfoImpl& operator =(const _VideoContentInfoImpl& rhs);
 
+       result GetVideoMetadata(void) const;
+
        int __width;
        int __height;
-       int __framerate;
-       int __audioBitrate;
-       int __videoBitrate;
+       mutable int __framerate;
+       mutable int __audioBitrate;
+       mutable int __videoBitrate;
        long __duration;
        Tizen::Base::String __artist;
        Tizen::Base::String __genre;