DigitalWatch

nate.deepcreek.org.au / Programming / DigitalWatch 2.x

Description

DigitalWatch is a free open source project for watching and recording DVB-T digital television.

More ...
Features
DigitalWatch 2.x has been totally redeveloped from the DigitalWatch 0.x series with an entirely different architecture. As a result, not all of the features available in 0.x versions have been implemented in 2.x versions. It's planned to add most of them as time permits but time doesn't permit very much for me these days. Fortunately bear and DigiWatchSaver have been able to chip in and start adding support for recording and timeshifting.

What does it do?

  • Nice and simple interface, just the video window, and all information comes up as an On Screen Display. No pesky right click menu.
  • OSD items are configurable (font, colour, location on screen, size)
  • Operational from the keyboard to make using a remote easy.
  • Configurable key assignments.
  • Single key channel selection. Channels are organised by network rather than having a great long list of duplicate channels.
  • Fast channel changing.
  • Choose which video and audio decoders get used for each media type.
  • Volume control that doesn't tamper with the windows mixer.
  • Always On Top option
  • Disable Screensaver
  • Zoom (For watching 4:3 material without the black border)
  • Supports HD and AC3. Of course this depends on which video and audio decoders you choose and what their settings are.

    New to 2.x versions
  • Supports any BDA compatible DVB-T digital tv tuner.
  • Supports multiple tuners (Not simultaneously. Yet)
  • Tuners are automatically detected. No configuration required unless you want to disable one
  • Much nicer OSD (only works for the Overlay Mixer at the moment. VMR9 is to come)
  • Detailed logging to diagnose problems
  • Channel scanning.

    Coming soon
    These are currently in the trunk source but are still undergoing bug fixes.
  • File Playback (using TSFileSource)
  • Recording to multiple formats
  • Timeshifting
  • Command line arguments.
  • Detection of Aspect Ratio, and the ability to override it.

What doesn't it do?

Downloads
DigitalWatch 2.0.7.6 Zip File (974kb) History Source
DigitalWatch 2.0.7.5 Zip File (886kb) History
DigitalWatch 2.0.7.0 Zip File (838kb) History
DigitalWatch 2.0.1.3 Zip File (164kb) History
DigitalWatch 2.0.0.11 Zip File (201kb) History
DigitalWatch 2.0.0.9 Zip File (200kb) History
DigitalWatch 2.0.0.7 Zip File (199kb) History
DigitalWatch 2.0.0.5 Zip File (179kb) History
DigitalWatch 2.0.0.3 Zip File (177kb) History
DigitalWatch 2.0.0.1 Zip File (177kb) History

Mpeg2Dec Video Decoder Filter (compiled from the guliverkli project)
Initially this is the default video decoder. Either download and register this filter, or change the decoder in MediaTypes.xml.

Latest Source Code
DigitalWatch Development Forum
History

DigitalWatch 2.0.7.6

Changes:
  • bear:
  • Added some code to solve a thread crashing issue where it was trying to start a thread when it was already running.
  • Fixed a problem with the SetDSNetworkPort function where it was causing a crash when the value was less than 4 digits.
  • Added a option for a basic surface key render for DigitalWatchSaver so the OSD uses less cpu for slower systems. Default is False.
  • Added a Screen Saver disable option for paused playback to the settings.xml, also will now disable screensaver if the application has been minimised with the quiet on minimised option enabled.
  • Updated TSFileSource Filter ver 2.2.0.8 Beta 6.

DigitalWatch 2.0.7.5

