summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-04-26 17:44:48 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-04-26 17:44:48 +0300
commit6a7956a11bd8849d0af22fca23de89b42a49788b (patch)
tree8fc54851aab158e472439527f4739473f2168900
parente6048e1830899ab0e4ca8d197569e0db885ec6fd (diff)
parent91ec3ae682ce9a3235b12ee4026b1902b8a0cc7c (diff)
downloadmpv-6a7956a11bd8849d0af22fca23de89b42a49788b.tar.bz2
mpv-6a7956a11bd8849d0af22fca23de89b42a49788b.tar.xz
Merge svn changes up to r30972
-rw-r--r--cpudetect.c8
-rw-r--r--libmpcodecs/vd_raw.c2
-rw-r--r--libmpdemux/demux_y4m.c40
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;
}