This is a minor release that fixes a packaging bug that may cause pydvbcss to be unable to install correctly unless CherryPy and ws4py packages are already installed.
- Fixed missing
requirements.txtin pypi package (c696395)
This is a minor release containing a temporary workaround for installation problems caused by changes to packages this library depends on (cherrypy).
- Temporary fix for bug due to changes in cherrypy (f5bb1b1 and 7ad71e9). Will be reverted once resolved by dependencies
This is a minor release containing mostly maintenance fixes arising from recent changes to cherrypy/ws4py, some small documentation improvements, and an enhancement to CII server support for when bound to multiple network interfaces.
- Enhancement: CII server can transparently rewrite
wcUrl,tsUrlandteUrlto take account of the network interface the client has connected to - enabling it to work when bound to multiple interfaces. (#14) - Docs:
README.mdimprovements. - Switch from temporary to permanent fix due to cherrypy/ws4py bugs that have now been fixed. (#13)
This is a minor release that includes a temporary workaround for a problem ith dependencies (cherrypy and ws4py) when installing. It also includes various bug fixes and a new type of Clock object that is useful when compensating for rendering latencies.
- Bugfix: fixed semantics on
calcWhen(),toParenTicks()andtoRootTicks()when clock speed is 0.` (32256b6) - API addition: new
OffsetClockclass to make it easy to compensate for rendering latencies. - Temporary fix for bug due to changes in cherrypy (f8ec3f6). Will be reverted once resolved by dependencies.
This release contains a significant internal upgrade to the dvbcss.clock
module with minor knock-on effects on other packages - particularly wall clock
client and server code and algorithms. The changes have been implemented to
be mostly backwardly compatible, so existing code should continue to work. The
only exception will be any custom wall clock client algorithms.
Clock objects can now calculate dispersion (error bounds). Clocks can also track clock availability (mirroring the concept of timeline availability).
Wall clock client algorithms have been switched from measuring and adjusting the same clock (representing the wall clock) to instead measuring its parent and setting the correlation. Any custom wall clock client algorithms will not work and will need to be updated.
-
Use a
CorrelatedClockinstead of aTunableClockto model a wall clock. and set the "maximum frequency error" when initialising theSysClockinstead of passing it to aWallClockClientorWallClockServer. -
Use a
Correlationobject instead of a tuple (parentT,childT) to represent correlations for aCorrelatedClock -
Control and check timeline availability of clock objects instead of setting or querying the availability of the TS protocol server or client.
-
Update any custom algorithms you might have created for wall clock clients.
-
Candidateobjects now represent the relationship between the parent of the local wall clock (instead of the local wall clock itself) and the server's wall clock.` -
Algorithms and Filters now receive a single
Candidateobject in units of nanoseconds. They no longer receive aCandidateconverted to units of clock ticks. -
Predictors should return a
Correlationinstead of an adjustment value.
-
-
DispersionCalculatoris being deprecated. It still exists, but you should stop using it and instead useCandidate.calcCorrelationForfunction to create a correlation which you then put into aCorrelatedClockand call thedispersionAtTimefunction.
Examples of old way (0.3.x and earlier):
s = SysClock()
wallClock = TunableClock(s, tickRate=1000000000)
algorithm = LowestDispersionCandidate(wallClock,repeatSecs=1,timeoutSecs=0.5, localMaxFreqErrorPpm=500)
wc_client=WallClockClient(bind, dest, wallClock, algorithm)
wc_client.start()
timeline = CorrelatedClock(wallClock, tickRate=1000, (10,20))
timeline.correlation = ( timeline.correlation[0], timeline.correlation[1] + 50)
ts = TSClientClockController(tsUrl, contentIdStem, timelineSelector, timeline)
print ts.available
Equivalent new way (0.4 and later):
s=SysClock(maxFreqErrorPpm=500)
wallClock=CorrelatedClock(s,tickRate=1000000000)
algorithm = LowestDispersionCandidate(wallClock,repeatSecs=1,timeoutSecs=0.5)
wc_client=WallClockClient(bind, dest, wallClock, algorithm)
wc_client.start()
timeline = CorrelatedClock(wallClock, tickRate=1000, Correlation(10,20))
timeline.correlation = timeline.correlation.butWith(childTicks=timeline.childTicks + 50)
ts = TSClientClockController(tsUrl, contentIdStem, timelineSelector, timeline)
print timeline.isAvailable()
Main changes in new clock model (da846a9):
- API addition: can setParent() on
CorrelatedClock,RangeCorrelatedClockandTunableClock. - API change: All clock objects modified to be able to track error values and calculate dispersions and clock
availability - API change:
CorrelatedClockclass modified to use aCorrelationobject instead of a tuple. - API change:
TunableClockreimplemented as subclass ofCorrelatedClock - API change:
WallClockClient,WallClockServerinitialisation arguments - precision and maxfreqerror now optional. Now, by default, taken from the clock. - API change: Wall clock client algorithms (dispersion, filtering, prediction) changed to update a CorrelatedClock and to measure the parent of the clock representing the wall clock. Review the documentation to understand how to update any algorithms you might have implemented.
- API change:
DispersionCalculatorclass deprecated (but still available). UseCandidate.calcCorrelationForandCorrelatedClock.dispersionAtTimeinstead. - Tests: Updated to reflect changes.
- Docs: Updated to reflect changes.
Other improvements/bugfixes:
- Bugfix: Tracking of number of connections to CSS-CII and CSS-TS had a leak (4c76042)
- API addition:
setParent()onCorrelatedClock(d4576d7) - Bugfix: NotImplemented exception used incorrectly (d4576d7)
- Bugfix: Workaround for OSX 10.11 SIP for monotonic clock module (P-R #6 and P-R #7)
- Improvement: Support for monotonic clock on Android. (P-R #5 by Jack Jansen)
- Bugfix:
clock.getEffectiveSpeed()stuck in infinite loop. (ceb3f33) - Docs: Now correctly links to github source for correct branch/version.
- Docs: Improvements to setup/release process to format PyPI description correctly (by converting to ReStructuredText)
- Build: Migrated to hosting documentation on readthedocs.org and doing build checks with travis-ci.org
- Bugfix: improvements to thread safety
- Bugfix: incorrect arguments on disconnect handler in CIIClient
- Bugfix: Initialiser for
CIIServerclass to avoid corruption of default value forinitialCIIif a 2nd CII server is instantiated - API addition: Added
copy()methods to all classes representing JSON messages. - Bugfix:
TSClientclass did not correctly handle when contentId is null - Bugfix:
examples/TSClient.pynow exits when the connection is closed.
- Completed support for uploading packages to pypi to enable installation using
pip - Bugfix: setup.py was not tracking same version number as in
VERSIONfile.
- API change: Modified API for TimelineSource for TS Servers to allow for situations where it takes time to begin extracting a timeline at the server.
- Docs: Switched to referring to spec as ETSI 103 286 now it is published by ETSI
- Docs: Updated to reflect API changes
- Docs: General minor fixes
- Bugfix: CIIServer disconnect callback failed due to wrong number of arguments
- Bugfix: Incorrect use of
"presentationStatus"CII property in examples. Should have been a list, not a string. Also added a check to trap this. - Bugfix: Some command line arguments being ignored in
examples/TVDevice.py - Bugfix: Wallclock time printed in wrong units in
examples/WallClockClient.py
- API change: Added ways to extract dispersion and worst-dispersion information more usefully from wall clock clients.
- Tests: Minor unit test improvements
- Bugfix: Fixed problem in
setup.pythat meant when pydvbcss is installed it could not be imported into another python program - Bugfix: Fixed incorrect content ID URLs used in CII Server example
- Docs: Various documentation improvements
- Tests: New unit tests