Skip to content

Commit 25aadb8

Browse files
Merge pull request #318 from avTranscoder/fix/audio_properties_nb_samples
Fix: number of samples computing into AudioProperties
2 parents f5975f2 + 1709993 commit 25aadb8

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy