Also make the ReadCloser an Controllable allows to uncouple
the controller implementation from the encoder.
This is not needed for the 2 codec controller already implemented (openh264 and vpx)
but is more future proof in case it required for other codecs.
* Fix VPX_CODEC_INVALID_PARAM on resolution change
- When chaning resolution to a larger one,
vpx_codec_enc_config_set fails with VPX_CODEC_INVALID_PARAM.
- Creating a new codec object seems to be necessary.
* Address PR comments
- Free encoder old codec.
VPX doesn't allow 0 duration. If 0 is given, vpx_codec_encode will fail with VPX_CODEC_INVALID_PARAM.
0 duration is possible because mediadevices first gets the frame meta data by reading from the source,
and consequently the codec will read the first frame from the buffer. This means the first frame won't
have a pause to the second frame, which means if the delay is <1 ms (vpx duration resolution), duration
is going to be 0.
Resolves https://github.com/pion/mediadevices/issues/114
* Remove codec registrar
* Completely redesign how codec is being discovered, tuned, and built
* Update examples
* Update unit tests
Moved I420 converter from vpx.go, converted video.Reader in openh264.go
and created ToI420 to convert a video.Reader to a new video.Reader that
will emit images in I420 format.