Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/LAVFilters.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2011-11-21 23:02:32 +0400
committerHendrik Leppkes <h.leppkes@gmail.com>2011-11-21 23:02:32 +0400
commita65aa535e1ffae5660a10dc4b8b63ae02d58e07c (patch)
treea935162b55b70ebe0880fe9771506fd79c26c9b5
parent197057360b8c415448d02249bfbd7f42cb1547b2 (diff)
Add LAV Video Settings to the developer_info interfaces.0.40
-rw-r--r--developer_info/LAVVideoSettings.h261
1 files changed, 261 insertions, 0 deletions
diff --git a/developer_info/LAVVideoSettings.h b/developer_info/LAVVideoSettings.h
new file mode 100644
index 00000000..05ed033e
--- /dev/null
+++ b/developer_info/LAVVideoSettings.h
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2011 Hendrik Leppkes
+ * http://www.1f0.de
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#pragma once
+
+// {FA40D6E9-4D38-4761-ADD2-71A9EC5FD32F}
+DEFINE_GUID(IID_ILAVVideoSettings,
+0xfa40d6e9, 0x4d38, 0x4761, 0xad, 0xd2, 0x71, 0xa9, 0xec, 0x5f, 0xd3, 0x2f);
+
+// Codecs supported in the LAV Video configuration
+// Codecs not listed here cannot be turned off. You can request codecs to be added to this list, if you wish.
+typedef enum LAVVideoCodec {
+ Codec_H264,
+ Codec_VC1,
+ Codec_MPEG1,
+ Codec_MPEG2,
+ Codec_MPEG4,
+ Codec_MSMPEG4,
+ Codec_VP8,
+ Codec_WMV3,
+ Codec_WMV12,
+ Codec_MJPEG,
+ Codec_Theora,
+ Codec_FLV1,
+ Codec_VP6,
+ Codec_SVQ,
+ Codec_H261,
+ Codec_H263,
+ Codec_Indeo,
+ Codec_TSCC,
+ Codec_Fraps,
+ Codec_HuffYUV,
+ Codec_QTRle,
+ Codec_DV,
+ Codec_Bink,
+ Codec_Smacker,
+ Codec_RV12,
+ Codec_RV34,
+ Codec_Lagarith,
+ Codec_Cinepak,
+ Codec_Camstudio,
+ Codec_QPEG,
+ Codec_ZLIB,
+ Codec_QTRpza,
+ Codec_PNG,
+ Codec_MSRLE,
+ Codec_ProRes,
+ Codec_UtVideo,
+
+ Codec_NB // Number of entrys (do not use when dynamically linking)
+};
+
+// Codecs with hardware acceleration
+typedef enum LAVVideoHWCodec {
+ HWCodec_H264 = Codec_H264,
+ HWCodec_VC1 = Codec_VC1,
+ HWCodec_MPEG2 = Codec_MPEG2,
+
+ HWCodec_NB = HWCodec_MPEG2 + 1
+};
+
+// Type of hardware accelerations
+typedef enum LAVHWAccel {
+ HWAccel_None,
+ HWAccel_CUDA
+};
+
+// Deinterlace algorithms offered by the hardware decoders
+typedef enum LAVHWDeintModes {
+ HWDeintMode_Weave,
+ HWDeintMode_BOB,
+ HWDeintMode_Hardware
+};
+
+// Software deinterlacing algorithms
+typedef enum LAVSWDeintModes {
+ SWDeintMode_None,
+ SWDeintMode_YADIF
+};
+
+// Type of deinterlacing to perform
+// - FramePerField re-constructs one frame from every field, resulting in 50/60 fps.
+// - FramePer2Field re-constructs one frame from every 2 fields, resulting in 25/30 fps.
+// Note: Weave will always use FramePer2Field
+typedef enum LAVDeintOutput {
+ DeintOutput_FramePerField,
+ DeintOutput_FramePer2Field
+};
+
+// Control the field order of the deinterlacer
+typedef enum LAVDeintFieldOrder {
+ DeintFieldOrder_Auto,
+ DeintFieldOrder_TopFieldFirst,
+ DeintFieldOrder_BottomFieldFirst,
+};
+
+// Supported output pixel formats
+typedef enum LAVOutPixFmts {
+ LAVOutPixFmt_None = -1,
+ LAVOutPixFmt_YV12, // 4:2:0, 8bit, planar
+ LAVOutPixFmt_NV12, // 4:2:0, 8bit, Y planar, U/V packed
+ LAVOutPixFmt_YUY2, // 4:2:2, 8bit, packed
+ LAVOutPixFmt_UYVY, // 4:2:2, 8bit, packed
+ LAVOutPixFmt_AYUV, // 4:4:4, 8bit, packed
+ LAVOutPixFmt_P010, // 4:2:0, 10bit, Y planar, U/V packed
+ LAVOutPixFmt_P210, // 4:2:2, 10bit, Y planar, U/V packed
+ LAVOutPixFmt_Y410, // 4:4:4, 10bit, packed
+ LAVOutPixFmt_P016, // 4:2:0, 16bit, Y planar, U/V packed
+ LAVOutPixFmt_P216, // 4:2:2, 16bit, Y planar, U/V packed
+ LAVOutPixFmt_Y416, // 4:4:4, 16bit, packed
+ LAVOutPixFmt_RGB32, // 32-bit RGB (BGRA)
+ LAVOutPixFmt_RGB24, // 24-bit RGB (BGR)
+
+ LAVOutPixFmt_NB // Number of formats
+} LAVOutPixFmts;
+
+// LAV Audio configuration interface
+[uuid("FA40D6E9-4D38-4761-ADD2-71A9EC5FD32F")]
+interface ILAVVideoSettings : public IUnknown
+{
+ // Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be saved
+ // You can use this to programmatically configure LAV Audio without interfering with the users settings in the registry.
+ // Subsequent calls to this function will reset all settings back to defaults, even if the mode does not change.
+ //
+ // Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
+ // For smooth operations, it must be called before LAV Audio is connected to other filters.
+ STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
+
+ // Configure which codecs are enabled
+ // If vCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
+ STDMETHOD_(BOOL,GetFormatConfiguration)(LAVVideoCodec vCodec) = 0;
+ STDMETHOD(SetFormatConfiguration)(LAVVideoCodec vCodec, BOOL bEnabled) = 0;
+
+ // Set the number of threads to use for Multi-Threaded decoding (where available)
+ // 0 = Auto Detect (based on number of CPU cores)
+ // 1 = 1 Thread -- No Multi-Threading
+ // >1 = Multi-Threading with the specified number of threads
+ STDMETHOD(SetNumThreads)(DWORD dwNum) = 0;
+
+ // Get the number of threads to use for Multi-Threaded decoding (where available)
+ // 0 = Auto Detect (based on number of CPU cores)
+ // 1 = 1 Thread -- No Multi-Threading
+ // >1 = Multi-Threading with the specified number of threads
+ STDMETHOD_(DWORD,GetNumThreads)() = 0;
+
+ // Set wether the aspect ratio encoded in the stream should be forwarded to the renderer,
+ // or the aspect ratio specified by the source filter should be kept.
+ // TRUE = AR from the Stream
+ // FALSE = AR from the source filter
+ STDMETHOD(SetStreamAR)(BOOL bStreamAR) = 0;
+
+ // Get wether the aspect ratio encoded in the stream should be forwarded to the renderer,
+ // or the aspect ratio specified by the source filter should be kept.
+ // TRUE = AR from the Stream
+ // FALSE = AR from the source filter
+ STDMETHOD_(BOOL,GetStreamAR)() = 0;
+
+ // Configure which pixel formats are enabled for output
+ // If pixFmt is invalid, Get will return FALSE and Set E_FAIL
+ STDMETHOD_(BOOL,GetPixelFormat)(LAVOutPixFmts pixFmt) = 0;
+ STDMETHOD(SetPixelFormat)(LAVOutPixFmts pixFmt, BOOL bEnabled) = 0;
+
+ // Set the RGB output range for the YUV->RGB conversion
+ // 0 = Auto (same as input), 1 = Limited (16-235), 2 = Full (0-255)
+ STDMETHOD(SetRGBOutputRange)(DWORD dwRange) = 0;
+
+ // Get the RGB output range for the YUV->RGB conversion
+ // 0 = Auto (same as input), 1 = Limited (16-235), 2 = Full (0-255)
+ STDMETHOD_(DWORD,GetRGBOutputRange)() = 0;
+
+ // Set the deinterlacing field order of the hardware decoder
+ STDMETHOD(SetDeintFieldOrder)(LAVDeintFieldOrder fieldOrder) = 0;
+
+ // get the deinterlacing field order of the hardware decoder
+ STDMETHOD_(LAVDeintFieldOrder, GetDeintFieldOrder)() = 0;
+
+ // Set wether all frames should be deinterlaced if the stream is flagged interlaced
+ STDMETHOD(SetDeintAggressive)(BOOL bAggressive) = 0;
+
+ // Get wether all frames should be deinterlaced if the stream is flagged interlaced
+ STDMETHOD_(BOOL, GetDeintAggressive)() = 0;
+
+ // Set wether all frames should be deinterlaced, even ones marked as progressive
+ STDMETHOD(SetDeintForce)(BOOL bForce) = 0;
+
+ // Get wether all frames should be deinterlaced, even ones marked as progressive
+ STDMETHOD_(BOOL, GetDeintForce)() = 0;
+
+ // Check if the specified HWAccel is supported
+ // Note: This will usually only check the availability of the required libraries (ie. for NVIDIA if a recent enough NVIDIA driver is installed)
+ // and not check actual hardware support
+ // Returns: 0 = Unsupported, 1 = Supported, 2 = Currently running
+ STDMETHOD_(DWORD,CheckHWAccelSupport)(LAVHWAccel hwAccel) = 0;
+
+ // Set which HW Accel method is used
+ // See LAVHWAccel for options.
+ STDMETHOD(SetHWAccel)(LAVHWAccel hwAccel) = 0;
+
+ // Get which HW Accel method is active
+ STDMETHOD_(LAVHWAccel, GetHWAccel)() = 0;
+
+ // Set which codecs should use HW Acceleration
+ STDMETHOD(SetHWAccelCodec)(LAVVideoHWCodec hwAccelCodec, BOOL bEnabled) = 0;
+
+ // Get which codecs should use HW Acceleration
+ STDMETHOD_(BOOL, GetHWAccelCodec)(LAVVideoHWCodec hwAccelCodec) = 0;
+
+ // Set the deinterlacing mode used by the hardware decoder
+ STDMETHOD(SetHWAccelDeintMode)(LAVHWDeintModes deintMode) = 0;
+
+ // Get the deinterlacing mode used by the hardware decoder
+ STDMETHOD_(LAVHWDeintModes, GetHWAccelDeintMode)() = 0;
+
+ // Set the deinterlacing output for the hardware decoder
+ STDMETHOD(SetHWAccelDeintOutput)(LAVDeintOutput deintOutput) = 0;
+
+ // Get the deinterlacing output for the hardware decoder
+ STDMETHOD_(LAVDeintOutput, GetHWAccelDeintOutput)() = 0;
+
+ // Set wether the hardware decoder should force high-quality deinterlacing
+ // Note: this option is not supported on all decoder implementations and/or all operating systems
+ STDMETHOD(SetHWAccelDeintHQ)(BOOL bHQ) = 0;
+
+ // Get wether the hardware decoder should force high-quality deinterlacing
+ // Note: this option is not supported on all decoder implementations and/or all operating systems
+ STDMETHOD_(BOOL, GetHWAccelDeintHQ)() = 0;
+
+ // Set the software deinterlacing mode used
+ STDMETHOD(SetSWDeintMode)(LAVSWDeintModes deintMode) = 0;
+
+ // Get the software deinterlacing mode used
+ STDMETHOD_(LAVSWDeintModes, GetSWDeintMode)() = 0;
+
+ // Set the software deinterlacing output
+ STDMETHOD(SetSWDeintOutput)(LAVDeintOutput deintOutput) = 0;
+
+ // Get the software deinterlacing output
+ STDMETHOD_(LAVDeintOutput, GetSWDeintOutput)() = 0;
+
+ // Set wether all content is treated as progressive, and any interlaced flags are ignored
+ STDMETHOD(SetDeintTreatAsProgressive)(BOOL bEnabled) = 0;
+
+ // Get wether all content is treated as progressive, and any interlaced flags are ignored
+ STDMETHOD_(BOOL, GetDeintTreatAsProgressive)() = 0;
+};