Compare commits

...

1 Commits

Author SHA1 Message Date
Atsushi Watanabe
bb7611783d codec/vpx: support temporal layer 2020-05-31 03:14:12 +09:00
2 changed files with 13 additions and 0 deletions

View File

@@ -17,6 +17,13 @@ type Params struct {
RateControlMinQuantizer uint RateControlMinQuantizer uint
RateControlMaxQuantizer uint RateControlMaxQuantizer uint
ErrorResilient ErrorResilientMode ErrorResilient ErrorResilientMode
TemporalLayers []TemporalLayer
}
// TemporalLayer represents temporal layer config.
type TemporalLayer struct {
TargetBitrate uint // in kbps
RateDecimator uint
} }
// RateControlMode represents rate control mode. // RateControlMode represents rate control mode.

View File

@@ -180,6 +180,12 @@ func newEncoder(r video.Reader, p prop.Media, params Params, codecIface *C.vpx_c
cfg.rc_resize_allowed = 0 cfg.rc_resize_allowed = 0
cfg.g_pass = C.VPX_RC_ONE_PASS cfg.g_pass = C.VPX_RC_ONE_PASS
cfg.ts_number_layers = C.uint(len(params.TemporalLayers))
for i := range params.TemporalLayers {
cfg.ts_target_bitrate[i] = C.uint(params.TemporalLayers[i].TargetBitrate)
cfg.ts_rate_decimator[i] = C.uint(params.TemporalLayers[i].RateDecimator)
}
raw := &C.vpx_image_t{} raw := &C.vpx_image_t{}
if C.vpx_img_alloc(raw, C.VPX_IMG_FMT_I420, cfg.g_w, cfg.g_h, 1) == nil { if C.vpx_img_alloc(raw, C.VPX_IMG_FMT_I420, cfg.g_w, cfg.g_h, 1) == nil {
return nil, errors.New("vpx_img_alloc failed") return nil, errors.New("vpx_img_alloc failed")