Changes:
  • bear:
  • Added support for region frequency settings in the OSD, just add the frequency.xml file to a location in the regions dir for it to be accessable. You will need to delete the regionList.xml for DW to rebuild the list. Default freq are now in the default folder location.
  • Changed the timeshift resume to be relative to local time, this is optional from the settings.xml.
  • Added DTS Audio & Subtitle media support.
  • Fixed a problem in the BDACardCollection::FindCaptureDevice() code that caused a problem with virtual drivers from TwinHan.
  • Fixed a object release issue in the TSFileStreamList class that was holding the TSFileSource active on close.
  • Added DSNetwork input support for the OSD.
  • Added OSD Global settings support for the Signal quality tests, also the default value is now disabled.
  • Changed the ITSFileSource AC3 Preference setting to disabled.
  • Changed the Timeshift file format to default to TS Mux.
  • Add signal strength/quality back into the DigitalWatch OSD (used the "S" key).
  • Added in some audio muting when changing channels.
  • Made some changes to fix the multiple audio stream problem when timeshifting. @anthony, if you could try this, thanks.
  • Fixed a bug that was causing crashes when accessing the message log writer. I think.
  • Added in a option setting to the OSD menu global settings to enable ordering of the services by channel numbers. Default setting is enabled.
  • Changed the SetChannel(ONID) method to SetChannel(TSID) for the changes earlier.
  • Changed the OSD network/channel display to now parse the transport Stream ID rather than the Original Network ID, this is so uk users can navigate the services since they have the same ONID values for the same frequency.
  • Added a buffer log message limit vale to the settings.xml, you can now specify how many messages are buffered before a file write is made, default value is 100. Setiing the value to 0 will cause the log to write to file imediate.
  • Added a low priority buffer thread class to the Log Writer, it will now buffer any log messages and write them with it's own low priority thread.

DigitalWatch 2.0.7.0

