shithub: openh264

Download patch

ref: 864ff21021b207153b916de6d727dcc23671796a
parent: 18dc37a887c9070fe6599bb1b9ef941be7ac2800
parent: f092b2a4785546691cc83930c03701063f1fc0c0
author: sijchen <[email protected]>
date: Fri Apr 17 13:24:30 EDT 2015

Merge pull request #1899 from shihuade/WP8V4.8-UTDemo

add ut demo for wp8

--- a/Makefile
+++ b/Makefile
@@ -183,14 +183,20 @@
 
 ifneq (android, $(OS))
 ifneq (ios, $(OS))
+ifneq (msvc-wp, $(OS))
 include $(SRC_PATH)codec/console/dec/targets.mk
 include $(SRC_PATH)codec/console/enc/targets.mk
 include $(SRC_PATH)codec/console/common/targets.mk
 endif
 endif
+endif
 
 ifneq (ios, $(OS))
+ifeq (msvc-wp, $(OS))
+libraries: $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX) $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX) $(LIBPREFIX)ut.$(SHAREDLIBSUFFIX)
+else
 libraries: $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX) $(LIBPREFIX)$(PROJECT_NAME).$(SHAREDLIBSUFFIX)
+endif
 else
 libraries: $(LIBPREFIX)$(PROJECT_NAME).$(LIBSUFFIX)
 endif
@@ -278,7 +284,7 @@
 LIBRARIES +=$(LIBPREFIX)ut.$(SHAREDLIBSUFFIX)
 $(LIBPREFIX)ut.$(SHAREDLIBSUFFIX): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $(PROCESSING_UNITTEST_OBJS) $(API_TEST_OBJS) $(COMMON_UNITTEST_OBJS)  $(CODEC_UNITTEST_DEPS)
 	$(QUIET)rm -f $@
-	$(QUIET_CXX)$(CXX) $(SHARED) $(CXX_LINK_O) $+ $(LDFLAGS) $(CODEC_UNITTEST_LDFLAGS)
+	$(QUIET_CXX)$(CXX) $(SHARED) $(CXX_LINK_O) $+ $(LDFLAGS) $(UTSHLDFLAGS) $(CODEC_UNITTEST_LDFLAGS)
 
 binaries: codec_unittest$(EXEEXT)
 BINARIES += codec_unittest$(EXEEXT)
@@ -301,6 +307,7 @@
 	@:
 endif
 else
+ifneq (msvc-wp,$(OS))
 codec_unittest$(EXEEXT): $(DECODER_UNITTEST_OBJS) $(ENCODER_UNITTEST_OBJS) $(PROCESSING_UNITTEST_OBJS) $(API_TEST_OBJS) $(COMMON_UNITTEST_OBJS) $(CODEC_UNITTEST_DEPS) | res
 	$(QUIET)rm -f $@
 	$(QUIET_CXX)$(CXX) $(CXX_LINK_O) $+ $(CODEC_UNITTEST_LDFLAGS) $(LDFLAGS)
@@ -307,6 +314,10 @@
 
 res:
 	$(QUIET)if [ ! -e res ]; then ln -s $(SRC_PATH)res .; fi
+else
+codec_unittest$(EXEEXT):
+	@:
+endif
 
 endif
 endif
--- a/build/AutoBuildForWPAndWindows.bat
+++ b/build/AutoBuildForWPAndWindows.bat
@@ -78,6 +78,7 @@
   set DllFile=openh264.dll
   set LibFile=openh264.lib
   set PDBFile=openh264.pdb
+  set UTDllFile=ut.dll
   set UTBinFile=codec_unittest.exe
   set EncBinFile=h264enc.exe
   set DecBinFile=h264dec.exe
@@ -394,7 +395,12 @@
   cd
   set DestDir=bin/%vArcType%-%vConfiguration%-ASM-%vASMFlag%
   echo DestDir is %DestDir%
-  set aFileList=%DllFile% %LibFile% %PDBFile% %UTBinFile% %EncBinFile% %DecBinFile%
+  if "%vOSType%"=="msvc-wp" (
+     set aFileList=%DllFile% %LibFile% %PDBFile% %UTDllFile%
+  )
+  else (
+     set aFileList=%DllFile% %LibFile% %PDBFile% %UTBinFile% %EncBinFile% %DecBinFile%
+  )
   for %%k in (%aFileList%) do (
     bash -c "cp -f  %%k  %DestDir%"
   )
--- a/build/platform-msvc-wp.mk
+++ b/build/platform-msvc-wp.mk
@@ -2,10 +2,11 @@
 include $(SRC_PATH)build/msvc-common.mk
 CFLAGS_OPT += -MD
 CFLAGS_DEBUG += -MDd
-CFLAGS += -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP
+CFLAGS += -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP -DWINDOWS_PHONE
 # Ignore warnings about the main function prototype when building with -ZW
 CXXFLAGS += -ZW -wd4447
 LDFLAGS += -nodefaultlib:kernel32.lib -nodefaultlib:ole32.lib WindowsPhoneCore.lib
