~ubuntu-branches/ubuntu/trusty/gst-libav1.0/trusty-proposed

« back to all changes in this revision

Viewing changes to gst-libs/ext/libav/libavcodec/bink.c

  • Committer: Package Import Robot
  • Author(s): Sebastian Dröge
  • Date: 2013-09-24 17:07:00 UTC
  • mfrom: (1.1.17) (7.1.9 experimental)
  • Revision ID: package-import@ubuntu.com-20130924170700-4dg62s3pwl0pdakz
Tags: 1.2.0-1
* New upstream stable release:
  + debian/control:
    - Build depend on GStreamer and gst-plugins-base >= 1.2.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
#include "dsputil.h"
26
26
#include "binkdata.h"
27
27
#include "binkdsp.h"
 
28
#include "internal.h"
28
29
#include "mathops.h"
29
30
 
30
31
#define BITSTREAM_READER_LE
146
147
 */
147
148
static void init_lengths(BinkContext *c, int width, int bw)
148
149
{
 
150
    width = FFALIGN(width, 8);
 
151
 
149
152
    c->bundle[BINK_SRC_BLOCK_TYPES].len = av_log2((width >> 3) + 511) + 1;
150
153
 
151
154
    c->bundle[BINK_SRC_SUB_BLOCK_TYPES].len = av_log2((width >> 4) + 511) + 1;
231
234
 */
232
235
static void read_tree(GetBitContext *gb, Tree *tree)
233
236
{
234
 
    uint8_t tmp1[16], tmp2[16], *in = tmp1, *out = tmp2;
 
237
    uint8_t tmp1[16] = { 0 }, tmp2[16], *in = tmp1, *out = tmp2;
235
238
    int i, t, len;
236
239
 
237
240
    tree->vlc_num = get_bits(gb, 4);
242
245
    }
243
246
    if (get_bits1(gb)) {
244
247
        len = get_bits(gb, 3);
245
 
        memset(tmp1, 0, sizeof(tmp1));
246
248
        for (i = 0; i <= len; i++) {
247
249
            tree->syms[i] = get_bits(gb, 4);
248
250
            tmp1[tree->syms[i]] = 1;
675
677
        quant_idx = q;
676
678
    }
677
679
 
 
680
    if (quant_idx >= 16)
 
681
        return AVERROR_INVALIDDATA;
 
682
 
678
683
    quant = quant_matrices[quant_idx];
679
684
 
680
685
    block[0] = (block[0] * quant[0]) >> 11;
1159
1164
    return 0;
1160
1165
}
1161
1166
 
1162
 
static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *pkt)
 
1167
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *pkt)
1163
1168
{
1164
1169
    BinkContext * const c = avctx->priv_data;
1165
1170
    GetBitContext gb;
1170
1175
        if(c->pic.data[0])
1171
1176
            avctx->release_buffer(avctx, &c->pic);
1172
1177
 
1173
 
        if(avctx->get_buffer(avctx, &c->pic) < 0){
 
1178
        if(ff_get_buffer(avctx, &c->pic) < 0){
1174
1179
            av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1175
1180
            return -1;
1176
1181
        }
1206
1211
    }
1207
1212
    emms_c();
1208
1213
 
1209
 
    *data_size = sizeof(AVFrame);
 
1214
    *got_frame = 1;
1210
1215
    *(AVFrame*)data = c->pic;
1211
1216
 
1212
1217
    if (c->version > 'b')
1295
1300
        return 1;
1296
1301
    }
1297
1302
 
1298
 
    avctx->pix_fmt = c->has_alpha ? PIX_FMT_YUVA420P : PIX_FMT_YUV420P;
 
1303
    avctx->pix_fmt = c->has_alpha ? AV_PIX_FMT_YUVA420P : AV_PIX_FMT_YUV420P;
1299
1304
 
1300
1305
    avctx->idct_algo = FF_IDCT_BINK;
1301
 
    dsputil_init(&c->dsp, avctx);
 
1306
    ff_dsputil_init(&c->dsp, avctx);
1302
1307
    ff_binkdsp_init(&c->bdsp);
1303
1308
 
1304
1309
    init_bundles(c);
1329
1334
AVCodec ff_bink_decoder = {
1330
1335
    .name           = "binkvideo",
1331
1336
    .type           = AVMEDIA_TYPE_VIDEO,
1332
 
    .id             = CODEC_ID_BINKVIDEO,
 
1337
    .id             = AV_CODEC_ID_BINKVIDEO,
1333
1338
    .priv_data_size = sizeof(BinkContext),
1334
1339
    .init           = decode_init,
1335
1340
    .close          = decode_end,
1336
1341
    .decode         = decode_frame,
1337
 
    .long_name = NULL_IF_CONFIG_SMALL("Bink video"),
 
1342
    .long_name      = NULL_IF_CONFIG_SMALL("Bink video"),
 
1343
    .capabilities   = CODEC_CAP_DR1,
1338
1344
};