public void InitialiseDecoder() { _vpxDecodeCtx = new VpxCodecCtx(); var initDecoderRes = vpx_decoder.VpxCodecDecInitVer(_vpxDecodeCtx, vp8dx.VpxCodecVp8Dx(), null, 0, VPX_DECODER_ABI_VERSION); if (initDecoderRes != VpxCodecErrT.VPX_CODEC_OK) { throw new ApplicationException($"Failed to initialise VP8 decoder, {vpx_codec.VpxCodecErrToString(initDecoderRes)}."); } }
// Setting config parameters in Chromium source. // https://chromium.googlesource.com/external/webrtc/stable/src/+/b8671cb0516ec9f6c7fe22a6bbe331d5b091cdbb/modules/video_coding/codecs/vp8/vp8.cc // Updated link 15 Jun 2020. // https://chromium.googlesource.com/external/webrtc/stable/src/+/refs/heads/master/modules/video_coding/codecs/vp8/vp8_impl.cc public void InitialiseEncoder(uint width, uint height) { _encodeWidth = width; _encodeHeight = height; _vpxEncodeCtx = new VpxCodecCtx(); _vpxEncodeImg = new VpxImage(); VpxCodecEncCfg vp8EncoderCfg = new VpxCodecEncCfg(); var setConfigRes = vpx_encoder.VpxCodecEncConfigDefault(vp8cx.VpxCodecVp8Cx(), vp8EncoderCfg, 0); if (setConfigRes != VpxCodecErrT.VPX_CODEC_OK) { throw new ApplicationException($"Failed to set VP8 encoder configuration to default values, {setConfigRes}."); } vp8EncoderCfg.GW = _encodeWidth; vp8EncoderCfg.GH = _encodeHeight; // vpxConfig.g_w = width; // vpxConfig.g_h = height; // vpxConfig.rc_target_bitrate = _rc_target_bitrate;// 300; // 5000; // in kbps. // vpxConfig.rc_min_quantizer = _rc_min_quantizer;// 20; // 50; // vpxConfig.rc_max_quantizer = _rc_max_quantizer;// 30; // 60; // vpxConfig.g_pass = VPX_RC_ONE_PASS; // if (_rc_is_cbr) // { // vpxConfig.rc_end_usage = VPX_CBR; // } // else // { // vpxConfig.rc_end_usage = VPX_VBR; // } // vpxConfig.g_error_resilient = VPX_ERROR_RESILIENT_DEFAULT; // vpxConfig.g_lag_in_frames = 0; // vpxConfig.rc_resize_allowed = 0; // vpxConfig.kf_max_dist = 20; var initEncoderRes = vpx_encoder.VpxCodecEncInitVer(_vpxEncodeCtx, vp8cx.VpxCodecVp8Cx(), vp8EncoderCfg, 0, VPX_ENCODER_ABI_VERSION); if (initEncoderRes != VpxCodecErrT.VPX_CODEC_OK) { throw new ApplicationException($"Failed to initialise VP8 encoder, {vpx_codec.VpxCodecErrToString(initEncoderRes)}."); } //VpxImage.VpxImgAlloc(_vpxEncodeImg, VpxImgFmt.VPX_IMG_FMT_I420, _encodeWidth, _encodeHeight, 1); VpxImage.VpxImgAlloc(_vpxEncodeImg, VpxImgFmt.VPX_IMG_FMT_NV12, _encodeWidth, _encodeHeight, 1); }