[Swfdec-commits] Branch 'rtmp' - 6 commits - swfdec/swfdec_as_super.c swfdec/swfdec_audio_stream.c swfdec/swfdec_net_stream_audio.c swfdec/swfdec_net_stream.c swfdec/swfdec_net_stream_video.c swfdec/swfdec_rtmp_connection.c
Benjamin Otte
company at kemper.freedesktop.org
Mon Dec 15 12:15:00 PST 2008
swfdec/swfdec_as_super.c | 2 ++
swfdec/swfdec_audio_stream.c | 1 +
swfdec/swfdec_net_stream.c | 7 +++----
swfdec/swfdec_net_stream_audio.c | 1 +
swfdec/swfdec_net_stream_video.c | 12 ++++++++++--
swfdec/swfdec_rtmp_connection.c | 3 +++
6 files changed, 20 insertions(+), 6 deletions(-)
New commits:
commit 755b981547495b0e944f3bcede2107ca0c3e1843
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Dec 15 18:00:57 2008 +0100
complain when data hasn't been properly read
diff --git a/swfdec/swfdec_rtmp_connection.c b/swfdec/swfdec_rtmp_connection.c
index 71ccf5a..aea70b1 100644
--- a/swfdec/swfdec_rtmp_connection.c
+++ b/swfdec/swfdec_rtmp_connection.c
@@ -120,6 +120,9 @@ swfdec_rtmp_connection_handle_ping (SwfdecRtmpConnection *conn, SwfdecBuffer *bu
SWFDEC_FIXME ("handle ping type %u for target %u", type, target);
break;
}
+ if (swfdec_bits_left (&bits)) {
+ SWFDEC_FIXME ("bytes left in ping type %u", type);
+ }
}
static void
commit 8140f7f1ae87d80a1c703a2cf82cbd1e259c5037
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Dec 15 16:55:21 2008 +0100
make seeking work properly
diff --git a/swfdec/swfdec_net_stream_video.c b/swfdec/swfdec_net_stream_video.c
index 56650d4..2f5e2db 100644
--- a/swfdec/swfdec_net_stream_video.c
+++ b/swfdec/swfdec_net_stream_video.c
@@ -295,9 +295,16 @@ swfdec_net_stream_video_decode (SwfdecNetStreamVideo *video)
static void
swfdec_net_stream_video_start (SwfdecNetStreamVideo *video)
{
+ SwfdecRtmpPacket *packet = g_queue_peek_head (video->next);
+
+ g_assert (packet);
+ g_assert (!video->playing);
+
video->time = 0;
+ video->next->length += packet->header.timestamp;
video->playing = TRUE;
video->timeout.timestamp = SWFDEC_PLAYER (swfdec_gc_object_get_context (video))->priv->time;
+ video->timeout.timestamp -= SWFDEC_TICKS_PER_SECOND * packet->header.timestamp / 1000;
g_object_notify (G_OBJECT (video), "playing");
}
@@ -312,8 +319,9 @@ swfdec_net_stream_video_push (SwfdecNetStreamVideo *video,
packet = swfdec_rtmp_packet_new (header->channel, header->stream,
header->type, header->timestamp, buffer);
+ if (video->playing || !g_queue_is_empty (video->next))
+ video->next_length += header->timestamp;
g_queue_push_tail (video->next, packet);
- video->next_length += header->timestamp;
if (!video->playing && video->next_length >= video->buffer_time) {
swfdec_net_stream_video_start (video);
swfdec_net_stream_video_decode (video);
commit a6225735895c12830f2f8732a8e958f06b2b3a60
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Dec 15 16:55:05 2008 +0100
don't just free the queue data, clear the queues, too
diff --git a/swfdec/swfdec_audio_stream.c b/swfdec/swfdec_audio_stream.c
index c1ba686..0ac25b9 100644
--- a/swfdec/swfdec_audio_stream.c
+++ b/swfdec/swfdec_audio_stream.c
@@ -44,6 +44,7 @@ swfdec_audio_stream_clear (SwfdecAudio *audio)
}
g_queue_foreach (stream->queue, (GFunc) swfdec_buffer_unref, NULL);
g_queue_clear (stream->queue);
+ stream->queue_size = 0;
stream->done = FALSE;
stream->buffering = FALSE;
diff --git a/swfdec/swfdec_net_stream_audio.c b/swfdec/swfdec_net_stream_audio.c
index da1d8a1..5afdd7d 100644
--- a/swfdec/swfdec_net_stream_audio.c
+++ b/swfdec/swfdec_net_stream_audio.c
@@ -56,6 +56,7 @@ swfdec_net_stream_audio_clear (SwfdecAudio *audio)
if (g_queue_peek_tail (stream->queue) == NULL)
g_queue_pop_tail (stream->queue);
g_queue_foreach (stream->queue, (GFunc) swfdec_buffer_unref, NULL);
+ g_queue_clear (stream->queue);
SWFDEC_AUDIO_CLASS (swfdec_net_stream_audio_parent_class)->clear (audio);
}
commit ab6519a2ebab619f9c4eda1a14035732ab699b7d
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Dec 15 16:54:02 2008 +0100
only add audio at the beginning, not whenever we get full/empty signals
Avoids 2 things: A/V sync and assertion failures
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index ab64135..85c9d9c 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -190,11 +190,8 @@ swfdec_net_stream_video_buffer_status (SwfdecNetStreamVideo *video, GParamSpec *
{
if (video->playing) {
swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Buffer_Full);
- swfdec_audio_add (SWFDEC_AUDIO (stream->audio),
- SWFDEC_PLAYER (swfdec_gc_object_get_context (stream)));
} else {
swfdec_net_stream_onstatus (stream, SWFDEC_AS_STR_NetStream_Buffer_Empty);
- swfdec_audio_remove (SWFDEC_AUDIO (stream->audio));
}
}
@@ -483,10 +480,12 @@ swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
stream->conn = conn;
stream->rpc = swfdec_rtmp_rpc_new (conn, SWFDEC_AS_RELAY (stream));
stream->video = swfdec_net_stream_video_new (SWFDEC_PLAYER (cx));
- stream->audio = swfdec_net_stream_audio_new (SWFDEC_PLAYER (cx));
g_object_ref (stream->video);
g_signal_connect (stream->video, "notify::playing",
G_CALLBACK (swfdec_net_stream_video_buffer_status), stream);
+ stream->audio = swfdec_net_stream_audio_new (SWFDEC_PLAYER (cx));
+ swfdec_audio_add (SWFDEC_AUDIO (stream->audio),
+ SWFDEC_PLAYER (swfdec_gc_object_get_context (stream)));
swfdec_as_context_get_time (cx, &stream->rpc->last_send);
swfdec_as_object_set_relay (o, SWFDEC_AS_RELAY (stream));
}
commit de7275c20f5c5090eba76dbee4cc11739e44f870
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Dec 15 11:59:21 2008 +0100
[OPTI] Don't create a super object for functions that suppresses it
diff --git a/swfdec/swfdec_as_super.c b/swfdec/swfdec_as_super.c
index a012b79..bbf4752 100644
--- a/swfdec/swfdec_as_super.c
+++ b/swfdec/swfdec_as_super.c
@@ -86,6 +86,8 @@ swfdec_as_super_new (SwfdecAsFrame *frame, SwfdecAsObject *thisp, SwfdecAsObject
if (frame->super != NULL)
return;
+ if (frame->script->flags & SWFDEC_SCRIPT_SUPPRESS_SUPER)
+ return;
context = thisp->context;
if (context->version <= 5)
return;
commit 8d2a33448720acd6f5472e20707764e944686df7
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Dec 15 10:47:28 2008 +0100
check the correct variable in return_if_fail
diff --git a/swfdec/swfdec_net_stream_video.c b/swfdec/swfdec_net_stream_video.c
index c7cf7e8..56650d4 100644
--- a/swfdec/swfdec_net_stream_video.c
+++ b/swfdec/swfdec_net_stream_video.c
@@ -308,7 +308,7 @@ swfdec_net_stream_video_push (SwfdecNetStreamVideo *video,
SwfdecRtmpPacket *packet;
g_return_if_fail (SWFDEC_IS_NET_STREAM_VIDEO (video));
- g_return_if_fail (packet != NULL);
+ g_return_if_fail (buffer != NULL);
packet = swfdec_rtmp_packet_new (header->channel, header->stream,
header->type, header->timestamp, buffer);
More information about the Swfdec-commits
mailing list