declare module "windows.media.capture" {
  export class Size {
    constructor();
  }

  export class BitmapSize {
    width: Number;
    height: Number;
    constructor();
  }

  export class Rect {
    constructor();
  }

  export class WhiteBalanceGain {
    r: Number;
    g: Number;
    b: Number;
    constructor();
  }

  export class AppBroadcastContract {
    constructor();
  }

  export class AppCaptureContract {
    constructor();
  }

  export class CameraCaptureUIContract {
    constructor();
  }

  export class GameBarContract {
    constructor();
  }

  export enum CameraCaptureUIMode {
    photoOrVideo,
    photo,
    video,
  }

  export enum CameraCaptureUIPhotoFormat {
    jpeg,
    png,
    jpegXR,
  }

  export enum CameraCaptureUIVideoFormat {
    mp4,
    wmv,
  }

  export enum CameraCaptureUIMaxVideoResolution {
    highestAvailable,
    lowDefinition,
    standardDefinition,
    highDefinition,
  }

  export enum CameraCaptureUIMaxPhotoResolution {
    highestAvailable,
    verySmallQvga,
    smallVga,
    mediumXga,
    large3M,
    veryLarge5M,
  }

  export enum MediaCategory {
    other,
    communications,
    media,
    gameChat,
    speech,
  }

  export enum MediaStreamType {
    videoPreview,
    videoRecord,
    audio,
    photo,
  }

  export enum StreamingCaptureMode {
    audioAndVideo,
    audio,
    video,
  }

  export enum VideoRotation {
    none,
    clockwise90Degrees,
    clockwise180Degrees,
    clockwise270Degrees,
  }

  export enum PhotoCaptureSource {
    auto,
    videoPreview,
    photo,
  }

  export enum VideoDeviceCharacteristic {
    allStreamsIndependent,
    previewRecordStreamsIdentical,
    previewPhotoStreamsIdentical,
    recordPhotoStreamsIdentical,
    allStreamsIdentical,
  }

  export enum PowerlineFrequency {
    disabled,
    fiftyHertz,
    sixtyHertz,
    auto,
  }

  export enum MediaCaptureThermalStatus {
    normal,
    overheated,
  }

  export enum MediaCaptureDeviceExclusiveControlStatus {
    exclusiveControlAvailable,
    sharedReadOnlyAvailable,
  }

  export enum KnownVideoProfile {
    videoRecording,
    highQualityPhoto,
    balancedVideoAndPhoto,
    videoConferencing,
    photoSequence,
  }

  export enum MediaCaptureMemoryPreference {
    auto,
    cpu,
  }

  export enum MediaCaptureSharingMode {
    exclusiveControl,
    sharedReadOnly,
  }

  export enum AppBroadcastCameraOverlayLocation {
    topLeft,
    topCenter,
    topRight,
    middleLeft,
    middleCenter,
    middleRight,
    bottomLeft,
    bottomCenter,
    bottomRight,
  }

  export enum AppBroadcastCameraOverlaySize {
    small,
    medium,
    large,
  }

  export enum AppBroadcastVideoEncodingBitrateMode {
    custom,
    auto,
  }

  export enum AppBroadcastVideoEncodingResolutionMode {
    custom,
    auto,
  }

  export enum AppBroadcastPlugInState {
    unknown,
    initialized,
    microsoftSignInRequired,
    oAuthSignInRequired,
    providerSignInRequired,
    inBandwidthTest,
    readyToBroadcast,
  }

  export enum AppBroadcastStreamState {
    initializing,
    streamReady,
    started,
    paused,
    terminated,
  }

  export enum AppBroadcastSignInState {
    notSignedIn,
    microsoftSignInInProgress,
    microsoftSignInComplete,
    oAuthSignInInProgress,
    oAuthSignInComplete,
  }

  export enum AppBroadcastTerminationReason {
    normalTermination,
    lostConnectionToService,
    noNetworkConnectivity,
    serviceAbort,
    serviceError,
    serviceUnavailable,
    internalError,
    unsupportedFormat,
    backgroundTaskTerminated,
    backgroundTaskUnresponsive,
  }

  export enum AppBroadcastSignInResult {
    success,
    authenticationFailed,
    unauthorized,
    serviceUnavailable,
    unknown,
  }

  export enum ForegroundActivationArgument {
    signInRequired,
    moreSettings,
  }

  export enum AppBroadcastMicrophoneCaptureState {
    stopped,
    started,
    failed,
  }

  export enum AppBroadcastCameraCaptureState {
    stopped,
    started,
    failed,
  }

  export enum AppBroadcastExitBroadcastModeReason {
    normalExit,
    userCanceled,
    authorizationFail,
    foregroundAppActivated,
  }

  export enum AppBroadcastPreviewState {
    started,
    stopped,
    failed,
  }

  export enum AppBroadcastCaptureTargetType {
    appView,
    entireDisplay,
  }

  export enum GameBarServicesDisplayMode {
    windowed,
    fullScreenExclusive,
  }

  export enum AppCaptureVideoEncodingBitrateMode {
    custom,
    high,
    standard,
  }

