Changes of Revision 96
lightspark.spec
Changed
x
1
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
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
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
2
{
3
FLV_HEADER h(stream);
4
valid=h.isValid();
5
+ hasvideo=h.hasVideo();
6
}
7
else
8
valid=false;
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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