diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-04-26 17:44:48 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-04-26 17:44:48 +0300 |
commit | 6a7956a11bd8849d0af22fca23de89b42a49788b (patch) | |
tree | 8fc54851aab158e472439527f4739473f2168900 | |
parent | e6048e1830899ab0e4ca8d197569e0db885ec6fd (diff) | |
parent | 91ec3ae682ce9a3235b12ee4026b1902b8a0cc7c (diff) | |
download | mpv-6a7956a11bd8849d0af22fca23de89b42a49788b.tar.bz2 mpv-6a7956a11bd8849d0af22fca23de89b42a49788b.tar.xz |
Merge svn changes up to r30972
-rw-r--r-- | cpudetect.c | 8 | ||||
-rw-r--r-- | libmpcodecs/vd_raw.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_y4m.c | 40 |
3 files changed, 29 insertions, 21 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; 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; diff --git a/libmpdemux/demux_y4m.c b/libmpdemux/demux_y4m.c index 8ac8e4e7e9..31dec39386 100644 --- a/libmpdemux/demux_y4m.c +++ b/libmpdemux/demux_y4m.c @@ -75,6 +75,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 @@ -86,6 +87,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); @@ -135,15 +144,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]; @@ -227,8 +234,6 @@ 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->biSize=40; sh->bih->biWidth = sh->disp_w; sh->bih->biHeight = sh->disp_h; @@ -237,14 +242,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; } |