B3 (#175): pin the AAC arm every ordinary conversion takes
audioArgs has six arms. Five are named codecs with tests; AAC arrives through the `else`, so nothing named it -- neither "aac" nor "192k" appeared anywhere in FFmpegCommandBuilderTest. It is the audio MP4 and M4A get, which is to say the audio the picker offers first and most conversions produce. Both halves are asserted, and the bitrate is the half worth arguing for: an -b:a that quietly changed would fail nothing, look wrong in no command line, and surface only as files that sound different from the ones the app produced last month. Both mutations confirmed red -- 192k -> 128k and aac -> libfdk_aac. Asserted through MP4_H264 and M4A_AAC rather than one of them, so an AAC arm added above the `else` later has to keep answering the same way for both. **Deliberately not added here: an ENCODABLE_AUDIO-vs-audioArgs agreement test**, the obvious companion to VideoCodecMimeAgreementTest. It would freeze the answer to F1, which is open: ContainerCapabilities.kt:84 says "nothing here emits a Vorbis encoder" and FFmpegCommandBuilder.kt:188 does. docs/coverage-read-findings.md says in terms that the tempting fix there locks in the wrong answer and that the decision comes first. This is the AAC arm only. 563 -> 564 JVM tests, 0 failures. No production code changed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -166,6 +166,30 @@ class FFmpegCommandBuilderTest {
|
||||
assertPair(cmd(OutputFormat.OPUS), "-c:a", "libopus")
|
||||
}
|
||||
|
||||
/**
|
||||
* The arm most conversions actually take, and the only one in `audioArgs` with no test.
|
||||
*
|
||||
* `flac wav and opus select the right encoders` above covers the three named arms; MP3 has its
|
||||
* own. AAC arrives through the `else`, so nothing named it and nothing pinned either half of
|
||||
* what it emits -- neither `aac` nor `192k` appeared anywhere in this file. Both are shipped
|
||||
* defaults: MP4 and M4A are the formats the picker offers first, so this is the audio
|
||||
* every ordinary conversion gets.
|
||||
*
|
||||
* The bitrate is asserted as well as the encoder because it is the half a refactor is likelier
|
||||
* to lose. An `-b:a` that quietly changed would not fail anything, would not look wrong in a
|
||||
* command line, and would show up only as files that sound different from the ones the app
|
||||
* produced last month.
|
||||
*/
|
||||
@Test
|
||||
fun `aac is the default encoder, at the bitrate the app ships`() {
|
||||
assertPair(cmd(OutputFormat.MP4_H264), "-c:a", "aac")
|
||||
assertPair(cmd(OutputFormat.MP4_H264), "-b:a", "192k")
|
||||
// Through the `else` rather than through a named arm, so an AAC branch added above it later
|
||||
// has to keep answering the same way.
|
||||
assertPair(cmd(OutputFormat.M4A_AAC), "-c:a", "aac")
|
||||
assertPair(cmd(OutputFormat.M4A_AAC), "-b:a", "192k")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `audio only formats never carry a video encoder`() {
|
||||
listOf(OutputFormat.MP3, OutputFormat.FLAC, OutputFormat.WAV, OutputFormat.OPUS)
|
||||
|
||||
Reference in New Issue
Block a user