Thread: [Redbutton-devel] SF.net SVN: redbutton: [23] redbutton-browser/trunk/MHEGStreamPlayer.c
Brought to you by:
skilvington
|
From: <ski...@us...> - 2006-03-18 17:51:11
|
Revision: 23 Author: skilvington Date: 2006-03-18 09:51:02 -0800 (Sat, 18 Mar 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=23&view=rev Log Message: ----------- set stream FILE to NULL when closed Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-03-18 09:56:46 UTC (rev 22) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-03-18 17:51:02 UTC (rev 23) @@ -75,7 +75,10 @@ verbose("MHEGStreamPlayer_stop"); if(p->ts != NULL) + { fclose(p->ts); + p->ts = NULL; + } return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-05-16 15:41:20
|
Revision: 67 Author: skilvington Date: 2006-05-16 08:41:12 -0700 (Tue, 16 May 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=67&view=rev Log Message: ----------- take video position into account Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-05-16 13:08:55 UTC (rev 66) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-05-16 15:41:12 UTC (rev 67) @@ -530,11 +530,17 @@ pthread_mutex_lock(&p->current_frame_lock); if(p->current_frame != NULL) { -/* TODO */ -/* take p->video size/position into account */ -/* remeber fullscreen scaling */ - x = 0; /* origin of p->video */ - y = 0; + /* origin of VideoClass */ +/* TODO should probably have a lock for this in case we are doing SetPosition in another thread */ + x = p->video->inst.Position.x_position; + y = p->video->inst.Position.y_position; + /* scale if fullscreen */ + if(d->fullscreen) + { + x = (x * d->xres) / MHEG_XRES; + y = (y * d->yres) / MHEG_YRES; + } + /* video frame is already scaled as needed */ out_width = p->current_frame->width; out_height = p->current_frame->height; /* draw it onto the Window contents Pixmap */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-02 15:29:40
|
Revision: 85 Author: skilvington Date: 2006-06-02 08:29:30 -0700 (Fri, 02 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=85&view=rev Log Message: ----------- decode audio (doesn't play it yet) Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-02 11:01:46 UTC (rev 84) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-02 15:29:30 UTC (rev 85) @@ -210,10 +210,16 @@ enum CodecID codec_id; AVCodec *codec = NULL; double video_time_base = 90000.0; + double audio_time_base = 90000.0; double pts; AVFrame *frame; LIST_TYPE(VideoFrame) *video_frame; int got_picture; + uint16_t audio_data[AVCODEC_MAX_AUDIO_FRAME_SIZE]; + int audio_size; + int used; + unsigned char *data; + int size; verbose("MHEGStreamPlayer: decode thread started"); @@ -256,9 +262,29 @@ //if(pkt.pts == AV_NOPTS_VALUE) printf("NO PTS on PID %d!\n", pkt.stream_index); //printf("PTS=%lld DTS=%lld\n", pkt.pts, pkt.dts); /* see what stream we got a packet for */ - if(pkt.stream_index == p->audio_pid && pkt.dts != AV_NOPTS_VALUE) + if(pkt.stream_index == p->audio_pid && pkt.pts != AV_NOPTS_VALUE) { //printf("decode: got audio packet\n"); + pts = pkt.pts; + data = pkt.data; + size = pkt.size; + while(size > 0) + { + used = avcodec_decode_audio(audio_codec_ctx, audio_data, &audio_size, data, size); +//printf("decode audio: pts=%f used=%d (size=%d) audio_size=%d\n", pts / audio_time_base, used, size, audio_size); + data += used; + size -= used; + if(audio_size > 0) + { + pts += ((audio_size * 1000.0) / (audio_codec_ctx->channels * 2) / audio_codec_ctx->sample_rate); +// audio_frame = new_AudioFrameListItem(pts / audio_time_base, audio_data, audio_size); +// pthread_mutex_lock(&opts->audioq_lock); +// LIST_APPEND(&opts->audioq, audio_frame); +// pthread_mutex_unlock(&opts->audioq_lock); + } + } + /* don't want one thread hogging the CPU time */ + pthread_yield(); } else if(pkt.stream_index == p->video_pid && pkt.dts != AV_NOPTS_VALUE) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-02 15:38:23
|
Revision: 86 Author: skilvington Date: 2006-06-02 08:38:18 -0700 (Fri, 02 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=86&view=rev Log Message: ----------- make the audio PTS maths a bit clearer Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-02 15:29:30 UTC (rev 85) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-02 15:38:18 UTC (rev 86) @@ -276,7 +276,7 @@ size -= used; if(audio_size > 0) { - pts += ((audio_size * 1000.0) / (audio_codec_ctx->channels * 2) / audio_codec_ctx->sample_rate); + pts += (audio_size * 1000.0) / ((audio_codec_ctx->channels * 2) * audio_codec_ctx->sample_rate); // audio_frame = new_AudioFrameListItem(pts / audio_time_base, audio_data, audio_size); // pthread_mutex_lock(&opts->audioq_lock); // LIST_APPEND(&opts->audioq, audio_frame); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-08 11:07:19
|
Revision: 88 Author: skilvington Date: 2006-06-08 02:25:27 -0700 (Thu, 08 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=88&view=rev Log Message: ----------- free audioq on stop Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-07 16:09:27 UTC (rev 87) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-08 09:25:27 UTC (rev 88) @@ -204,6 +204,7 @@ /* clean up */ p->videoq_len = 0; LIST_FREE(&p->videoq, VideoFrame, free_VideoFrameListItem); + LIST_FREE(&p->audioq, AudioFrame, free_AudioFrameListItem); if(p->ts != NULL) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-12 12:36:15
|
Revision: 96 Author: skilvington Date: 2006-06-12 05:36:10 -0700 (Mon, 12 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=96&view=rev Log Message: ----------- remove debug printf's Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-12 12:28:12 UTC (rev 95) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-12 12:36:10 UTC (rev 96) @@ -291,13 +291,9 @@ /* get the next complete packet for one of the streams */ if(mpegts_demux_frame(tsdemux, &pkt) < 0) continue; -//if(pkt.dts == AV_NOPTS_VALUE) printf("NO DTS on PID %d!\n", pkt.stream_index); -//if(pkt.pts == AV_NOPTS_VALUE) printf("NO PTS on PID %d!\n", pkt.stream_index); -//printf("PTS=%lld DTS=%lld\n", pkt.pts, pkt.dts); /* see what stream we got a packet for */ if(pkt.stream_index == p->audio_pid && pkt.pts != AV_NOPTS_VALUE) { -//printf("decode: got audio packet\n"); pts = pkt.pts / audio_time_base; data = pkt.data; size = pkt.size; @@ -306,7 +302,6 @@ audio_frame = new_AudioFrameListItem(); af = &audio_frame->item; used = avcodec_decode_audio(audio_codec_ctx, af->data, &af->size, data, size); -//printf("decode audio: pts=%f used=%d (size=%d) audio_size=%d\n", pts, used, size, af->size); data += used; size -= used; if(af->size > 0) @@ -328,7 +323,6 @@ } else if(pkt.stream_index == p->video_pid && pkt.dts != AV_NOPTS_VALUE) { -//printf("decode: got video packet\n"); (void) avcodec_decode_video(video_codec_ctx, frame, &got_picture, pkt.data, pkt.size); if(got_picture) { @@ -337,14 +331,13 @@ pthread_mutex_lock(&p->videoq_lock); LIST_APPEND(&p->videoq, video_frame); pthread_mutex_unlock(&p->videoq_lock); -//printf("decode: got video frame: pts=%f (real pts=%f) width=%d height=%d\n", pts, pkt.pts / video_time_base, video_codec_ctx->width, video_codec_ctx->height); /* don't want one thread hogging the CPU time */ pthread_yield(); } } else { -//printf("decode: got unknown/untimed packet\n"); + verbose("MHEGStreamPlayer: decoder got unexpected/untimed packet"); } av_free_packet(&pkt); } @@ -466,10 +459,10 @@ */ drop_frame = (usecs < 0); if(drop_frame) + { verbose("MHEGStreamPlayer: dropped frame %u (usecs=%d)", nframes, usecs); -//if(drop_frame) -//printf("dropped frame %d: pts=%f last_pts=%f last_time=%lld this_time=%lld usecs=%d\n", nframes, vf->pts, last_pts, last_time, this_time, usecs); - if(!drop_frame) + } + else { /* scale the next frame if necessary */ pthread_mutex_lock(&p->video->inst.scaled_lock); @@ -499,7 +492,6 @@ { /* how many usecs do we need to wait */ usecs = this_time - now; -//printf("last_time=%lld this_time=%lld now=%lld sleep=%d\n", last_time, this_time, now, usecs); if(usecs > 0) thread_usleep(usecs); /* remember when we should have displayed this frame */ @@ -512,8 +504,6 @@ } /* remember the time stamp for this frame */ last_pts = vf->pts; -//now=av_gettime(); -//printf("display frame %d: pts=%f this_time=%lld real_time=%lld (diff=%lld)\n", nframes, vf->pts, last_time, now, now-last_time); /* origin of VideoClass */ pthread_mutex_lock(&p->video->inst.bbox_lock); out_x = p->video->inst.Position.x_position; @@ -567,8 +557,6 @@ snd_pcm_format_t format = 0; /* keep the compiler happy */ unsigned int rate; unsigned int channels; -// int64_t now; -// unsigned int nframes = 0; if(!p->have_audio) return NULL; @@ -661,8 +649,6 @@ pthread_yield(); continue; } -//now=av_gettime(); -//printf("audio: addSamples %d: pts=%f time=%lld\n", ++nframes, af->pts, now); /* TODO */ /* need to make sure pts is what we expect */ /* if we missed decoding a sample, play silence */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-12 18:05:52
|
Revision: 98 Author: skilvington Date: 2006-06-12 11:05:47 -0700 (Mon, 12 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=98&view=rev Log Message: ----------- no need for rate hack Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-12 16:18:28 UTC (rev 97) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-12 18:05:47 UTC (rev 98) @@ -628,9 +628,6 @@ verbose("MHEGStreamPlayer: audio params: format=%d rate=%d channels=%d", format, rate, channels); -/* TODO */ -/* hmmm... audio_time_base issue? */ -rate=(rate*10)/9; (void) MHEGAudioOutput_setParams(&ao, format, rate, channels); /* until we are told to stop */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-13 15:55:05
|
Revision: 107 Author: skilvington Date: 2006-06-13 08:54:52 -0700 (Tue, 13 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=107&view=rev Log Message: ----------- take account of audio sample format Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-13 15:11:41 UTC (rev 106) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-13 15:54:52 UTC (rev 107) @@ -315,8 +315,13 @@ if(af->size > 0) { af->pts = pts; - /* 16-bit samples, but af->size is in bytes */ - pts += (af->size / 2.0) / (audio_codec_ctx->channels * audio_codec_ctx->sample_rate); + /* 16 or 32-bit samples, but af->size is in bytes */ + if(audio_codec_ctx->sample_fmt == SAMPLE_FMT_S16) + pts += (af->size / 2.0) / (audio_codec_ctx->channels * audio_codec_ctx->sample_rate); + else if(audio_codec_ctx->sample_fmt == SAMPLE_FMT_S32) + pts += (af->size / 4.0) / (audio_codec_ctx->channels * audio_codec_ctx->sample_rate); + else + fatal("Unsupported audio sample format (%d)", audio_codec_ctx->sample_fmt); pthread_mutex_lock(&p->audioq_lock); LIST_APPEND(&p->audioq, audio_frame); pthread_mutex_unlock(&p->audioq_lock); @@ -557,7 +562,7 @@ /* * audio thread - * takes audio samples of the audioq and feeds them into the sound card as fast as possible + * takes audio samples off the audioq and feeds them into the sound card as fast as possible * MHEGAudioOuput_addSamples() will block while the sound card buffer is full */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-14 12:36:35
|
Revision: 112 Author: skilvington Date: 2006-06-14 05:36:16 -0700 (Wed, 14 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=112&view=rev Log Message: ----------- stop audio thread hanging Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 10:24:47 UTC (rev 111) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 12:36:16 UTC (rev 112) @@ -606,6 +606,9 @@ done = false; while(!done) { + /* do we need to bomb out early */ + if(p->stop) + return NULL; /* what PTS are we looking for */ now_time = av_gettime(); now_pts = base_pts + ((now_time - base_time) / 1000000.0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-14 13:20:52
|
Revision: 113 Author: skilvington Date: 2006-06-14 06:20:45 -0700 (Wed, 14 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=113&view=rev Log Message: ----------- avoid potential NULL ptr dereference Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 12:36:16 UTC (rev 112) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 13:20:45 UTC (rev 113) @@ -427,6 +427,7 @@ /* wake up the audio thread */ if(p->have_audio) set_avsync_base(p, 0.0, 0); + verbose("MHEGStreamPlayer: video thread stopped before any output"); return NULL; } @@ -608,7 +609,10 @@ { /* do we need to bomb out early */ if(p->stop) + { + verbose("MHEGStreamPlayer: audio thread stopped before any output"); return NULL; + } /* what PTS are we looking for */ now_time = av_gettime(); now_pts = base_pts + ((now_time - base_time) / 1000000.0); @@ -637,6 +641,13 @@ /* wait until we have some audio frames buffered up */ do { + /* do we need to bomb out early */ + if(p->stop) + { + verbose("MHEGStreamPlayer: audio thread stopped before any output"); + return NULL; + } + /* see how many frames we have buffered so far */ pthread_mutex_lock(&p->audioq_lock); if(p->audioq != NULL) buffered = p->audioq->prev->item.pts - p->audioq->item.pts; @@ -648,7 +659,7 @@ if(buffered < INIT_AUDIO_BUFFER_WAIT) pthread_yield(); } - while(!p->stop && buffered < INIT_AUDIO_BUFFER_WAIT); + while(buffered < INIT_AUDIO_BUFFER_WAIT); /* the time that we played the first frame */ base_time = av_gettime(); pthread_mutex_lock(&p->audioq_lock); @@ -656,10 +667,6 @@ pthread_mutex_unlock(&p->audioq_lock); } - /* do we need to bomb out early */ - if(p->stop) - return NULL; - /* even if this fails, we still need to consume the audioq */ (void) MHEGAudioOutput_init(&ao); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-14 22:30:13
|
Revision: 117 Author: skilvington Date: 2006-06-14 15:29:58 -0700 (Wed, 14 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=117&view=rev Log Message: ----------- make sure we only decode streams if they have been set Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 21:57:51 UTC (rev 116) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 22:29:58 UTC (rev 117) @@ -271,7 +271,7 @@ verbose("MHEGStreamPlayer: decode thread started"); - if(p->video_pid != -1) + if(p->have_video && p->video_pid != -1) { if((video_codec_ctx = avcodec_alloc_context()) == NULL) fatal("Out of memory"); @@ -283,7 +283,7 @@ verbose("MHEGStreamPlayer: Video: stream type=%d codec=%s", p->video_type, codec->name); } - if(p->audio_pid != -1) + if(p->have_audio && p->audio_pid != -1) { if((audio_codec_ctx = avcodec_alloc_context()) == NULL) fatal("Out of memory"); @@ -309,7 +309,7 @@ if(mpegts_demux_frame(tsdemux, &pkt) < 0) continue; /* see what stream we got a packet for */ - if(pkt.stream_index == p->audio_pid && pkt.pts != AV_NOPTS_VALUE) + if(p->have_audio && pkt.stream_index == p->audio_pid && pkt.pts != AV_NOPTS_VALUE) { pts = pkt.pts / audio_time_base; data = pkt.data; @@ -343,7 +343,7 @@ /* don't want one thread hogging the CPU time */ pthread_yield(); } - else if(pkt.stream_index == p->video_pid && pkt.dts != AV_NOPTS_VALUE) + else if(p->have_video && pkt.stream_index == p->video_pid && pkt.dts != AV_NOPTS_VALUE) { (void) avcodec_decode_video(video_codec_ctx, frame, &got_picture, pkt.data, pkt.size); if(got_picture) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2007-02-12 19:26:04
|
Revision: 211
http://svn.sourceforge.net/redbutton/?rev=211&view=rev
Author: skilvington
Date: 2007-02-12 11:25:57 -0800 (Mon, 12 Feb 2007)
Log Message:
-----------
show service ID in verbose message
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2007-02-12 17:31:11 UTC (rev 210)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2007-02-12 19:25:57 UTC (rev 211)
@@ -179,7 +179,7 @@
void
MHEGStreamPlayer_play(MHEGStreamPlayer *p)
{
- verbose("MHEGStreamPlayer_play: audio_tag=%d video_tag=%d", p->audio_tag, p->video_tag);
+ verbose("MHEGStreamPlayer_play: service_id=%d audio_tag=%d video_tag=%d", p->service_id, p->audio_tag, p->video_tag);
/* make sure the VideoClass doesn't try to draw anything yet */
if(p->video != NULL)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2007-05-23 10:41:05
|
Revision: 309
http://svn.sourceforge.net/redbutton/?rev=309&view=rev
Author: skilvington
Date: 2007-05-23 03:41:01 -0700 (Wed, 23 May 2007)
Log Message:
-----------
don't flood verbose log with duplicate messages
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2007-05-23 10:38:19 UTC (rev 308)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2007-05-23 10:41:01 UTC (rev 309)
@@ -518,6 +518,7 @@
unsigned int vid_height;
VideoFrame *vf;
double buffered;
+ double last_buffered;
double last_pts;
int64_t last_time, this_time, now;
int usecs;
@@ -534,6 +535,7 @@
fatal("video_thread: VideoClass is NULL");
/* wait until we have some frames buffered up */
+ last_buffered = -1.0;
do
{
pthread_mutex_lock(&p->videoq_lock);
@@ -542,7 +544,9 @@
else
buffered = 0.0;
pthread_mutex_unlock(&p->videoq_lock);
- verbose("MHEGStreamPlayer: buffered %f seconds of video", buffered);
+ if(buffered != last_buffered)
+ verbose("MHEGStreamPlayer: buffered %f seconds of video", buffered);
+ last_buffered = buffered;
/* let the decoder have a go */
if(buffered < INIT_VIDEO_BUFFER_WAIT)
pthread_yield();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-11 08:44:15
|
Revision: 487
http://redbutton.svn.sourceforge.net/redbutton/?rev=487&view=rev
Author: skilvington
Date: 2008-06-11 01:44:13 -0700 (Wed, 11 Jun 2008)
Log Message:
-----------
don't use deprecated ffmpeg audio functions. patch from Andrea
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-11 08:36:45 UTC (rev 486)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-11 08:44:13 UTC (rev 487)
@@ -102,7 +102,7 @@
af->item.pts = AV_NOPTS_VALUE;
- af->item.size = 0;
+ af->item.size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
return af;
}
@@ -433,7 +433,8 @@
{
audio_frame = new_AudioFrameListItem();
af = &audio_frame->item;
- used = avcodec_decode_audio(audio_codec_ctx, af->data, &af->size, data, size);
+
+ used = avcodec_decode_audio2(audio_codec_ctx, af->data, &af->size, data, size);
data += used;
size -= used;
if(af->size > 0)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-11 09:10:17
|
Revision: 488
http://redbutton.svn.sourceforge.net/redbutton/?rev=488&view=rev
Author: skilvington
Date: 2008-06-11 02:10:16 -0700 (Wed, 11 Jun 2008)
Log Message:
-----------
whitespace
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-11 08:44:13 UTC (rev 487)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-11 09:10:16 UTC (rev 488)
@@ -433,7 +433,6 @@
{
audio_frame = new_AudioFrameListItem();
af = &audio_frame->item;
-
used = avcodec_decode_audio2(audio_codec_ctx, af->data, &af->size, data, size);
data += used;
size -= used;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-17 08:35:27
|
Revision: 492
http://redbutton.svn.sourceforge.net/redbutton/?rev=492&view=rev
Author: skilvington
Date: 2008-06-17 01:35:20 -0700 (Tue, 17 Jun 2008)
Log Message:
-----------
fix error message
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-16 16:16:06 UTC (rev 491)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-17 08:35:20 UTC (rev 492)
@@ -383,7 +383,7 @@
{
/* assert */
if(p != &player)
- fatal("MHEGStreamPlayer_stop: p=%p, &player=%p", *p, &player);
+ fatal("MHEGStreamPlayer_stop: p=%p, &player=%p", p, &player);
verbose("MHEGStreamPlayer_stop");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-17 08:41:56
|
Revision: 493
http://redbutton.svn.sourceforge.net/redbutton/?rev=493&view=rev
Author: skilvington
Date: 2008-06-17 01:41:52 -0700 (Tue, 17 Jun 2008)
Log Message:
-----------
don't need to be able to add/remove a/v components when the stream is playing
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-17 08:35:20 UTC (rev 492)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-17 08:41:52 UTC (rev 493)
@@ -229,7 +229,6 @@
if(p != &player)
fatal("MHEGStreamPlayer_setVideoStream: p=%p, &player=%p", p, &player);
-/* TODO need to be able to handle this */
/* assert */
if(p->playing)
fatal("MHEGStreamPlayer_setVideoStream: trying to set stream while playing");
@@ -270,7 +269,6 @@
if(p != &player)
fatal("MHEGStreamPlayer_setAudioStream: p=%p, &player=%p", p, &player);
-/* TODO need to be able to handle this */
/* assert */
if(p->playing)
fatal("MHEGStreamPlayer_setAudioStream: trying to set stream while playing");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2008-06-17 16:05:41
|
Revision: 494
http://redbutton.svn.sourceforge.net/redbutton/?rev=494&view=rev
Author: skilvington
Date: 2008-06-17 09:05:20 -0700 (Tue, 17 Jun 2008)
Log Message:
-----------
don't try to play a stream if it is already playing
Modified Paths:
--------------
redbutton-browser/trunk/MHEGStreamPlayer.c
Modified: redbutton-browser/trunk/MHEGStreamPlayer.c
===================================================================
--- redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-17 08:41:52 UTC (rev 493)
+++ redbutton-browser/trunk/MHEGStreamPlayer.c 2008-06-17 16:05:20 UTC (rev 494)
@@ -314,6 +314,12 @@
verbose("MHEGStreamPlayer_play: service_id=%d audio_tag=%d video_tag=%d", p->service_id, p->audio_tag, p->video_tag);
+ if(p->playing)
+ {
+ verbose("MHEGStreamPlayer_play: already playing");
+ return;
+ }
+
/* make sure the VideoClass doesn't try to draw anything yet */
if(p->video != NULL)
p->video->inst.no_video = true;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ski...@us...> - 2006-05-18 18:14:29
|
Revision: 69 Author: skilvington Date: 2006-05-18 11:14:23 -0700 (Thu, 18 May 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=69&view=rev Log Message: ----------- stop one thread hogging the CPU Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-05-17 14:12:37 UTC (rev 68) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-05-18 18:14:23 UTC (rev 69) @@ -149,6 +149,13 @@ if(pthread_create(&p->video_tid, NULL, video_thread, p) != 0) fatal("Unable to create video output thread"); +//{ +// whole machine locks up if you do this +// struct sched_param sp = {1}; +// if(pthread_setschedparam(p->video_tid, SCHED_RR, &sp) != 0) +// error("MHEGStreamPlayer: unable to give video thread realtime priority"); +//} + return; } @@ -262,8 +269,11 @@ pthread_mutex_lock(&p->videoq_lock); p->videoq_len ++; LIST_APPEND(&p->videoq, video_frame); +//printf("decode_thread: add frame: len=%u\n", p->videoq_len); pthread_mutex_unlock(&p->videoq_lock); //printf("decode: got video frame: pts=%f (real pts=%f) width=%d height=%d\n", pts, pkt.pts / video_time_base, video_codec_ctx->width, video_codec_ctx->height); + /* don't want one thread hogging the CPU time */ + pthread_yield(); } } else @@ -494,12 +504,15 @@ } /* we can delete the frame from the queue now */ pthread_mutex_lock(&p->videoq_lock); +//printf("video_thread: free frame: len=%u\n", p->videoq_len); /* assert */ if(p->videoq_len == 0) fatal("video_thread: videoq_len is 0"); p->videoq_len --; LIST_FREE_HEAD(&p->videoq, VideoFrame, free_VideoFrameListItem); pthread_mutex_unlock(&p->videoq_lock); + /* don't want one thread hogging the CPU time */ + pthread_yield(); } if(resize_ctx != NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-05-22 12:49:33
|
Revision: 72 Author: skilvington Date: 2006-05-22 05:49:25 -0700 (Mon, 22 May 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=72&view=rev Log Message: ----------- cope with video changing size mid-stream Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-05-22 08:31:19 UTC (rev 71) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-05-22 12:49:25 UTC (rev 72) @@ -354,19 +354,6 @@ /* initialise the video output method */ MHEGVideoOutput_init(&vo); - /* size of first frame, no need to lock as item won't change */ - out_width = p->videoq->item.width; - out_height = p->videoq->item.height; -/* TODO */ -/* use scaled values if ScaleVideo has been called */ - /* scale up if fullscreen */ - if(d->fullscreen) - { - out_width = (out_width * d->xres) / MHEG_XRES; - out_height = (out_height * d->yres) / MHEG_YRES; - } - - /* the time that we displayed the previous frame */ last_time = 0; last_pts = 0; @@ -413,6 +400,16 @@ if(!drop_frame) { /* scale the next frame if necessary */ + out_width = vf->width; + out_height = vf->height; +/* TODO */ +/* use scaled values if ScaleVideo has been called */ + /* scale up if fullscreen */ + if(d->fullscreen) + { + out_width = (out_width * d->xres) / MHEG_XRES; + out_height = (out_height * d->yres) / MHEG_YRES; + } MHEGVideoOutput_prepareFrame(&vo, vf, out_width, out_height); /* wait until it's time to display the frame */ now = av_gettime(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-08 11:46:08
|
Revision: 89 Author: skilvington Date: 2006-06-08 04:01:51 -0700 (Thu, 08 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=89&view=rev Log Message: ----------- finally get audio PTS correct Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-08 09:25:27 UTC (rev 88) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-08 11:01:51 UTC (rev 89) @@ -291,7 +291,7 @@ { #if 0 //printf("decode: got audio packet\n"); - pts = pkt.pts; + pts = pkt.pts / audio_time_base; data = pkt.data; size = pkt.size; while(size > 0) @@ -299,13 +299,14 @@ audio_frame = new_AudioFrameListItem(); af = &audio_frame->item; used = avcodec_decode_audio(audio_codec_ctx, af->data, &af->size, data, size); -//printf("decode audio: pts=%f used=%d (size=%d) audio_size=%d\n", pts / audio_time_base, used, size, af->size); +//printf("decode audio: pts=%f used=%d (size=%d) audio_size=%d\n", pts, used, size, af->size); data += used; size -= used; if(af->size > 0) { - pts += (af->size * 1000.0) / ((audio_codec_ctx->channels * 2) * audio_codec_ctx->sample_rate); - af->pts = pts / audio_time_base; + af->pts = pts; + /* 16-bit samples, but af->size is in bytes */ + pts += (af->size / 2.0) / (audio_codec_ctx->channels * audio_codec_ctx->sample_rate); pthread_mutex_lock(&p->audioq_lock); LIST_APPEND(&p->audioq, audio_frame); pthread_mutex_unlock(&p->audioq_lock); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-12 16:18:36
|
Revision: 97 Author: skilvington Date: 2006-06-12 09:18:28 -0700 (Mon, 12 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=97&view=rev Log Message: ----------- remove unneeded \n's Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-12 12:36:10 UTC (rev 96) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-12 16:18:28 UTC (rev 97) @@ -263,7 +263,7 @@ fatal("Unsupported video codec"); if(avcodec_open(video_codec_ctx, codec) < 0) fatal("Unable to open video codec"); - verbose("MHEGStreamPlayer: Video: stream type=%d codec=%s\n", p->video_type, codec->name); + verbose("MHEGStreamPlayer: Video: stream type=%d codec=%s", p->video_type, codec->name); } if(p->audio_pid != -1) @@ -275,7 +275,7 @@ fatal("Unsupported audio codec"); if(avcodec_open(audio_codec_ctx, codec) < 0) fatal("Unable to open audio codec"); - verbose("MHEGStreamPlayer: Audio: stream type=%d codec=%s\n", p->audio_type, codec->name); + verbose("MHEGStreamPlayer: Audio: stream type=%d codec=%s", p->audio_type, codec->name); /* let the audio ouput thread know what the sample rate, etc are */ p->audio_codec = audio_codec_ctx; } @@ -626,7 +626,7 @@ rate = p->audio_codec->sample_rate; channels = p->audio_codec->channels; - verbose("MHEGStreamPlayer: audio params: format=%d rate=%d channels=%d\n", format, rate, channels); + verbose("MHEGStreamPlayer: audio params: format=%d rate=%d channels=%d", format, rate, channels); /* TODO */ /* hmmm... audio_time_base issue? */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-14 13:22:42
|
Revision: 114 Author: skilvington Date: 2006-06-14 06:22:32 -0700 (Wed, 14 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=114&view=rev Log Message: ----------- be really paranoid about race conditions Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 13:20:45 UTC (rev 113) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 13:22:32 UTC (rev 114) @@ -667,6 +667,13 @@ pthread_mutex_unlock(&p->audioq_lock); } + /* in case the flag got set since we last checked */ + if(p->stop) + { + verbose("MHEGStreamPlayer: audio thread stopped before any output"); + return NULL; + } + /* even if this fails, we still need to consume the audioq */ (void) MHEGAudioOutput_init(&ao); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-14 14:06:16
|
Revision: 115 Author: skilvington Date: 2006-06-14 07:05:57 -0700 (Wed, 14 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=115&view=rev Log Message: ----------- forget audio and video streams on stop Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 13:22:32 UTC (rev 114) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 14:05:57 UTC (rev 115) @@ -226,6 +226,9 @@ p->ts = NULL; } + p->have_video = false; + p->have_audio = false; + p->playing = false; return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ski...@us...> - 2006-06-14 21:57:56
|
Revision: 116 Author: skilvington Date: 2006-06-14 14:57:51 -0700 (Wed, 14 Jun 2006) ViewCVS: http://svn.sourceforge.net/redbutton/?rev=116&view=rev Log Message: ----------- paranoia Modified Paths: -------------- redbutton-browser/trunk/MHEGStreamPlayer.c Modified: redbutton-browser/trunk/MHEGStreamPlayer.c =================================================================== --- redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 14:05:57 UTC (rev 115) +++ redbutton-browser/trunk/MHEGStreamPlayer.c 2006-06-14 21:57:51 UTC (rev 116) @@ -154,6 +154,8 @@ p->audio_pid = -1; p->audio_type = -1; + p->audio_codec = NULL; + return; } @@ -226,8 +228,12 @@ p->ts = NULL; } + /* forget any existing streams */ p->have_video = false; p->have_audio = false; + p->video = NULL; + p->audio = NULL; + p->audio_codec = NULL; p->playing = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |