Loading scripts/ivas_conformance/runConformance.py +29 −16 Original line number Diff line number Diff line Loading @@ -650,7 +650,7 @@ class MLDConformance: self.appendFailed(context=f"[{tag}:{dutPytestTag}] {msg}") return (None, None, (msg, ""), None) validate_err = self.validateAudioPair(testDesc.refOutput, testDesc.dutOutput) validate_err = self.validateAudioPairHeader(testDesc.refOutput, testDesc.dutOutput) if validate_err: self.appendFailed(context=f"[{tag}:{dutPytestTag}] {validate_err}") return (None, None, (validate_err, ""), None) Loading Loading @@ -710,7 +710,7 @@ class MLDConformance: self.appendFailed(context=f"[{tag}:{encPytestTag}] {msg}") return (None, None, (msg, ""), dutDecCmd) validate_err = self.validateAudioPair(refDecOutputFile, dutDecOutputFile) validate_err = self.validateAudioPairHeader(refDecOutputFile, dutDecOutputFile) if validate_err: self.appendFailed(context=f"[{tag}:{encPytestTag}] {validate_err}") return (None, None, (validate_err, ""), dutDecCmd) Loading Loading @@ -760,7 +760,7 @@ class MLDConformance: self.appendFailed(context=f"[{tag}:{pytestTag}] {msg}") return (None, None, (msg, ""), dutDecCmd) validate_err = self.validateAudioPair(refDecOutputFile, dutDecOutputFile) validate_err = self.validateAudioPairHeader(refDecOutputFile, dutDecOutputFile) if validate_err: self.appendFailed(context=f"[{tag}:{pytestTag}] {validate_err}") return (None, None, (validate_err, ""), dutDecCmd) Loading Loading @@ -1213,28 +1213,41 @@ class MLDConformance: ) return (maxDiff, rmsdB, beSamplesPercent) def validateAudioPair(self, refFile: str, dutFile: str): def validateAudioPairHeader(self, refFile: str, dutFile: str): """Fast header-only validation: checks channels, sample rate, and frame count without loading full audio.""" try: refSamples, _ = readfile(refFile, outdtype="float") dutSamples, _ = readfile(dutFile, outdtype="float") refRate, refData = wav.read(refFile) dutRate, dutData = wav.read(dutFile) except Exception as exc: return f"Failed reading audio files: ref={refFile}, dut={dutFile}, error={exc}" return f"Failed reading audio headers: ref={refFile}, dut={dutFile}, error={exc}" if refSamples.ndim != dutSamples.ndim: # Infer dimensionality from shape refNdim = 2 if len(refData.shape) == 2 else 1 dutNdim = 2 if len(dutData.shape) == 2 else 1 if refNdim != dutNdim: return ( f"Audio dimensionality mismatch: ref={refFile} (ndim={refSamples.ndim}), " f"dut={dutFile} (ndim={dutSamples.ndim})" f"Audio dimensionality mismatch: ref={refFile} (ndim={refNdim}), " f"dut={dutFile} (ndim={dutNdim})" ) if refSamples.shape[1] != dutSamples.shape[1]: # Check channels refChannels = refData.shape[1] if refNdim == 2 else 1 dutChannels = dutData.shape[1] if dutNdim == 2 else 1 if refChannels != dutChannels: return ( f"Audio channel mismatch: ref={refFile} (channels={refSamples.shape[1]}), " f"dut={dutFile} (channels={dutSamples.shape[1]})" f"Audio channel mismatch: ref={refFile} (channels={refChannels}), " f"dut={dutFile} (channels={dutChannels})" ) if refSamples.shape[0] != dutSamples.shape[0]: # Check sample count refSamples = refData.shape[0] dutSamples = dutData.shape[0] if refSamples != dutSamples: return ( f"Audio length mismatch: ref={refFile} (samples={refSamples.shape[0]}), " f"dut={dutFile} (samples={dutSamples.shape[0]})" f"Audio length mismatch: ref={refFile} (samples={refSamples}), " f"dut={dutFile} (samples={dutSamples})" ) return None def mld(self, tag, pytestTag, refFile, dutFile): Loading Loading
scripts/ivas_conformance/runConformance.py +29 −16 Original line number Diff line number Diff line Loading @@ -650,7 +650,7 @@ class MLDConformance: self.appendFailed(context=f"[{tag}:{dutPytestTag}] {msg}") return (None, None, (msg, ""), None) validate_err = self.validateAudioPair(testDesc.refOutput, testDesc.dutOutput) validate_err = self.validateAudioPairHeader(testDesc.refOutput, testDesc.dutOutput) if validate_err: self.appendFailed(context=f"[{tag}:{dutPytestTag}] {validate_err}") return (None, None, (validate_err, ""), None) Loading Loading @@ -710,7 +710,7 @@ class MLDConformance: self.appendFailed(context=f"[{tag}:{encPytestTag}] {msg}") return (None, None, (msg, ""), dutDecCmd) validate_err = self.validateAudioPair(refDecOutputFile, dutDecOutputFile) validate_err = self.validateAudioPairHeader(refDecOutputFile, dutDecOutputFile) if validate_err: self.appendFailed(context=f"[{tag}:{encPytestTag}] {validate_err}") return (None, None, (validate_err, ""), dutDecCmd) Loading Loading @@ -760,7 +760,7 @@ class MLDConformance: self.appendFailed(context=f"[{tag}:{pytestTag}] {msg}") return (None, None, (msg, ""), dutDecCmd) validate_err = self.validateAudioPair(refDecOutputFile, dutDecOutputFile) validate_err = self.validateAudioPairHeader(refDecOutputFile, dutDecOutputFile) if validate_err: self.appendFailed(context=f"[{tag}:{pytestTag}] {validate_err}") return (None, None, (validate_err, ""), dutDecCmd) Loading Loading @@ -1213,28 +1213,41 @@ class MLDConformance: ) return (maxDiff, rmsdB, beSamplesPercent) def validateAudioPair(self, refFile: str, dutFile: str): def validateAudioPairHeader(self, refFile: str, dutFile: str): """Fast header-only validation: checks channels, sample rate, and frame count without loading full audio.""" try: refSamples, _ = readfile(refFile, outdtype="float") dutSamples, _ = readfile(dutFile, outdtype="float") refRate, refData = wav.read(refFile) dutRate, dutData = wav.read(dutFile) except Exception as exc: return f"Failed reading audio files: ref={refFile}, dut={dutFile}, error={exc}" return f"Failed reading audio headers: ref={refFile}, dut={dutFile}, error={exc}" if refSamples.ndim != dutSamples.ndim: # Infer dimensionality from shape refNdim = 2 if len(refData.shape) == 2 else 1 dutNdim = 2 if len(dutData.shape) == 2 else 1 if refNdim != dutNdim: return ( f"Audio dimensionality mismatch: ref={refFile} (ndim={refSamples.ndim}), " f"dut={dutFile} (ndim={dutSamples.ndim})" f"Audio dimensionality mismatch: ref={refFile} (ndim={refNdim}), " f"dut={dutFile} (ndim={dutNdim})" ) if refSamples.shape[1] != dutSamples.shape[1]: # Check channels refChannels = refData.shape[1] if refNdim == 2 else 1 dutChannels = dutData.shape[1] if dutNdim == 2 else 1 if refChannels != dutChannels: return ( f"Audio channel mismatch: ref={refFile} (channels={refSamples.shape[1]}), " f"dut={dutFile} (channels={dutSamples.shape[1]})" f"Audio channel mismatch: ref={refFile} (channels={refChannels}), " f"dut={dutFile} (channels={dutChannels})" ) if refSamples.shape[0] != dutSamples.shape[0]: # Check sample count refSamples = refData.shape[0] dutSamples = dutData.shape[0] if refSamples != dutSamples: return ( f"Audio length mismatch: ref={refFile} (samples={refSamples.shape[0]}), " f"dut={dutFile} (samples={dutSamples.shape[0]})" f"Audio length mismatch: ref={refFile} (samples={refSamples}), " f"dut={dutFile} (samples={dutSamples})" ) return None def mld(self, tag, pytestTag, refFile, dutFile): Loading