Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 5 May 2012 18:10:45 +0000 (20:10 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 5 May 2012 18:22:09 +0000 (20:22 +0200)
* qatar/master:
  tests: Refactor rotozoom/videogen common code into a separate file.
  tests: Mark some file-internal symbols as static.
  build: Drop leftover .exp pattern from LIBSUFFIXES list.
  vsrc_buffer: return EAGAIN if no frame is available.
  WMAL: Shift output samples by the specified number of padding zeroes.
  WMAL: Restore removed code in mclms_predict()
  rtpdec_h264: Remove a useless ifdef
  rtpdec_h264: Remove outdated/useless/incorrect comments
  rtpdec_h264: Remove useless memory corruption checks
  rtpdec_h264: Return proper error codes
  rtpdec_h264: Check the available data length before reading
  rtpdec_h264: Add input size checks
  png: check bit depth for PAL8/Y400A pixel formats.
  ea: check chunk_size for validity.
  celp filters: Do not read earlier than the start of the 'out' vector.

Conflicts:
libavcodec/pngdec.c
libavfilter/src_buffer.c
tests/rotozoom.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
common.mak
libavcodec/celp_filters.c
libavcodec/pngdec.c
libavcodec/wmalosslessdec.c
libavformat/electronicarts.c
libavformat/rtpdec_h264.c
tests/Makefile
tests/rotozoom.c
tests/utils.c
tests/videogen.c

diff --cc common.mak
@@@ -113,8 -45,8 +113,8 @@@ $(TOOLOBJS): | tool
  
  OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOSTOBJS) $(TESTOBJS))
  
 -CLEANSUFFIXES     = *.d *.o *~ *.ho *.map *.ver
 +CLEANSUFFIXES     = *.d *.o *~ *.ho *.map *.ver *.gcno *.gcda
  DISTCLEANSUFFIXES = *.pc
- LIBSUFFIXES       = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp
+ LIBSUFFIXES       = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a
  
  -include $(wildcard $(OBJS:.o=.d) $(TESTOBJS:.o=.d))
Simple merge
@@@ -491,21 -476,16 +491,21 @@@ static int decode_frame(AVCodecContext 
                  } else if (s->bit_depth == 16 &&
                             s->color_type == PNG_COLOR_TYPE_RGB) {
                      avctx->pix_fmt = PIX_FMT_RGB48BE;
 -                } else if (s->bit_depth == 1 &&
 -                           s->color_type == PNG_COLOR_TYPE_GRAY) {
 -                    avctx->pix_fmt = PIX_FMT_MONOBLACK;
 -                } else if (s->bit_depth == 8 &&
 +                } else if (s->bit_depth == 16 &&
 +                           s->color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
 +                    avctx->pix_fmt = PIX_FMT_RGBA64BE;
 +                } else if ((s->bits_per_pixel == 1 || s->bits_per_pixel == 2 || s->bits_per_pixel == 4 || s->bits_per_pixel == 8) &&
                             s->color_type == PNG_COLOR_TYPE_PALETTE) {
                      avctx->pix_fmt = PIX_FMT_PAL8;
 +                } else if (s->bit_depth == 1) {
 +                    avctx->pix_fmt = PIX_FMT_MONOBLACK;
                  } else if (s->bit_depth == 8 &&
                             s->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
-                     avctx->pix_fmt = PIX_FMT_GRAY8A;
+                     avctx->pix_fmt = PIX_FMT_Y400A;
                  } else {
 +                    av_log(avctx, AV_LOG_ERROR, "unsupported bit depth %d "
 +                                                "and color type %d\n",
 +                                                 s->bit_depth, s->color_type);
                      goto fail;
                  }
                  if(p->data[0])
