From d97ee3033df7f7be52c44f4cf3647956f26175bc Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 3 Feb 2010 17:50:18 +0000 Subject: Fix argument order for lseek, fixes cookie loading in Windows and in general everywhere where SEEK_SET != 0. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30496 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/cookies.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stream/cookies.c b/stream/cookies.c index 6c8d5013aa..b7e89c79e6 100644 --- a/stream/cookies.c +++ b/stream/cookies.c @@ -133,7 +133,7 @@ static char *load_file(const char *filename, off_t * length) return NULL; } - lseek(fd, SEEK_SET, 0); + lseek(fd, 0, SEEK_SET); if (!(buffer = malloc(*length + 1))) { mp_msg(MSGT_NETWORK, MSGL_V, "Could not malloc."); -- cgit v1.2.3 From bc9eaa540474e1537908864344641ee4ea7c4294 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 3 Feb 2010 21:12:23 +0000 Subject: Use vo_x11_clearwindow instead of XClearWindow, both for consistency and also because vo_x11_clearwindow works as intended also when the background is set to None. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30497 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/x11_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 3dd032178c..871ab62940 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -1120,7 +1120,7 @@ void vo_x11_create_vo_window(XVisualInfo *vis, int x, int y, if (!vo_border) vo_x11_decoration(mDisplay, vo_window, 0); // map window XMapWindow(mDisplay, vo_window); - XClearWindow(mDisplay, vo_window); + vo_x11_clearwindow(mDisplay, vo_window); // wait for map do { XNextEvent(mDisplay, &xev); -- cgit v1.2.3 From 8613396aa050e5ff67e15f1cbf10e83092d5811b Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 3 Feb 2010 22:32:48 +0000 Subject: Add support for FFmpeg's rtsp dummy URL-with-pseudo-demuxer scheme. ffmpeg://rtsp://... will play a rtsp stream via FFmpeg. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30498 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_lavf.c | 13 +++++++++---- stream/stream_ffmpeg.c | 10 +++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index fe6aac4273..6d77cb7640 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -155,13 +155,15 @@ static int lavf_check_file(demuxer_t *demuxer){ } probe_data_size = stream_read(demuxer->stream, priv->buffer, PROBE_BUF_SIZE); - if(probe_data_size <= 0) + if(probe_data_size < 0) return 0; avpd.filename= demuxer->stream->url; + if (!strncmp(avpd.filename, "ffmpeg://", 9)) + avpd.filename += 9; avpd.buf= priv->buffer; avpd.buf_size= probe_data_size; - priv->avif= av_probe_input_format(&avpd, 1); + priv->avif= av_probe_input_format(&avpd, probe_data_size > 0); if(!priv->avif){ mp_msg(MSGT_HEADER,MSGL_V,"LAVF_check: no clue about this gibberish!\n"); return 0; @@ -458,9 +460,12 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ } } - if(demuxer->stream->url) + if(demuxer->stream->url) { + if (!strncmp(demuxer->stream->url, "ffmpeg://rtsp:", 14)) + strncpy(mp_filename, demuxer->stream->url + 9, sizeof(mp_filename)-3); + else strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3); - else + } else strncpy(mp_filename + 3, "foobar.dummy", sizeof(mp_filename)-3); priv->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0, diff --git a/stream/stream_ffmpeg.c b/stream/stream_ffmpeg.c index d64300022e..1d959b2907 100644 --- a/stream/stream_ffmpeg.c +++ b/stream/stream_ffmpeg.c @@ -75,6 +75,7 @@ static int open_f(stream_t *stream, int mode, void *opts, int *file_format) URLContext *ctx = NULL; int res = STREAM_ERROR; int64_t size; + int dummy; av_register_all(); if (mode == STREAM_READ) @@ -95,25 +96,28 @@ static int open_f(stream_t *stream, int mode, void *opts, int *file_format) } if (!strncmp(filename, prefix, strlen(prefix))) filename += strlen(prefix); + dummy = !strncmp(filename, "rtsp:", 5); mp_msg(MSGT_OPEN, MSGL_V, "[ffmpeg] Opening %s\n", filename); - if (url_open(&ctx, filename, flags) < 0) + if (!dummy && url_open(&ctx, filename, flags) < 0) goto out; stream->priv = ctx; - size = url_filesize(ctx); + size = dummy ? 0 : url_filesize(ctx); if (size >= 0) stream->end_pos = size; stream->type = STREAMTYPE_FILE; stream->seek = seek; - if (ctx->is_streamed) { + if (dummy || ctx->is_streamed) { stream->type = STREAMTYPE_STREAM; stream->seek = NULL; } + if (!dummy) { stream->fill_buffer = fill_buffer; stream->write_buffer = write_buffer; stream->control = control; stream->close = close_f; + } res = STREAM_OK; out: -- cgit v1.2.3 From 9d9b7a1e229e6bbff6616a8fc8320bcad990e558 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 3 Feb 2010 22:33:35 +0000 Subject: Reindent git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30499 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_lavf.c | 2 +- stream/stream_ffmpeg.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 6d77cb7640..463a3b4991 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -464,7 +464,7 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ if (!strncmp(demuxer->stream->url, "ffmpeg://rtsp:", 14)) strncpy(mp_filename, demuxer->stream->url + 9, sizeof(mp_filename)-3); else - strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3); + strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3); } else strncpy(mp_filename + 3, "foobar.dummy", sizeof(mp_filename)-3); diff --git a/stream/stream_ffmpeg.c b/stream/stream_ffmpeg.c index 1d959b2907..30d63001d0 100644 --- a/stream/stream_ffmpeg.c +++ b/stream/stream_ffmpeg.c @@ -113,10 +113,10 @@ static int open_f(stream_t *stream, int mode, void *opts, int *file_format) stream->seek = NULL; } if (!dummy) { - stream->fill_buffer = fill_buffer; - stream->write_buffer = write_buffer; - stream->control = control; - stream->close = close_f; + stream->fill_buffer = fill_buffer; + stream->write_buffer = write_buffer; + stream->control = control; + stream->close = close_f; } res = STREAM_OK; -- cgit v1.2.3 From 78ecbc1e6f3c19ef6392dbaa492e7fb4fbd46edc Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 3 Feb 2010 22:36:47 +0000 Subject: Replace incorrect usage of strncpy. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30500 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_lavf.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 463a3b4991..03e617536c 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -37,6 +37,7 @@ #include "libavformat/avformat.h" #include "libavformat/avio.h" #include "libavutil/avutil.h" +#include "libavutil/avstring.h" #include "libavcodec/opt.h" #include "mp_taglists.h" @@ -462,11 +463,11 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ if(demuxer->stream->url) { if (!strncmp(demuxer->stream->url, "ffmpeg://rtsp:", 14)) - strncpy(mp_filename, demuxer->stream->url + 9, sizeof(mp_filename)-3); + av_strlcpy(mp_filename, demuxer->stream->url + 9, sizeof(mp_filename)); else - strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3); + av_strlcat(mp_filename, demuxer->stream->url, sizeof(mp_filename)); } else - strncpy(mp_filename + 3, "foobar.dummy", sizeof(mp_filename)-3); + av_strlcat(mp_filename, "foobar.dummy", sizeof(mp_filename)); priv->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0, demuxer->stream, mp_read, NULL, mp_seek); -- cgit v1.2.3 From 81b12851231914795c8b1670fbeb33d9668b5d35 Mon Sep 17 00:00:00 2001 From: stefano Date: Wed, 3 Feb 2010 23:46:00 +0000 Subject: Implement shuffle_bytes_abcd() functions and use them for shuffling bytes when converting between RGB32 variants. In particular fix the argb -> rgba and abgr -> bgra conversions. See the thread: Subject: [FFmpeg-devel] [RFC] RGB32 / BGR32 ethernal bug Date: Tue, 26 Jan 2010 01:06:18 +0100 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30501 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libswscale/rgb2rgb.c | 20 ++++++++++++++++++++ libswscale/rgb2rgb.h | 5 +++++ libswscale/swscale.c | 36 ++++++++++++++++++++++++++++++------ 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/libswscale/rgb2rgb.c b/libswscale/rgb2rgb.c index 1dc728ab9d..5230a777ac 100644 --- a/libswscale/rgb2rgb.c +++ b/libswscale/rgb2rgb.c @@ -442,3 +442,23 @@ void bgr8torgb8(const uint8_t *src, uint8_t *dst, long src_size) dst[i] = ((b<<1)&0x07) | ((g&0x07)<<3) | ((r&0x03)<<6); } } + +#define DEFINE_SHUFFLE_BYTES(a, b, c, d) \ +void shuffle_bytes_##a##b##c##d(const uint8_t *src, uint8_t *dst, long src_size) \ +{ \ + long i; \ + \ + for (i = 0; i < src_size; i+=4) { \ + dst[i + 0] = src[i + a]; \ + dst[i + 1] = src[i + b]; \ + dst[i + 2] = src[i + c]; \ + dst[i + 3] = src[i + d]; \ + } \ +} + +DEFINE_SHUFFLE_BYTES(0, 3, 2, 1); +DEFINE_SHUFFLE_BYTES(1, 2, 3, 0); +DEFINE_SHUFFLE_BYTES(2, 1, 0, 3); +DEFINE_SHUFFLE_BYTES(3, 0, 1, 2); +DEFINE_SHUFFLE_BYTES(3, 2, 1, 0); + diff --git a/libswscale/rgb2rgb.h b/libswscale/rgb2rgb.h index 740b04e1cb..386068b856 100644 --- a/libswscale/rgb2rgb.h +++ b/libswscale/rgb2rgb.h @@ -60,6 +60,11 @@ void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size); void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size); void bgr8torgb8 (const uint8_t *src, uint8_t *dst, long src_size); +void shuffle_bytes_0321(const uint8_t *src, uint8_t *dst, long src_size); +void shuffle_bytes_1230(const uint8_t *src, uint8_t *dst, long src_size); +void shuffle_bytes_2103(const uint8_t *src, uint8_t *dst, long src_size); +void shuffle_bytes_3012(const uint8_t *src, uint8_t *dst, long src_size); +void shuffle_bytes_3210(const uint8_t *src, uint8_t *dst, long src_size); void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); diff --git a/libswscale/swscale.c b/libswscale/swscale.c index ff68f344c3..689233c07b 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -1423,6 +1423,13 @@ static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], return srcSliceH; } +#define isRGBA32(x) ( \ + (x) == PIX_FMT_ARGB \ + || (x) == PIX_FMT_RGBA \ + || (x) == PIX_FMT_BGRA \ + || (x) == PIX_FMT_ABGR \ + ) + /* {RGB,BGR}{15,16,24,32,32_1} -> {RGB,BGR}{15,16,24,32} */ static int rgbToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]) @@ -1435,6 +1442,22 @@ static int rgbToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], const int dstId= c->dstFormatBpp >> 2; void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL; +#define CONV_IS(src, dst) (srcFormat == PIX_FMT_##src && dstFormat == PIX_FMT_##dst) + + if (isRGBA32(srcFormat) && isRGBA32(dstFormat)) { + if ( CONV_IS(ABGR, RGBA) + || CONV_IS(ARGB, BGRA) + || CONV_IS(BGRA, ARGB) + || CONV_IS(RGBA, ABGR)) conv = shuffle_bytes_3210; + else if (CONV_IS(ABGR, ARGB) + || CONV_IS(ARGB, ABGR)) conv = shuffle_bytes_0321; + else if (CONV_IS(ABGR, BGRA) + || CONV_IS(ARGB, RGBA)) conv = shuffle_bytes_1230; + else if (CONV_IS(BGRA, RGBA) + || CONV_IS(RGBA, BGRA)) conv = shuffle_bytes_2103; + else if (CONV_IS(BGRA, ABGR) + || CONV_IS(RGBA, ARGB)) conv = shuffle_bytes_3012; + } else /* BGR -> BGR */ if ( (isBGRinInt(srcFormat) && isBGRinInt(dstFormat)) || (isRGBinInt(srcFormat) && isRGBinInt(dstFormat))) { @@ -1470,7 +1493,6 @@ static int rgbToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], case 0x83: conv= rgb15tobgr32; break; case 0x84: conv= rgb16tobgr32; break; case 0x86: conv= rgb24tobgr32; break; - case 0x88: conv= rgb32tobgr32; break; } } @@ -1479,14 +1501,18 @@ static int rgbToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], sws_format_name(srcFormat), sws_format_name(dstFormat)); } else { const uint8_t *srcPtr= src[0]; - if(srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1) + uint8_t *dstPtr= dst[0]; + if ((srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1) && !isRGBA32(dstFormat)) srcPtr += ALT32_CORR; + if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat == PIX_FMT_BGR32_1) && !isRGBA32(srcFormat)) + dstPtr += ALT32_CORR; + if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0) - conv(srcPtr, dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + conv(srcPtr, dstPtr + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; - uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + dstPtr += dstStride[0]*srcSliceY; for (i=0; isrcW*srcBpp); @@ -1692,8 +1718,6 @@ void ff_get_unscaled_swscale(SwsContext *c) && srcFormat != PIX_FMT_RGB4_BYTE && dstFormat != PIX_FMT_RGB4_BYTE && srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK && srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE - && dstFormat != PIX_FMT_RGB32_1 - && dstFormat != PIX_FMT_BGR32_1 && srcFormat != PIX_FMT_RGB48LE && dstFormat != PIX_FMT_RGB48LE && srcFormat != PIX_FMT_RGB48BE && dstFormat != PIX_FMT_RGB48BE && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)))) -- cgit v1.2.3 From bc802c1e3efbe92cf653c415db5143291f096af4 Mon Sep 17 00:00:00 2001 From: komh Date: Thu, 4 Feb 2010 14:42:57 +0000 Subject: Audio buffer is too large so that it takes too long time to respond to audio control such as software volume control. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30502 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libao2/ao_kai.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libao2/ao_kai.c b/libao2/ao_kai.c index a52b60e0b5..cc0a3373a7 100644 --- a/libao2/ao_kai.c +++ b/libao2/ao_kai.c @@ -242,7 +242,7 @@ static int init(int rate, int channels, int format, int flags) ao_data.outburst = nBytesPerSample * OUTBURST_SAMPLES; ao_data.buffersize = m_kaiSpec.ulBufferSize; - m_nBufSize = (m_kaiSpec.ulBufferSize * m_kaiSpec.ulNumBuffers) << 3; + m_nBufSize = (m_kaiSpec.ulBufferSize * m_kaiSpec.ulNumBuffers) << 2; // multiple of CHUNK_SIZE m_nBufSize = (m_nBufSize / CHUNK_SIZE) * CHUNK_SIZE; -- cgit v1.2.3