Changes:
  • nate:
  • Added Settings.txt to contain information about the options in setting.xml
  • Small change to get DWOSDData to compile in VS2003
  • Fixed hang when the second instance of DW is destroying TVControl.
  • Fixed small memory leak in AppData
  • Replaced all lstrxxxW with wcsxxx just to be consistent throughout the code.
  • Unduplicated the cut&pasted code in DWGraph.
  • Added check that ONID TSID and NID are all valid values before updating channel information
  • Fixed problem with OSDControls not being correctly detected in OnUp, OnDown, OnLeft & OnRight commands.
  • Added alternate main menu that doesn't use OSDList and commented out the previous one.
  • Moved streams.h include from dwdump.h to dwdump.cpp file to avoid "included twice "warnings in the build.
  • Changed DWSurfaceText so that it only creates and destroys the font once, instead of every time it's assigned to a DC.
  • Fix for Invalid Rect problem. I think it was caused by Clear() running when SetOverlayPosition was half way through, so I've added a critical section lock.
  • Added implementation of WM_COPYDATA, Hasn't been tested.
  • Changes to make it compile and remove warnings in VS 2003. (Hopefully it doesn't break it for VS6.
  • Check for nulls when getting overlay window
  • Add command line processing
  • Commented out Signal Statistics stuff since it's causing hangs with my second tuner.
  • Added pausing to TSFileSource source
  • Fixed TSFileSource source to be able to load a file a second time
  • Upgraded DWThread class
  • Fixed transparency with osd lists in directdraw mode
  • Added an UpdateData thread to BDADVBTSource to get Signal Statistics
      bear:
  • Fixed a problem with testing VRM9 render in the decoder testing.
  • Fixed some issues with the auto decoder test features, will now test correctly.
  • Added folder creation for the capture & timeshifting directories.
  • Added in Auto decoder testing on first run.
  • Fixed a problem with adding networks by turning off the channel zapping mode while updating.
  • Fixed an issue with the Teletext pin data being set to the wrong media type.
  • Fixed some minor bugs.
  • Added some Minimise/Close/Open Display() functions to the file player.
  • Fixed a problem with the diplay resizing causing the Watch TV Mode Stopping the graph.
  • Added the TSFileSource's Demux class to enable channel zapping in Watch TV Mode.
  • Added a size limit to the resume list, can be set in the settings.xml file.
  • Fixed a few things with the resume settings.
  • Added file resume list to application, also added settings in the global & timeshift menus.
  • Added the Cyberlink 7 h264 decoder to the decoder.xml file.
  • Fixed a few bugs that were causing problems with rendering decoders.
  • Fixed a few bugs to get the application to play h264 ts files, also fixed a problem with playing mpg files.
  • Added support for h264 media type, can't tell if it works as have no access to a broadcast.
  • Added a Decoder Test function to the decoder selection method, to use you need to enable decoder test setting in the settings menu.
  • Added a emboss image to the settings menu to mask out decoders that do not match the media type selected.
  • Added a Cycle Cards option in the settings menu so the cards will not cycle.
  • Slight change to the minimise/restore function to remove some error messages from the log.
  • Added the LastChannel function to the Watch TV Timeshift modes.
  • Solved a few stream selection locking problems by turning on and off of some updating threads.
  • Added a extended network name option to the settings menu so that the network name can be identified by adding the TSID value.
  • Fixed a few bugs regarding the ViewRecordFile function.
  • Started rationalise the code into the filtergraph tools class.
  • Extended the close display function on QuiteOnMinimise to the "Watch TV" mode so you can open several instances of DW and select the instance you want to watch by maximising.
  • Added a Remember Last Service setting, as well as saving the last service used in the settings.xml file.
  • Added a function to view a recording file while in timeshift mode, key shift "W", just "W" returns to the timeshift file.
  • Added a extra command to the SetSource function, can now timeshift the channel your watching by pressing pause.
  • Fixed the Fast timeshift change method, was not updating the demux pids after the demux was connected.
  • Added in some other changes.
  • Added some changes to allow the video decoder/overlay mixer render method to still work if the mixer is in use, will now default to windowless mode. Note: In the decoder.xml file you now need to Add the input filter prior to adding the overlay mixer.
  • Added some code to fix the picture if the Timeshift format is not set.
  • Changed the file Writing flags back to normal file buffering, double buffering is now active in both the TSFileSink and DWDump filters.
  • Added a CloseBuffersOnMinimise setting, This just means that when you minimise the application via the mouse you can option to close any unused sink graphs or not.
  • Added a LoadRecordFile function to the timeshift shift "W" key so yo can now view the recorded file.- Implemented a decoder settings menu. You can now choose which decoder to use from the Settings Menu.
  • Fixed a bug where it was not setting the correct service ID to the sink graphs.
  • Fixed a bug where you could not add a network from "TV Watch" Mode.
  • Fixed a bug in where it was crashing on a channel change when it was stopping the player.
  • Implemented a Device settings menu. You can now enable & disable cards, as well as rotate there order.
  • Added a small change to pause the graph before we change channel then start the graph again to fix the problem of upsetting WS captures.
  • Added device settings to the settings menu.
  • Added a fix to work around the dntvlive mini driver problem that causes the tuner to change in other instances.
  • Changed the graph rebuild method when changing channels in Timeshifting mode, it will now create a new sink graph if another card is free and then the player will change over to it before closing the previous sink graph. This improves the visual channel change to give a 1sec display change.
  • Implemented a "QuietWhenMinimised" option in Global settings, it lets you close the player when timeshifting if the application is minimised. It will restart when the application is restored and will seek to the present time.
  • Implemented a "MultiCard" option in Global settings, it lets you create multiple sink graphs in timeshifting mode dependant on the number of cards you have active and will let you change channel between each graph, and seeking to the present time. It will release the most last used sink graph if changing to a new channel if all the cards are already in use by the application unless it is recording.
  • Changed the timeout of the Tuner Scanning code from 1sec to 5sec, this seems to reduce the cpu usage as it seemed to be taking longer than 1sec to parse and would seem to double up on the threads.
  • Added some code to now set the ITSFileSource settings to make sure the correct settings are engaged when in use by the application.
  • Updated TSFileSink filter with packet continuity filtering, error count detection displayed on property page.
  • Added Filter Property page List Class and OSD menu for Filters. Keys "F" and "G" in Timeshift class.
  • Added Settings menu to OSD.
  • Updated this history file.
  • Added a fix to the SubChannel selection code in TimeShifting Full Mux mode so that the full Channel Number & Name are compared.
  • Added code to cause any multiple Instance of DW to force VMR9Windowless Render.
  • Revamp of the Settings.xml for Timeshift, Capture & DSNetwork Settings, it now uses text rather than values to set the Mux types.
  • Added in a test for the TimeShift file data flow so the graph can fail and move to the next card.
  • Changed the code related to the Timeshift "BufferMinutes" setting so that it better adapts the buffer time for better accuracy.
  • Added Keyboard Mappings.pdf from rpalmer68.
  • Added settings for the following in the settings.xml,
  • Multiple Instances, trial only, use with VRM9windowless render, seperate directories.
  • Quantizer filter option, test only, for use with mpgmux & sep file captures. not fully tested yet.
  • Added settings for Time Shift Buffer size, these settings should not be changed unless you have an idea of what your doing.
  • Now have the BufferMunites setting working, default is 0 or not auto, if its value is say 5 then the TS buffer will try and change its size to give you at least 5 min of time, this may vary as the buffer goes up and down in size.
  • Had another look at the Reference Clock setting of which demux to use and changed the order of the sink building. If DSNetsink then it will be reference, if then capture sink then it becomes reference, then if Timeshift sink then it is reference.
  • Added some code to set the Reference clock after each demux is added in the BDSDVBTimeshift class, i.e. it will now set the TimeShift sink demux as the clock reference rather than defaulting to the last demux added. This may have caused problems if the reference clock was not defaulting and was null when the timeshift sink graph starts.
  • Added some code to prevent re starting of the timeshift mode if the same channel is selected.
  • Changed the Stream detection method on calls to the StreamInfo::GetFindServiceNameCur() now includes channel number in the test.
  • Added new Media Formats to make the demux pins the same as the TSFileSource media types. Also changed the sink demux types as well.
  • Removed the file build delay, loading of the TSFileSource is now instant, although the settings for file build method can be still valid if the values are not zero.
  • Added in AddDemuxpins method on the TSFileSource class method prior to connection.
  • Added in Forced Pin mode to FileSource::Load call. see TSFileSource notes.
  • Changed some of the priority settings of the updatedata threads.
  • TSFileSource:Added in some low priority setings to the DurationUpdate, and property page threads.
  • Made some changes to get the video controls to work in the timeshift failed mode.
  • TSFileSource: Changed the FillBuffer wait for file building method from a 50ms delay to a 2 second long retry at 50ms intervals. This is to get around file corruption caused by some drivers.
  • Removed DWSource::Start() code references, were all redundant.
  • Removed the extra DWGraph class in the Timeshift class, now sink graph has its own filtergraph. Seems to have speed up channel changing a little bit.
  • Removed a few other redundant code bits.
  • Started documentation of the new code.
  • Found a call to the source Start() function that was missed, this was causing a restart of the source when selected from the main menu.
  • Removed m_pActiveSource->Start() from the if block. Then made sure that anything that happed in Start() in the sources that was required by Load() also happened in Load() in the sources.
  • Added in an else statment to stop the source classes loading twice when the application is run with a command line.
  • Some slight changes to the method of selecting the program while in timeshifting mode.
  • Changed the command line text for the timeshift source from "TSTV://" to just "TS://"
  • Changed the names of the filter GUIDs to CLSID.
  • Added code to allow selection of the correct program service when using Full TSMux Timeshifting mode.
  • Changed the TimeShifting setting format to exclude the capture sink settings. Now you need to add on to the timeshift format value to include the capture sink class. eg Capture format settings do not affect timeshifting format. To enable recording in the Timeshift mode you now need to have the upper 4 bits set to the capture type you want. i.e. for timeshifting using TSMux format & capturing using MPGMux format you need to set the value to "0x42" where lower 4 bits are the timeshift type and the upper 4 bits are the capture format.
  • Added in rpalmer68 Keys.xml files.
  • Added in filter CLSID values to be changable from within the settings.xml file.
  • Removed the Streams.xml file save function, now all remains in memory.
  • Added in a lower process priority in the mpeg2parser ThreadProc function.
  • Added in modification by DWS regarding extra Path parm in recording function call.
  • Added various fixes to the TSFileSource filter, see its changelog.
  • Added fixes to the timeshift waiting for file to build code, added in extra setting in the timeshift section.
  • Added in code by DigitalWatchSaver.
  • Added a TimeShift file reload function, you can now reload/return to the timeshifting file via the "W" key.
  • Changed the timeshift wait before filesource load method from a 3 sec sleep delay to a file growing test method.
  • Fixed an issue where the file was not correctly parsed from the sink filter. It now stores the file name and passes this to the filesource.
  • Fixed the issue where if your recording that you could still change the source mode via the the shift S/T/F keys.
  • Added in some code for the recording() function passing a filename.
  • Changed the key value in the keys.xml re:Key code= 36 RecordingTimer(1).
  • Fixed various bugs, sorry don't remember which.
  • Extended the video display settings to the file source graph in timeshifting.
  • Added various warning messages etc.
  • Implemented TimeShifting class modules.
  • Fixed a problem where the sink filters were not being removed.
  • Fixed a problem setting the filename with null on the MPG sink filter.
  • Fixed crashing when you try to record if no capture format is set.
  • Fixed a problem channel scan problem on networks that have same PCR & video pid values. Channel rescan will be required.
  • Implemented Recording control, implemented settings for capture type, timeshift type, dsnetwork types into the settings.xml. sink types are 1=Full TS, 2=TSMux, 4=MPGMux, 8=Seperate Files. Note FileName is optional, will replace service name if inserted. Folder should also include extra back slash at end, eg. "G:\capture\".
  • Made changes to the channel class to include PMT & PCR pids in StreamList.xml for the TSMux Sinks. Also removed the redundant showmenu & exit menu from the TSFilesource class.
  • Added some Sink classes for File recording, timeshifting and DSNetorking.
  • Added a Stream Selection Menu to the File Source.

DigitalWatch 2.0.2.2

Changes:
  • New OSD renderer architecture to support other video rendering methods (VMR9, VMR9 Windowless, VMR9 Renderless)
  • Added VMR9 Windowsless mode (only tested with the "Mpeg2Dec Video Decoder - VMR9" decoder so far)
  • Fixed DWOSDList highlighting problem when switching to another list with less items
  • Added Override option for AspectRatio
  • Added AspectRatio detection to be used if AR isn't overridden
  • Added ProgramUp and ProgramDown to BDA_DVB-T/Keys.xml
  • Added ffdshow decoder entries
  • Added nVidia Audio Decoder entry
  • Added an UpdateData thread to BDADVBTSource to get Signal Statistics
  • Added a TSFileSource source
  • Added command line processing.

DigitalWatch 2.0.1.3

Changes:
  • Implemented Settings.xml, including:
    • All six application priorities. Low, BelowNormal, Normal, AboveNormal, High, and Realtime. AboveNormal is now the Default.
    • Window settings to remember Fullscreen, AlwaysOnTop, the Size, and the Position of the window when you close it and restore them when the app is next loaded.
    • Startup volume and mute setting.
    • Startup zoom, zoomMode, and overlay color controls settings.
  • Fixed a crash caused when the window spans 2 screens by 1 pixel.
  • Added memory leak detection code from codeproject
    http://www.codeproject.com/cpp/MemLeakDetect.asp.
  • Added an append mode to the FileWriter class. ofstream caused problems with the memory leak detection code so i'm using FileWriter everywhere now instead.
  • Fixed menu not hiding after changing channels.
  • Fixed channel reorder not saving the channels file.
  • Lots of memory leaks removed.
  • Added critical sections for most vectors to improved multithreading safety.
  • Improved OSD efficiency when displaying long lists.

DigitalWatch 2.0.0.11

Changes:
  • Made ExecuteCommand operations able to read hex strings aswell as normal strings.
  • Fixed problem of Frequency list and Cards list duplicating if Watch TV is reselected
  • Fixed problem when scanning different frequencies with the same tsid

DigitalWatch 2.0.0.9

Changes:
  • Fixed channels file for when more than one broadcaster used the same transport stream id.
  • Fixed problem where selecting Watch TV a second time would duplicate all the channels.
  • Fixed problem in scanning. The waiting filters weren't cleared if there was a timeout scanning a table.
  • Fixed threading issue with data items and lists.
  • Fixed memory leak in OSD code

DigitalWatch 2.0.0.7

Note: This version updates the channels.xml file so if you want to keep your old one make sure you make a copy of it.
For this version i'd like people to start without a channels file at all to test out the scanning.
Changes:
  • Implemented Channel Scanning. This required heaps of other changes.
    • Renamed "Program" in DVBTChannels to "Service".
    • Added a command queue thread to TVControl to allow UpdateChannel events to be handled.
      This also allows the OSD to be drawn while changing channels.
    • Reworked BDADVBTSource to be able to tune to frequencies without channels entries so that scanning can be done for that frequency.
  • Removed all state information (such as current network) from DVBTChannels. It's the wrong place for it.
  • Added menu options for adding and ordering networks.
  • Added FrequencyList to show a list of frequencies (for Australia) when adding networks.
  • Added ability for an OSDList to contain both items and itemLists.
  • Fixed DirectDraw OSD so the overlay color blt rectangle doesn't go out of bounds.
  • Commented out the FPS display.
  • Added DScaler video decoder.
  • Fixed an exception when application is closing. There may still be a problem though.
  • Fixed stuttering by setting the reference clock to the DW demux instead of the default demux.

DigitalWatch 2.0.0.5

Changes:
  • Changed card detection so that newly added and removed cards get automatically actived and deactivated.
  • Changed DVB-T source rendering so that the pin types are done in order
    • teletext is only done if video renders ok.
    • ac3 is only rendered if mp2 doesn't render ok. (there'll be a preference for this in the future)
  • Added lots of decoders (thanks to bear for doing most of the work)
  • Fixed resolution problem is only the primary directdraw device is found.
  • Added code to switch OSD render method depending on the video renderer being used.
    This means that the VMR7 and VMR9 can now be used without flickering, but there's no OSD while using them.
  • Added extra logging for enumerations of directdraw devices and pin creation and rendering.

