//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Media.Core.idl";
import "Windows.Media.MediaProperties.idl";
import "Windows.Storage.idl";
import "Windows.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        namespace Collections
        {
            interface IPropertySet;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Core
        {
            interface IMediaSource;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace MediaProperties
        {
            runtimeclass MediaEncodingProfile;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        interface IStorageFile;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStream;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Transcoding
        {
            typedef enum MediaVideoProcessingAlgorithm MediaVideoProcessingAlgorithm;

            typedef enum TranscodeFailureReason TranscodeFailureReason;

            interface IMediaTranscoder;

            interface IMediaTranscoder2;

            interface IPrepareTranscodeResult;

            runtimeclass MediaTranscoder;

            runtimeclass PrepareTranscodeResult;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace Transcoding
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperationWithProgress<Windows.Media.Transcoding.TranscodeFailureReason, DOUBLE>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Transcoding.PrepareTranscodeResult*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Transcoding.TranscodeFailureReason>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace Transcoding
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum MediaVideoProcessingAlgorithm
            {
                Default   = 0,
                MrfCrf444 = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum TranscodeFailureReason
            {
                None           = 0,
                Unknown        = 1,
                InvalidProfile = 2,
                CodecNotFound  = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Transcoding.MediaTranscoder)]
            [uuid(190C99D2-A0AA-4D34-86BC-EED1B12C2F5B)]
            interface IMediaTranscoder : IInspectable
            {
                [propput] HRESULT TrimStartTime([in] Windows.Foundation.TimeSpan value);
                [propget] HRESULT TrimStartTime([out] [retval] Windows.Foundation.TimeSpan* value);
                [propput] HRESULT TrimStopTime([in] Windows.Foundation.TimeSpan value);
                [propget] HRESULT TrimStopTime([out] [retval] Windows.Foundation.TimeSpan* value);
                [propput] HRESULT AlwaysReencode([in] boolean value);
                [propget] HRESULT AlwaysReencode([out] [retval] boolean* value);
                [propput] HRESULT HardwareAccelerationEnabled([in] boolean value);
                [propget] HRESULT HardwareAccelerationEnabled([out] [retval] boolean* value);
                [overload("AddAudioEffect")] HRESULT AddAudioEffect([in] HSTRING activatableClassId);
                [overload("AddAudioEffect")] HRESULT AddAudioEffectWithSettings([in] HSTRING activatableClassId, [in] boolean effectRequired, [in] Windows.Foundation.Collections.IPropertySet* configuration);
                [overload("AddVideoEffect")] HRESULT AddVideoEffect([in] HSTRING activatableClassId);
                [overload("AddVideoEffect")] HRESULT AddVideoEffectWithSettings([in] HSTRING activatableClassId, [in] boolean effectRequired, [in] Windows.Foundation.Collections.IPropertySet* configuration);
                HRESULT ClearEffects();
                HRESULT PrepareFileTranscodeAsync([in] Windows.Storage.IStorageFile* source, [in] Windows.Storage.IStorageFile* destination, [in] Windows.Media.MediaProperties.MediaEncodingProfile* profile, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Transcoding.PrepareTranscodeResult*>** operation);
                HRESULT PrepareStreamTranscodeAsync([in] Windows.Storage.Streams.IRandomAccessStream* source, [in] Windows.Storage.Streams.IRandomAccessStream* destination, [in] Windows.Media.MediaProperties.MediaEncodingProfile* profile, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Transcoding.PrepareTranscodeResult*>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Transcoding.MediaTranscoder)]
            [uuid(40531D74-35E0-4F04-8574-CA8BC4E5A082)]
            interface IMediaTranscoder2 : IInspectable
            {
                HRESULT PrepareMediaStreamSourceTranscodeAsync([in] Windows.Media.Core.IMediaSource* source, [in] Windows.Storage.Streams.IRandomAccessStream* destination, [in] Windows.Media.MediaProperties.MediaEncodingProfile* profile, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Transcoding.PrepareTranscodeResult*>** operation);
                [propput] HRESULT VideoProcessingAlgorithm([in] Windows.Media.Transcoding.MediaVideoProcessingAlgorithm value);
                [propget] HRESULT VideoProcessingAlgorithm([out] [retval] Windows.Media.Transcoding.MediaVideoProcessingAlgorithm* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Transcoding.PrepareTranscodeResult)]
            [uuid(05F25DCE-994F-4A34-9D68-97CCCE1730D6)]
            interface IPrepareTranscodeResult : IInspectable
            {
                [propget] HRESULT CanTranscode([out] [retval] boolean* value);
                [propget] HRESULT FailureReason([out] [retval] Windows.Media.Transcoding.TranscodeFailureReason* value);
                HRESULT TranscodeAsync([out] [retval] Windows.Foundation.IAsyncActionWithProgress<DOUBLE>** operation);
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass MediaTranscoder
            {
                [default] interface Windows.Media.Transcoding.IMediaTranscoder;
                [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Media.Transcoding.IMediaTranscoder2;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass PrepareTranscodeResult
            {
                [default] interface Windows.Media.Transcoding.IPrepareTranscodeResult;
            }
        }
    }
}
