using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.System;
namespace MediaBrowser.Controller.MediaEncoding
{
///
/// Interface IMediaEncoder
///
public interface IMediaEncoder : ITranscoderSupport
{
FFmpegLocation EncoderLocation { get; }
///
/// Gets the encoder path.
///
/// The encoder path.
string EncoderPath { get; }
///
/// Supportses the decoder.
///
/// The decoder.
/// true if XXXX, false otherwise.
bool SupportsDecoder(string decoder);
///
/// Extracts the audio image.
///
/// The path.
/// Index of the image stream.
/// The cancellation token.
/// Task{Stream}.
Task ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken);
///
/// Extracts the video image.
///
Task ExtractVideoImage(string[] inputFiles, string container, MediaProtocol protocol, MediaStream videoStream, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken);
Task ExtractVideoImage(string[] inputFiles, string container, MediaProtocol protocol, MediaStream imageStream, int? imageStreamIndex, CancellationToken cancellationToken);
///
/// Extracts the video images on interval.
///
Task ExtractVideoImagesOnInterval(string[] inputFiles,
string container,
MediaStream videoStream,
MediaProtocol protocol,
Video3DFormat? threedFormat,
TimeSpan interval,
string targetDirectory,
string filenamePrefix,
int? maxWidth,
CancellationToken cancellationToken);
///
/// Gets the media info.
///
/// The request.
/// The cancellation token.
/// Task.
Task GetMediaInfo(MediaInfoRequest request, CancellationToken cancellationToken);
///
/// Gets the input argument.
///
/// The input files.
/// The protocol.
/// System.String.
string GetInputArgument(IReadOnlyList inputFiles, MediaProtocol protocol);
///
/// Gets the time parameter.
///
/// The ticks.
/// System.String.
string GetTimeParameter(long ticks);
Task ConvertImage(string inputPath, string outputPath);
///
/// Escapes the subtitle filter path.
///
/// The path.
/// System.String.
string EscapeSubtitleFilterPath(string path);
void SetFFmpegPath();
void UpdateEncoderPath(string path, string pathType);
bool SupportsEncoder(string encoder);
string[] GetPlayableStreamFileNames(string path, VideoType videoType);
IEnumerable GetPrimaryPlaylistVobFiles(string path, IIsoMount isoMount, uint? titleNumber);
}
}