Changes of Revision 96

lightspark.spec Changed
x
 
1
@@ -20,7 +20,7 @@
2
 %bcond_without librtmp
3
 
4
 Name:           lightspark
5
-Version:        0.7.2.99+git20160131.2023
6
+Version:        0.7.2.99+git20160214.1643
7
 Release:        0
8
 Summary:        Modern, free, open-source flash player implementation
9
 License:        LGPL-3.0+
10
lightspark.tar.xz/src/backends/audio.cpp Changed
20
 
1
@@ -58,11 +58,16 @@
2
    return oAudioPlugin != NULL;
3
 }
4
 
5
-AudioStream *AudioManager::createStreamPlugin ( AudioDecoder *decoder )
6
+AudioStream *AudioManager::createStreamPlugin (AudioDecoder *decoder , bool startpaused)
7
 {
8
    if ( pluginLoaded() )
9
    {
10
-       return oAudioPlugin->createStream ( decoder );
11
+       AudioStream * res = oAudioPlugin->createStream ( decoder );
12
+       if (startpaused)
13
+           res->pause();
14
+       else
15
+           res->hasStarted=true;
16
+       return res;
17
    }
18
    else
19
    {
20
lightspark.tar.xz/src/backends/audio.h Changed
10
 
1
@@ -49,7 +49,7 @@
2
 public:
3
    AudioManager ( PluginManager *sharePluginManager );
4
    bool pluginLoaded() const;
5
-   AudioStream *createStreamPlugin ( AudioDecoder *decoder );
6
+   AudioStream *createStreamPlugin ( AudioDecoder *decoder, bool startpaused );
7
    bool isTimingAvailablePlugin() const;
8
    void set_audiobackend ( std::string desired_backend );
9
    void get_audioBackendsList();
10
lightspark.tar.xz/src/backends/builtindecoder.cpp Changed
18
 
1
@@ -32,6 +32,7 @@
2
    {
3
        FLV_HEADER h(stream);
4
        valid=h.isValid();
5
+       hasvideo=h.hasVideo();
6
    }
7
    else
8
        valid=false;
9
@@ -67,6 +68,8 @@
10
        {
11
            AudioDataTag tag(stream);
12
            prevSize=tag.getTotalLen();
13
+           if (tag.packetLen == 0)
14
+               return false;
15
 
16
            if(audioDecoder==NULL)
17
            {
18
lightspark.tar.xz/src/backends/decoder.cpp Changed
12
 
1
@@ -950,7 +950,10 @@
2
        if (customVideoDecoder)
3
        {
4
            if (customVideoDecoder->decodePacket(&pkt, mtime))
5
+           {
6
                customVideoDecoder->framesdecoded++;
7
+               hasvideo=true;
8
+           }
9
        }
10
    }
11
    av_free_packet(&pkt);
12
lightspark.tar.xz/src/backends/decoder.h Changed
19
 
1
@@ -329,14 +329,16 @@
2
 class StreamDecoder
3
 {
4
 public:
5
-   StreamDecoder():audioDecoder(NULL),videoDecoder(NULL),valid(false){}
6
+   StreamDecoder():audioDecoder(NULL),videoDecoder(NULL),valid(false),hasvideo(false){}
7
    virtual ~StreamDecoder();
8
    virtual bool decodeNextFrame() = 0;
9
    bool isValid() const { return valid; }
10
    AudioDecoder* audioDecoder;
11
    VideoDecoder* videoDecoder;
12
+   bool hasVideo() const { return hasvideo; }
13
 protected:
14
    bool valid;
15
+   bool hasvideo;
16
 };
17
 
18
 #ifdef ENABLE_LIBAVCODEC
19
lightspark.tar.xz/src/backends/interfaces/audio/IAudioPlugin.cpp Changed
10
 
1
@@ -69,7 +69,7 @@
2
 
3
 
4
 AudioStream::AudioStream ( lightspark::AudioDecoder* dec ):
5
-   decoder(dec)
6
+   decoder(dec),hasStarted(false)
7
 {
8
 
9
 }
10
lightspark.tar.xz/src/backends/interfaces/audio/IAudioPlugin.h Changed
22
 
1
@@ -28,10 +28,10 @@
2
 
3
 class AudioStream
4
 {
5
-  protected:
6
+protected:
7
    AudioStream(lightspark::AudioDecoder *dec = NULL);
8
 
9
-  public:
10
+public:
11
    lightspark::AudioDecoder *decoder;
12
    virtual bool ispaused() = 0;    //Is the stream paused? (corked)
13
    virtual bool isValid() = 0; //Is the stream alive, fully working?
14
@@ -41,6 +41,7 @@
15
    virtual ~AudioStream() {};
16
    virtual void setVolume(double volume)
17
        {LOG(LOG_NOT_IMPLEMENTED,"setVolume not implemented in plugin");}
18
+   bool hasStarted;
19
 };
20
 
21
 /**********************
22
lightspark.tar.xz/src/scripting/flash/media/flashmedia.cpp Changed
19
 
1
@@ -497,7 +497,7 @@
2
 
3
            //TODO: Move the audio plugin check before
4
            if(audioStream==NULL && audioDecoder && audioDecoder->isValid() && getSys()->audioManager->pluginLoaded())
5
-               audioStream=getSys()->audioManager->createStreamPlugin(audioDecoder);
6
+               audioStream=getSys()->audioManager->createStreamPlugin(audioDecoder,false);
7
 
8
            // TODO: check the position only when the getter is called
9
            if(audioStream)
10
@@ -568,7 +568,7 @@
11
    {
12
        decoder->decodeStreamSomePackets(stream, 0,this);
13
        if (decoder->isValid() && (audioStream == NULL))
14
-           audioStream=getSys()->audioManager->createStreamPlugin(decoder);
15
+           audioStream=getSys()->audioManager->createStreamPlugin(decoder,false);
16
        if(threadAborting)
17
            break;
18
    }
19
lightspark.tar.xz/src/scripting/flash/net/flashnet.cpp Changed
82
 
1
@@ -610,7 +610,7 @@
2
    c->setVariableByQName("PENDING","",Class<ASString>::getInstanceS("pending"),DECLARED_TRAIT);
3
 }
4
 
5
-std::map<tiny_string, SharedObject* > SharedObject::sharedobjectmap;
6
+std::map<tiny_string, ASObject* > SharedObject::sharedobjectmap;
7
 SharedObject::SharedObject(Class_base* c):EventDispatcher(c),client(this),objectEncoding(ObjectEncoding::AMF3)
8
 {
9
    data=_MR(new_asobject());
10
@@ -671,18 +671,22 @@
11
    
12
    if (name=="")
13
        throwError<ASError>(0,"invalid name");
14
-   if (localPath != "" || secure)
15
-       LOG(LOG_NOT_IMPLEMENTED,"SharedObject.getLocal: parameters 'localPath' and 'secure' are ignored");
16
+   if (secure)
17
+       LOG(LOG_NOT_IMPLEMENTED,"SharedObject.getLocal: parameter 'secure' is ignored");
18
 
19
 
20
-   std::map<tiny_string, SharedObject* >::iterator it = sharedobjectmap.find(name);
21
+   tiny_string fullname = localPath + "|";
22
+   fullname += name;
23
+   SharedObject* res = Class<SharedObject>::getInstanceS();
24
+   std::map<tiny_string, ASObject* >::iterator it = sharedobjectmap.find(fullname);
25
    if (it == sharedobjectmap.end())
26
    {
27
-       sharedobjectmap.insert(make_pair(name,Class<SharedObject>::getInstanceS()));
28
-       it = sharedobjectmap.find(name);
29
+       sharedobjectmap.insert(make_pair(fullname,Class<ASObject>::getInstanceS()));
30
+       it = sharedobjectmap.find(fullname);
31
    }
32
    it->second->incRef();
33
-   return it->second;
34
+   res->data = _NR<ASObject>(it->second);
35
+   return res;
36
 }
37
 
38
 ASFUNCTIONBODY(SharedObject,getRemote)
39
@@ -1685,6 +1689,11 @@
40
    }
41
    if(paused)
42
        return;
43
+   if(audioStream && audioStream->isValid() && !audioStream->hasStarted)
44
+   {
45
+       audioStream->hasStarted = true;
46
+       audioStream->resume();
47
+   }
48
    //Advance video and audio to current time, follow the audio stream time
49
    countermutex.lock();
50
    if(audioStream && getSys()->audioManager->isTimingAvailablePlugin())
51
@@ -1849,9 +1858,6 @@
52
                        if (frameRate)
53
                        {
54
                            this->playbackBytesPerSecond = s.tellg() / (framesdecoded / frameRate);
55
-                           // TODO this overrides the real number of decoded frames
56
-                           // otherwise on slow computers we never get the buffer filled
57
-                           //framesdecoded = (this->getReceivedLength() / this->playbackBytesPerSecond) *  frameRate;
58
                            this->bufferLength = (framesdecoded / frameRate) - (streamTime-prevstreamtime)/1000.0;
59
                        }
60
                        countermutex.unlock();
61
@@ -1877,9 +1883,8 @@
62
                audioDecoder=streamDecoder->audioDecoder;
63
            
64
            if(audioStream==NULL && audioDecoder && audioDecoder->isValid() && getSys()->audioManager->pluginLoaded())
65
-               audioStream=getSys()->audioManager->createStreamPlugin(audioDecoder);
66
-           
67
-           if(!tickStarted && isReady() && ((framesdecoded / frameRate) >= this->bufferTime))
68
+               audioStream=getSys()->audioManager->createStreamPlugin(audioDecoder,streamDecoder->hasVideo());
69
+           if(!tickStarted && isReady() && frameRate && ((framesdecoded / frameRate) >= this->bufferTime))
70
            {
71
                tickStarted=true;
72
                this->incRef();
73
@@ -1890,7 +1895,7 @@
74
                float localRenderRate=dmin(frameRate,24);
75
                getSys()->setRenderRate(localRenderRate);
76
            }
77
-           if (!bufferfull && ((framesdecoded / frameRate) >= this->bufferTime))
78
+           if (!bufferfull && frameRate && ((framesdecoded / frameRate) >= this->bufferTime))
79
            {
80
                bufferfull = true;
81
                this->incRef();
82
lightspark.tar.xz/src/scripting/flash/net/flashnet.h Changed
10
 
1
@@ -107,7 +107,7 @@
2
 class SharedObject: public EventDispatcher
3
 {
4
 private:
5
-   static std::map<tiny_string, SharedObject* > sharedobjectmap;
6
+   static std::map<tiny_string, ASObject* > sharedobjectmap;
7
 public:
8
    SharedObject(Class_base* c);
9
    static void sinit(Class_base*);
10
lightspark.tar.xz/src/scripting/flash/ui/Mouse.cpp Changed
10
 
1
@@ -60,7 +60,7 @@
2
    tiny_string cursorName;
3
    ARG_UNPACK(cursorName);
4
    if (cursorName != "auto")
5
-       throwError<ArgumentError>(kInvalidEnumError, "cursor");
6
+       LOG(LOG_NOT_IMPLEMENTED,"setting mouse cursor is not implemented");
7
    return NULL;
8
 }
9
 
10