Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: patched-ffmpeg-mt/libavcodec/dnxhddec.c

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * VC3/DNxHD decoder. 2 * VC3/DNxHD decoder.
3 * Copyright (c) 2007 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com> 3 * Copyright (c) 2007 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
4 * 4 *
5 * This file is part of FFmpeg. 5 * This file is part of FFmpeg.
6 * 6 *
7 * FFmpeg is free software; you can redistribute it and/or 7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
(...skipping 21 matching lines...) Expand all
32 AVFrame picture; 32 AVFrame picture;
33 GetBitContext gb; 33 GetBitContext gb;
34 int cid; ///< compression id 34 int cid; ///< compression id
35 unsigned int width, height; 35 unsigned int width, height;
36 unsigned int mb_width, mb_height; 36 unsigned int mb_width, mb_height;
37 uint32_t mb_scan_index[68]; /* max for 1080p */ 37 uint32_t mb_scan_index[68]; /* max for 1080p */
38 int cur_field; ///< current interlaced field 38 int cur_field; ///< current interlaced field
39 VLC ac_vlc, dc_vlc, run_vlc; 39 VLC ac_vlc, dc_vlc, run_vlc;
40 int last_dc[3]; 40 int last_dc[3];
41 DSPContext dsp; 41 DSPContext dsp;
42 DECLARE_ALIGNED_16(DCTELEM, blocks)[8][64]; 42 DECLARE_ALIGNED(16, DCTELEM, blocks)[8][64];
43 ScanTable scantable; 43 ScanTable scantable;
44 const CIDEntry *cid_table; 44 const CIDEntry *cid_table;
45 } DNXHDContext; 45 } DNXHDContext;
46 46
47 #define DNXHD_VLC_BITS 9 47 #define DNXHD_VLC_BITS 9
48 #define DNXHD_DC_VLC_BITS 7 48 #define DNXHD_DC_VLC_BITS 7
49 49
50 static av_cold int dnxhd_decode_init(AVCodecContext *avctx) 50 static av_cold int dnxhd_decode_init(AVCodecContext *avctx)
51 { 51 {
52 DNXHDContext *ctx = avctx->priv_data; 52 DNXHDContext *ctx = avctx->priv_data;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 return -1; 119 return -1;
120 120
121 if (buf_size < ctx->cid_table->coding_unit_size) { 121 if (buf_size < ctx->cid_table->coding_unit_size) {
122 av_log(ctx->avctx, AV_LOG_ERROR, "incorrect frame size\n"); 122 av_log(ctx->avctx, AV_LOG_ERROR, "incorrect frame size\n");
123 return -1; 123 return -1;
124 } 124 }
125 125
126 ctx->mb_width = ctx->width>>4; 126 ctx->mb_width = ctx->width>>4;
127 ctx->mb_height = buf[0x16d]; 127 ctx->mb_height = buf[0x16d];
128 128
129 if (ctx->mb_height > 68) { 129 dprintf(ctx->avctx, "mb width %d, mb height %d\n", ctx->mb_width, ctx->mb_he ight);
130 av_log(ctx->avctx, AV_LOG_ERROR, "mb height too big\n"); 130
131 if ((ctx->height+15)>>4 == ctx->mb_height && ctx->picture.interlaced_frame)
132 ctx->height <<= 1;
133
134 if (ctx->mb_height > 68 ||
135 (ctx->mb_height<<ctx->picture.interlaced_frame) > (ctx->height+15)>>4) {
136 av_log(ctx->avctx, AV_LOG_ERROR, "mb height too big: %d\n", ctx->mb_heig ht);
131 return -1; 137 return -1;
132 } 138 }
133 139
134 dprintf(ctx->avctx, "mb width %d, mb height %d\n", ctx->mb_width, ctx->mb_he ight);
135 for (i = 0; i < ctx->mb_height; i++) { 140 for (i = 0; i < ctx->mb_height; i++) {
136 ctx->mb_scan_index[i] = AV_RB32(buf + 0x170 + (i<<2)); 141 ctx->mb_scan_index[i] = AV_RB32(buf + 0x170 + (i<<2));
137 dprintf(ctx->avctx, "mb scan index %d\n", ctx->mb_scan_index[i]); 142 dprintf(ctx->avctx, "mb scan index %d\n", ctx->mb_scan_index[i]);
138 if (buf_size < ctx->mb_scan_index[i] + 0x280) { 143 if (buf_size < ctx->mb_scan_index[i] + 0x280) {
139 av_log(ctx->avctx, AV_LOG_ERROR, "invalid mb scan index\n"); 144 av_log(ctx->avctx, AV_LOG_ERROR, "invalid mb scan index\n");
140 return -1; 145 return -1;
141 } 146 }
142 } 147 }
143 148
144 return 0; 149 return 0;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 DNXHDContext *ctx = avctx->priv_data; 290 DNXHDContext *ctx = avctx->priv_data;
286 AVFrame *picture = data; 291 AVFrame *picture = data;
287 int first_field = 1; 292 int first_field = 1;
288 293
289 dprintf(avctx, "frame size %d\n", buf_size); 294 dprintf(avctx, "frame size %d\n", buf_size);
290 295
291 decode_coding_unit: 296 decode_coding_unit:
292 if (dnxhd_decode_header(ctx, buf, buf_size, first_field) < 0) 297 if (dnxhd_decode_header(ctx, buf, buf_size, first_field) < 0)
293 return -1; 298 return -1;
294 299
300 if ((avctx->width || avctx->height) &&
301 (ctx->width != avctx->width || ctx->height != avctx->height)) {
302 av_log(avctx, AV_LOG_WARNING, "frame size changed: %dx%d -> %dx%d\n",
303 avctx->width, avctx->height, ctx->width, ctx->height);
304 first_field = 1;
305 }
306
295 avctx->pix_fmt = PIX_FMT_YUV422P; 307 avctx->pix_fmt = PIX_FMT_YUV422P;
296 if (avcodec_check_dimensions(avctx, ctx->width, ctx->height)) 308 if (avcodec_check_dimensions(avctx, ctx->width, ctx->height))
297 return -1; 309 return -1;
298 avcodec_set_dimensions(avctx, ctx->width, ctx->height); 310 avcodec_set_dimensions(avctx, ctx->width, ctx->height);
299 311
300 if (first_field) { 312 if (first_field) {
301 if (ctx->picture.data[0]) 313 if (ctx->picture.data[0])
302 avctx->release_buffer(avctx, &ctx->picture); 314 avctx->release_buffer(avctx, &ctx->picture);
303 if (avctx->get_buffer(avctx, &ctx->picture) < 0) { 315 if (avctx->get_buffer(avctx, &ctx->picture) < 0) {
304 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); 316 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 CODEC_TYPE_VIDEO, 349 CODEC_TYPE_VIDEO,
338 CODEC_ID_DNXHD, 350 CODEC_ID_DNXHD,
339 sizeof(DNXHDContext), 351 sizeof(DNXHDContext),
340 dnxhd_decode_init, 352 dnxhd_decode_init,
341 NULL, 353 NULL,
342 dnxhd_decode_close, 354 dnxhd_decode_close,
343 dnxhd_decode_frame, 355 dnxhd_decode_frame,
344 CODEC_CAP_DR1, 356 CODEC_CAP_DR1,
345 .long_name = NULL_IF_CONFIG_SMALL("VC3/DNxHD"), 357 .long_name = NULL_IF_CONFIG_SMALL("VC3/DNxHD"),
346 }; 358 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698