Thread: [Redbutton-devel] SF.net SVN: redbutton: [134] redbutton-browser/trunk/MHEGStreamPlayer.c (Page 2)
Brought to you by:
skilvington
|
From: <ski...@us...> - 2006-07-30 10:52:23
|
Revision: 134 Author: skilvington Date: 2006-07-30 03:52:10 -0700 (Sun, 30 Jul 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=134&view=rev Log Message: ----------- maintain A/V sync if audio gets ahead Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-07-28 21:17:34 UTC (rev 133) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-07-30 10:52:10 UTC (rev 134) @@ -488,7 +488,7 @@ drop_frame = (usecs < 0); if(drop_frame) { - verbose("MHEGStreamPlayer: dropped frame %u (usecs=%d)", nframes, usecs); + verbose("MHEGStreamPlayer: dropped video frame %u (usecs=%d)", nframes, usecs); } else { @@ -592,6 +592,7 @@ int64_t now_time, next_time; double now_pts, next_pts; int usecs; + double vpts = 0.0; if(!p->have_audio) return NULL; @@ -724,8 +725,20 @@ /* TODO */ /* need to make sure pts is what we expect */ /* if we missed decoding a sample, play silence */ - /* this will block until the sound card can take the data */ - MHEGAudioOutput_addSamples(&ao, af->data, af->size); + /* if the audio is getting ahead, don't play this sample */ + pthread_mutex_lock(&p->videoq_lock); + vpts = p->videoq ? p->videoq->item.pts : vpts; + pthread_mutex_unlock(&p->videoq_lock); + if(vpts <= af->pts) + { + /* this will block until the sound card can take the data */ + MHEGAudioOutput_addSamples(&ao, af->data, af->size); + } + else + { + verbose("MHEGStreamPlayer: dropped audio frame (%f ahead)", vpts - af->pts); + } +/* TODO handle case when video is ahead */ /* we can delete the frame from the queue now */ pthread_mutex_lock(&p->audioq_lock); LIST_FREE_HEAD(&p->audioq, AudioFrame, free_AudioFrameListItem); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2007-04-25 10:20:15
|
Revision: 292
http://svn.sourceforge.net/redbutton/?rev=292&view=rev
Author: skilvington
Date: 2007-04-25 03:20:11 -0700 (Wed, 25 Apr 2007)
Log Message:
-----------
more detail in error message
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2007-04-25 09:44:10 UTC (rev 291)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2007-04-25 10:20:11 UTC (rev 292)
@@ -272,7 +272,7 @@
p->have_audio, &p->audio_pid, &p->audio_type,
p->have_video, &p->video_pid, &p->video_type)) == NULL)
{
- error("Unable to open MPEG stream");
+ error("Unable to open MPEG stream (%d, %d, %d)", p->service_id, p->audio_tag, p->video_tag);
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-18 16:17:38
|
Revision: 495
http://redbutton.svn.sourceforge.net/redbutton/?rev=495&view=rev
Author: skilvington
Date: 2008-06-18 09:17:32 -0700 (Wed, 18 Jun 2008)
Log Message:
-----------
reset the service ID and a/v streams when all the MHEGStreamPlayer user have gone
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-17 16:05:20 UTC (rev 494)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-18 16:17:32 UTC (rev 495)
@@ -188,6 +188,17 @@
player.nusers --;
+ /* reset the service ID and streams if all the users have gone */
+ if(player.nusers == 0)
+ {
+ player.service_id = -1;
+ player.have_video = false;
+ player.video = NULL;
+ player.have_audio = false;
+ player.audio = NULL;
+ player.audio_codec = NULL;
+ }
+
verbose("MHEGStreamPlayer: %u users", player.nusers);
*p = NULL;
@@ -217,6 +228,10 @@
if(p != &player)
fatal("MHEGStreamPlayer_setServiceID: p=%p, &player=%p", p, &player);
+ /* assert */
+ if(p->playing && p->service_id != id)
+ fatal("MHEGStreamPlayer_setServiceID: trying to change service ID while playing");
+
p->service_id = id;
return;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-27 16:12:32
|
Revision: 498
http://redbutton.svn.sourceforge.net/redbutton/?rev=498&view=rev
Author: skilvington
Date: 2008-06-27 09:12:29 -0700 (Fri, 27 Jun 2008)
Log Message:
-----------
ignore bad audio frames
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-18 16:19:39 UTC (rev 497)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-27 16:12:29 UTC (rev 498)
@@ -103,7 +103,7 @@
af->item.pts = AV_NOPTS_VALUE;
- af->item.size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
+ af->item.size = sizeof(af->item.data);
return af;
}
@@ -518,7 +518,7 @@
used = avcodec_decode_audio2(audio_codec_ctx, af->data, &af->size, data, size);
data += used;
size -= used;
- if(af->size > 0)
+ if(used > 0 && af->size > 0)
{
af->pts = pts;
/* 16 or 32-bit samples, but af->size is in bytes */
@@ -535,6 +535,8 @@
else
{
free_AudioFrameListItem(audio_frame);
+ /* throw the rest of the packet away */
+ size = 0;
}
}
/* don't want one thread hogging the CPU time */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|