[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