Skip to content

Commit 1709993

Browse files
committed
Fix nb samples computing into AudioProperties
And complete and update unit tests
1 parent f5975f2 commit 1709993

File tree

5 files changed

+40
-9
lines changed

5 files changed

+40
-9
lines changed

src/AvTranscoder/properties/AudioProperties.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ size_t AudioProperties::getNbSamples() const
140140
throw std::runtime_error("unknown format context");
141141
size_t nbSamples = _formatContext->streams[_streamIndex]->nb_frames;
142142
if(nbSamples == 0)
143-
nbSamples = getSampleRate() * getNbChannels() * getDuration();
143+
nbSamples = getSampleRate() * getDuration();
144144
return nbSamples;
145145
}
146146

src/AvTranscoder/properties/AudioProperties.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class AvExport AudioProperties : public StreamProperties
2222
size_t getBitRate() const; ///< in bits/s, 0 if unknown
2323
size_t getSampleRate() const;
2424
size_t getNbChannels() const;
25-
size_t getNbSamples() const; ///< All the channels are included.
25+
size_t getNbSamples() const; ///< For one channel.
2626

2727
size_t getTicksPerFrame() const;
2828

test/pyTest/testNbSamples.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
from pyAvTranscoder import avtranscoder as av
1111

1212

13-
def testNbSamplesAudioRewrap():
13+
def testNbSamplesAudioRewrapFromWav():
1414
"""
15-
Rewrap one audio stream, check nb samples.
15+
Rewrap one audio stream from WAV file, check nb samples.
1616
"""
1717
inputFileName = os.environ['AVTRANSCODER_TEST_AUDIO_WAVE_FILE']
18-
outputFileName = "testNbSamplesAudioRewrap.wav"
18+
outputFileName = "testNbSamplesAudioRewrapFromWav.wav"
1919

2020
ouputFile = av.OutputFile( outputFileName )
2121
transcoder = av.Transcoder( ouputFile )
@@ -36,6 +36,35 @@ def testNbSamplesAudioRewrap():
3636
dst_audioStream = dst_properties.getAudioProperties()[0]
3737

3838
assert_equals( src_audioStream.getNbSamples(), dst_audioStream.getNbSamples() )
39+
assert_equals( src_audioStream.getNbSamples(), src_audioStream.getSampleRate() * src_audioStream.getDuration() )
40+
41+
def testNbSamplesAudioRewrapFromMov():
42+
"""
43+
Rewrap one audio stream from MOV file, check nb samples.
44+
"""
45+
inputFileName = os.environ['AVTRANSCODER_TEST_AUDIO_MOV_FILE']
46+
outputFileName = "testNbSamplesAudioRewrapFromMov.wav"
47+
48+
ouputFile = av.OutputFile( outputFileName )
49+
transcoder = av.Transcoder( ouputFile )
50+
51+
transcoder.addStream( av.InputStreamDesc(inputFileName, 1) )
52+
53+
progress = av.ConsoleProgress()
54+
transcoder.process( progress )
55+
56+
# get src file of rewrap
57+
src_inputFile = av.InputFile( inputFileName )
58+
src_properties = src_inputFile.getProperties()
59+
src_audioStream = src_properties.getAudioProperties()[0]
60+
61+
# get dst file of rewrap
62+
dst_inputFile = av.InputFile( outputFileName )
63+
dst_properties = dst_inputFile.getProperties()
64+
dst_audioStream = dst_properties.getAudioProperties()[0]
65+
66+
assert_equals( src_audioStream.getNbSamples(), dst_audioStream.getNbSamples() )
67+
assert_equals( src_audioStream.getNbSamples(), src_audioStream.getSampleRate() * src_audioStream.getDuration() )
3968

4069
def testNbSamplesAudioTranscode():
4170
"""
@@ -70,3 +99,4 @@ def testNbSamplesAudioTranscode():
7099
dst_audioStream = dst_properties.getAudioProperties()[0]
71100

72101
assert_equals( src_audioStream.getNbSamples(), dst_audioStream.getNbSamples() )
102+
assert_equals( src_audioStream.getNbSamples(), src_audioStream.getSampleRate() * src_audioStream.getDuration() )

test/pyTest/testOffset.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def testRewrapAudioPositiveOffset():
103103

104104
# check output duration
105105
assert_equals( src_audioStream.getDuration() + offset, dst_audioStream.getDuration() )
106-
assert_equals( src_audioStream.getNbSamples() + ( offset * dst_audioStream.getSampleRate() * dst_audioStream.getNbChannels() ), dst_audioStream.getNbSamples() )
106+
assert_equals( src_audioStream.getNbSamples() + ( offset * dst_audioStream.getSampleRate() ), dst_audioStream.getNbSamples() )
107107

108108

109109
def testRewrapAudioNegativeOffset():
@@ -134,7 +134,7 @@ def testRewrapAudioNegativeOffset():
134134

135135
# check output duration
136136
assert_equals( src_audioStream.getDuration() + offset, dst_audioStream.getDuration() )
137-
assert_equals( src_audioStream.getNbSamples() + ( offset * dst_audioStream.getSampleRate() * dst_audioStream.getNbChannels() ), dst_audioStream.getNbSamples() )
137+
assert_equals( src_audioStream.getNbSamples() + ( offset * dst_audioStream.getSampleRate() ), dst_audioStream.getNbSamples() )
138138

139139

140140
# # The output video stream has not the correct duration.

test/pyTest/testProperties.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,11 @@ def testCheckAudioProperties():
150150
expectedAudioBitRate = 4608000
151151

152152
expectedCodecName = 'pcm_s16le'
153-
expectedSamples = 5760000
154153
expectedDuration = 20
155154
expectedChannels = 6
156155
expectedChannelLayout = '5.1'
157156
expectedSampleRate = 48000
157+
expectedSamples = expectedSampleRate * expectedDuration;
158158

159159
assert_equals( properties.getBitRate(), expectedTotalBitRate )
160160
assert_equals( audioStream.getBitRate(), expectedAudioBitRate )
@@ -177,4 +177,5 @@ def testCheckFilePropertiesAsJson():
177177

178178
import json
179179
# json.loads method throws a ValueError if it is not a valid JSON.
180-
json.loads(inputFile.getProperties().allPropertiesAsJson())
180+
jsonProps = json.loads(inputFile.getProperties().allPropertiesAsJson())
181+
print(jsonProps)

0 commit comments

Comments
 (0)