Digital Video Camcorder Support in Windows — 3
Until recently video editing on personal computers has been impractical for consumers, in part because digitized video data requires huge amounts of storage and because no standards exist for control of analog consumer video camcorders. The introduction of the Digital Video (DV) standard addresses these two problems:
It is now possible to store up to 20 minutes of digital video data in a file of approximately 4GB on a FAT32 system (the file size limit). A file on an NTFS system can store as much digital video data as will fit in the maximum file size on that system (the size of the disk partition).
DV camcorders comply with standard device-control protocols so software developers can support a wide range of camcorders with a common set of application interfaces.
A Windows video-editing application based on DirectShow can control a DV camcorder by calling the interfaces IAMExtDevice, IAMExtTransport, and IAMTimeCodeReader to get device capabilities, status, and timecodes, and to perform standard camcorder device-control operations such as play, rewind, fast forward, pause, stop, and record.
Currently, all DV camcorders follow the function control protocol (FCP) defined by IEC 61883, Digital Interface for Consumer Electronic Audio/Video Equipment, for the transport of audio/video command requests and responses to DV camcorders attached to the IEEE1394 bus. Although DV cameras are currently limited to the 1394 bus and IEC61883 protocols, the DirectShow interfaces are not. The DV camcorder driver (Msdv.sys) is a WDM driver that accepts property sets from these DirectShow interfaces and translates them into commands that a DV camcorder can process. This model will allow a single application to control a camcorder that uses any type of protocol over any kind of bus, once a driver is available that can translate property sets into commands that the device can understand.
This article describes how developers of PC video-editing applications can call the DirectShow interfaces IAMExtDevice, IAMExtTransport, and IAMTimeCodeReader to control a DV camcorder device, recommends a mechanism to preserve application performance while the camcorder performs time-consuming operations. These interfaces are documented in the DirectX 8.1 SDK.
Note: The code fragments in this article are taken from the sample property page, DVcrPage.cpp. The sample consists only of this source code file and does not include a make file or other files needed to compile the sample. Code fragments have been edited for clarity, and they omit code that would be present in a complete application. Developers should follow all recommended practices in their applications, such as use of critical sections to protect data from access by multiple threads. For details, see “Managing Time-Consuming Operations” later in this article.
Connecting to the Interfaces
A DirectShow application that controls a DV camcorder must connect to IAMExtDevice, IAMExtTransport, and IAMTimecodeReader interfaces before it can use them. These interfaces provide the following services:
IAMExtDevice is the base interface for controlling external devices. It controls general settings of external hardware and is used in combination with the IAMExtTransport interface, which controls a DV camcorder’s more specific settings.
IAMExtTransport provides methods that control specific behaviors of an external DV camcorder. These methods generally set and get the transport properties, which relate to how the DV camcorder and the computer exchange data.
IAMTimecodeReader reads SMPTE (Society of Motion Picture and Television Engineers) timecode and absolute track number (ATN) from a DV camcorder.
September 28, 2001