Simple merge
@@@ -493,9 -485,12 +493,12 @@@ static int ea_read_packet(AVFormatConte
      int key = 0;
      int av_uninit(num_samples);
  
 -    while (!packet_read) {
 +    while (!packet_read || partial_packet) {
          chunk_type = avio_rl32(pb);
-         chunk_size = (ea->big_endian ? avio_rb32(pb) : avio_rl32(pb)) - 8;
+         chunk_size = ea->big_endian ? avio_rb32(pb) : avio_rl32(pb);
+         if (chunk_size <= 8)
+             return AVERROR_INVALIDDATA;
+         chunk_size -= 8;
  
          switch (chunk_type) {
          /* audio data */
Simple merge
diff --cc tests/Makefile
Simple merge
Simple merge
diff --cc tests/utils.c
index 0000000,2a85bd8..aaed470
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,144 +1,146 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * copyright (c) Sebastien Bechet <s.bechet@av7.net>
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include <stdio.h>
+ #include <stdlib.h>
+ #define SCALEBITS 8
+ #define ONE_HALF  (1 << (SCALEBITS - 1))
+ #define FIX(x)    ((int) ((x) * (1L << SCALEBITS) + 0.5))
+ static void rgb24_to_yuv420p(unsigned char *lum, unsigned char *cb,
+                              unsigned char *cr, unsigned char *src,
+                              int width, int height)
+ {
+     int wrap, wrap3, x, y;
+     int r, g, b, r1, g1, b1;
+     unsigned char *p;
+     wrap  = width;
+     wrap3 = width * 3;
+     p     = src;
+     for (y = 0; y < height; y += 2) {
+         for (x = 0; x < width; x += 2) {
+             r       = p[0];
+             g       = p[1];
+             b       = p[2];
+             r1      = r;
+             g1      = g;
+             b1      = b;
+             lum[0]  = (FIX(0.29900) * r + FIX(0.58700) * g +
+                        FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
+             r       = p[3];
+             g       = p[4];
+             b       = p[5];
+             r1     += r;
+             g1     += g;
+             b1     += b;
+             lum[1]  = (FIX(0.29900) * r + FIX(0.58700) * g +
+                        FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
+             p      += wrap3;
+             lum    += wrap;
+             r       = p[0];
+             g       = p[1];
+             b       = p[2];
+             r1     += r;
+             g1     += g;
+             b1     += b;
+             lum[0]  = (FIX(0.29900) * r + FIX(0.58700) * g +
+                        FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
+             r       = p[3];
+             g       = p[4];
+             b       = p[5];
+             r1     += r;
+             g1     += g;
+             b1     += b;
+             lum[1]  = (FIX(0.29900) * r + FIX(0.58700) * g +
+                        FIX(0.11400) * b + ONE_HALF) >> SCALEBITS;
+             cb[0]   = ((- FIX(0.16874) * r1 - FIX(0.33126) * g1 +
+                        FIX(0.50000) * b1 + 4 * ONE_HALF - 1) >> (SCALEBITS + 2)) + 128;
+             cr[0]   = ((FIX(0.50000) * r1 - FIX(0.41869) * g1 -
+                        FIX(0.08131) * b1 + 4 * ONE_HALF - 1) >> (SCALEBITS + 2)) + 128;
+             cb++;
+             cr++;
+             p   += -wrap3 + 2 * 3;
+             lum += -wrap  + 2;
+         }
+         p   += wrap3;
+         lum += wrap;
+     }
+ }
+ /* cif format */
+ #define DEFAULT_WIDTH   352
+ #define DEFAULT_HEIGHT  288
+ #define DEFAULT_NB_PICT  50
+ static void pgmyuv_save(const char *filename, int w, int h,
+                         unsigned char *rgb_tab)
+ {
+     FILE *f;
+     int i, h2, w2;
+     unsigned char *cb, *cr;
+     unsigned char *lum_tab, *cb_tab, *cr_tab;
+     lum_tab = malloc(w * h);
+     cb_tab  = malloc(w * h / 4);
+     cr_tab  = malloc(w * h / 4);
+     rgb24_to_yuv420p(lum_tab, cb_tab, cr_tab, rgb_tab, w, h);
+     f = fopen(filename, "wb");
+     fprintf(f, "P5\n%d %d\n%d\n", w, h * 3 / 2, 255);
+     fwrite(lum_tab, 1, w * h, f);
+     h2 = h / 2;
+     w2 = w / 2;
+     cb = cb_tab;
+     cr = cr_tab;
+     for (i = 0; i < h2; i++) {
+         fwrite(cb, 1, w2, f);
+         fwrite(cr, 1, w2, f);
+         cb += w2;
+         cr += w2;
+     }
+     fclose(f);
+     free(lum_tab);
+     free(cb_tab);
+     free(cr_tab);
+ }
+ static unsigned char *rgb_tab;
+ static int width, height, wrap;
+ static void put_pixel(int x, int y, int r, int g, int b)
+ {
+     unsigned char *p;
+     if (x < 0 || x >= width ||
+         y < 0 || y >= height)
+         return;
+     p    = rgb_tab + y * wrap + x * 3;
+     p[0] = r;
+     p[1] = g;
+     p[2] = b;
+ }
Simple merge