Skip to content
This repository was archived by the owner on Apr 21, 2020. It is now read-only.

Commit 6db01e1

Browse files
authored
mediaconvert: apply an adaptive deinterlacer for video presets (#151)
* mediaconvert: apply an adaptive deinterlacer for video presets * fix: update deinterlace mode * testing: update tests to check for deinterlacer
1 parent b71f220 commit 6db01e1

File tree

5 files changed

+34
-32
lines changed

5 files changed

+34
-32
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ replace github.com/bitmovin/bitmovin-api-sdk-go => github.com/zsiec/bitmovin-api
55
require (
66
github.com/NYTimes/gizmo v1.3.5
77
github.com/NYTimes/gziphandler v1.1.1
8+
github.com/aws/aws-sdk-go v1.29.24
89
github.com/aws/aws-sdk-go-v2 v0.20.0
910
github.com/aws/aws-xray-sdk-go v1.0.0-rc.15
1011
github.com/bitmovin/bitmovin-api-sdk-go v1.36.0-alpha.0

provider/mediaconvert/h264.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ func h264CodecSettingsFrom(preset db.Preset) (*mediaconvert.VideoCodecSettings,
3737
return nil, err
3838
}
3939

40-
interlaceMode, err := h264InterlaceModeFrom(preset.Video.InterlaceMode)
41-
if err != nil {
42-
return nil, err
43-
}
44-
4540
tuning := mediaconvert.H264QualityTuningLevelSinglePassHq
4641
if preset.TwoPass {
4742
tuning = mediaconvert.H264QualityTuningLevelMultiPassHq
@@ -56,7 +51,7 @@ func h264CodecSettingsFrom(preset db.Preset) (*mediaconvert.VideoCodecSettings,
5651
RateControlMode: rateControl,
5752
CodecProfile: profile,
5853
CodecLevel: mediaconvert.H264CodecLevelAuto,
59-
InterlaceMode: interlaceMode,
54+
InterlaceMode: mediaconvert.H264InterlaceModeProgressive,
6055
QualityTuningLevel: tuning,
6156
},
6257
}, nil
@@ -101,13 +96,3 @@ func h264CodecProfileFrom(profile string) (mediaconvert.H264CodecProfile, error)
10196
return "", fmt.Errorf("h264 profile %q is not supported with mediaconvert", profile)
10297
}
10398
}
104-
105-
func h264InterlaceModeFrom(mode string) (mediaconvert.H264InterlaceMode, error) {
106-
mode = strings.ToLower(mode)
107-
switch mode {
108-
case "", "progressive":
109-
return mediaconvert.H264InterlaceModeProgressive, nil
110-
default:
111-
return "", fmt.Errorf("h264 interlace mode %q is not supported with mediaconvert", mode)
112-
}
113-
}

provider/mediaconvert/h265.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ func h265CodecSettingsFrom(preset db.Preset) (*mediaconvert.VideoCodecSettings,
4242
return nil, err
4343
}
4444

