Skip to content

Commit 47f9295

Browse files
committed
* Use input params when performing analysis.
* Prevent thumbnails from in some cases being detected as video. * Add joinSegmentParams to Profile to be applied when joining segments. * When running tests, redis is started in a docker container.
2 parents 1897aaa + 5d7ebda commit 47f9295

File tree

29 files changed

+123
-60
lines changed

29 files changed

+123
-60
lines changed

encore-common/build.gradle.kts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
plugins {
22
id("encore.kotlin-conventions")
3+
`java-test-fixtures`
34
}
45

56
dependencies {
67

7-
api("se.svt.oss:media-analyzer:2.0.3")
8+
api("se.svt.oss:media-analyzer:2.0.4")
89
implementation(kotlin("reflect"))
910

1011
compileOnly("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0")
@@ -16,28 +17,14 @@ dependencies {
1617
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.7.3")
1718

1819
testImplementation(project(":encore-web"))
19-
testImplementation("se.svt.oss:junit5-redis-extension:3.0.0")
2020
testImplementation("org.springframework.security:spring-security-test")
2121
testImplementation("org.awaitility:awaitility")
2222
testImplementation("com.github.tomakehurst:wiremock-jre8-standalone:2.35.0")
2323
testImplementation("org.springframework.boot:spring-boot-starter-webflux")
2424
testImplementation("org.springframework.boot:spring-boot-starter-data-rest")
25-
}
26-
27-
28-
val integrationTestsPreReq = setOf("mediainfo", "ffmpeg", "ffprobe").map {
29-
30-
tasks.create("Verify $it is in path, required for integration tests", Exec::class.java) {
31-
isIgnoreExitValue = true
32-
executable = it
33-
34-
if (!it.equals("mediainfo")) {
35-
args("-hide_banner")
36-
}
37-
}
38-
}
39-
40-
tasks.test {
41-
dependsOn(integrationTestsPreReq)
25+
testFixturesImplementation(platform("org.springframework.boot:spring-boot-dependencies:3.1.3"))
26+
testFixturesImplementation("com.redis:testcontainers-redis:2.2.0")
27+
testFixturesImplementation("io.github.microutils:kotlin-logging:3.0.5")
28+
testFixturesImplementation("org.junit.jupiter:junit-jupiter-api")
4229
}
4330

encore-common/src/main/kotlin/se/svt/oss/encore/ClientConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import org.springframework.web.reactive.function.client.support.WebClientAdapter
1313
import org.springframework.web.service.invoker.HttpServiceProxyFactory
1414
import se.svt.oss.encore.service.callback.CallbackClient
1515

16-
@Configuration
16+
@Configuration(proxyBeanMethods = false)
1717
class ClientConfiguration {
1818

1919
@Bean

encore-common/src/main/kotlin/se/svt/oss/encore/MediaAnalyzerConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.springframework.context.annotation.Bean
99
import org.springframework.context.annotation.Configuration
1010
import se.svt.oss.mediaanalyzer.MediaAnalyzer
1111

12-
@Configuration
12+
@Configuration(proxyBeanMethods = false)
1313
class MediaAnalyzerConfiguration {
1414

1515
@Bean

encore-common/src/main/kotlin/se/svt/oss/encore/RedisConfiguration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import se.svt.oss.mediaanalyzer.file.ImageFile
2929
import se.svt.oss.mediaanalyzer.file.SubtitleFile
3030
import se.svt.oss.mediaanalyzer.file.VideoFile
3131

32-
@Configuration
32+
@Configuration(proxyBeanMethods = false)
3333
@RegisterReflectionForBinding(
3434
EncoreJob::class,
3535
AudioVideoInput::class,

encore-common/src/main/kotlin/se/svt/oss/encore/model/input/Input.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ sealed interface Input {
3636
val uri: String
3737

3838
@get:Schema(description = "Input params required to properly decode input", example = """{ "ac": "2" }""")
39-
val params: LinkedHashMap<String, String>
39+
val params: LinkedHashMap<String, String?>
4040

4141
@get:Schema(
4242
description = "Type of input",
@@ -152,7 +152,7 @@ sealed interface VideoIn : Input {
152152
data class AudioInput(
153153
override val uri: String,
154154
override val audioLabel: String = DEFAULT_AUDIO_LABEL,
155-
override val params: LinkedHashMap<String, String> = linkedMapOf(),
155+
override val params: LinkedHashMap<String, String?> = linkedMapOf(),
156156
override val audioFilters: List<String> = emptyList(),
157157
override var analyzed: MediaFile? = null,
158158
override val audioStream: Int? = null,
@@ -177,7 +177,7 @@ data class AudioInput(
177177
data class VideoInput(
178178
override val uri: String,
179179
override val videoLabel: String = DEFAULT_VIDEO_LABEL,
180-
override val params: LinkedHashMap<String, String> = linkedMapOf(),
180+
override val params: LinkedHashMap<String, String?> = linkedMapOf(),
181181
override val dar: FractionString? = null,
182182
override val cropTo: FractionString? = null,
183183
override val padTo: FractionString? = null,
@@ -206,7 +206,7 @@ data class AudioVideoInput(
206206
override val uri: String,
207207
override val videoLabel: String = DEFAULT_VIDEO_LABEL,
208208
override val audioLabel: String = DEFAULT_AUDIO_LABEL,
209-
override val params: LinkedHashMap<String, String> = linkedMapOf(),
209+
override val params: LinkedHashMap<String, String?> = linkedMapOf(),
210210
override val dar: FractionString? = null,
211211
override val cropTo: FractionString? = null,
212212
override val padTo: FractionString? = null,

encore-common/src/main/kotlin/se/svt/oss/encore/model/output/Output.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ data class Output(
1313
val format: String = "mp4",
1414
val postProcessor: PostProcessor = PostProcessor { outputFolder -> listOf(outputFolder.resolve(output)) },
1515
val id: String,
16+
val isImage: Boolean = false
1617
)
1718

1819
fun interface PostProcessor {

encore-common/src/main/kotlin/se/svt/oss/encore/model/profile/Profile.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ data class Profile(
99
val description: String,
1010
val encodes: List<OutputProducer>,
1111
val scaling: String? = "bicubic",
12-
val deinterlaceFilter: String = "yadif"
12+
val deinterlaceFilter: String = "yadif",
13+
val joinSegmentParams: LinkedHashMap<String, Any?> = linkedMapOf()
1314
)

encore-common/src/main/kotlin/se/svt/oss/encore/model/profile/ThumbnailEncode.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ data class ThumbnailEncode(
6363
output = "${job.baseName}$suffix%0${suffixZeroPad}d.jpg",
6464
postProcessor = { outputFolder ->
6565
outputFolder.listFiles().orEmpty().filter { it.name.matches(fileRegex) }
66-
}
66+
},
67+
isImage = true
6768
)
6869
}
6970

encore-common/src/main/kotlin/se/svt/oss/encore/model/profile/ThumbnailMapEncode.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ data class ThumbnailMapEncode(
8080
val targetFile = outputFolder.resolve("${job.baseName}$suffix.$format")
8181
val process = ProcessBuilder(
8282
"ffmpeg",
83+
"-y",
8384
"-i",
8485
"${job.baseName}$suffix%04d.$format",
8586
"-vf",
@@ -100,7 +101,8 @@ data class ThumbnailMapEncode(
100101
logOrThrow("Error creating thumbnail map! ${e.message}")
101102
emptyList()
102103
}
103-
}
104+
},
105+
isImage = true
104106
)
105107
}
106108

encore-common/src/main/kotlin/se/svt/oss/encore/model/profile/VideoEncode.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ interface VideoEncode : OutputProducer {
6565
fun passParams(pass: Int): Map<String, String> =
6666
mapOf("pass" to pass.toString(), "passlogfile" to "log$suffix")
6767

68-
private fun videoFilter(
68+
fun videoFilter(
6969
debugOverlay: Boolean,
7070
encodingProperties: EncodingProperties,
7171
videoInput: VideoIn
@@ -75,7 +75,8 @@ interface VideoEncode : OutputProducer {
7575
var scaleToHeight = height
7676
val videoStream = videoInput.analyzedVideo.highestBitrateVideoStream
7777
val outputDar = (videoInput.padTo ?: videoInput.cropTo ?: videoStream.displayAspectRatio)?.toFractionOrNull()
78-
val outputIsPortrait = outputDar != null && outputDar < Fraction.ONE
78+
?: Fraction(videoStream.width, videoStream.height)
79+
val outputIsPortrait = outputDar < Fraction.ONE
7980
val isScalingWithinLandscape =
8081
scaleToWidth != null && scaleToHeight != null && Fraction(scaleToWidth, scaleToHeight) > Fraction.ONE
8182
if (encodingProperties.flipWidthHeightIfPortrait && outputIsPortrait && isScalingWithinLandscape) {

0 commit comments

Comments
 (0)