Version 2.2.0.8 Beta 6 ================= bear: - Fixed some PCR rollover issues with seeking & positioning return functions. - Added a version check to the shared memory parameters. - Various fixes made. - Fixed a problem in the shared memory handler that was causing locking of the file ref count. Version 2.2.0.8 Beta 1 ================= bear: - Added two new filters based on the TSFileSource & TSFileSink called TSParserSource & TSParserSink. - Implemented a SharedMemory class to mimic the Win32 API File Handler methods in shared memory. - Added playing of Shared Memory files to the TSFileSource & TSParserSource Filters - Added a input pin with its own MultiMemWriter class so it can timeshift to shared memory of incomming streams. - Fixed various bug in the filters for playing transport stream files. - Added reference clock speed change support to the Source Filter's property pages for testing. Version 2.2.0.7 Final ================= bear: - Fixed a problem with the DVB Format code that was not allowing PAT less only file to play. - Some minor fixes, Added some support for DTS Audio & Subtitle outputs. - Major rework of the Demux pin change code. - Major changes of the Demux change code. Version 2.2.0.6 Beta 6 ================= bear: - Changed some things to improve performance for cold starting. - Fixed a proble in the Checkconnect() method where it was allowing connection to other than MS Demux filters. - Minor code changes to the reference clock mode setting when reloading the file name. The Clock mode setting is now kept after a file reload.. - Removed the reference clock -1% change when cold starting, may have been causing some lipsync problems TBA. - Some minor changes to remove some threading stuff. - Found a problem with frame dropping when running in non HT mode. Removed the regular parser update call as well as disabled the TSBuffer extra threading. - Added some fixes to make the Netrender class work with the URL input format. - Added a High ProcessClass priority to the Net Render::CreateNetworkGraph() function if the dsnetwork graph was successful in building. Version 2.2.0.5 Final ================= bear: - Fixed a problem where the filtergraph times were not being updated correctly when loading new files. - Fixed a problem with cold starting of Full TS Mux files where the times would change if you changed to a new service. - Added some code to parse the media subtype from the file if its less than 2mb. This is to help with cold starting of timeshift files. - Added some code to help reduce HDD clogging. - Added some code to allow playing the TSFileSink timeshift files from other locations i.e. over networks. - Added a seperate buffer thread to the TSBuffer class, seems to now seek faster. - Fixed a bug where it would not seek properly if the file had a pcr cross over. - Updated the log fileWriter class with a buffer thread. - Fixed a problem with the Demux code so the filter will now work better when changing streams. Version 2.2.0.4 ================= bear: Fixed a posible problem with the TSFileSinkPin where it was not stopping the receive thread when the filter was stopped. Added a fix to the PAT parser code to fix a problem realised from germany. Added a fix to the FindPin() function because it was not adding a reference to the pointer. Added an extra test to exclude the Cyberlink Demux Filter from connecting, seems that it is unable to support MS Demux Interfaces Properly. Version 2.2.0.3 ================= bear: Fixed a problem in the PMT parser code that was causing false detection of extra streams for some files. Added an function to get the available free disk space so the TSFileSink Filter will begin reusing the old files if the HDD runs out of space. Fixed a crashing problem when used with other demux's that don't fully support the MS Demux interface methods like cyberlink. Fixed some locking issues. Fixed a PAT and ONIT parsing bug for UK users. Fixed another locking bug as well as checked all of the other locks in the CTSFileSource Class. Fixed a bug where the filter would lock if it was stopped before the pids were parsed.see PidParser(). Some minor changes to the update thread. Version 2.2.0.2 ================= bear: Fixed up some objects release issues. Added in version information to the property pages. I have had to reduce the fileWriter's sample size to stop the HDD clogging with multiple instances. Changed back some file writing flags in the filewriter classes, this now allows for double buffereng on the FileWriter input Pin. Added a TSThread Class to the TSFileSink filter Pin class to help with file cashing issues. Removed Frodo's packet error filter code from the TSFileSink filter, was too much delay for small sample sizes. Added some object locks to the IAMStreamInterface for when the Stop function is called. Changed the method in the file reload code to enable a cold start if a file is reloaded that has just been created. Changed some file reading/writing flags in the filewriter & file reader classes for quicker file accessing. Added some classes for preperation to use the Mpeg2Parser code. Added some code to the TSFileSinkPin Class to drop data packets that are not in sequence. Added a Packet error indicator from the above code to display the error count on the property page, and via the ISTFileSink Interface. Added a reset button to the property page to reset the error count. bear: Version 2.2.0.1 ================= bear: Some minor changes to the code to improve stability. Restored the update duration thread priority, just seems to update better. Added a fixed Aspect Ratio Option to the ITSFileSource Interface and property page. It sets the media format on the Demux video output pin to 720x576, default is null. Fixed a bug in the setPositions function that was causing a lock of the thread if it was called repeatedly quickly. re DNTVLive pause scrolling. Fixed a bug where the pid parser was not locked while setposition was called. Reduced the load delay on the network multicast render method as the filter can now do cold starts. Fixed a problem where the filter was unable to change pin mode if it was loaded & rendered and new file was loaded. Fixed a problem where the PidArray was being accessed during a clear operation and casing a crash. Re added the line of code to change the speed of the TSFileSourceClock by 1%, the value is now only reduced if it is a cold start file load. Fixed a problem where the Current File position was not being saved if the setposition() was called prior to the first pause()/run() call. Fixed a bug that was being caused when the fillbuffer thread was clashing with the UpdateDuration thread. Removed the line of code to change the speed of the TSFileSourceClock by 1%. It was just for testing. Added a line of code to change the speed of the TSFileSourceClock by 1%. Added an extra TSBuffer::Require() called from the Update Duration thread, this is so that we can read ahead between each FillBuffer calls. Added some extra PidArray critical locks. Added some critical locks to the demux, pidinfoarray & stream parser classes. Changed the duration update method to only parse if we have the pids parsed. Improved the startup delay by using a cold start method, the fillbuffer does not parse for pcr's until the pids are parsed. This means that the graph clock will not be updated until the pids are parsed. This occurs when there is sufficient file size to correctly parse the data. Improved the demux::cleardemuxpin() method byreplacing some calls with a vetetdemuxpin() method so it doesn't clear the pid if the new pid is the same value. Added in a reference clock delay when we reach the end of the file, will slightly improve as time progresses to stay ahead. Added a force output pin type method on the FileSource::load() function, this allows the graph to build with a program pin if required. i.e. If pmt param is media subtype program else Transport pin. If pmt is null then pin type is derived from the file parsing. Added in some low priority setings to the DurationUpdate, and property page threads. 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. Fixed a bug where the filter was not seeking correctly on the first seek, the internal bitrate was not being updated in the pids array. This was apparant on large files. Version 2.2.0.0 ================= bear: Found and fixed a new bug where the local pid array times were not being updated in the Update duration thread. Fixed a bug where the Multifilereader was holding the file open when in stopped, re- FileDuration's FileReader class. Fixed another issue with the Multifilereader mode's correct seeking time when changing between streams. Fixed a issue with the Source Load() function where it was changing the filename paramater's pointer value. Fixed a bug with the Multifilereader mode where it was not seeking correctly when the TSFileSink buffer size was reached. Fixed a bug with the Multifilereader mode where it was not re-seeking correctly after changing program streams. Changed the IAMStreamSelect menu display, does not display pointers in the menu name anymore. Fixed a bug with the MultiFileReader::Read() function where it was trying to read data past the end of the file. Found and fixed a few more potential divide by zero bugs. Fixed a bug in the MultiFileReader::Read() function where it would crash if the info array had no file-> class loaded.Fixed a potential problem with the IAMStreamSelect GetCount() function not returning 0 value if there are no streams. Fixed a potential problem if you have a threaded call to CTSFileSourcePin::GetAvailable() function if the FileReader class does not exist such as when reloading. Version 2.1.1.9 ================= bear: Fixed a bug with the TSFileSource's ITSFileSource property page Method that was stopping the page from displaying when called. Fixed a divide by zero bug that was causing the filter to crash when you tried to run the filter with a zero duration file then tried to stop it. Version 2.1.1.8 ================= bear: Fixed a problem with the seeking of the filtergraph after a change of streams or files. Fixed the problem where the video pin was not re-rendered when changing to a audio only program stream. Added a flow rate value to the stream name in the IAMStreamSelect menu list for Network streams so you can see if they are running. Added a restart method for the Network filtergraphs if the net data flow stops for longer than 2 seconds and then graph will close if longer than 10 seconds. Added a ShowStreamMenu() function to the ITSFileSource interface, it will create a mouse controlled popup menu of the streams list, this has been extended to the Prop page using the mouse right click to enable stream selection. Fixed a threading issue with the property page where it was locking up if you were to operate buttons too quickly. Changed the look of the menu in the IAMStreamSelect Interface. Changed the error code returned if the network graph has not data flow so applications do not try to access the filter. Fixed an issue when the filter was used by mplayer2.exe, seems it was selecting the first stream of every group prior to playing, hence it would then select the stream that was the Browser option and opened the open file window. Fixed a bug where the filter would stall if the NetSource graph failed due to no data flow. Added a open file browser feature to allow changing files via the IAMStreamSelect interface. Added selection capability of any active NetSource stream graphs via the IAMStreamSelect interface. Changed the Demux video pin format to allow for different aspect ratios. Implemented multicasting via a child filtergraph using the DSNet Receiver filter & the TSFileSink filter to create a timeshift file for playing. Made some improvments to the Load() function so that the filtergraph will re-render an infinite tee filter when changing between media types. Removed the Threadexist test in the SetPositions() function to fix the problem where the position is set prior to the first run call. Re Remember the last media position in Zoomplayer fix. Made some further improvments to the Load() file change feature to make it more robust and to allow for Infinite tee filter in the chain. Fixed a number of bugs in the duration parser to allow for buggy streams such as those that have PRBS content. Made some further improvments to the Load() file change feature. Some other minor improvements. Fixed a problem with double starting after a file change. Added a windows load feature to the Load Function, if you call it with a null filename it will now open a Browse window. Improved the method of changing files, can now change files when paused and stopped. Fixed a problem with the property page updating while the pidparser was restarting. Added a File Load feature to the ITSFileSource Interface as well as a button to the TSFileSource Property page. You can now change the file being played on the fly. Added a auto reload feature for Timeshifting files where the TSFileSource fiiter will restart if the timeshift file changes size shuch as in a restart of the fileWriter filter. Isolated the pidArray from the TSFileSourcePin class functions so it would reduce accessing conflicts. added in some delete code in the MultiFileWriter class to delete the file before it is reused. This eliminates any delay issues due to Read/Write conflicts. Fixed the auto pid parsing problem with the MultiFileWriter. Removed the extra RefreshTSBufferFile() calls from the MulitfileWriter as they seem to be causing problems. Added a seperate getFilePointer() & setFilePointer() calls to the fileWriters to reduce the need for special code for the different filewriters. Replaced the class Destructor calls in all the code with delete. Added CAMThreads to both prop pages for regular updating. Fixed the GetAvailable function to return correct times. Replaced the class Destructors in the load() function with delete. Disabled the auto pid parse code as its still buggy for Timeshifting. Fixed the line of code to update the duration, re converting to ref time rather than pcr time. Added a property page to the TSFileSink Filter. Added settings to the registry for the TSFileSink filter. Added locking code to the pidparser to prevent the pid array from being accessed while its being updated. changed the setpointer calls from FILE_BEGIN to FILE_END. Enabled the auto pid reparsing code to check pids every 5sec. nate: Changes to MultiFileReader - Fixed problem preventing second time play. - Fixed problem of new files added having the wrong file ID. - Fixed problem of not working when file was opened with files Removed > 0 - Fixed GetFileLength to work with files being written to. - Added some debugging that can be turned on for a specific file reader. Changed UpdateDuration to keep working if there's a PCR rollover. Fixed some build warnings - made MultiFileReader inherit FileReader publicly - changed RegStore to use LPTSTR instead of std::string - removed all #include from .h files. bear: Made improvments the Update duration code to correctly update the filtergraph time for MultiFileReader Mode. Made changes to the SetAccuratePos function to correctly seek relative to the file end position, seems to improve the MultiFileReader seeking now. Changed the default clock reference option to select the TSFileSource Internal clock. Changed the AC3 Preference Option Default setting to disabled so that UK users don't loose audio if a private stream is detected as AC3 and is chosen. Fixed a bug with the Program Pin Mode where it was not updating the duration. Added code to improve the Cyclic Timeshift mode, it can now handle pauses to the writer or the Source and the current time remains static or increases accordingly. Added code for the IMediaSeeking::GetAvailable() function. Added extra Update duration code for use with the MultiFileReader. Added a FileReader Mode function to indicate if we are using the MultiFileReader. Added some changes to the Getfilesize function of the MultifileReader. Fixed a problem with the update duration thread locking the file when stopped. Fixed the high cpu usage problem that occurs at 0 file start. Fixed the problem where the filter would not update the demux from a 0 file start. Fixed the filtergraph time to position itself relative to the position within the buffer so you can seek within it. This only happens when the buffer stops increasing in size and starts to cycle. Added a test for the demux pid settings to the update duration thread so that if the pids values change it will force a update on the demux. Changed the update duration method to parse only the end pcr rather than both start & end. Fixed a problem with the Update duration when using the TSFileWriter file by adding RefreshTSBufferFile() calls. nate: Implemented a ReferenceClock in TSFileSource Implemented the Audio Renderer Reference Clock selection option. (will not work as default setting) Added a TSFileSource Reference Clock selection option. Changed Rate Control to use timeGetTime rather than the IReferenceClock. Fixed a problem from 2.1.1.7 where registry defaults weren't loaded properly. Version 2.1.1.7 ================= Added TSFileSink (multi file transport stream writer) Added MultiFileReader for .tsbuffer files (duration updates don't work yet) Version 2.1.1.6 ================= Fixed a problem in the parser code that was causing false detection of A/V pids when in program Pin Mode. Fixed a problem with the CAMThread causing a lockup when the input file did not exist. Fixed the problem with the application task not ending after the above condition. Added a dummy IAsyncReader Interface to allow the MS Demux to parse the data in the file when the Demux control option is inactive.(Program Pin Mode Only) Added some changes to the PidParser code to allow for other country TS standards.(France) Changed the media subtype for H264 video mediatype so it wll play H264 streams.(France) Added some code to the FileReader class to do timeshifting, development only, using the FileWriter (TimeShift) Filter. Version 2.1.1.5 ================= Fixed a problem where the IMPEG2StreamIdMap pids were not being cleared when changing streams.(re mpg files) Fixed the AC3 Audio playback issue with mpg files. Had to add the stream offset values. Version 2.1.1.4 ================= Made some changes to the main destructor method so that all class destructors were used. Made some changes to the Breakconnect functon so that the pin could be reconnected to the Demux's. Added some helper code to delete any Demux output pins if the TSfileSource filter was disconnected. Fixed a bug in the GetDuration code that was causing issues with getting the pcr. Added some simple code to allow the filter to operate as a push source for mpg files, It changes the output pin to MPEG2 Program mode and controls the MS Demux using the IMPEG2StreamIdMap Interface. (Note: Does not seem to work well with AC3 streams but plays MPEG2 audio ok.) Version 2.1.1.3 ================= Changed the Pin name of the audio pin for AAC media types from "AAC" to "Audio" so Applications can still look for the audio label. Fixed a bug that was holding up the filtergraph when it was destroyed from a active filter state.RE CAMThread. Version 2.1.1.2 ================= Add a fix to the Pause function to allow it to work if called from a stopped condition. Fixed a few more bugs. Version 2.1.1.1 ================= Added a option on the property page to enable the Teletext pin.(Should solve any rendering Problems and make it quicker to load.) Added ITSFileSource function support for the above option. Version 2.1.1.0 ================= Fixed a divide by zero issue in the pidparser::Getduration that occured on low bitrate files. Added AAC audio support.(Works ok with the Elecard audio decoder.) Fixed a problem with the IAMStreamSelect::Info function, returns the Mediatype correctly as well as the Name. Fixed a few issues with the new h264 video additions. Fixed some more potential memory leaks in some of the various Get PCR Functions. Made the Stream Select Function display the EPG info when the first Stream position is selected. Made some improvments to the Stream Select Display format. Added some data packet injection code to allow viewing of the older capture formats, will only work with the Longhorn Demux though for some Network capture formats.(i.e missing pcr's) Removed the Random Access flag from the file reader, re WS File Writer problem fix. Added a ShowEPGInfo function to the ITSFileSource interface. Version 2.1.0.9 ================= Added support for h264 video streams.(nate) Version 2.1.0.8 ================= Fixed a problem with changing streams while seeking or paused. Version 2.1.0.7 ================= Implemented a seperate thread for the duration updating. Fixed a locking problem in the seek mode. Improved the fix for delayed play problem. Version 2.1.0.6 ================= Fixed a potential memory leak in the Seek Absolute Function. Fixed a problem in the Data rate Average Function. Renamed the Property Page Label. Fixed the playback delay Problem after a re-seek. Version 2.1.0.5 ================= Some bug fixes in the Update Duration FillBuffer function. Added a fix for the Play/Pause/Seek/Play problem where it would not begin play imediately after a paused re-seek. Version 2.1.0.4 ================= Added some Query interfaces to the CBaseOutput Pin. Addded some CBasePin Media Type check functions that may be of some use to earlier connection methods. Added code to set the CBasePin media type incase it was needed. Added changes to the filter to try and improve the loading times of problem captures. eg. It will now only try and parse the file duration using the PCR's four times before it gives up and calculates the file duration from any pre-defined PCRs that it has already parsed. If its a readonly file it will only try and pcr parse once before it calculates from prior PCR's. This seems to now improve the loading time of bad captures down to about 5seconds. Changed the duration refresh method of the Fillbuffer function for read only files from a PCR duration refresh to a calculated refresh based on the bitrate. I did this as I was getting stalling of the playback of the HD with Full TS files. If the bitrate is not a valid value then it will revert to the PCR duration refresh method. Changed the load function to parse for the pids 300kB into the file to skip corrupted data at the head of the file. Fixed a problem with the pid refresh feature when playing live recordings. Added Absolute Seek Function. Version 2.1.0.3 ================= Implemented an "EC_DVB_DURATIONCHANGE" & "EC_LENGTH_CHANGED" events to occur every second of an increase of stream time duration on live recorded captures. Added IBaseFilter:QueryId() function to return the Pin from the displayed Pin Label. Added IAMStreamSelect Refresh when refreshing the Pids from the property page button. Improvements to Parser code so it will correctly parse Full TS Files with corrupted head. Improvments to the GetDuration code to decrease load time on PCR problem files. Version 2.1.0.2 ================= Changed the IAMStreamSelect Interface Group order to zero base as it should have been. Just a bit more of a tidy up as well as fixed a Release statment in the CreateAC3Pin function which was left commented out in testing. Found Graph release problem in CheckConnect Function so Reclock Filter should now work again. Added ROT check to see if Object is already referenced so it will not make a double entry. Set Language descriptors to English default in IAMStreamSelect Interface. Also changed IAMStreamSelect Info Function to allow for Null pointers to be supplied. Added Filtergraph Reference Clock property Page Setting. This is to allow some DirectSound cards to have the correct reference clock set. Three options are Default, Demux & Render. Added ROT enable option to Property Page. The Filter can now register the filtergraph that its in to the Running Object table. Should allow access to the IAMStreamSelect Interface from other applications. Fixed Filter Peers parsing, was only finding one filter chain. Fixed Object release problem in checkConnect function. Added Reference Clock setting code for testing. Added StreamInfo & StreamParser classes and updated code to allow selection of Audio Tracks via the IAMStreamInterface. Added IAMStreamSelect Interface to filter. Allows for basic Program switching on applications. Fixed a bug in the NID file Parsing code to eliminate false NID's from previous channel. Changed the Property page CLSID to eliminate clashing with another filter. Rearranged the ITSFileSource Interface methods order to keep consistancy with the earlier official version 2.0.1.7. Note: Any programs that have used the above Interface with the earlier test versions will now need to recompile using the new interface method order. Fixed a EPG parsing bug that caused corrupt Now & Next information to appear if there was no N&N information in the stream. Fixed a divide by zero exception bug in the Buffer module that appeared when you tried to play corrupted files. Added checkConnect function on output pin to prevent anything but the MS Demultiplexer from connecting with exception of "*Tee*" & "*Flow*" labeled filter or Filters that have a "*MPEG-2*" labeled input pin. Version 2.1.0.1 ================= Main changes are to do with fixing the object release error, re-jiged the code to try and isolate problem and found that I was not releasing the pGraph pointer after each use. Also added in some filter peer code to allow the filter to only control the demux's in the same filter chain. It means that you can now play two or more TSFileSource filters within the same graph. Not that you would want to anyway. Version 2.1.0.0 ================= General tidy up of the code to remove old unused code. Version 2.0.1.7.NP7 ==================== It has some extra changes to allow it to work better with the new FileWriter Filter that DVB Webscheduler is now using. Also some bug fixes. Version 2.0.1.7.NP6 ==================== It has some changes to allow it to work with the new FileWriter Filter that DVB Webscheduler is going to use. It looks for the "filename.ts.info" file that is created while the new FileWriter is capturing and uses the information contained in this file to work out the file duration which it has not been able to do with any of the previous versions of the filewriter filter. Version 2.0.1.7.NP5 ==================== Added pid parsing on the fly to work while recording but getting some weird effects with memory being overwritten. Working on normal TS Files OK. Removed ITSFileSource interface project, not required anymore. Version 2.0.1.7.NP4 ==================== Added more bug fixes related to Full TSMux Files. Version 2.0.1.7.NP3 ==================== Added ITSFileSource interface project, Added Channel Number parsing, Added Channel & Network Name parsing, Added Program Now & Next Descriptor parsing, Added a 0 byte File growing wait, Added lots of bug fixes Version 2.0.1.7.NP2 ==================== Don't remember whats changed. Version 2.0.1.7.NP1 ==================== Changes that allow the filter to work with the NP & TIF in a BDA Graph.I have also added a wait for file growing state in the filter's Run code to allow the filter to Parse the pids before proceeding. This is designed to allow immediate play after the file starts recording. I have also had some joy with DVBT dumping & playing the file back within the same graph with reasonable performance although this is not a requirement. Also added a refresh button to the prop page. Version 2.0.1.7.NP ==================== Changes that allow the filter to work with the NP & TIF in a BDA Graph. I have added a new class called TunerEvent that uses the IBroadcast interface to send channel change events back to the filter so that the Demux can be updated. Added two more options to the Property page "NP Control" that enables the Source filter to control the NP program selection and "NP Slave" that allows the NP to control the Source filter's program selection. ATM it only works with the DVBT Network Provider and is suggested as a test version only although it should perform as normal for playing files. Version 2.0.1.7.z ==================== Implemented the registry save feature. Added Audio2 Preference support. Added a fix for any buggy duration times such as when missing pcr's such as on SBS radio. Added in some ATSC AC3/LPCM/DTS Stream detection for as a test. Changed the com interface to allow for User setting of the filter reg settings, programmers can now save & load settings seperate to the "default", these will be saved under "user", default is still loaded & saved from the prop page if "user" was not loaded. Implemented a small fix to the PCR parsing code to allow correct durations for ATSC files and quicker loading. Slight modifications to load & save the Network ID:TSID's value SID setting in the prop page along with the AC3 & Audio 2 preference settings. Altered the Prop Page to include correct NID & TSID values, also installed a "Prev" to the "Next" Button. Please note that I have not included any limitations on the registry entry numbers as this is still being looked at. Slight addition to the "ITSFileSource" interface to allow you to open the properties page. Addition of ONID as well as NID on the prop page as well as some more bug fixes. Version 2.0.1.7 ================= Main changes by nate. I've included the new duration code, although i havn't looked at it to see how it works. I'm just trusting you bear Improvments to Seeking. Duration updates if file is still growing. This makes it possible to seek right to the end of a file that is still growing. Stopped the FillBuffer method running during a seek. This reduces the chance of getting wierd PCRs. Doesn't stop and start the graph during a seek anymore. I moved the Sleeping from FileReader to TSBuffer. I did this because check for EPG reads a long way into the file before it gives up, so if the file was growing and wasn't very big yet then the CheckForEPG function would hang until the file got big enough. This caused the filter creation to hang. A a concequence of this change Live Delay mode doesn't work at the moment because I havn't got around to updating the option for it yet. The bitrate code is totally untested at the moment, but it's returning a value so it's doing something. Keep an eye out for the graph not stopping when it gets to the end of the file. I had it happen a few times, ussually after doing a lot of seeking, but i couldn't reproduce it regularly enough to figure out what was happening. I may have fixed it with other changes i made so i'll be interested to hear if anyone has it happen. Version 2.0.1.6 ================= Here's a summary of the changes nate's made. A lot of them are to do with the structure of the code and don't really effect the end user's experience of the filter, but there are a few things that will be noticed. All PID parsing has been moved into classes of it's own I created a PidInfo and PidInfoArray class to manage all the pid's more easily and have dynamically sized array of programs. I moved all file reading and seeking into it's own class with methods that take __int64 file pointers rather than having to deal with LARGE_INTEGERs each time a seek is done in parsing code. I moved all the demux handling code into it's own class. I merged the CTSSource and CTSSourceFilter classes into one. There's no point having them separate because CTSSource was only derived from CUnknown and all the other interfaces could just as easily be handled in the CTSSourceFilter class I renamed each occurance of a class or variable name from TSSource to TSFileSource to match the filter name. For filling media samples i created a CTSBuffer class that encapsulates all file reads. This has a few advantages. The amount of data read in each chunk is independant of the size of the samples being sent. This means you can specify a larger file read chunk to cut down on the number of disk reads. We can read further into the file than the size of the next sample to look for a PCR and then have that data already buffered and not have to re-read it when it comes time to send it in a sample. It's easy to change the size of samples and file reads. See the constructors of CTSBuffer and CTSFileSourcePin. I havn't played around with these too much yet to see what the best values are, but i'm using 188000 for each of them now without any problems. I implemented exact PCR calculation for the timing of sending samples to minimise bursting. A PCR value is calculated for the first byte of each sample, even at the start of the file. It does this by using the next and last PCR and their byte position, or if there hasn't been a PCR yet it uses the next two PCRs (assuming they are within the next 1Mb of the file), or if there are no more PCRs it uses the last two previously found PCRs if they exist. Cleaned up the properties dialog. Added GPL headers to the files. ZoomPlayer Customised Settings: ================================== Special Purpose: MPEG2 Transport :- TS File Filter(AU) (Registered) [that is the TSFileSource] Audio/Video Splitters: MPEG2 Transport :- MPEG-2 Demultiplexer (Registered) Default Media Settings for Players ================================== TSFileSource.reg : [HKEY_CLASSES_ROOT\Media Type\Extensions\.ts] "Source Filter"="{4F8BF30C-3BEB-43A3-8BF2-10096FD28CF2}" [HKEY_CLASSES_ROOT\Media Type\Extensions\.tp] "Source Filter"="{4F8BF30C-3BEB-43A3-8BF2-10096FD28CF2}"