  export enum AppCaptureVideoEncodingResolutionMode {
    custom,
    high,
    standard,
  }

  export enum AppCaptureVideoEncodingFrameRateMode {
    standard,
    high,
  }

  export enum AppCaptureHistoricalBufferLengthUnit {
    megabytes,
    seconds,
  }

  export enum AppCaptureMicrophoneCaptureState {
    stopped,
    started,
    failed,
  }

  export enum AppCaptureRecordingState {
    inProgress,
    completed,
    failed,
  }

  export enum GameBarCommand {
    openGameBar,
    recordHistoricalBuffer,
    toggleStartStopRecord,
    startRecord,
    stopRecord,
    takeScreenshot,
    startBroadcast,
    stopBroadcast,
    pauseBroadcast,
    resumeBroadcast,
    toggleStartStopBroadcast,
    toggleMicrophoneCapture,
    toggleCameraCapture,
    toggleRecordingIndicator,
  }

  export enum GameBarCommandOrigin {
    shortcutKey,
    cortana,
    appCommand,
  }

  export enum GameBarTargetCapturePolicy {
    enabledBySystem,
    enabledByUser,
    notEnabled,
    prohibitedBySystem,
    prohibitedByPublisher,
  }

  export class AppCapture {
    isCapturingAudio: Boolean;
    isCapturingVideo: Boolean;
    constructor();

    static getForCurrentView(): AppCapture;