+UTSHLDFLAGS=-def:ut.def
 # Ignore warnings about code built with -ZW in .lib files
 AR_OPTS += -ignore:4264
 
--- a/test/api/simple_test.cpp
+++ b/test/api/simple_test.cpp
@@ -5,13 +5,13 @@
 #include <string.h>
 
 
-#if (defined(ANDROID_NDK)||defined(APPLE_IOS))
+#if (defined(ANDROID_NDK)||defined(APPLE_IOS)||defined(WINDOWS_PHONE))
 int CodecUtMain (int argc , char** argv) {
 #else
 int main (int argc, char** argv) {
 #endif
 
-#if (defined(ANDROID_NDK)||defined(APPLE_IOS))
+#if (defined(ANDROID_NDK)||defined(APPLE_IOS)||defined(WINDOWS_PHONE))
   char xmlPath[1024] = "";
   sprintf (xmlPath, "xml:%s", argv[1]);
   ::testing::GTEST_FLAG (output) = xmlPath;
--- /dev/null
+++ b/test/build/windowsphone/.gitignore
@@ -1,0 +1,29 @@
+# Files generated by Visual Studio 2008
+*.user
+*.ncb
+*.suo
+*.opensdf
+
+Win32
+x64
+ARM
+Debug
+Release
+
+# Files generated by upgrading the project files
+Backup
+Generated Files
+UpgradeLog.htm
+
+# Files generated by Visual Studio 2013
+*.sdf
+ipch
+Draft
+
+# Files  used in App
+Bin
+obj
+res
+*.dll
+*.yuv
+*.264
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/App.xaml
@@ -1,0 +1,20 @@
+<Application
+    x:Class="CodecUTApp.App"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
+    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
+
+    <!--Application Resources-->
+    <Application.Resources>
+        <local:LocalizedStrings xmlns:local="clr-namespace:CodecUTApp" x:Key="LocalizedStrings"/>
+    </Application.Resources>
+
+    <Application.ApplicationLifetimeObjects>
+        <!--Required object that handles lifetime events for the application-->
+        <shell:PhoneApplicationService
+            Launching="Application_Launching" Closing="Application_Closing"
+            Activated="Application_Activated" Deactivated="Application_Deactivated"/>
+    </Application.ApplicationLifetimeObjects>
+
+</Application>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/App.xaml.cs
@@ -1,0 +1,223 @@
+using System;
+using System.Diagnostics;
+using System.Resources;
+using System.Windows;
+using System.Windows.Markup;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using CodecUTApp.Resources;
+
+namespace CodecUTApp
+{
+    public partial class App : Application
+    {
+        /// <summary>
+        /// Provides easy access to the root frame of the Phone Application.
+        /// </summary>
+        /// <returns>The root frame of the Phone Application.</returns>
+        public static PhoneApplicationFrame RootFrame { get; private set; }
+
+        /// <summary>
+        /// Constructor for the Application object.
+        /// </summary>
+        public App()
+        {
+            // Global handler for uncaught exceptions.
+            UnhandledException += Application_UnhandledException;
+
+            // Standard XAML initialization
+            InitializeComponent();
+
+            // Phone-specific initialization
+            InitializePhoneApplication();
+
+            // Language display initialization
+            InitializeLanguage();
+
+            // Show graphics profiling information while debugging.
+            if (Debugger.IsAttached)
+            {
+                // Display the current frame rate counters.
+                Application.Current.Host.Settings.EnableFrameRateCounter = true;
+
+                // Show the areas of the app that are being redrawn in each frame.
+                //Application.Current.Host.Settings.EnableRedrawRegions = true;
+
+                // Enable non-production analysis visualization mode,
+                // which shows areas of a page that are handed off to GPU with a colored overlay.
+                //Application.Current.Host.Settings.EnableCacheVisualization = true;
+
+                // Prevent the screen from turning off while under the debugger by disabling
+                // the application's idle detection.
+                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
+                // and consume battery power when the user is not using the phone.
+                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
+            }
+
+        }
+
+        // Code to execute when the application is launching (eg, from Start)
+        // This code will not execute when the application is reactivated
+        private void Application_Launching(object sender, LaunchingEventArgs e)
+        {
+        }
+
+        // Code to execute when the application is activated (brought to foreground)
+        // This code will not execute when the application is first launched
+        private void Application_Activated(object sender, ActivatedEventArgs e)
+        {
+        }
+
+        // Code to execute when the application is deactivated (sent to background)
+        // This code will not execute when the application is closing
+        private void Application_Deactivated(object sender, DeactivatedEventArgs e)
+        {
+        }
+
+        // Code to execute when the application is closing (eg, user hit Back)
+        // This code will not execute when the application is deactivated
+        private void Application_Closing(object sender, ClosingEventArgs e)
+        {
+        }
+
+        // Code to execute if a navigation fails
+        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
+        {
+            if (Debugger.IsAttached)
+            {
+                // A navigation has failed; break into the debugger
+                Debugger.Break();
+            }
+        }
+
+        // Code to execute on Unhandled Exceptions
+        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
+        {
+            if (Debugger.IsAttached)
+            {
+                // An unhandled exception has occurred; break into the debugger
+                Debugger.Break();
+            }
+        }
+
+        #region Phone application initialization
+
+        // Avoid double-initialization
+        private bool phoneApplicationInitialized = false;
+
+        // Do not add any additional code to this method
+        private void InitializePhoneApplication()
+        {
+            if (phoneApplicationInitialized)
+                return;
+
+            // Create the frame but don't set it as RootVisual yet; this allows the splash
+            // screen to remain active until the application is ready to render.
+            RootFrame = new PhoneApplicationFrame();
+            RootFrame.Navigated += CompleteInitializePhoneApplication;
+
+            // Handle navigation failures
+            RootFrame.NavigationFailed += RootFrame_NavigationFailed;
+
+            // Handle reset requests for clearing the backstack
+            RootFrame.Navigated += CheckForResetNavigation;
+
+            // Ensure we don't initialize again
+            phoneApplicationInitialized = true;
+        }
+
+        // Do not add any additional code to this method
+        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
+        {
+            // Set the root visual to allow the application to render
+            if (RootVisual != RootFrame)
+                RootVisual = RootFrame;
+
+            // Remove this handler since it is no longer needed
+            RootFrame.Navigated -= CompleteInitializePhoneApplication;
+        }
+
+        private void CheckForResetNavigation(object sender, NavigationEventArgs e)
+        {
+            // If the app has received a 'reset' navigation, then we need to check
+            // on the next navigation to see if the page stack should be reset
+            if (e.NavigationMode == NavigationMode.Reset)
+                RootFrame.Navigated += ClearBackStackAfterReset;
+        }
+
+        private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)
+        {
+            // Unregister the event so it doesn't get called again
+            RootFrame.Navigated -= ClearBackStackAfterReset;
+
+            // Only clear the stack for 'new' (forward) and 'refresh' navigations
+            if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)
+                return;
+
+            // For UI consistency, clear the entire page stack
+            while (RootFrame.RemoveBackEntry() != null)
+            {
+                ; // do nothing
+            }
+        }
+
+        #endregion
+
+        // Initialize the app's font and flow direction as defined in its localized resource strings.
+        //
+        // To ensure that the font of your application is aligned with its supported languages and that the
+        // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage
+        // and ResourceFlowDirection should be initialized in each resx file to match these values with that
+        // file's culture. For example:
+        //
+        // AppResources.es-ES.resx
+        //    ResourceLanguage's value should be "es-ES"
+        //    ResourceFlowDirection's value should be "LeftToRight"
+        //
+        // AppResources.ar-SA.resx
+        //     ResourceLanguage's value should be "ar-SA"
+        //     ResourceFlowDirection's value should be "RightToLeft"
+        //
+        // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.
+        //
+        private void InitializeLanguage()
+        {
+            try
+            {
+                // Set the font to match the display language defined by the
+                // ResourceLanguage resource string for each supported language.
+                //
+                // Fall back to the font of the neutral language if the Display
+                // language of the phone is not supported.
+                //
+                // If a compiler error is hit then ResourceLanguage is missing from
+                // the resource file.
+                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
+
+                // Set the FlowDirection of all elements under the root frame based
+                // on the ResourceFlowDirection resource string for each
+                // supported language.
+                //
+                // If a compiler error is hit then ResourceFlowDirection is missing from
+                // the resource file.
+                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
+                RootFrame.FlowDirection = flow;
+            }
+            catch
+            {
+                // If an exception is caught here it is most likely due to either
+                // ResourceLangauge not being correctly set to a supported language
+                // code or ResourceFlowDirection is set to a value other than LeftToRight
+                // or RightToLeft.
+
+                if (Debugger.IsAttached)
+                {
+                    Debugger.Break();
+                }
+
+                throw;
+            }
+        }
+    }
+}
\ No newline at end of file
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/AlignmentGrid.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/ApplicationIcon.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/BadgeLogo.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/Logo.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/SplashScreen.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/SquareTile150x150.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/SquareTile71x71.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/StoreLogo.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/Tiles/FlipCycleTileLarge.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/Tiles/FlipCycleTileMedium.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/Tiles/FlipCycleTileSmall.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/Tiles/IconicTileMediumLarge.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/Tiles/IconicTileSmall.png differ
binary files /dev/null b/test/build/windowsphone/codec_ut/CodecUTApp/Assets/WideLogo.png differ
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/CodecUTApp.csproj
@@ -1,0 +1,327 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>10.0.20506</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}</ProjectGuid>
+    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>CodecUTApp</RootNamespace>
+    <AssemblyName>CodecUTApp</AssemblyName>
+    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
+    <TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
+    <SilverlightVersion>
+    </SilverlightVersion>
+    <SilverlightApplication>true</SilverlightApplication>
+    <SupportedCultures>
+    </SupportedCultures>
+    <XapOutputs>true</XapOutputs>
+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>
+    <XapFilename>CodecUTApp_$(Configuration)_$(Platform).xap</XapFilename>
+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
+    <SilverlightAppEntry>CodecUTApp.App</SilverlightAppEntry>
+    <ValidateXaml>true</ValidateXaml>
+    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
+    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>
+    <TargetFrameworkProfile />
+    <DefaultLanguage>en-US</DefaultLanguage>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>Bin\Debug</OutputPath>
+    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+    <NoStdLib>true</NoStdLib>
+    <NoConfig>true</NoConfig>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>Bin\Release</OutputPath>
+    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+    <NoStdLib>true</NoStdLib>
+    <NoConfig>true</NoConfig>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>Bin\x86\Debug</OutputPath>
+    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+    <NoStdLib>true</NoStdLib>
+    <NoConfig>true</NoConfig>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>Bin\x86\Release</OutputPath>
+    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+    <NoStdLib>true</NoStdLib>
+    <NoConfig>true</NoConfig>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>Bin\ARM\Debug</OutputPath>
+    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+    <NoStdLib>true</NoStdLib>
+    <NoConfig>true</NoConfig>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>Bin\ARM\Release</OutputPath>
+    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+    <NoStdLib>true</NoStdLib>
+    <NoConfig>true</NoConfig>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget />
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="LocalizedStrings.cs" />
+    <Compile Include="MainPage.xaml.cs">
+      <DependentUpon>MainPage.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Resources\AppResources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>AppResources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </ApplicationDefinition>
+    <Page Include="MainPage.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <AppxManifest Include="Package.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <None Include="Properties\AppManifest.xml" />
+    <None Include="Properties\WMAppManifest.xml">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="res\BA1_FT_C.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BA1_Sony_D.jsv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BAMQ1_JVC_C.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BAMQ2_JVC_C.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BANM_MW_D.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BASQP1_Sony_C.jsv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BA_MW_D.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BA_MW_D_IDR_LOST.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\BA_MW_D_P_LOST.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\CI1_FT_B.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\CiscoVT2people_160x96_6fps.yuv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\CiscoVT2people_320x192_12fps.yuv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\Cisco_Absolute_Power_1280x720_30fps.yuv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\CI_MW_D.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\CVFC1_Sony_C.jsv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\CVPCMNL1_SVA_C.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\Error_I_P.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\LS_SVA_D.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\MIDR_MW_D.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\MPS_MW_A.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\MR1_BT_A.h264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\MR1_MW_A.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\MR2_MW_A.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\MR2_TANDBERG_E.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\NL1_Sony_D.jsv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\NLMQ1_JVC_C.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\NLMQ2_JVC_C.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\NRF_MW_E.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\QCIF_2P_I_allIPCM.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\Static.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\Static_152_100.yuv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_BA1_B.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_BA2_D.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_Base_B.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_CL1_E.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_FM1_E.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_NL1_B.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\SVA_NL2_E.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_cif_I_CABAC_PCM.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_cif_I_CABAC_slice.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_cif_P_CABAC_slice.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_qcif_cabac.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_scalinglist_jm.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_vd_1d.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="res\test_vd_rc.264">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Assets\AlignmentGrid.png" />
+    <Content Include="Assets\ApplicationIcon.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Assets\BadgeLogo.png" />
+    <Content Include="Assets\Logo.png" />
+    <Content Include="Assets\SplashScreen.png" />
+    <Content Include="Assets\SquareTile150x150.png" />
+    <Content Include="Assets\SquareTile71x71.png" />
+    <Content Include="Assets\StoreLogo.png" />
+    <Content Include="Assets\Tiles\FlipCycleTileLarge.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Assets\Tiles\FlipCycleTileMedium.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Assets\Tiles\FlipCycleTileSmall.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Assets\Tiles\IconicTileMediumLarge.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Assets\Tiles\IconicTileSmall.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Assets\WideLogo.png" />
+    <Content Include="ut.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Resources\AppResources.resx">
+      <Generator>PublicResXFileCodeGenerator</Generator>
+      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Codec_UT_RTComponent.vcxproj">
+      <Project>{42f6ec7e-6271-448c-9df6-1c3d33ac2611}</Project>
+      <Name>Codec_UT_RTComponent</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ProjectExtensions />
+  <PropertyGroup>
+    <PreBuildEvent>if exist  ..\..\..\res   rd ..\..\..\res
+md ..\..\..\res
+copy   /y  ..\..\..\..\..\..\..\..\res\*   ..\..\..\res
+copy   /y  ..\..\..\..\..\..\..\..\bin\$(Platform)\$(Configuration)\ut.dll   ..\..\..\</PreBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/LocalizedStrings.cs
@@ -1,0 +1,14 @@
+using CodecUTApp.Resources;
+
+namespace CodecUTApp
+{
+    /// <summary>
+    /// Provides access to string resources.
+    /// </summary>
+    public class LocalizedStrings
+    {
+        private static AppResources _localizedResources = new AppResources();
+
+        public AppResources LocalizedResources { get { return _localizedResources; } }
+    }
+}
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/MainPage.xaml
@@ -1,0 +1,64 @@
+<phone:PhoneApplicationPage
+    x:Class="CodecUTApp.MainPage"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
+    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
+    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+    mc:Ignorable="d"
+    FontFamily="{StaticResource PhoneFontFamilyNormal}"
+    FontSize="{StaticResource PhoneFontSizeNormal}"
+    Foreground="{StaticResource PhoneForegroundBrush}"
+    SupportedOrientations="Portrait" Orientation="Portrait"
+    shell:SystemTray.IsVisible="True">
+
+    <!--LayoutRoot is the root grid where all page content is placed-->
+    <Grid x:Name="LayoutRoot" Background="Transparent">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <!-- LOCALIZATION NOTE:
+            To localize the displayed strings copy their values to appropriately named
+            keys in the app's neutral language resource file (AppResources.resx) then
+            replace the hard-coded text value between the attributes' quotation marks
+            with the binding clause whose path points to that string name.
+
+            For example:
+
+                Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"
+
+            This binding points to the template's string resource named "ApplicationTitle".
+
+            Adding supported languages in the Project Properties tab will create a
+            new resx file per language that can carry the translated values of your
+            UI strings. The binding in these examples will cause the value of the
+            attributes to be drawn from the .resx file that matches the
+            CurrentUICulture of the app at run time.
+         -->
+
+        <!--TitlePanel contains the name of the application and page title-->
+        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
+            <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
+            <TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
+        </StackPanel>
+
+        <!--ContentPanel - place additional content here-->
+        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
+            <Button Content="CallUT" HorizontalAlignment="Left" Margin="125,10,0,0" VerticalAlignment="Top" Click="Button_Click"/>
+            <TextBox x:Name="UTInfo" HorizontalAlignment="Left" Height="170" Margin="44,87,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="353" Text="Codec UT may take 10~30 minutes, please wait after click above button......"/>
+
+        </Grid>
+
+        <!--Uncomment to see an alignment grid to help ensure your controls are
+            aligned on common boundaries.  The image has a top margin of -32px to
+            account for the System Tray. Set this to 0 (or remove the margin altogether)
+            if the System Tray is hidden.
+
+            Before shipping remove this XAML and the image itself.-->
+        <!--<Image Source="/Assets/AlignmentGrid.png" VerticalAlignment="Top" Height="800" Width="480" Margin="0,-32,0,0" Grid.Row="0" Grid.RowSpan="2" IsHitTestVisible="False" />-->
+    </Grid>
+
+</phone:PhoneApplicationPage>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/MainPage.xaml.cs
@@ -1,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using CodecUTApp.Resources;
+
+using Codec_UT_RTComponent;
+
+namespace CodecUTApp {
+public partial class MainPage : PhoneApplicationPage {
+  // Constructor
+  bool bFlag;
+  CodecUTTest cCodecUTHandler;
+  public MainPage() {
+    InitializeComponent();
+    cCodecUTHandler = new CodecUTTest();
+    // Sample code to localize the ApplicationBar
+    //BuildLocalizedApplicationBar();
+  }
+
+  private void Button_Click (object sender, RoutedEventArgs e) {
+    int iRetVal = 0;
+    UTInfo.Text = "Running UT test cases! Please wait for 10~30 minutes ....";
+    iRetVal = cCodecUTHandler.TestAllCases();
+    if (0 == iRetVal) {
+      UTInfo.Text = "Passed! UT cases on windows phone have been completed!";
+    } else {
+      UTInfo.Text = "Failed! UT cases on windows phone have been completed!";
+    }
+  }
+
+  // Sample code for building a localized ApplicationBar
+  //private void BuildLocalizedApplicationBar()
+  //{
+  //    // Set the page's ApplicationBar to a new instance of ApplicationBar.
+  //    ApplicationBar = new ApplicationBar();
+
+  //    // Create a new button and set the text value to the localized string from AppResources.
+  //    ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
+  //    appBarButton.Text = AppResources.AppBarButtonText;
+  //    ApplicationBar.Buttons.Add(appBarButton);
+
+  //    // Create a new menu item with the localized string from AppResources.
+  //    ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
+  //    ApplicationBar.MenuItems.Add(appBarMenuItem);
+  //}
+}
+}
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/Package.appxmanifest
@@ -1,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest">
+
+  <Identity Name="3ca438e0-162b-4834-885a-a7f2d6817d91"
+            Publisher="CN=Openh264"
+            Version="1.0.0.0" />
+
+  <mp:PhoneIdentity PhoneProductId="37167e8c-fb5e-4000-b00b-99af2e01d9b7" PhonePublisherId="f32659ce-dc17-4ac4-869f-1bb44d5172c4"/>
+
+  <Properties>
+    <DisplayName>CodecUTApp</DisplayName>
+    <PublisherDisplayName>Openh264</PublisherDisplayName>
+    <Logo>Assets\StoreLogo.png</Logo>
+  </Properties>
+
+  <Prerequisites>
+    <OSMinVersion>6.3.1</OSMinVersion>
+    <OSMaxVersionTested>6.3.1</OSMaxVersionTested>
+  </Prerequisites>
+
+  <Resources>
+    <Resource Language="x-generate"/>
+  </Resources>
+
+  <Applications>
+    <Application Id="x37167e8cyfb5ey4000yb00by99af2e01d9b7x"
+        Executable="AGHost.exe"
+        EntryPoint="MainPage.xaml">
+      <m3:VisualElements
+          DisplayName="CodecUTApp"
+          Square150x150Logo="Assets\SquareTile150x150.png"
+          Square44x44Logo="Assets\Logo.png"
+          Description="CodecUTApp"
+          ForegroundText="light"
+          BackgroundColor="#464646">
+        <m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png"/>
+        <m3:SplashScreen Image="Assets\Splashscreen.png" />
+      </m3:VisualElements>
+      <Extensions>
+        <Extension Category="windows.backgroundTasks" EntryPoint="AgHost.BackgroundTask">
+          <BackgroundTasks>
+          <Task Type="systemEvent" />
+          </BackgroundTasks>
+        </Extension>
+      </Extensions>
+    </Application>
+  </Applications>
+  <Capabilities>
+  </Capabilities>
+  <Extensions>
+    <Extension Category="windows.activatableClass.inProcessServer">
+      <InProcessServer>
+        <Path>AgHostSvcs.dll</Path>
+        <ActivatableClass ActivatableClassId="AgHost.BackgroundTask" ThreadingModel="both" />
+      </InProcessServer>
+    </Extension>
+  </Extensions>
+</Package>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/Properties/AppManifest.xml
@@ -1,0 +1,6 @@
+<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+>
+    <Deployment.Parts>
+    </Deployment.Parts>
+</Deployment>
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/Properties/AssemblyInfo.cs
@@ -1,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Resources;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle ("CodecUTApp")]
+[assembly: AssemblyDescription ("")]
+[assembly: AssemblyConfiguration ("")]
+[assembly: AssemblyCompany ("")]
+[assembly: AssemblyProduct ("CodecUTApp")]
+[assembly: AssemblyCopyright ("Copyright ©  2015")]
+[assembly: AssemblyTrademark ("")]
+[assembly: AssemblyCulture ("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible (false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid ("6b799033-89d8-47e3-ba34-548e72976b1c")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion ("1.0.0.0")]
+[assembly: AssemblyFileVersion ("1.0.0.0")]
+[assembly: NeutralResourcesLanguageAttribute ("en-US")]
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/Properties/WMAppManifest.xml
@@ -1,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2014/deployment" AppPlatformVersion="8.1">
+  <DefaultLanguage xmlns="" code="en-US" />
+  <App xmlns="" ProductID="{37167e8c-fb5e-4000-b00b-99af2e01d9b7}" Title="CodecUTApp" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="CodecUTApp author" Description="Sample description" Publisher="CodecUTApp" PublisherID="{f32659ce-dc17-4ac4-869f-1bb44d5172c4}">
+    <IconPath IsRelative="true" IsResource="false">Assets\ApplicationIcon.png</IconPath>
+    <Capabilities>
+      <Capability Name="ID_CAP_NETWORKING" />
+      <Capability Name="ID_CAP_MEDIALIB_AUDIO" />
+      <Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
+      <Capability Name="ID_CAP_SENSORS" />
+      <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
+    </Capabilities>
+    <Tasks>
+      <DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
+    </Tasks>
+    <Tokens>
+      <PrimaryToken TokenID="CodecUTAppToken" TaskName="_default">
+        <TemplateFlip>
+          <SmallImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileSmall.png</SmallImageURI>
+          <Count>0</Count>
+          <BackgroundImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileMedium.png</BackgroundImageURI>
+          <Title>CodecUTApp</Title>
+          <BackContent></BackContent>
+          <BackBackgroundImageURI></BackBackgroundImageURI>
+          <BackTitle></BackTitle>
+          <DeviceLockImageURI></DeviceLockImageURI>
+          <HasLarge></HasLarge>
+        </TemplateFlip>
+      </PrimaryToken>
+    </Tokens>
+    <ScreenResolutions>
+      <ScreenResolution Name="ID_RESOLUTION_WVGA" />
+      <ScreenResolution Name="ID_RESOLUTION_WXGA" />
+      <ScreenResolution Name="ID_RESOLUTION_HD720P" />
+    </ScreenResolutions>
+  </App>
+</Deployment>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/Resources/AppResources.Designer.cs
@@ -1,0 +1,110 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.34014
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CodecUTApp.Resources {
+using System;
+
+
+/// <summary>
+///   A strongly-typed resource class, for looking up localized strings, etc.
+/// </summary>
+// This class was auto-generated by the StronglyTypedResourceBuilder
+// class via a tool like ResGen or Visual Studio.
+// To add or remove a member, edit your .ResX file then rerun ResGen
+// with the /str option, or rebuild your VS project.
+[global::System.CodeDom.Compiler.GeneratedCodeAttribute ("System.Resources.Tools.StronglyTypedResourceBuilder",
+    "4.0.0.0")]
+[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+public class AppResources {
+
+  private static global::System.Resources.ResourceManager resourceMan;
+
+  private static global::System.Globalization.CultureInfo resourceCulture;
+
+  [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute ("Microsoft.Performance",
+      "CA1811:AvoidUncalledPrivateCode")]
+  internal AppResources() {
+  }
+
+  /// <summary>
+  ///   Returns the cached ResourceManager instance used by this class.
+  /// </summary>
+  [global::System.ComponentModel.EditorBrowsableAttribute (global::System.ComponentModel.EditorBrowsableState.Advanced)]
+  public static global::System.Resources.ResourceManager ResourceManager {
+    get {
+      if (object.ReferenceEquals (resourceMan, null)) {
+        global::System.Resources.ResourceManager temp = new
+        global::System.Resources.ResourceManager ("CodecUTApp.Resources.AppResources", typeof (AppResources).Assembly);
+        resourceMan = temp;
+      }
+      return resourceMan;
+    }
+  }
+
+  /// <summary>
+  ///   Overrides the current thread's CurrentUICulture property for all
+  ///   resource lookups using this strongly typed resource class.
+  /// </summary>
+  [global::System.ComponentModel.EditorBrowsableAttribute (global::System.ComponentModel.EditorBrowsableState.Advanced)]
+  public static global::System.Globalization.CultureInfo Culture {
+    get {
+      return resourceCulture;
+    } set {
+      resourceCulture = value;
+    }
+  }
+
+  /// <summary>
+  ///   Looks up a localized string similar to add.
+  /// </summary>
+  public static string AppBarButtonText {
+    get {
+      return ResourceManager.GetString ("AppBarButtonText", resourceCulture);
+    }
+  }
+
+  /// <summary>
+  ///   Looks up a localized string similar to Menu Item.
+  /// </summary>
+  public static string AppBarMenuItemText {
+    get {
+      return ResourceManager.GetString ("AppBarMenuItemText", resourceCulture);
+    }
+  }
+
+  /// <summary>
+  ///   Looks up a localized string similar to MY APPLICATION.
+  /// </summary>
+  public static string ApplicationTitle {
+    get {
+      return ResourceManager.GetString ("ApplicationTitle", resourceCulture);
+    }
+  }
+
+  /// <summary>
+  ///   Looks up a localized string similar to LeftToRight.
+  /// </summary>
+  public static string ResourceFlowDirection {
+    get {
+      return ResourceManager.GetString ("ResourceFlowDirection", resourceCulture);
+    }
+  }
+
+  /// <summary>
+  ///   Looks up a localized string similar to en-US.
+  /// </summary>
+  public static string ResourceLanguage {
+    get {
+      return ResourceManager.GetString ("ResourceLanguage", resourceCulture);
+    }
+  }
+}
+}
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/CodecUTApp/Resources/AppResources.resx
@@ -1,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ResourceFlowDirection" xml:space="preserve">
+    <value>LeftToRight</value>
+    <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>
+  </data>
+  <data name="ResourceLanguage" xml:space="preserve">
+    <value>en-US</value>
+    <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>
+  </data>
+  <data name="ApplicationTitle" xml:space="preserve">
+    <value>MY APPLICATION</value>
+  </data>
+  <data name="AppBarButtonText" xml:space="preserve">
+    <value>add</value>
+  </data>
+  <data name="AppBarMenuItemText" xml:space="preserve">
+    <value>Menu Item</value>
+  </data>
+</root>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/Codec_UT.sln
@@ -1,0 +1,64 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodecUTApp", "CodecUTApp\CodecUTApp.csproj", "{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Codec_UT_RTComponent", "Codec_UT_RTComponent.vcxproj", "{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|ARM = Debug|ARM
+		Debug|Win32 = Debug|Win32
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|ARM = Release|ARM
+		Release|Win32 = Release|Win32
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|ARM.ActiveCfg = Debug|ARM
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|ARM.Build.0 = Debug|ARM
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|ARM.Deploy.0 = Debug|ARM
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|Win32.ActiveCfg = Debug|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|Win32.Build.0 = Debug|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|Win32.Deploy.0 = Debug|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|x86.ActiveCfg = Debug|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|x86.Build.0 = Debug|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Debug|x86.Deploy.0 = Debug|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|ARM.ActiveCfg = Release|ARM
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|ARM.Build.0 = Release|ARM
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|ARM.Deploy.0 = Release|ARM
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|Win32.ActiveCfg = Release|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|Win32.Build.0 = Release|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|Win32.Deploy.0 = Release|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|x86.ActiveCfg = Release|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|x86.Build.0 = Release|x86
+		{37167E8C-FB5E-4000-B00B-99AF2E01D9B7}.Release|x86.Deploy.0 = Release|x86
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|Any CPU.ActiveCfg = Debug|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|ARM.ActiveCfg = Debug|ARM
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|ARM.Build.0 = Debug|ARM
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|Win32.ActiveCfg = Debug|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|Win32.Build.0 = Debug|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|x86.ActiveCfg = Debug|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Debug|x86.Build.0 = Debug|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|Any CPU.ActiveCfg = Release|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|ARM.ActiveCfg = Release|ARM
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|ARM.Build.0 = Release|ARM
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|Win32.ActiveCfg = Release|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|Win32.Build.0 = Release|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|x86.ActiveCfg = Release|Win32
+		{42F6EC7E-6271-448C-9DF6-1C3D33AC2611}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/Codec_UT_RTComponent.cpp
@@ -1,0 +1,63 @@
+// Codec_UT_RTComponent.cpp
+#include <windows.h>
+#include <iostream>
+#include "Codec_UT_RTComponent.h"
+
+using namespace Codec_UT_RTComponent;
+using namespace Platform;
+using namespace Windows;
+using namespace Windows::Storage;
+
+typedef int (*pfTestAllCases) (int argc, char** argv);
+
+CodecUTTest::CodecUTTest() {
+}
+
+int CodecUTTest::TestAllCases() {
+  int   argc = 2;
+  int   iRet = 0;
+  char* argv[6];
+
+  HMODULE         phTestCasesDllHandler = NULL;
+  pfTestAllCases  pUTHandler            = NULL;
+  LPCWSTR         cTestCasesDllDLLName  = L"ut.dll";
+
+  // output xml file location
+  char OutputPath[256] = { 0 };
+  Windows::Storage::StorageFolder^ OutputLocation;
+  Platform::String^ OutputLocationPath;
+
+  OutputLocation = ApplicationData::Current->LocalFolder;
+  OutputLocationPath = Platform::String::Concat (OutputLocation->Path, "\\Shared\\");
+  const wchar_t* pWcharOutputFile = OutputLocationPath->Data();
+
+  int size = wcslen (pWcharOutputFile);
+  OutputPath[size] = 0;
+  for (int y = 0; y < size; y++) {
+    OutputPath[y] = (char)pWcharOutputFile[y];
+  }
+
+  // load dynamic library
+  phTestCasesDllHandler = LoadPackagedLibrary (cTestCasesDllDLLName, 0);
+  DWORD dw = GetLastError();
+  if (NULL == phTestCasesDllHandler) {
+    std::cout << "failed to load dll,error code is : " << dw << std::endl;
+    return 1;
+  }
+
+  pUTHandler = (pfTestAllCases)GetProcAddress (phTestCasesDllHandler, "CodecUtMain");
+
+  if (NULL == pUTHandler) {
+    std::cout << "failed to load function" << std::endl;
+    return 2;
+  }
+
+  // test all cases
+  argv[0] = "CodecUTAPP";
+  argv[1] = OutputPath;
+  argc    = 2;
+
+  iRet = pUTHandler(argc, argv);
+
+  return iRet;
+}
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/Codec_UT_RTComponent.h
@@ -1,0 +1,9 @@
+#pragma once
+
+namespace Codec_UT_RTComponent {
+public ref class CodecUTTest sealed {
+ public:
+  CodecUTTest();
+  int TestAllCases();
+};
+}
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/Codec_UT_RTComponent.vcxproj
@@ -1,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{42f6ec7e-6271-448c-9df6-1c3d33ac2611}</ProjectGuid>
+    <RootNamespace>Codec_UT_RTComponent</RootNamespace>
+    <DefaultLanguage>en-US</DefaultLanguage>
+    <MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
+    <WinMDAssembly>true</WinMDAssembly>
+    <ApplicationType>Windows Phone Silverlight</ApplicationType>
+    <ApplicationTypeRevision>8.1</ApplicationTypeRevision>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <GenerateManifest>false</GenerateManifest>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <OutDir>.\..\..\..\..\bin\$(Platform)\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <OutDir>.\..\..\..\..\bin\$(Platform)\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+      <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <CompileAsWinRT>true</CompileAsWinRT>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+      <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <CompileAsWinRT>true</CompileAsWinRT>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <ClCompile>
+      <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+      <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <CompileAsWinRT>true</CompileAsWinRT>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <ClCompile>
+      <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+      <AdditionalUsingDirectories>$(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <CompileAsWinRT>true</CompileAsWinRT>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <IgnoreSpecificDefaultLibraries>ole32.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <Reference Include="platform.winmd">
+      <IsWinMDFile>true</IsWinMDFile>
+      <Private>false</Private>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="Codec_UT_RTComponent.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Codec_UT_RTComponent.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsPhone\v$(TargetPlatformVersion)\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+++ b/test/build/windowsphone/codec_ut/Codec_UT_RTComponent.vcxproj.filters
@@ -1,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Resources">
+      <UniqueIdentifier>5fd0e509-b6ae-4f29-bd2a-4d2cc10f3aa0</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Codec_UT_RTComponent.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="Codec_UT_RTComponent.h" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
--- /dev/null
+++ b/ut.def
@@ -1,0 +1,2 @@
+EXPORTS
+	CodecUtMain
\ No newline at end of file