Assigning PID properties

It is possible to define properties on output PIDs that will be declared by a filter. This allows tagging parts of the graph with different properties than other parts (for example `ServiceID`). The syntax is the same as filter option, and uses the fragment separator to identify properties, e.g. `#Name=Value`.  
This sets output PIDs property (4cc, built-in name or any name) to the given value. Value can be omitted for boolean (defaults to true, e.g. `:#Alpha`).  
Non built-in properties are parsed as follows:  

- `file@FOO` will be declared as string with a value set to the content of `FOO`.  
- `bxml@FOO` will be declared as data with a value set to the binarized content of `FOO`.  
- `FOO` will be declared as string with a value set to `FOO`.  
- `TYPE@FOO` will be parsed according to `TYPE`. If the type is not recognized, the entire value is copied as string. See `gpac -h props` for defined types.  

  
User-assigned PID properties on filter `fA` will be inherited by all filters dynamically loaded to solve `fA -> fB` connection.  
If `fB` also has user-assigned PID properties, these only apply starting from `fB` in the chain and are not inherited by filters between `fA` and `fB`.  
  
__Warning: Properties are not filtered and override the properties of the filter's output PIDs, be careful not to break the session by overriding core properties such as width/height/samplerate/... !__  
  
Example
```
gpac -i v1.mp4:#ServiceID=4 -i v2.mp4:#ServiceID=2 -o dump.ts
```
  
This will multiplex the streams in `dump.ts`, using `ServiceID` 4 for PIDs from `v1.mp4` and `ServiceID` 2 for PIDs from `v2.mp4`.  
  
PID properties may be conditionally assigned by checking other PID properties. The syntax uses parenthesis (not configurable) after the property assignment sign:  
`#Prop=(CP=CV)VAL`  
This will assign PID property `Prop` to `VAL` for PIDs with property `CP` equal to `CV`.  
`#Prop=(CP=CV)VAL,(CP2=CV2)VAL2`  
This will assign PID property `Prop` to `VAL` for PIDs with property `CP` equal to `CV`, and to `VAL2` for PIDs with property `CP2` equal to `CV2`.  
`#Prop=(CP=CV)(CP2=CV2)VAL`  
This will assign PID property `Prop` to `VAL` for PIDs with property `CP` equal to `CV` and property `CP2` equal to `CV2`.  
`#Prop=(CP=CV)VAL,()DEFAULT`  
This will assign PID property `Prop` to `VAL` for PIDs with property `CP` equal to `CV`, or to `DEFAULT` for other PIDs.  
The condition syntax is the same as source ID fragment syntax.  
_Note: When set, the default value (empty condition) always matches the PID, therefore it should be placed last in the list of conditions._  
Example
```
gpac -i source.mp4:#MyProp=(audio)"Super Audio",(video)"Super Video"
```
  
This will assign property `MyProp` to `Super Audio` for audio PIDs and to `Super Video` for video PIDs.  
Example
```
gpac -i source.mp4:#MyProp=(audio1)"Super Audio"
```
  
This will assign property `MyProp` to `Super Audio` for first audio PID declared.  
Example
```
gpac -i source.mp4:#MyProp=(Width+1280)HD
```
  
This will assign property `MyProp` to `HD` for PIDs with property `Width` greater than 1280.  
  
The property value can use templates with the following keywords:  

- $GINC(init[,inc]) or @GINC(...): replaced by integer for each new output PID of the filter (see specific filter options for details on syntax)  
- PROP (enclosed between `$` or `@`): replaced by serialized value of property `PROP` (name or 4CC) of the PID or with empty string if no such property  

Example
```
gpac -i source.ts:#ASID=$PID$
```
  
This will assign DASH AdaptationSet ID to the PID ID value.  
Example
```
gpac -i source.ts:#RepresentationID=$ServiceID$
```
  
This will assign DASH Representation ID to the PID ServiceID value.  
  
A property can also be removed by not specifying any value. Conditional removal is possible using the above syntax.  
Example
```
gpac -i source.ts:#FOO=
```
  
This will remove the `FOO` property on the output PID.