[Bf-blender-cvs] [37e3d7a66ac] temp-VSE-fixes: Fix audaspace not reading ffmpeg files with start offset correctly
Sebastian Parborg
noreply at git.blender.org
Thu Aug 5 12:50:21 CEST 2021
Commit: 37e3d7a66acc8f7140b3126e039aee6c5d0c4063
Author: Sebastian Parborg
Date: Tue Jul 6 19:48:06 2021 +0200
Branches: temp-VSE-fixes
https://developer.blender.org/rB37e3d7a66acc8f7140b3126e039aee6c5d0c4063
Fix audaspace not reading ffmpeg files with start offset correctly
===================================================================
M extern/audaspace/bindings/C/AUD_Special.cpp
M extern/audaspace/bindings/C/AUD_Types.h
M extern/audaspace/include/IReader.h
M extern/audaspace/include/fx/EffectReader.h
M extern/audaspace/include/fx/ModulatorReader.h
M extern/audaspace/include/fx/MutableReader.h
M extern/audaspace/include/fx/VolumeReader.h
M extern/audaspace/include/generator/SawtoothReader.h
M extern/audaspace/include/generator/SilenceReader.h
M extern/audaspace/include/generator/SineReader.h
M extern/audaspace/include/generator/SquareReader.h
M extern/audaspace/include/generator/TriangleReader.h
M extern/audaspace/include/sequence/DoubleReader.h
M extern/audaspace/include/sequence/SequenceReader.h
M extern/audaspace/include/sequence/SuperposeReader.h
M extern/audaspace/include/util/BufferReader.h
M extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
M extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
M extern/audaspace/plugins/libsndfile/SndFileReader.cpp
M extern/audaspace/plugins/libsndfile/SndFileReader.h
M extern/audaspace/src/fx/EffectReader.cpp
M extern/audaspace/src/fx/ModulatorReader.cpp
M extern/audaspace/src/fx/MutableReader.cpp
M extern/audaspace/src/fx/VolumeReader.cpp
M extern/audaspace/src/generator/SawtoothReader.cpp
M extern/audaspace/src/generator/SilenceReader.cpp
M extern/audaspace/src/generator/SineReader.cpp
M extern/audaspace/src/generator/SquareReader.cpp
M extern/audaspace/src/generator/TriangleReader.cpp
M extern/audaspace/src/sequence/DoubleReader.cpp
M extern/audaspace/src/sequence/SequenceReader.cpp
M extern/audaspace/src/sequence/SuperposeReader.cpp
M extern/audaspace/src/util/BufferReader.cpp
M source/blender/blenkernel/BKE_sound.h
M source/blender/blenkernel/intern/sound.c
M source/blender/editors/space_sequencer/sequencer_add.c
M source/blender/editors/space_sequencer/sequencer_draw.c
M source/blender/imbuf/IMB_imbuf.h
M source/blender/imbuf/intern/IMB_anim.h
M source/blender/imbuf/intern/anim_movie.c
M source/blender/makesdna/DNA_sound_types.h
M source/blender/makesrna/intern/rna_sequencer_api.c
M source/blender/sequencer/SEQ_add.h
M source/blender/sequencer/intern/sound.c
M source/blender/sequencer/intern/strip_add.c
M source/blender/sequencer/intern/strip_time.c
===================================================================
diff --git a/extern/audaspace/bindings/C/AUD_Special.cpp b/extern/audaspace/bindings/C/AUD_Special.cpp
index f2398bf0efb..5cc33525d1d 100644
--- a/extern/audaspace/bindings/C/AUD_Special.cpp
+++ b/extern/audaspace/bindings/C/AUD_Special.cpp
@@ -86,6 +86,7 @@ AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
info.specs.channels = AUD_CHANNELS_INVALID;
info.specs.rate = AUD_RATE_INVALID;
info.length = 0.0f;
+ info.start_offset = 0.0f;
try
{
@@ -95,6 +96,7 @@ AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
{
info.specs = convSpecToC(reader->getSpecs());
info.length = reader->getLength() / (float) info.specs.rate;
+ info.start_offset = reader->getStartOffset();
}
}
catch(Exception&)
diff --git a/extern/audaspace/bindings/C/AUD_Types.h b/extern/audaspace/bindings/C/AUD_Types.h
index 75e4ffae18c..c6a96d30d3f 100644
--- a/extern/audaspace/bindings/C/AUD_Types.h
+++ b/extern/audaspace/bindings/C/AUD_Types.h
@@ -176,4 +176,5 @@ typedef struct
{
AUD_Specs specs;
float length;
+ double start_offset;
} AUD_SoundInfo;
diff --git a/extern/audaspace/include/IReader.h b/extern/audaspace/include/IReader.h
index c29900ca579..7de9a5c6d81 100644
--- a/extern/audaspace/include/IReader.h
+++ b/extern/audaspace/include/IReader.h
@@ -70,6 +70,12 @@ public:
*/
virtual int getPosition() const=0;
+ /**
+ * Returns the start offset the sound should have to line up with related sources.
+ * \return The required start offset in seconds.
+ */
+ virtual double getStartOffset() const=0;
+
/**
* Returns the specification of the reader.
* \return The Specs structure.
diff --git a/extern/audaspace/include/fx/EffectReader.h b/extern/audaspace/include/fx/EffectReader.h
index 85eff6a8ab9..f21001c1f86 100644
--- a/extern/audaspace/include/fx/EffectReader.h
+++ b/extern/audaspace/include/fx/EffectReader.h
@@ -61,6 +61,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/fx/ModulatorReader.h b/extern/audaspace/include/fx/ModulatorReader.h
index 40cc84332a9..82c51421d52 100644
--- a/extern/audaspace/include/fx/ModulatorReader.h
+++ b/extern/audaspace/include/fx/ModulatorReader.h
@@ -72,6 +72,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/fx/MutableReader.h b/extern/audaspace/include/fx/MutableReader.h
index 217dd2aa5d4..b4d2db326af 100644
--- a/extern/audaspace/include/fx/MutableReader.h
+++ b/extern/audaspace/include/fx/MutableReader.h
@@ -64,6 +64,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/fx/VolumeReader.h b/extern/audaspace/include/fx/VolumeReader.h
index 13b6845e931..95e214c4a78 100644
--- a/extern/audaspace/include/fx/VolumeReader.h
+++ b/extern/audaspace/include/fx/VolumeReader.h
@@ -63,8 +63,9 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
-AUD_NAMESPACE_END
\ No newline at end of file
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SawtoothReader.h b/extern/audaspace/include/generator/SawtoothReader.h
index b4045eb8820..0dac86b27b1 100644
--- a/extern/audaspace/include/generator/SawtoothReader.h
+++ b/extern/audaspace/include/generator/SawtoothReader.h
@@ -79,6 +79,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int & length, bool &eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/generator/SilenceReader.h b/extern/audaspace/include/generator/SilenceReader.h
index c32db4b3e89..f861efb6772 100644
--- a/extern/audaspace/include/generator/SilenceReader.h
+++ b/extern/audaspace/include/generator/SilenceReader.h
@@ -58,6 +58,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/generator/SineReader.h b/extern/audaspace/include/generator/SineReader.h
index 49cd571bc65..d1dc51c33ee 100644
--- a/extern/audaspace/include/generator/SineReader.h
+++ b/extern/audaspace/include/generator/SineReader.h
@@ -70,6 +70,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/generator/SquareReader.h b/extern/audaspace/include/generator/SquareReader.h
index 53fc574c767..fdbb6800123 100644
--- a/extern/audaspace/include/generator/SquareReader.h
+++ b/extern/audaspace/include/generator/SquareReader.h
@@ -79,6 +79,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int & length, bool &eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/generator/TriangleReader.h b/extern/audaspace/include/generator/TriangleReader.h
index 15079404b75..3c0cca64d9f 100644
--- a/extern/audaspace/include/generator/TriangleReader.h
+++ b/extern/audaspace/include/generator/TriangleReader.h
@@ -79,6 +79,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int & length, bool &eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/sequence/DoubleReader.h b/extern/audaspace/include/sequence/DoubleReader.h
index 012dcc8e832..04c7ccecaea 100644
--- a/extern/audaspace/include/sequence/DoubleReader.h
+++ b/extern/audaspace/include/sequence/DoubleReader.h
@@ -70,6 +70,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/sequence/SequenceReader.h b/extern/audaspace/include/sequence/SequenceReader.h
index 196d969e102..a13b70abb9f 100644
--- a/extern/audaspace/include/sequence/SequenceReader.h
+++ b/extern/audaspace/include/sequence/SequenceReader.h
@@ -87,6 +87,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/sequence/SuperposeReader.h b/extern/audaspace/include/sequence/SuperposeReader.h
index 8bd38ade4c3..0a29da330d7 100644
--- a/extern/audaspace/include/sequence/SuperposeReader.h
+++ b/extern/audaspace/include/sequence/SuperposeReader.h
@@ -72,6 +72,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/include/util/BufferReader.h b/extern/audaspace/include/util/BufferReader.h
index b98313726bc..c38852dc6de 100644
--- a/extern/audaspace/include/util/BufferReader.h
+++ b/extern/audaspace/include/util/BufferReader.h
@@ -69,6 +69,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
+ virtual double getStartOffset() const;
virtual Specs getSpecs() const;
virtual void read(int& length, bool& eos, sample_t* buffer);
};
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
index b46f65eddbf..c1ab396253e 100644
--- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
@@ -68,7 +68,7 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer)
for(int i = 0; i < m_frame->nb_samples; i++)
{
std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size,
- m_frame->data[channel] + i * single_size, single_size);
+ m_frame->data[channel] + i * single_size, single_size);
}
}
}
@@ -109,7 +109,7 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer)
for(int i = 0; i < m_frame->nb_samples; i++)
{
std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size,
- m_frame->data[channel] + i * single_size, single_size);
+ m_frame->data[channel] + i * single_size, single_size);
}
}
}
@@ -126,7 +126,10 @@ int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer)
void FFMPEGReader::init()
{
m_position = 0;
+ m_start_offset = 0.0f;
m_pkgbuf_left = 0;
+ m_st_time = 0;
+ m_duration = 0;
if(avformat_find_stream_info(m_formatCtx, nullptr) < 0)
AUD_THROW(FileException, "File couldn't be read, ffmpeg couldn't find the stream info.");
@@ -134,15 +137,36 @@ void FFMPEGReader::init()
// find audio stream and codec
m_stream = -1;
+ double dur_sec = 0;
+
for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
{
#ifdef FFMPEG_OLD_CODE
- if((m_formatCtx->streams[i]->codec
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list