Problem #1:

  How does the core allow the application to choose appropriate
  caps in the following cases:

    videotestsrc ! xvimagesink

    videotestsrc ! identity ! xvimagesink

    videotestsrc ! videoscale ! xvimagesink
 
  Goals:
  
  - Give the application a clear overview of the formats available
    and the elements involved.

  - Provide reasonable defaults in as many cases as possible.

  - Allow specialized elements to suggest reasonable defaults.



Problem #2:

  How does the API express to an autoplugger what an element does?

  Currently, "colorspace" and "videoscale" have approximately the
  same pad template caps.  Until the autoplugger plugs and looks,
  it has no way to determine that colorspace changes format, and
  videoscale changes size.



Problem #3:

  How do we properly handle codec metadata?

  Solution #3a:

    Stream initialization event.  This event would be held by all
    src pads, and pushed to sink pads upon connection, and would
    flow downstream.

  Solution #3b:
    
    Put a buffer in the caps.


Problem #4:

  (Related to #1) How does one specify that a converter should limit
  it's conversion?  I.e., audioconvert to not change number of channels,
  or audioscale upsample by 20%.  Basically, this means caps based on
  other caps.

  Solution #4a:

    One can put a converter element into a special bin:

      specialbin.( specialidentity ! converter ! specialidentity )

    Specialbin can then interfere with caps negotiation all it wants.


Problem #5:

  (Related to #3)  How do we specify stream format information that
  is non-critical and optional, such as pixel aspect ratio on raw
  video?

Problem #6:

  How do we specify the difference between nominal values and actual
  values, such as video frame rate?  The actual frame rate may not
  correspond to the nominal frame rate in the caps, and often a guess
  is listed.