[FFmpeg-cvslog] snow: refactor code to work around a compiler bug in MSVC.

Ronald S. Bultje git at videolan.org
Mon Jul 16 01:54:15 CEST 2012


ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Sat Jul  7 09:06:50 2012 -0700| [c44091a9f70d9f9987f022dc9da0109879d2eb82] | committer: Ronald S. Bultje

snow: refactor code to work around a compiler bug in MSVC.

This fixes the compiler error "cannot convert from 'BlockNode' to
'int16_t'".

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c44091a9f70d9f9987f022dc9da0109879d2eb82
---

 libavcodec/snowenc.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c
index f732820..ebfeff6 100644
--- a/libavcodec/snowenc.c
+++ b/libavcodec/snowenc.c
@@ -1005,10 +1005,18 @@ static av_always_inline int check_block_inter(SnowContext *s, int mb_x, int mb_y
 static av_always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int ref, int *best_rd){
     const int b_stride= s->b_width << s->block_max_depth;
     BlockNode *block= &s->block[mb_x + mb_y * b_stride];
-    BlockNode backup[4]= {block[0], block[1], block[b_stride], block[b_stride+1]};
+    BlockNode backup[4];
     unsigned value;
     int rd, index;
 
+    /* We don't initialize backup[] during variable declaration, because
+     * that fails to compile on MSVC: "cannot convert from 'BlockNode' to
+     * 'int16_t'". */
+    backup[0] = block[0];
+    backup[1] = block[1];
+    backup[2] = block[b_stride];
+    backup[3] = block[b_stride + 1];
+
     assert(mb_x>=0 && mb_y>=0);
     assert(mb_x<b_stride);
     assert(((mb_x|mb_y)&1) == 0);



More information about the ffmpeg-cvslog mailing list