    addListener(type: "CapturingChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "CapturingChanged", listener: (ev: Event) => void): void ;
    on(type: "CapturingChanged", listener: (ev: Event) => void): void ;
    off(type: "CapturingChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class CameraCaptureUIPhotoCaptureSettings {
    maxResolution: CameraCaptureUIMaxPhotoResolution;
    format: CameraCaptureUIPhotoFormat;
    croppedSizeInPixels: Object;
    croppedAspectRatio: Object;
    allowCropping: Boolean;
    constructor();

  }

  export class CameraCaptureUIVideoCaptureSettings {
    maxResolution: CameraCaptureUIMaxVideoResolution;
    maxDurationInSeconds: Number;
    format: CameraCaptureUIVideoFormat;
    allowTrimming: Boolean;
    constructor();

  }

  export class CameraCaptureUI {
    photoSettings: CameraCaptureUIPhotoCaptureSettings;
    videoSettings: CameraCaptureUIVideoCaptureSettings;
    constructor();

    captureFileAsync(mode: CameraCaptureUIMode, callback: (error: Error, result: Object) => void): void ;

  }

  export class MediaCaptureFailedEventArgs {
    code: Number;
    message: String;
    constructor();

  }

  export class MediaCapture {
    audioDeviceController: Object;
    mediaCaptureSettings: MediaCaptureSettings;
    videoDeviceController: Object;
    cameraStreamState: Number;
    thermalStatus: MediaCaptureThermalStatus;
    frameSources: Object;
    constructor();

    static isVideoProfileSupported(videoDeviceId: String): Boolean;


    static findAllVideoProfiles(videoDeviceId: String): Object;


    static findConcurrentProfiles(videoDeviceId: String): Object;


    static findKnownVideoProfiles(videoDeviceId: String, name: KnownVideoProfile): Object;


    getPreviewFrameAsync(callback: (error: Error, result: Object) => void): void ;
    getPreviewFrameAsync(destination: Object, callback: (error: Error, result: Object) => void): void ;

    prepareAdvancedPhotoCaptureAsync(encodingProperties: Object, callback: (error: Error, result: AdvancedPhotoCapture) => void): void ;

    removeEffectAsync(effect: Object, callback: (error: Error) => void): void ;

    pauseRecordWithResultAsync(behavior: Number, callback: (error: Error, result: MediaCapturePauseResult) => void): void ;

    stopRecordWithResultAsync(callback: (error: Error, result: MediaCaptureStopResult) => void): void ;

    createFrameReaderAsync(inputSource: Object, callback: (error: Error, result: Object) => void): void ;
    createFrameReaderAsync(inputSource: Object, outputSubtype: String, callback: (error: Error, result: Object) => void): void ;
    createFrameReaderAsync(inputSource: Object, outputSubtype: String, outputSize: BitmapSize, callback: (error: Error, result: Object) => void): void ;

    createMultiSourceFrameReaderAsync(inputSources: Object, callback: (error: Error, result: Object) => void): void ;

    initializeAsync(callback: (error: Error) => void): void ;
    initializeAsync(mediaCaptureInitializationSettings: MediaCaptureInitializationSettings, callback: (error: Error) => void): void ;

    startRecordToStorageFileAsync(encodingProfile: Object, file: Object, callback: (error: Error) => void): void ;

    startRecordToStreamAsync(encodingProfile: Object, stream: Object, callback: (error: Error) => void): void ;

    startRecordToCustomSinkAsync(encodingProfile: Object, customMediaSink: Object, callback: (error: Error) => void): void ;
    startRecordToCustomSinkAsync(encodingProfile: Object, customSinkActivationId: String, customSinkSettings: Object, callback: (error: Error) => void): void ;

    stopRecordAsync(callback: (error: Error) => void): void ;

    capturePhotoToStorageFileAsync(type: Object, file: Object, callback: (error: Error) => void): void ;

    capturePhotoToStreamAsync(type: Object, stream: Object, callback: (error: Error) => void): void ;

    addEffectAsync(mediaStreamType: MediaStreamType, effectActivationID: String, effectSettings: Object, callback: (error: Error) => void): void ;

    clearEffectsAsync(mediaStreamType: MediaStreamType, callback: (error: Error) => void): void ;

    startPreviewAsync(callback: (error: Error) => void): void ;

    startPreviewToCustomSinkAsync(encodingProfile: Object, customMediaSink: Object, callback: (error: Error) => void): void ;
    startPreviewToCustomSinkAsync(encodingProfile: Object, customSinkActivationId: String, customSinkSettings: Object, callback: (error: Error) => void): void ;

    stopPreviewAsync(callback: (error: Error) => void): void ;

    prepareLowLagRecordToStorageFileAsync(encodingProfile: Object, file: Object, callback: (error: Error, result: LowLagMediaRecording) => void): void ;

    prepareLowLagRecordToStreamAsync(encodingProfile: Object, stream: Object, callback: (error: Error, result: LowLagMediaRecording) => void): void ;

    prepareLowLagRecordToCustomSinkAsync(encodingProfile: Object, customMediaSink: Object, callback: (error: Error, result: LowLagMediaRecording) => void): void ;
    prepareLowLagRecordToCustomSinkAsync(encodingProfile: Object, customSinkActivationId: String, customSinkSettings: Object, callback: (error: Error, result: LowLagMediaRecording) => void): void ;

    prepareLowLagPhotoCaptureAsync(type: Object, callback: (error: Error, result: LowLagPhotoCapture) => void): void ;

    prepareLowLagPhotoSequenceCaptureAsync(type: Object, callback: (error: Error, result: LowLagPhotoSequenceCapture) => void): void ;

    setEncodingPropertiesAsync(mediaStreamType: MediaStreamType, mediaEncodingProperties: Object, encoderProperties: Object, callback: (error: Error) => void): void ;

    prepareVariablePhotoSequenceCaptureAsync(type: Object, callback: (error: Error, result: Object) => void): void ;

    addAudioEffectAsync(definition: Object, callback: (error: Error, result: Object) => void): void ;

    addVideoEffectAsync(definition: Object, mediaStreamType: MediaStreamType, callback: (error: Error, result: Object) => void): void ;

    pauseRecordAsync(behavior: Number, callback: (error: Error) => void): void ;

    resumeRecordAsync(callback: (error: Error) => void): void ;

    setEncoderProperty(mediaStreamType: MediaStreamType, propertyId: String, propertyValue: Object): void;

    getEncoderProperty(mediaStreamType: MediaStreamType, propertyId: String): Object;

    setPreviewMirroring(value: Boolean): void;

    getPreviewMirroring(): Boolean;

    setPreviewRotation(value: VideoRotation): void;

    getPreviewRotation(): VideoRotation;

    setRecordRotation(value: VideoRotation): void;

    getRecordRotation(): VideoRotation;

    close(): void;
    addListener(type: "Failed", listener: (ev: Event) => void): void ;
    removeListener(type: "Failed", listener: (ev: Event) => void): void ;
    on(type: "Failed", listener: (ev: Event) => void): void ;
    off(type: "Failed", listener: (ev: Event) => void): void ;
    
    addListener(type: "RecordLimitationExceeded", listener: (ev: Event) => void): void ;
    removeListener(type: "RecordLimitationExceeded", listener: (ev: Event) => void): void ;
    on(type: "RecordLimitationExceeded", listener: (ev: Event) => void): void ;
    off(type: "RecordLimitationExceeded", listener: (ev: Event) => void): void ;
    
    addListener(type: "FocusChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "FocusChanged", listener: (ev: Event) => void): void ;
    on(type: "FocusChanged", listener: (ev: Event) => void): void ;
    off(type: "FocusChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "PhotoConfirmationCaptured", listener: (ev: Event) => void): void ;
    removeListener(type: "PhotoConfirmationCaptured", listener: (ev: Event) => void): void ;
    on(type: "PhotoConfirmationCaptured", listener: (ev: Event) => void): void ;
    off(type: "PhotoConfirmationCaptured", listener: (ev: Event) => void): void ;
    
    addListener(type: "CameraStreamStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "CameraStreamStateChanged", listener: (ev: Event) => void): void ;
    on(type: "CameraStreamStateChanged", listener: (ev: Event) => void): void ;
    off(type: "CameraStreamStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "ThermalStatusChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "ThermalStatusChanged", listener: (ev: Event) => void): void ;
    on(type: "ThermalStatusChanged", listener: (ev: Event) => void): void ;
    off(type: "ThermalStatusChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "CaptureDeviceExclusiveControlStatusChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "CaptureDeviceExclusiveControlStatusChanged", listener: (ev: Event) => void): void ;
    on(type: "CaptureDeviceExclusiveControlStatusChanged", listener: (ev: Event) => void): void ;
    off(type: "CaptureDeviceExclusiveControlStatusChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class MediaCaptureVideoProfileMediaDescription {
    frameRate: Number;
    height: Number;
    isHdrVideoSupported: Boolean;
    isVariablePhotoSequenceSupported: Boolean;
    width: Number;
    constructor();

  }

  export class MediaCaptureVideoProfile {
    id: String;
    supportedPhotoMediaDescription: Object;
    supportedPreviewMediaDescription: Object;
    supportedRecordMediaDescription: Object;
    videoDeviceId: String;
    constructor();

    getConcurrency(): Object;

  }

  export class MediaCaptureInitializationSettings {
    videoDeviceId: String;
    audioDeviceId: String;
    photoCaptureSource: PhotoCaptureSource;
    streamingCaptureMode: StreamingCaptureMode;
    mediaCategory: MediaCategory;
    audioProcessing: Number;
    videoSource: Object;
    audioSource: Object;
    recordMediaDescription: MediaCaptureVideoProfileMediaDescription;
    videoProfile: MediaCaptureVideoProfile;
    photoMediaDescription: MediaCaptureVideoProfileMediaDescription;
    previewMediaDescription: MediaCaptureVideoProfileMediaDescription;
    sourceGroup: Object;
    sharingMode: MediaCaptureSharingMode;
    memoryPreference: MediaCaptureMemoryPreference;
    alwaysPlaySystemShutterSound: Boolean;
    constructor();

  }

  export class MediaCaptureSettings {
    audioDeviceId: String;
    photoCaptureSource: PhotoCaptureSource;
    streamingCaptureMode: StreamingCaptureMode;
    videoDeviceCharacteristic: VideoDeviceCharacteristic;
    videoDeviceId: String;
    audioProcessing: Number;
    cameraSoundRequiredForRegion: Boolean;
    concurrentRecordAndPhotoSequenceSupported: Boolean;
    concurrentRecordAndPhotoSupported: Boolean;
    horizontal35mmEquivalentFocalLength: Number;
    mediaCategory: MediaCategory;
    pitchOffsetDegrees: Number;
    vertical35mmEquivalentFocalLength: Number;
    constructor();

  }

  export class LowLagMediaRecording {
    constructor();

    startAsync(callback: (error: Error) => void): void ;

    stopAsync(callback: (error: Error) => void): void ;

    finishAsync(callback: (error: Error) => void): void ;

    pauseAsync(behavior: Number, callback: (error: Error) => void): void ;

    resumeAsync(callback: (error: Error) => void): void ;

    pauseWithResultAsync(behavior: Number, callback: (error: Error, result: MediaCapturePauseResult) => void): void ;

    stopWithResultAsync(callback: (error: Error, result: MediaCaptureStopResult) => void): void ;

  }

  export class LowLagPhotoCapture {
    constructor();

    captureAsync(callback: (error: Error, result: CapturedPhoto) => void): void ;

    finishAsync(callback: (error: Error) => void): void ;

  }

  export class LowLagPhotoSequenceCapture {
    constructor();

    startAsync(callback: (error: Error) => void): void ;

    stopAsync(callback: (error: Error) => void): void ;

    finishAsync(callback: (error: Error) => void): void ;

    addListener(type: "PhotoCaptured", listener: (ev: Event) => void): void ;
    removeListener(type: "PhotoCaptured", listener: (ev: Event) => void): void ;
    on(type: "PhotoCaptured", listener: (ev: Event) => void): void ;
    off(type: "PhotoCaptured", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class MediaCaptureFocusChangedEventArgs {
    focusState: Number;
    constructor();

  }

  export class PhotoConfirmationCapturedEventArgs {
    captureTimeOffset: Number;
    frame: CapturedFrame;
    constructor();

  }

  export class AdvancedPhotoCapture {
    constructor();

    captureAsync(callback: (error: Error, result: AdvancedCapturedPhoto) => void): void ;
    captureAsync(context: Object, callback: (error: Error, result: AdvancedCapturedPhoto) => void): void ;

    finishAsync(callback: (error: Error) => void): void ;

    addListener(type: "AllPhotosCaptured", listener: (ev: Event) => void): void ;
    removeListener(type: "AllPhotosCaptured", listener: (ev: Event) => void): void ;
    on(type: "AllPhotosCaptured", listener: (ev: Event) => void): void ;
    off(type: "AllPhotosCaptured", listener: (ev: Event) => void): void ;
    
    addListener(type: "OptionalReferencePhotoCaptured", listener: (ev: Event) => void): void ;
    removeListener(type: "OptionalReferencePhotoCaptured", listener: (ev: Event) => void): void ;
    on(type: "OptionalReferencePhotoCaptured", listener: (ev: Event) => void): void ;
    off(type: "OptionalReferencePhotoCaptured", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class MediaCapturePauseResult {
    lastFrame: Object;
    recordDuration: Number;
    constructor();

    close(): void;
  }

  export class MediaCaptureStopResult {
    lastFrame: Object;
    recordDuration: Number;
    constructor();

    close(): void;
  }

  export class MediaCaptureDeviceExclusiveControlStatusChangedEventArgs {
    deviceId: String;
    status: MediaCaptureDeviceExclusiveControlStatus;
    constructor();

  }

  export class CapturedPhoto {
    frame: CapturedFrame;
    thumbnail: CapturedFrame;
    constructor();

  }

  export class AdvancedCapturedPhoto {
    context: Object;
    frame: CapturedFrame;
    mode: Number;
    frameBoundsRelativeToReferencePhoto: Object;
    constructor();

  }

  export class OptionalReferencePhotoCapturedEventArgs {
    context: Object;
    frame: CapturedFrame;
    constructor();

  }

  export class CapturedFrame {
    height: Number;
    width: Number;
    softwareBitmap: Object;
    contentType: String;
    size: Number;
    canRead: Boolean;
    canWrite: Boolean;
    position: Number;
    constructor();

    readAsync(buffer: Object, count: Number, options: Number, callback: (error: Error, result: Object) => void): void ;

    writeAsync(buffer: Object, callback: (error: Error, result: Number) => void): void ;

    flushAsync(callback: (error: Error, result: Boolean) => void): void ;

    getInputStreamAt(position: Number): Object;

    getOutputStreamAt(position: Number): Object;

    seek(position: Number): void;

    cloneStream(): Object;

    close(): void;
  }

  export class PhotoCapturedEventArgs {
    captureTimeOffset: Number;
    frame: CapturedFrame;
    thumbnail: CapturedFrame;
    constructor();

  }

  export class CapturedFrameControlValues {
    exposure: Number;
    exposureCompensation: Number;
    flashPowerPercent: Number;
    flashed: Boolean;
    focus: Number;
    isoSpeed: Number;
    sceneMode: Number;
    whiteBalance: Number;
    zoomFactor: Number;
    focusState: Number;
    isoAnalogGain: Number;
    isoDigitalGain: Number;
    sensorFrameRate: Object;
    whiteBalanceGain: WhiteBalanceGain;
    constructor();

  }

  export class VideoStreamConfiguration {
    inputProperties: Object;
    outputProperties: Object;
    constructor();

  }

  export class AppBroadcastGlobalSettings {
    systemAudioGain: Number;
    selectedCameraId: String;
    microphoneGain: Number;
    isMicrophoneCaptureEnabledByDefault: Boolean;
    isEchoCancellationEnabled: Boolean;
    isCursorImageCaptureEnabled: Boolean;
    isCameraCaptureEnabledByDefault: Boolean;
    isAudioCaptureEnabled: Boolean;
    cameraOverlaySize: AppBroadcastCameraOverlaySize;
    cameraOverlayLocation: AppBroadcastCameraOverlayLocation;
    hasHardwareEncoder: Boolean;
    isBroadcastEnabled: Boolean;
    isDisabledByPolicy: Boolean;
    isGpuConstrained: Boolean;
    constructor();

  }

  export class AppBroadcastProviderSettings {
    videoEncodingResolutionMode: AppBroadcastVideoEncodingResolutionMode;
    videoEncodingBitrateMode: AppBroadcastVideoEncodingBitrateMode;
    defaultBroadcastTitle: String;
    customVideoEncodingWidth: Number;
    customVideoEncodingHeight: Number;
    customVideoEncodingBitrate: Number;
    audioEncodingBitrate: Number;
    constructor();

  }

  export class AppBroadcastManager {
    constructor();

    static getGlobalSettings(): AppBroadcastGlobalSettings;


    static applyGlobalSettings(value: AppBroadcastGlobalSettings): void;


    static getProviderSettings(): AppBroadcastProviderSettings;


    static applyProviderSettings(value: AppBroadcastProviderSettings): void;


  }

  export class AppBroadcastBackgroundServiceSignInInfo {
    userName: String;
    oAuthRequestUri: Object;
    oAuthCallbackUri: Object;
    authenticationResult: Object;
    signInState: AppBroadcastSignInState;
    constructor();

    addListener(type: "SignInStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "SignInStateChanged", listener: (ev: Event) => void): void ;
    on(type: "SignInStateChanged", listener: (ev: Event) => void): void ;
    off(type: "SignInStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastSignInStateChangedEventArgs {
    result: AppBroadcastSignInResult;
    signInState: AppBroadcastSignInState;
    constructor();

  }

  export class AppBroadcastStreamReader {
    audioAacSequence: Object;
    audioBitrate: Number;
    audioChannels: Number;
    audioSampleRate: Number;
    videoBitrate: Number;
    videoHeight: Number;
    videoWidth: Number;
    constructor();

    tryGetNextAudioFrame(): AppBroadcastStreamAudioFrame;

    tryGetNextVideoFrame(): AppBroadcastStreamVideoFrame;

    addListener(type: "AudioFrameArrived", listener: (ev: Event) => void): void ;
    removeListener(type: "AudioFrameArrived", listener: (ev: Event) => void): void ;
    on(type: "AudioFrameArrived", listener: (ev: Event) => void): void ;
    off(type: "AudioFrameArrived", listener: (ev: Event) => void): void ;
    
    addListener(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    removeListener(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    on(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    off(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastBackgroundServiceStreamInfo {
    desiredVideoEncodingBitrate: Number;
    bandwidthTestBitrate: Number;
    audioCodec: String;
    broadcastStreamReader: AppBroadcastStreamReader;
    streamState: AppBroadcastStreamState;
    constructor();

    addListener(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    on(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    off(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "VideoEncodingBitrateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "VideoEncodingBitrateChanged", listener: (ev: Event) => void): void ;
    on(type: "VideoEncodingBitrateChanged", listener: (ev: Event) => void): void ;
    off(type: "VideoEncodingBitrateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "VideoEncodingResolutionChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "VideoEncodingResolutionChanged", listener: (ev: Event) => void): void ;
    on(type: "VideoEncodingResolutionChanged", listener: (ev: Event) => void): void ;
    off(type: "VideoEncodingResolutionChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastStreamStateChangedEventArgs {
    streamState: AppBroadcastStreamState;
    constructor();

  }

  export class AppBroadcastBackgroundService {
    viewerCount: Number;
    streamInfo: AppBroadcastBackgroundServiceStreamInfo;
    signInInfo: AppBroadcastBackgroundServiceSignInInfo;
    plugInState: AppBroadcastPlugInState;
    appId: String;
    broadcastTitle: String;
    titleId: String;
    constructor();

    terminateBroadcast(reason: AppBroadcastTerminationReason, providerSpecificReason: Number): void;

    addListener(type: "HeartbeatRequested", listener: (ev: Event) => void): void ;
    removeListener(type: "HeartbeatRequested", listener: (ev: Event) => void): void ;
    on(type: "HeartbeatRequested", listener: (ev: Event) => void): void ;
    off(type: "HeartbeatRequested", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastHeartbeatRequestedEventArgs {
    handled: Boolean;
    constructor();

  }

  export class AppBroadcastStreamAudioFrame {
    audioBuffer: Object;
    audioHeader: AppBroadcastStreamAudioHeader;
    constructor();

  }

  export class AppBroadcastStreamVideoFrame {
    videoBuffer: Object;
    videoHeader: AppBroadcastStreamVideoHeader;
    constructor();

  }

  export class AppBroadcastStreamVideoHeader {
    absoluteTimestamp: Date;
    duration: Number;
    frameId: Number;
    hasDiscontinuity: Boolean;
    isKeyFrame: Boolean;
    relativeTimestamp: Number;
    constructor();

  }

  export class AppBroadcastStreamAudioHeader {
    absoluteTimestamp: Date;
    duration: Number;
    frameId: Number;
    hasDiscontinuity: Boolean;
    relativeTimestamp: Number;
    constructor();

  }

  export class AppBroadcastTriggerDetails {
    backgroundService: AppBroadcastBackgroundService;
    constructor();

  }

  export class AppBroadcastPlugInManager {
    defaultPlugIn: AppBroadcastPlugIn;
    isBroadcastProviderAvailable: Boolean;
    plugInList: Object;
    constructor();

    static getDefault(): AppBroadcastPlugInManager;


    static getForUser(user: Object): AppBroadcastPlugInManager;


  }

  export class AppBroadcastPlugIn {
    appId: String;
    displayName: String;
    logo: Object;
    providerSettings: AppBroadcastProviderSettings;
    constructor();

  }

  export class AppBroadcastPreview {
    errorCode: Number;
    previewState: AppBroadcastPreviewState;
    previewStreamReader: AppBroadcastPreviewStreamReader;
    constructor();

    stopPreview(): void;

    addListener(type: "PreviewStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "PreviewStateChanged", listener: (ev: Event) => void): void ;
    on(type: "PreviewStateChanged", listener: (ev: Event) => void): void ;
    off(type: "PreviewStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastState {
    signInState: AppBroadcastSignInState;
    shouldCaptureMicrophone: Boolean;
    shouldCaptureCamera: Boolean;
    authenticationResult: Object;
    isCaptureTargetRunning: Boolean;
    microphoneCaptureError: Number;
    microphoneCaptureState: AppBroadcastMicrophoneCaptureState;
    oAuthCallbackUri: Object;
    oAuthRequestUri: Object;
    plugInState: AppBroadcastPlugInState;
    cameraCaptureError: Number;
    cameraCaptureState: AppBroadcastCameraCaptureState;
    encodedVideoSize: Object;
    streamState: AppBroadcastStreamState;
    terminationReason: AppBroadcastTerminationReason;
    terminationReasonPlugInSpecific: Number;
    viewerCount: Number;
    constructor();

    restartMicrophoneCapture(): void;

    restartCameraCapture(): void;

    addListener(type: "CameraCaptureStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "CameraCaptureStateChanged", listener: (ev: Event) => void): void ;
    on(type: "CameraCaptureStateChanged", listener: (ev: Event) => void): void ;
    off(type: "CameraCaptureStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    removeListener(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    on(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    off(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    
    addListener(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    on(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    off(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "PlugInStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "PlugInStateChanged", listener: (ev: Event) => void): void ;
    on(type: "PlugInStateChanged", listener: (ev: Event) => void): void ;
    off(type: "PlugInStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    on(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    off(type: "StreamStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: "ViewerCountChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "ViewerCountChanged", listener: (ev: Event) => void): void ;
    on(type: "ViewerCountChanged", listener: (ev: Event) => void): void ;
    off(type: "ViewerCountChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastViewerCountChangedEventArgs {
    viewerCount: Number;
    constructor();

  }

  export class AppBroadcastMicrophoneCaptureStateChangedEventArgs {
    errorCode: Number;
    state: AppBroadcastMicrophoneCaptureState;
    constructor();

  }

  export class AppBroadcastCameraCaptureStateChangedEventArgs {
    errorCode: Number;
    state: AppBroadcastCameraCaptureState;
    constructor();

  }

  export class AppBroadcastPlugInStateChangedEventArgs {
    plugInState: AppBroadcastPlugInState;
    constructor();

  }

  export class AppBroadcastPreviewStateChangedEventArgs {
    errorCode: Number;
    previewState: AppBroadcastPreviewState;
    constructor();

  }

  export class AppBroadcastPreviewStreamReader {
    videoBitmapAlphaMode: Number;
    videoBitmapPixelFormat: Number;
    videoHeight: Number;
    videoStride: Number;
    videoWidth: Number;
    constructor();

    tryGetNextVideoFrame(): AppBroadcastPreviewStreamVideoFrame;

    addListener(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    removeListener(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    on(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    off(type: "VideoFrameArrived", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppBroadcastPreviewStreamVideoFrame {
    videoBuffer: Object;
    videoHeader: AppBroadcastPreviewStreamVideoHeader;
    constructor();

  }

  export class AppBroadcastPreviewStreamVideoHeader {
    absoluteTimestamp: Date;
    duration: Number;
    frameId: Number;
    relativeTimestamp: Number;
    constructor();

  }

  export class AppBroadcastServices {
    captureTargetType: AppBroadcastCaptureTargetType;
    broadcastTitle: String;
    broadcastLanguage: String;
    canCapture: Boolean;
    state: AppBroadcastState;
    userName: String;
    constructor();

    enterBroadcastModeAsync(plugIn: AppBroadcastPlugIn, callback: (error: Error, result: Number) => void): void ;

    exitBroadcastMode(reason: AppBroadcastExitBroadcastModeReason): void;

    startBroadcast(): void;

    pauseBroadcast(): void;

    resumeBroadcast(): void;

    startPreview(desiredSize: Object): AppBroadcastPreview;

  }

  export class AppCaptureSettings {
    isHistoricalCaptureOnWirelessDisplayAllowed: Boolean;
    videoEncodingBitrateMode: AppCaptureVideoEncodingBitrateMode;
    isHistoricalCaptureOnBatteryAllowed: Boolean;
    isAudioCaptureEnabled: Boolean;
    isAppCaptureEnabled: Boolean;
    appCaptureDestinationFolder: Object;
    historicalBufferLength: Number;
    isHistoricalCaptureEnabled: Boolean;
    customVideoEncodingWidth: Number;
    customVideoEncodingHeight: Number;
    customVideoEncodingBitrate: Number;
    audioEncodingBitrate: Number;
    historicalBufferLengthUnit: AppCaptureHistoricalBufferLengthUnit;
    videoEncodingResolutionMode: AppCaptureVideoEncodingResolutionMode;
    screenshotDestinationFolder: Object;
    maximumRecordLength: Number;
    hasHardwareEncoder: Boolean;
    isCpuConstrained: Boolean;
    isMemoryConstrained: Boolean;
    isDisabledByPolicy: Boolean;
    alternateShortcutKeys: AppCaptureAlternateShortcutKeys;
    isGpuConstrained: Boolean;
    isMicrophoneCaptureEnabled: Boolean;
    videoEncodingFrameRateMode: AppCaptureVideoEncodingFrameRateMode;
    systemAudioGain: Number;
    microphoneGain: Number;
    isMicrophoneCaptureEnabledByDefault: Boolean;
    isEchoCancellationEnabled: Boolean;
    isCursorImageCaptureEnabled: Boolean;
    constructor();

  }

  export class AppCaptureAlternateShortcutKeys {
    toggleRecordingKeyModifiers: Number;
    toggleRecordingKey: Number;
    toggleRecordingIndicatorKeyModifiers: Number;
    toggleRecordingIndicatorKey: Number;
    toggleGameBarKeyModifiers: Number;
    toggleGameBarKey: Number;
    takeScreenshotKeyModifiers: Number;
    takeScreenshotKey: Number;
    saveHistoricalVideoKeyModifiers: Number;
    saveHistoricalVideoKey: Number;
    toggleMicrophoneCaptureKeyModifiers: Number;
    toggleMicrophoneCaptureKey: Number;
    toggleCameraCaptureKeyModifiers: Number;
    toggleCameraCaptureKey: Number;
    toggleBroadcastKeyModifiers: Number;
    toggleBroadcastKey: Number;
    constructor();

  }

  export class AppCaptureManager {
    constructor();

    static getCurrentSettings(): AppCaptureSettings;


    static applySettings(appCaptureSettings: AppCaptureSettings): void;


  }

  export class AppCaptureRecordOperation {
    duration: Number;
    errorCode: Number;
    file: Object;
    isFileTruncated: Boolean;
    state: AppCaptureRecordingState;
    constructor();

    stopRecording(): void;

    addListener(type: "DurationGenerated", listener: (ev: Event) => void): void ;
    removeListener(type: "DurationGenerated", listener: (ev: Event) => void): void ;
    on(type: "DurationGenerated", listener: (ev: Event) => void): void ;
    off(type: "DurationGenerated", listener: (ev: Event) => void): void ;
    
    addListener(type: "FileGenerated", listener: (ev: Event) => void): void ;
    removeListener(type: "FileGenerated", listener: (ev: Event) => void): void ;
    on(type: "FileGenerated", listener: (ev: Event) => void): void ;
    off(type: "FileGenerated", listener: (ev: Event) => void): void ;
    
    addListener(type: "StateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "StateChanged", listener: (ev: Event) => void): void ;
    on(type: "StateChanged", listener: (ev: Event) => void): void ;
    off(type: "StateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppCaptureState {
    shouldCaptureMicrophone: Boolean;
    isHistoricalCaptureEnabled: Boolean;
    isTargetRunning: Boolean;
    microphoneCaptureError: Number;
    microphoneCaptureState: AppCaptureMicrophoneCaptureState;
    constructor();

    restartMicrophoneCapture(): void;

    addListener(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    removeListener(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    on(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    off(type: "CaptureTargetClosed", listener: (ev: Event) => void): void ;
    
    addListener(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    on(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    off(type: "MicrophoneCaptureStateChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class AppCaptureMicrophoneCaptureStateChangedEventArgs {
    errorCode: Number;
    state: AppCaptureMicrophoneCaptureState;
    constructor();

  }

  export class AppCaptureRecordingStateChangedEventArgs {
    errorCode: Number;
    state: AppCaptureRecordingState;
    constructor();

  }

  export class AppCaptureDurationGeneratedEventArgs {
    duration: Number;
    constructor();

  }

  export class AppCaptureFileGeneratedEventArgs {
    file: Object;
    constructor();

  }

  export class AppCaptureServices {
    canCapture: Boolean;
    state: AppCaptureState;
    constructor();

    record(): AppCaptureRecordOperation;

    recordTimeSpan(startTime: Date, duration: Number): AppCaptureRecordOperation;

  }

  export class CameraOptionsUI {
    constructor();

    static show(mediaCapture: MediaCapture): void;


  }

  export class GameBarServicesManager {
    constructor();

    static getDefault(): GameBarServicesManager;


    addListener(type: "GameBarServicesCreated", listener: (ev: Event) => void): void ;
    removeListener(type: "GameBarServicesCreated", listener: (ev: Event) => void): void ;
    on(type: "GameBarServicesCreated", listener: (ev: Event) => void): void ;
    off(type: "GameBarServicesCreated", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class GameBarServicesManagerGameBarServicesCreatedEventArgs {
    gameBarServices: GameBarServices;
    constructor();

  }

  export class GameBarServices {
    appBroadcastServices: AppBroadcastServices;
    appCaptureServices: AppCaptureServices;
    sessionId: String;
    targetCapturePolicy: GameBarTargetCapturePolicy;
    targetInfo: GameBarServicesTargetInfo;
    constructor();

    enableCapture(): void;

    disableCapture(): void;

    addListener(type: "CommandReceived", listener: (ev: Event) => void): void ;
    removeListener(type: "CommandReceived", listener: (ev: Event) => void): void ;
    on(type: "CommandReceived", listener: (ev: Event) => void): void ;
    off(type: "CommandReceived", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class GameBarServicesTargetInfo {
    appId: String;
    displayMode: GameBarServicesDisplayMode;
    displayName: String;
    titleId: String;
    constructor();

  }

  export class GameBarServicesCommandEventArgs {
    command: GameBarCommand;
    origin: GameBarCommandOrigin;
    constructor();

  }

  export class ScreenCapture {
    audioSource: Object;
    isAudioSuspended: Boolean;
    isVideoSuspended: Boolean;
    videoSource: Object;
    constructor();

    static getForCurrentView(): ScreenCapture;


    addListener(type: "SourceSuspensionChanged", listener: (ev: Event) => void): void ;
    removeListener(type: "SourceSuspensionChanged", listener: (ev: Event) => void): void ;
    on(type: "SourceSuspensionChanged", listener: (ev: Event) => void): void ;
    off(type: "SourceSuspensionChanged", listener: (ev: Event) => void): void ;
    
    addListener(type: string, listener: (ev: Event) => void): void ;
    removeListener(type: string, listener: (ev: Event) => void): void ;
    on(type: string, listener: (ev: Event) => void): void ;
    off(type: string, listener: (ev: Event) => void): void ;
    

  }

  export class SourceSuspensionChangedEventArgs {
    isAudioSuspended: Boolean;
    isVideoSuspended: Boolean;
    constructor();

  }

}



