From ce67a0caf7b6b5188e4d5b5bbf7f33182b0798f4 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 27 Mar 2010 15:35:59 +0000 Subject: [PATCH 1/4] Use calloc instead of malloc+memset git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30969 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_y4m.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libmpdemux/demux_y4m.c b/libmpdemux/demux_y4m.c index 76eb0adc35..2a022d3eea 100644 --- a/libmpdemux/demux_y4m.c +++ b/libmpdemux/demux_y4m.c @@ -228,8 +228,7 @@ static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ sh->format = mmioFOURCC('Y', 'V', '1', '2'); - sh->bih=malloc(sizeof(BITMAPINFOHEADER)); - memset(sh->bih,0,sizeof(BITMAPINFOHEADER)); + sh->bih=calloc(1, sizeof(BITMAPINFOHEADER)); sh->bih->biSize=40; sh->bih->biWidth = sh->disp_w; sh->bih->biHeight = sh->disp_h; From 67dcbed681c08cb0594fc661adbf538f541268d7 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 27 Mar 2010 16:01:22 +0000 Subject: [PATCH 2/4] Support concatenated YUV4MPEG files. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30970 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_y4m.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/libmpdemux/demux_y4m.c b/libmpdemux/demux_y4m.c index 2a022d3eea..5064a07ed7 100644 --- a/libmpdemux/demux_y4m.c +++ b/libmpdemux/demux_y4m.c @@ -76,6 +76,7 @@ static int y4m_check_file(demuxer_t* demuxer){ return DEMUXER_TYPE_Y4M; } +static void read_streaminfo(demuxer_t *demuxer); // return value: // 0 = EOF or no stream found @@ -87,6 +88,14 @@ static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) { y4m_frame_info_t fi; unsigned char *buf[3]; int err, size; + int nextc; + + nextc = stream_read_char(demux->stream); + stream_skip(demux->stream, -1); + if (nextc == 'Y') { + read_streaminfo(demux); + demux->seekable = 0; + } y4m_init_frame_info(&fi); @@ -136,15 +145,13 @@ static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) { return 1; } -static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ - y4m_priv_t* priv = demuxer->priv; +static void read_streaminfo(demuxer_t *demuxer) +{ + y4m_priv_t *priv = demuxer->priv; + sh_video_t *sh = demuxer->video->sh; y4m_ratio_t ratio; - sh_video_t* sh=new_sh_video(demuxer,0); int err; - priv->framenum = 0; - priv->si = malloc(sizeof(y4m_stream_info_t)); - if (priv->is_older) { char buf[4]; @@ -228,7 +235,6 @@ static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ sh->format = mmioFOURCC('Y', 'V', '1', '2'); - sh->bih=calloc(1, sizeof(BITMAPINFOHEADER)); sh->bih->biSize=40; sh->bih->biWidth = sh->disp_w; sh->bih->biHeight = sh->disp_h; @@ -237,14 +243,25 @@ static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ sh->bih->biCompression=sh->format; sh->bih->biSizeImage=sh->bih->biWidth*sh->bih->biHeight*3/2; /* YV12 */ + mp_msg(MSGT_DEMUX, MSGL_INFO, "YUV4MPEG2 Video stream %d size: display: %dx%d, codec: %ux%u\n", + demuxer->video->id, sh->disp_w, sh->disp_h, sh->bih->biWidth, + sh->bih->biHeight); +} + +static demuxer_t* demux_open_y4m(demuxer_t* demuxer){ + y4m_priv_t* priv = demuxer->priv; + sh_video_t* sh=new_sh_video(demuxer,0); + + priv->framenum = 0; + priv->si = malloc(sizeof(y4m_stream_info_t)); + + sh->bih=calloc(1, sizeof(BITMAPINFOHEADER)); + demuxer->video->sh=sh; sh->ds=demuxer->video; demuxer->video->id=0; - - mp_msg(MSGT_DEMUX, MSGL_INFO, "YUV4MPEG2 Video stream %d size: display: %dx%d, codec: %ux%u\n", - demuxer->video->id, sh->disp_w, sh->disp_h, sh->bih->biWidth, - sh->bih->biHeight); + read_streaminfo(demuxer); return demuxer; } From 55089a39865c03b3f5cd4452045cc3442a2651f8 Mon Sep 17 00:00:00 2001 From: reimar Date: Sat, 27 Mar 2010 19:45:59 +0000 Subject: [PATCH 3/4] Leave disabling SSE to the check_os_katmai_support always regardless of OS, it can already handle all cases, will always print a proper warning and probably fixes SSE being disabled on x86_64 Solaris systems. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30971 b3059339-0415-0410-9bf9-f77b7e298cf2 --- cpudetect.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cpudetect.c b/cpudetect.c index c95aceea6c..fa4c9ce4db 100644 --- a/cpudetect.c +++ b/cpudetect.c @@ -195,18 +195,10 @@ void GetCpuCaps( CpuCaps *caps) #endif /* FIXME: Does SSE2 need more OS support, too? */ -#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \ - || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \ - || defined(__APPLE__) || defined(__CYGWIN__) || defined(__MINGW32__) \ - || defined(__OS2__) if (caps->hasSSE) check_os_katmai_support(); if (!caps->hasSSE) caps->hasSSE2 = 0; -#else - caps->hasSSE=0; - caps->hasSSE2 = 0; -#endif // caps->has3DNow=1; // caps->hasMMX2 = 0; // caps->hasMMX = 0; From 91ec3ae682ce9a3235b12ee4026b1902b8a0cc7c Mon Sep 17 00:00:00 2001 From: reimar Date: Sun, 28 Mar 2010 00:08:28 +0000 Subject: [PATCH 4/4] Fix crash with incomplete yuv2 frames. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30972 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/vd_raw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmpcodecs/vd_raw.c b/libmpcodecs/vd_raw.c index 4e8ccd1446..4b18ab301e 100644 --- a/libmpcodecs/vd_raw.c +++ b/libmpcodecs/vd_raw.c @@ -124,7 +124,7 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ #endif } frame_size=mpi->stride[0]*mpi->h; - if (format == MKTAG('y', 'u', 'v', '2')) { + if (len >= frame_size && format == MKTAG('y', 'u', 'v', '2')) { int i; for (i = 1; i < frame_size; i += 2) mpi->planes[0][i] ^= 128;