]> git.sesse.net Git - ffmpeg/commitdiff
Merge commit '1b1bb2c4efc126d74d44d8c421860c85f932ecb1'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 28 May 2015 20:02:41 +0000 (22:02 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 28 May 2015 20:02:41 +0000 (22:02 +0200)
* commit '1b1bb2c4efc126d74d44d8c421860c85f932ecb1':
  rl: Add error checking to ff_rl_init().

Conflicts:
libavcodec/rl.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/rl.c
libavcodec/rl.h

diff --cc libavcodec/rl.c
index 8b1854c0490783c53d1f547dba00cc17f609b279,5bc1f91563a4d5984cedc0d1aaf30ba8c2ad6cc5..b206c6f2ce6e5fe05f561d9230beab2f3ebbabca
@@@ -80,19 -86,23 +86,27 @@@ av_cold int ff_rl_init(RLTable *rl
          memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1);
          if (static_store)
              rl->index_run[last] = static_store[last] + MAX_RUN + MAX_LEVEL + 2;
-         else
+         else {
              rl->index_run[last] = av_malloc(MAX_RUN + 1);
+             if (!rl->index_run[last])
+                 goto fail;
+         }
          memcpy(rl->index_run[last], index_run, MAX_RUN + 1);
      }
+     return 0;
+ fail:
+     ff_rl_free(rl);
+     return AVERROR(ENOMEM);
  }
  
 -av_cold void ff_rl_init_vlc(RLTable *rl)
 +av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
  {
      int i, q;
 +    VLC_TYPE table[1500][2] = {{0}};
 +    VLC vlc = { .table = table, .table_allocated = static_size };
 +    av_assert0(static_size <= FF_ARRAY_ELEMS(table));
 +    init_vlc(&vlc, 9, rl->n + 1, &rl->table_vlc[0][1], 4, 2, &rl->table_vlc[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC);
  
      for (q = 0; q < 32; q++) {
          int qmul = q * 2;
diff --cc libavcodec/rl.h
index e4a6faa22c9f5e954de3ebf477eff59754129154,fe4efef972db283fa4539af608f1004175aae614..33f4ef88de352c7966443f6ea1dc115f08e43e7f
@@@ -52,8 -53,8 +52,8 @@@ typedef struct RLTable 
   * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] which will hold
   *                     the level and run tables, if this is NULL av_malloc() will be used
   */
void ff_rl_init(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]);
int ff_rl_init(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]);
 -void ff_rl_init_vlc(RLTable *rl);
 +void ff_rl_init_vlc(RLTable *rl, unsigned static_size);
  
  /**
   * Free the contents of a dynamically allocated table.