windows-nt/Source/XPSP1/NT/multimedia/dshow/vidctl/todo.txt

133 lines
8.5 KiB
Plaintext
Raw Normal View History

2020-09-26 03:20:57 -05:00
`Continuing Review:
- make sure there are no [out] parms. must be [in, out] or [out, retval]
- don't use leading underscore on names(except new enum) use attrs instead
- com categories including safe for scripting on all classes w/ object factory
check regbag and tuner classes for this too.
- assignment operators/copy ctors in all atl smart ptr derived classes
- #pragma once in headers
- check non-extensible, non-createable attrs on .idl
- don't use hungarian in .idl it looks weird in vb object browser
- examine all VariantChangeType calls and make sure we're not doing any inplace calls on
Variant* that are [in] only. they don't belong to us and we shoudln't write to them.
for example, they may be using a different heap than we are.
- new enum, ienumVARIANT. make sure no ienumunknown or other types
- review // undone:
- review // REV2: to see if any can be moved to this version
- review E_NOTIMPL
- review cat maps to be sure eveyone has appropriate safe for scripting, etc.
- standard dispids
todo:
- missing default args on IMPLs that inherit from IDispatch
- make tuning requests use VT_BYREF for tuning space object and modify atlcom
so this qi's for imoniker and saves a registry moniker
- figure out which properties should respond on propertynotifysink
- better errors when custom composition segments fail.
- figure out why graph build is only connecting composite between ati xbar and 829 xbar
and, why it works anyway.
- decide what to do if vidprot can't get a def tr or something goes wrong in
graph build. do we try to fallback to some other form even if it doesn't have
video so that at least there's a control object associated with the object tag?
- test hw slice codec analog graph build
- investigate atltrace showing up in release version
- stock readystatechange event on top level vidctl, state property to return graph state
- we need to figure out what the bug is that causes std::hex io maniuplator on our outputdebugstring iostream
support to start outputting floating point format for integers. note, this only happens on unicode. i'm
pretty sure that we're either missing or have incorrect some kind of overload for wchar in that case.
- set a flag in the bind context that allows us to call the tv: prot and just get a parsed tune request back
instead of a new vidctl instance. we can then use this if we get a view call for a BSTR.
- missing events:
EC_VIDEO_SIZE_CHANGED source size changed from video renderer, ontune from bda tuner.
source size changed from video renderer, ontune from bda tuner.
- cat maps override IObjectSafety. go through all objects and remove catid_safeforxxx and replace
with IObjectSafetyImpl everywhere. this is more consistent and should be faster since it saves
having to hit the registry as much.
tuning model:
- tune.h helpers for componenttypes, components, and dvb
- status method on ITuner
- ontunerchangedevent, bcast event
spec:
- reflect imediaposition, don't pass through object. we don't want script clients to ever have direct pointers to
the graph. we want to reserve the right to cache and swap graphs around as devices change in order to
optimize performance. as things get more complicated, there will be trade-offs between change the existing
graph dynamically and swapping entire graphs quickly. we don't know what those heuristics are going to
be yet. as long as we maintain wrappers around the real graph, we can change it under the covers at will.
- doc frame stepping and other mods to IPlaybackimpl
- do we want a plugable protocol vid:string rep of anything vid can view
- investigate: we should possibly do an object based representation of dvd track/title, etc. this would allow
us to leverage the sub stream components for karaoke, subpic, etc. we would then move the dvd: url
parsing that philliplu did up into the pluggable protocol and create a dvd object at that point. then we
can treat dvd: exactly like tv: in the vidctl. we should also figure out the assocation between these
objects and dvd bookmarks. the advantage of having the parser in the protocol rather than the segment is
that it allows view to optimize the device search by qi'ing for interfaces a ruling out or restricting the
search to entire categories of devices instead of having to pass a string to every single device.
- do more comparison to existing media player and mci
- update tuning model. phys chan, msbda abbreviation, other stuff???
--------- future revisions -----------
tuning model:
- need to put default max prop size in ts w/ hidden restricted put_ in order to
size limit check all the bstr properties to prevent dnos attacks that fill up the disk/registry.
currently its a hardcoded 4k.
- currently, persisted tune requests make a copy of the tuning space values. we need a registry moniker
so that we can put a reference to the tuning space in the tune request. this way if the a tuning
space property changes all the tune requests will automatically reflect that change.
- fix component types persistence to use property bag in addition to pb2 and store count as an explicit property
- fix components collection to be persistable like
tuning model fixes that should be back-propped to dx 8.X:
- tune request object factories replaced for de-persisting
- VT_BSTR_BLOB change
- atl base class fix to not persist VT_DISPATCH or VT_UNKNOWN with null pointer
- DVBS hierarchy change
vidctl:
- investigate IDispatchEX. should we use this instead?
- investigate updating enums to use atl enum on stl for possible code size saving
- figure out interface support needed for being an ie effects 'filter' object. ala dxtransform or be a behavior
- investigate vs7 stl and see what impact this will have on us ahead of time
- think about an arbitrary render file device
- fwdseq, iterator comparison is doing a valuetype compare. this is semantically suspect.
we should really keep a counter and state and compare numbers of calls to next and FAILED(hr)
instead of comparing returned values.
- investigate mouse wheel support. might be cool for dvd menus. might also be useful event to pass to clients
- go thru and remove all the atlwin stuff and replace it with references to wtl.
this include deleting atlwin, fixing resulting compile errors, and taking out all the non-cstring support
from tstring.h, we're commited to tstring now.
- go thru and see if we can fix our debug infrastructure to rely on dshow's. we may need to add our iostream on
outputdebugstring support. on the other hand, this probably can't be done if it creates a dependency on
msvcpxx.dll for dshow.
- cleanup all the tstring stuff. we're committed to cstring now and there's no need to try to keep the
ability to switch between cstring and std::string
- we should expose the ability to set the number of streams on the video renderer on IMSVidGraphSeg so that
c++ apps can change the default from the current value of 4. although 4, should be sufficient 98% of the time
video, subpic, cc, plus a spare.
- there's room for perf optimization by reducing the amount of work done repeatedly in every vrsegimpl VRConfig
call.
- put_container should support moving to a different graph and caching the old graph so that if we go
back to it that we can recover the previous state without an expensive rebuild
- currently we load both the dsound renderer and the wave-in device into the graph for the default audio renderer
because we don't know if our source will be analog or digital. we need to change this to use the ksproxied
sys audio(wdm system audio renderer) which supports both as soon as the sysaudio proxy bugs are fixed and
the clock rate matching resampling code has been moved from dsound renderer to sysaudio.
- we need a segment registration scheme instead of the hardcoded list we currently have in whistler
- outputs is completely untested since we don't have any yet.
- support dynamic graph building
- props on video renderer to report back max stretch and decimation
perf optimizations:
- go through mswebdvd*.* and a bunch of throws can be changed to returns, with a try catch at outermost level thus
removing a bunch of interior try/catch setups
private atl:
- propertybag_load case VT_CLSID
in addition to VT_BSTR should also check for VT_CLSID and should attempt VariantChangeType
event binder:
- now that we know the script engine is guaranteed to provide the script site via IObjectWithSite
we should query back up into the dom and support using the event binder from createobject()
as well as from an object tag.