45-
interlaceMode, err := h265InterlaceModeFrom(preset.Video.InterlaceMode)
46-
if err != nil {
47-
return nil, err
48-
}
49-
5045
tuning := mediaconvert.H265QualityTuningLevelSinglePassHq
5146
if preset.TwoPass {
5247
tuning = mediaconvert.H265QualityTuningLevelMultiPassHq
@@ -61,7 +56,7 @@ func h265CodecSettingsFrom(preset db.Preset) (*mediaconvert.VideoCodecSettings,
6156
RateControlMode: rateControl,
6257
CodecProfile: profile,
6358
CodecLevel: level,
64-
InterlaceMode: interlaceMode,
59+
InterlaceMode: mediaconvert.H265InterlaceModeProgressive,
6560
QualityTuningLevel: tuning,
6661
WriteMp4PackagingType: mediaconvert.H265WriteMp4PackagingTypeHvc1,
6762
AlternateTransferFunctionSei: mediaconvert.H265AlternateTransferFunctionSeiDisabled,
@@ -135,13 +130,3 @@ func h265CodecLevelFrom(level string) (mediaconvert.H265CodecLevel, error) {
135130
return "", fmt.Errorf("h265 level %q is not supported with mediaconvert", level)
136131
}
137132
}
138-
139-
func h265InterlaceModeFrom(mode string) (mediaconvert.H265InterlaceMode, error) {
140-
mode = strings.ToLower(mode)
141-
switch mode {
142-
case "", "progressive":
143-
return mediaconvert.H265InterlaceModeProgressive, nil
144-
default:
145-
return "", fmt.Errorf("h265 interlace mode %q is not supported with mediaconvert", mode)
146-
}
147-
}

provider/mediaconvert/mediaconvert_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,13 @@ func Test_mcProvider_Transcode(t *testing.T) {
417417
ScalingBehavior: mediaconvert.ScalingBehaviorDefault,
418418
TimecodeInsertion: mediaconvert.VideoTimecodeInsertionDisabled,
419419
AntiAlias: mediaconvert.AntiAliasEnabled,
420+
VideoPreprocessors: &mediaconvert.VideoPreprocessor{
421+
Deinterlacer: &mediaconvert.Deinterlacer{
422+
Algorithm: mediaconvert.DeinterlaceAlgorithmInterpolate,
423+
Control: mediaconvert.DeinterlacerControlNormal,
424+
Mode: mediaconvert.DeinterlacerModeAdaptive,
425+
},
426+
},
420427
CodecSettings: &mediaconvert.VideoCodecSettings{
421428
Codec: mediaconvert.VideoCodecH264,
422429
H264Settings: &mediaconvert.H264Settings{
@@ -501,6 +508,13 @@ func Test_mcProvider_Transcode(t *testing.T) {
501508
ScalingBehavior: mediaconvert.ScalingBehaviorDefault,
502509
TimecodeInsertion: mediaconvert.VideoTimecodeInsertionDisabled,
503510
AntiAlias: mediaconvert.AntiAliasEnabled,
511+
VideoPreprocessors: &mediaconvert.VideoPreprocessor{
512+
Deinterlacer: &mediaconvert.Deinterlacer{
513+
Algorithm: mediaconvert.DeinterlaceAlgorithmInterpolate,
514+
Control: mediaconvert.DeinterlacerControlNormal,
515+
Mode: mediaconvert.DeinterlacerModeAdaptive,
516+
},
517+
},
504518
CodecSettings: &mediaconvert.VideoCodecSettings{
505519
Codec: mediaconvert.VideoCodecH265,
506520
H265Settings: &mediaconvert.H265Settings{
@@ -579,6 +593,13 @@ func Test_mcProvider_Transcode(t *testing.T) {
579593
ScalingBehavior: mediaconvert.ScalingBehaviorDefault,
580594
TimecodeInsertion: mediaconvert.VideoTimecodeInsertionDisabled,
581595
AntiAlias: mediaconvert.AntiAliasEnabled,
596+
VideoPreprocessors: &mediaconvert.VideoPreprocessor{
597+
Deinterlacer: &mediaconvert.Deinterlacer{
598+
Algorithm: mediaconvert.DeinterlaceAlgorithmInterpolate,
599+
Control: mediaconvert.DeinterlacerControlNormal,
600+
Mode: mediaconvert.DeinterlacerModeAdaptive,
601+
},
602+
},
582603
CodecSettings: &mediaconvert.VideoCodecSettings{
583604
Codec: mediaconvert.VideoCodecAv1,
584605
Av1Settings: &mediaconvert.Av1Settings{

provider/mediaconvert/preset_mapping.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,16 @@ func videoPresetFrom(preset db.Preset) (*mediaconvert.VideoDescription, error) {
163163
return nil, fmt.Errorf("video codec %q is not yet supported with mediaconvert", codec)
164164
}
165165

166+
if videoPreset.VideoPreprocessors == nil {
167+
videoPreset.VideoPreprocessors = &mediaconvert.VideoPreprocessor{}
168+
}
169+
170+
videoPreset.VideoPreprocessors.Deinterlacer = &mediaconvert.Deinterlacer{
171+
Algorithm: mediaconvert.DeinterlaceAlgorithmInterpolate,
172+
Control: mediaconvert.DeinterlacerControlNormal,
173+
Mode: mediaconvert.DeinterlacerModeAdaptive,
174+
}
175+
166176
return &videoPreset, nil
167177
}
168178

0 commit comments

Comments
 (0)