DigitalWatch 2.0.0.3

I've modified the directdraw enumeration a bit so it should work. If it doesn't then it will at least give more details in the log that i can use.

The only file changed in the zip from 2.0.0.1 is DigitalWatch.exe

DigitalWatch 2.0.0.1

Lots of stuff still isn't implemented so don't expect too much.

To get up and running:
  • Unless you're using Mt. Dandenong in Melbourne then you'll have to edit the BDA_DVB-T\Channels.xml file. Once i get scanning done editing this file shouldn't be necessary anymore.
    The stream types are 0 unknown, 1 video, 2 mpeg audio, 3 ac3 audio, 4 teletext.
    Brisbane Channels thanks to bear.
  • Currently it's set up to use the GPL MPEG-1/2 video decoder and the DNTV Live! Audio decoder. If you don't have these installed then you'll need to either install them, or
    Use an existing, or add a new, decoder entry in the Decoders.xml file and edit the MediaTypes.xml file to use that different decoder.
    I think you should be able to figure out once you see the files.
    Only the Overlay Mixer video renderer works properly at the moment.
  • Enter, Esc, and the arrow keys are your friends. See the Keys.xml files (there's one in the BDA_DVB-T folder too) to know what other keys are available. Most of the things i've implemented use the same key as previous DW's, like 0-9 for network selection, [ and ] for 100% and 133% zoom etc...
  • The FPS reading at the bottom is the rate which the directdraw overlay is drawing. It has nothing to do with the fps of the video stream.
  • I added 10 example items to the main menu just to show off the fancy scrolling menu
  • If it's not working look in the DigitalWatch.log file
  • If you have more than 1 tuner, then each time you change channels the next card will be used. If you have trouble with a particular card then you can disable it in BDA_DVB-T\Cards.xml