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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to