Merge commit 'a7e6fbd90e62d3320b1e26d8209fc0f55ee5b0be'
authorHendrik Leppkes <h.leppkes@gmail.com>
Tue, 8 Sep 2015 12:27:05 +0000 (14:27 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Tue, 8 Sep 2015 12:27:05 +0000 (14:27 +0200)
* commit 'a7e6fbd90e62d3320b1e26d8209fc0f55ee5b0be':
  dxtory: Factorize the buffer loading

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavcodec/dxtory.c

@@@ -220,6 -220,28 +220,28 @@@ static int check_slice_size(AVCodecCont
      return 0;
  }
  
 -    if (!*nslices || avctx->height % *nslices) {
+ static int load_buffer(AVCodecContext *avctx,
+                        const uint8_t *src, int src_size,
+                        GetByteContext *gb,
+                        int *nslices, int *off)
+ {
+     bytestream2_init(gb, src, src_size);
+     *nslices = bytestream2_get_le16(gb);
+     *off = FFALIGN(*nslices * 4 + 2, 16);
+     if (src_size < *off) {
+         av_log(avctx, AV_LOG_ERROR, "no slice data\n");
+         return AVERROR_INVALIDDATA;
+     }
++    if (!*nslices) {
+         avpriv_request_sample(avctx, "%d slices for %dx%d", *nslices,
+                               avctx->width, avctx->height);
+         return AVERROR_PATCHWELCOME;
+     }
+     return 0;
+ }
  static inline uint8_t decode_sym_565(GetBitContext *gb, uint8_t lru[8],
                                       int bits)
  {
@@@ -423,20 -423,11 +425,10 @@@ static int dxtory_decode_v2_410(AVCodec
      uint8_t *Y, *U, *V;
      int ret;
  
-     bytestream2_init(&gb, src, src_size);
-     nslices = bytestream2_get_le16(&gb);
-     off = FFALIGN(nslices * 4 + 2, 16);
-     if (src_size < off) {
-         av_log(avctx, AV_LOG_ERROR, "no slice data\n");
-         return AVERROR_INVALIDDATA;
-     }
-     if (!nslices) {
-         avpriv_request_sample(avctx, "%d slices for %dx%d", nslices,
-                               avctx->width, avctx->height);
-         return AVERROR_PATCHWELCOME;
-     }
+     ret = load_buffer(avctx, src, src_size, &gb, &nslices, &off);
+     if (ret < 0)
+         return ret;
  
 -    ref_slice_height = avctx->height / nslices;
      if ((avctx->width & 3) || (avctx->height & 3)) {
          avpriv_request_sample(avctx, "Frame dimensions %dx%d",
                                avctx->width, avctx->height);
@@@ -516,20 -506,11 +508,10 @@@ static int dxtory_decode_v2_420(AVCodec
      uint8_t *Y, *U, *V;
      int ret;
  
-     bytestream2_init(&gb, src, src_size);
-     nslices = bytestream2_get_le16(&gb);
-     off = FFALIGN(nslices * 4 + 2, 16);
-     if (src_size < off) {
-         av_log(avctx, AV_LOG_ERROR, "no slice data\n");
-         return AVERROR_INVALIDDATA;
-     }
-     if (!nslices) {
-         avpriv_request_sample(avctx, "%d slices for %dx%d", nslices,
-                               avctx->width, avctx->height);
-         return AVERROR_PATCHWELCOME;
-     }
+     ret = load_buffer(avctx, src, src_size, &gb, &nslices, &off);
+     if (ret < 0)
+         return ret;
  
 -    ref_slice_height = avctx->height / nslices;
      if ((avctx->width & 1) || (avctx->height & 1)) {
          avpriv_request_sample(avctx, "Frame dimensions %dx%d",
                                avctx->width, avctx->height);