DirectShow Registry Settings (Windows Embedded CE 6.0)
1/6/2010
The DirectShow registry settings allow you to configure Windows Media codec playback performance, maintain a smooth audio or video playback, control the settings of the video renderer, establish quality levels and associated parameters for image encoding, control the number and size of the buffers that are available on the input pin, and specify the number and size of MediaSamples that are allocated for the connection between the MPEG-2 Program Stream Multiplexer Filter and the DVR Engine Sink filter.
The following topics describe programming elements that can add, delete, enumerate, or represent DirectShow registry settings:
- AMovieDllRegisterServer function
- DMORegister function
- IFilterMapper Interface interface
- IFilterMapper::RegisterFilter method
- IFilterMapper::RegisterPin method
- IFilterMapper::UnregisterFilter method
- IFilterMapper::UnregisterFilterInstance method
- IFilterMapper::UnregisterPin method
- REGFILTER structure
Windows Media Video Codec Performance
The WMVDecoder subkey allows you to adjust Windows Media video codec playback performance and quality for x86 processors only. This subkey is not available for other architectures.
By default, each frame from a Windows Media video stream undergoes some level of post-processing after it is decoded. This smoothes the video frame by deblocking the image to smooth artifacts that are inherent to the digital compression process, and by de-ringing the image to correct for certain motion artifacts. The level of post-processing depends on the level of CPU performance.
How much post-processing is used directly affects the device's CPU usage. You can adjust the level of post-processing that the Windows Media video codec performs with the following registry subkey:
[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX\DirectShow\WMVDecoder]
"PostProcessing"=dword:FFFFFFFF
The following table describes the settings that can be used for the PostProcessing named value.
PostProcessing setting | Description |
---|---|
FFFFFFFF |
Automatic. The Windows Media codec automatically sets the level of post-processing based on the incoming data and the CPU of the target device. |
0 |
Disabled. All post-processing is disabled. Disabling post-processing produces the highest frame rates during playback, but it does so at the expense of video quality. |
1 |
Fast deblocking. The codec runs each frame through a coarse deblocking filter. |
2 |
Full deblocking. The codec runs each frame through a fine deblocking filter. |
3 |
Fast deblocking and deringing. The codec runs each frame through both a coarse deblocking filter and a coarse deringing filter. |
4 |
Full deblocking and deringing. The codec runs each frame through both a fine deblocking filter and a fine deringing filter. This setting requires the highest CPU usage. It produces the highest quality image for each individual frame; however, the overall frame rate may be reduced. |
Audio and Video Thread Priorities
If DirectShow is using a high percentage of the available CPU on a device when the device is decoding video, the audio and video performance may be uneven if other threads with higher priorities also need to use the CPU.
To maintain a smooth audio or smooth video playback at all times, you can use the following registry subkey to fine tune the priorities for the audio and video threads: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\ThreadPriority
The following table describes the named values for this subkey.
Value | Type | Description |
---|---|---|
Highest |
DWORD |
Sets a new thread priority for DirectShow threads that are running with a priority of THREAD_PRIORITY_HIGHEST. The default setting is the hexadecimal value F9, which is identical to the remapped value of THREAD_PRIORITY_HIGHEST (249). |
AboveNormal |
DWORD |
Sets a new thread priority for DirectShow threads that are running with a priority of THREAD_PRIORITY_ABOVE_NORMAL. The default setting is the hexadecimal value FA, which is identical to the remapped value of THREAD_PRIORITY_ABOVE_NORMAL (250). |
Normal |
DWORD |
Sets a new thread priority for DirectShow threads that are running with a priority of THREAD_PRIORITY_NORMAL. The default setting is the hexadecimal value FB, which is identical to the remapped value of THREAD_PRIORITY_NORMAL (251). |
BelowNormal |
DWORD |
Sets a new thread priority for DirectShow threads that are running with a priority of THREAD_PRIORITY_BELOW_NORMAL. The default setting is the hexadecimal value FC, which is identical to the remapped value of THREAD_PRIORITY_BELOW_NORMAL (252). |
Video |
DWORD |
Sets a new thread priority for the video rendering thread in DirectShow. The default setting is the hexadecimal value FB, which is identical to the remapped value of THREAD_PRIORITY_NORMAL (251). The setting for Normal does not affect the video rendering thread. |
The named values Highest, AboveNormal, Normal, and BelowNormal are all associated with standard operating system thread priority levels.
DirectShow threads that are identified with the standard operating system thread priorities run at the priority levels that are specified by those registry settings instead of the values that are described in the preceding table. These settings affect only threads that are owned by DirectShow. They do not affect the global operating system thread priority levels, and they do not affect threads that are owned by Windows Media Player.
For more information about Windows Embedded CE thread priorities, see Priority Levels.
The following registry key example shows the default values for the registry subkey
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\ThreadPriority.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\ThreadPriority]
"Highest"=DWORD:F9
"AboveNormal"= DWORD:FA
"Normal"= DWORD:FB
"BelowNormal"= DWORD:FC
"Video"= DWORD:FB
Notes
- The default settings for DirectShow thread priorities provide satisfactory results for almost all devices; these values should not be changed unless absolutely necessary.
- Changing values for DirectShow thread priorities from their default values can be very risky because the new values can cause unexpected performance problems for other applications that are running concurrently with DirectShow. It can be difficult to test for, diagnose, and resolve these types of problems.
- If you must adjust the DirectShow audio and video thread priorities, make sure that the DirectShow priorities are higher than the audio and video driver priorities in your operating system design. Also, make sure that the audio priority is higher than the priority of the software mixer. Failing to take these steps almost always results in audio and video playback performance problems.
Video Renderer Settings
You can control the settings of the video renderer with the registry subkey:HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX\DirectShow\Video Renderer
The following table shows the named values for this subkey.
Value | Type | Description |
---|---|---|
MaxBackBuffers |
DWORD |
Controls the number of back buffers the video renderer can use. |
SurfaceTypes |
DWORD |
Defines the types of video surfaces that the video renderer uses. It is a bitwise combination of the DirectShow DirectDraw Surface (AMDDS) definitions that are described in the next table. Always set this to a hexadecimal value, not to a symbolic constant. If you set this value to 0x00 (AMDDS_NONE), the video renderer uses GDI. |
UseOverlayStretch |
DWORD |
Controls aspect ratio preservation in the overlay area. The default setting is 1. Set this value to 1 to stretch the video image to fill the overlay area. Set this value to 0 to preserve the aspect ratio of the video image. |
UseScanLine |
DWORD |
Defines whether the video renderer will use IDirectDraw::GetScanLine to determine when to blit or flip. This is typically an expensive operation, so it is turned off by default. The default setting is 0. Set this value to 1 to turn it on. |
KeyColor |
DWORD |
Defines the color key when playing back video using an overlay on a non-palletized display, that is, a display with a color depth that is greater than 8 bpp. This is a hexadecimal RGB value. |
KeyIndex |
DWORD |
Defines the color key when the device plays back video by using an overlay on a palletized display, that is, a display with a color depth of less than or equal to 8 bpp. This is a hexadecimal value in the range of 0 to 2^(color depth) - 1. |
The following table describes the AMDDS flag values to use with the SurfaceTypes named value.
Flag | Hexadecimal value | Description |
---|---|---|
AMDDS_NONE |
0x00 |
No support for Device Control Interface (DCI) or DirectDraw. |
AMDDS_DCIPS |
0x01 |
Uses DCI primary surface. |
AMDDS_PS |
0x02 |
Uses DirectDraw primary surface. |
AMDDS_RGBOVR |
0x04 |
Uses RGB overlay surfaces. |
AMDDS_YUVOVR |
0x08 |
Uses YUV overlay surfaces. |
AMDDS_RGBOFF |
0x10 |
Uses RGB off-screen surfaces. |
AMDDS_YUVOFF |
0x20 |
Uses YUV off-screen surfaces. |
AMDDS_RGBFLP |
0x40 |
Uses RGB flipping surfaces. |
AMDDS_YUVFLP |
0x80 |
Uses YUV flipping surfaces. |
AMDDS_ALL |
0xFF |
Uses all available surfaces. |
AMDDS_DEFAULT |
0xFF |
Uses all available surfaces. |
AMDDS_YUV |
0xA8 |
(AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP) |
AMDDS_RGB |
0x58 |
(AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP) |
AMDDS_PRIMARY |
0x03 |
(AMDDS_DCIPS | AMDDS_PS) |
Encoder Quality Settings
You can establish quality levels and associated parameters for image encoding with the following registry subkey:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\ImageSink\Quality\<Quality Level>\<File Extension>\<Parameter Name>
The IImageSinkFilter Interface interface uses this subkey to obtain parameter values that are passed on to the image encoding factory. The designated encoder quality level, the file extension, and the parameter name are all integral to the path of the registry subkey.
The following table shows the named values for a parameter. Each of these values corresponds to a member of a StructEncoderParameter structure.
Value | Type | Description |
---|---|---|
GUID |
BINARY |
The GUID for the encoding parameter. There is no default setting. |
NumberOfValues |
DWORD |
The number of parameter values that are contained in Value. There is no default setting. |
Type |
DWORD |
The data type for the parameter. There is no default setting. |
Value |
DWORD |
The value of the parameter. If NumberOfValues is greater than1, Value must be provided with binary data that encodes all of these values. There is no default setting. |
The following example shows a registry entry that sets a value for the Compression parameter when the device is encoding a .jpg file at quality level 0.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\ImageSink\Quality\0\jpg\Compression]
"GUID"="0xe09d739d-ccd4-44ee-8eba-3fbf8be4fc58"
"Value"=dword:00000003
"Type"=dword:00000004
"NumberOfValues"=dword:00000001
Memory Use and Performance During Streaming
You can use the following registry key to control how much memory is allowed for the buffer during streamed playback of media by using Windows Media Technologies:
HKEY_CURRENT_USER\Software\Microsoft\Netshow\Player\
This key allows you to choose between memory use and performance. For high bit-rate, High Definition video files, you must allow a large amount of memory to prevent the device from running out of buffer space when a long stream of hard frames arrives.
The registry key named values are multipliers of the pre-roll values that are set in the file. The values should be specified as percentage numbers. For example, a number of 300 denotes a multiplier of 3x, and 1 denotes a multiplier of 0.01X.
Value | Type | Description |
---|---|---|
PrerollMinMultiplier |
DWORD |
This is the low-water mark. A freeze is issued if the buffer space goes below the multiplier * pre-roll value. |
PrerollMaxMultiplier |
DWORD |
This is the high-water mark. Buffering is limited to the amount of memory that is specified by the pre-roll * multiplier value. |
For more information about registry settings for Windows Media Technologies, see Windows Media Technologies Registry Settings.
Settings for the MPEG-2 Program Stream Multiplexer Filter
You can specify the number and size of MediaSamples that are allocated for the connection between the MPEG-2 Program Stream Multiplexer Filter and the DVR Engine Sink filter by using the following subkey:
HKEY_LOCAL_MACHINE\Software\Microsoft\Dvr\DvrPsMux
The following table shows the named values for this subkey. These values are not set by default.
Value | Type | Description |
---|---|---|
OutputBufferCount |
DWORD |
The number of samples. Choose a value on the basis of system memory constraints and performance requirementsI |
OutputBufferSize |
DWORD |
The media sample size. The default is 128Kb. This value is the most important. If you want the device to process video streams that are larger than the MPEG-2 video constraints that are specified in the DVD-Video specification (section 5.4.1.2), increase the media sample size to a value that is greater than the default value. You must choose a sample size that is large enough to hold a complete I-frame, plus any audio data that may accompany it. |
The default registry values vary depending on what Catalog items are included in your operating system design. For more information about these settings, see Default Registry Settings.
The following is a list of topics that provide in-depth discussions about other DirectShow registry settings:
The following is a list of topics about programming elements that can add, delete, enumerate, or represent DirectShow registry settings:
- CBaseFilter Class class
- CBaseFilter::Register method
- CBaseFilter::Unregister method
- IAMovieSetup Interface interface
- IAMovieSetup::Register method
- IAMovieSetup::Unregister method*]*
- IEnumRegFilters Interface interface
MPEG Splitter Settings
You can control the number and size of the buffers that are available on the input pin of the MPEG-1 Parser/Splitter with the following registry subkey: HKEY_LOCAL_MACHINE\Software\Microsoft\Multimedia\DirectShow\MPEG Splitter
This subkey is used by the upstream asynchronous file source filter during pin negotiation. For more information about this filter, see File Source (Async) Filter.
The following table describes the named values for this subkey.
Value | Type | Description |
---|---|---|
BufferCount |
DWORD |
Controls the number of buffers that is used by the MPEG-1 Stream Splitter Filter. The default setting is 4. |
BufferSize |
DWORD |
Defines the size, in bytes, of each buffer. The default setting is 10000. |