// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.hardware.mediacodec;

using fuchsia.io;
using zx;

[ForDeprecatedCBindings]
protocol Device {
    /// This method connects the caller with a fuchsia.mediacodec.CodecFactory.
    GetCodecFactory(zx.handle:CHANNEL request);

    /// This method hands a service directory to the codec.  Currently the only service available
    /// via this service directory is fuchsia.cobalt.LoggerFactory.  Any services available via this
    /// service directory are services we'd prefer to get via the DDK.  A device can simply close
    /// this channel if the device doesn't need to use any services available via this service
    /// directory.
    SetAuxServiceDirectory(fuchsia.io.Directory service_directory);
};
