| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "third_party/libyuv/include/libyuv/scale.h" | 21 #include "third_party/libyuv/include/libyuv/scale.h" |
| 22 #endif | 22 #endif |
| 23 | 23 |
| 24 #include "./args.h" | 24 #include "./args.h" |
| 25 #include "./ivfdec.h" | 25 #include "./ivfdec.h" |
| 26 | 26 |
| 27 #include "vpx/vpx_decoder.h" | 27 #include "vpx/vpx_decoder.h" |
| 28 #include "vpx_ports/mem_ops.h" | 28 #include "vpx_ports/mem_ops.h" |
| 29 #include "vpx_ports/vpx_timer.h" | 29 #include "vpx_ports/vpx_timer.h" |
| 30 | 30 |
| 31 #if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER | 31 #if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER || CONFIG_VP10_DECODER |
| 32 #include "vpx/vp8dx.h" | 32 #include "vpx/vp8dx.h" |
| 33 #endif | 33 #endif |
| 34 | 34 |
| 35 #include "./md5_utils.h" | 35 #include "./md5_utils.h" |
| 36 | 36 |
| 37 #include "./tools_common.h" | 37 #include "./tools_common.h" |
| 38 #if CONFIG_WEBM_IO | 38 #if CONFIG_WEBM_IO |
| 39 #include "./webmdec.h" | 39 #include "./webmdec.h" |
| 40 #endif | 40 #endif |
| 41 #include "./y4menc.h" | 41 #include "./y4menc.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 static const arg_def_t error_concealment = ARG_DEF( | 82 static const arg_def_t error_concealment = ARG_DEF( |
| 83 NULL, "error-concealment", 0, "Enable decoder error-concealment"); | 83 NULL, "error-concealment", 0, "Enable decoder error-concealment"); |
| 84 static const arg_def_t scalearg = ARG_DEF( | 84 static const arg_def_t scalearg = ARG_DEF( |
| 85 "S", "scale", 0, "Scale output frames uniformly"); | 85 "S", "scale", 0, "Scale output frames uniformly"); |
| 86 static const arg_def_t continuearg = ARG_DEF( | 86 static const arg_def_t continuearg = ARG_DEF( |
| 87 "k", "keep-going", 0, "(debug) Continue decoding after error"); | 87 "k", "keep-going", 0, "(debug) Continue decoding after error"); |
| 88 static const arg_def_t fb_arg = ARG_DEF( | 88 static const arg_def_t fb_arg = ARG_DEF( |
| 89 NULL, "frame-buffers", 1, "Number of frame buffers to use"); | 89 NULL, "frame-buffers", 1, "Number of frame buffers to use"); |
| 90 static const arg_def_t md5arg = ARG_DEF( | 90 static const arg_def_t md5arg = ARG_DEF( |
| 91 NULL, "md5", 0, "Compute the MD5 sum of the decoded frame"); | 91 NULL, "md5", 0, "Compute the MD5 sum of the decoded frame"); |
| 92 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 92 #if CONFIG_VP9_HIGHBITDEPTH |
| 93 static const arg_def_t outbitdeptharg = ARG_DEF( | 93 static const arg_def_t outbitdeptharg = ARG_DEF( |
| 94 NULL, "output-bit-depth", 1, "Output bit-depth for decoded frames"); | 94 NULL, "output-bit-depth", 1, "Output bit-depth for decoded frames"); |
| 95 #endif | 95 #endif |
| 96 | 96 |
| 97 static const arg_def_t *all_args[] = { | 97 static const arg_def_t *all_args[] = { |
| 98 &codecarg, &use_yv12, &use_i420, &flipuvarg, &rawvideo, &noblitarg, | 98 &codecarg, &use_yv12, &use_i420, &flipuvarg, &rawvideo, &noblitarg, |
| 99 &progressarg, &limitarg, &skiparg, &postprocarg, &summaryarg, &outputfile, | 99 &progressarg, &limitarg, &skiparg, &postprocarg, &summaryarg, &outputfile, |
| 100 &threadsarg, &frameparallelarg, &verbosearg, &scalearg, &fb_arg, | 100 &threadsarg, &frameparallelarg, &verbosearg, &scalearg, &fb_arg, |
| 101 &md5arg, &error_concealment, &continuearg, | 101 &md5arg, &error_concealment, &continuearg, |
| 102 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 102 #if CONFIG_VP9_HIGHBITDEPTH |
| 103 &outbitdeptharg, | 103 &outbitdeptharg, |
| 104 #endif | 104 #endif |
| 105 NULL | 105 NULL |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 #if CONFIG_VP8_DECODER | 108 #if CONFIG_VP8_DECODER |
| 109 static const arg_def_t addnoise_level = ARG_DEF( | 109 static const arg_def_t addnoise_level = ARG_DEF( |
| 110 NULL, "noise-level", 1, "Enable VP8 postproc add noise"); | 110 NULL, "noise-level", 1, "Enable VP8 postproc add noise"); |
| 111 static const arg_def_t deblock = ARG_DEF( | 111 static const arg_def_t deblock = ARG_DEF( |
| 112 NULL, "deblock", 0, "Enable VP8 deblocking"); | 112 NULL, "deblock", 0, "Enable VP8 deblocking"); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 129 static const arg_def_t *vp8_pp_args[] = { | 129 static const arg_def_t *vp8_pp_args[] = { |
| 130 &addnoise_level, &deblock, &demacroblock_level, &pp_debug_info, | 130 &addnoise_level, &deblock, &demacroblock_level, &pp_debug_info, |
| 131 &pp_disp_ref_frame, &pp_disp_mb_modes, &pp_disp_b_modes, &pp_disp_mvs, &mfqe, | 131 &pp_disp_ref_frame, &pp_disp_mb_modes, &pp_disp_b_modes, &pp_disp_mvs, &mfqe, |
| 132 NULL | 132 NULL |
| 133 }; | 133 }; |
| 134 #endif | 134 #endif |
| 135 | 135 |
| 136 #if CONFIG_LIBYUV | 136 #if CONFIG_LIBYUV |
| 137 static INLINE int libyuv_scale(vpx_image_t *src, vpx_image_t *dst, | 137 static INLINE int libyuv_scale(vpx_image_t *src, vpx_image_t *dst, |
| 138 FilterModeEnum mode) { | 138 FilterModeEnum mode) { |
| 139 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 139 #if CONFIG_VP9_HIGHBITDEPTH |
| 140 if (src->fmt == VPX_IMG_FMT_I42016) { | 140 if (src->fmt == VPX_IMG_FMT_I42016) { |
| 141 assert(dst->fmt == VPX_IMG_FMT_I42016); | 141 assert(dst->fmt == VPX_IMG_FMT_I42016); |
| 142 return I420Scale_16((uint16_t*)src->planes[VPX_PLANE_Y], | 142 return I420Scale_16((uint16_t*)src->planes[VPX_PLANE_Y], |
| 143 src->stride[VPX_PLANE_Y]/2, | 143 src->stride[VPX_PLANE_Y]/2, |
| 144 (uint16_t*)src->planes[VPX_PLANE_U], | 144 (uint16_t*)src->planes[VPX_PLANE_U], |
| 145 src->stride[VPX_PLANE_U]/2, | 145 src->stride[VPX_PLANE_U]/2, |
| 146 (uint16_t*)src->planes[VPX_PLANE_V], | 146 (uint16_t*)src->planes[VPX_PLANE_V], |
| 147 src->stride[VPX_PLANE_V]/2, | 147 src->stride[VPX_PLANE_V]/2, |
| 148 src->d_w, src->d_h, | 148 src->d_w, src->d_h, |
| 149 (uint16_t*)dst->planes[VPX_PLANE_Y], | 149 (uint16_t*)dst->planes[VPX_PLANE_Y], |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 for (y = 0; y < h; ++y) { | 286 for (y = 0; y < h; ++y) { |
| 287 MD5Update(md5, buf, w); | 287 MD5Update(md5, buf, w); |
| 288 buf += stride; | 288 buf += stride; |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 } | 291 } |
| 292 | 292 |
| 293 static void write_image_file(const vpx_image_t *img, const int planes[3], | 293 static void write_image_file(const vpx_image_t *img, const int planes[3], |
| 294 FILE *file) { | 294 FILE *file) { |
| 295 int i, y; | 295 int i, y; |
| 296 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 296 #if CONFIG_VP9_HIGHBITDEPTH |
| 297 const int bytes_per_sample = ((img->fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? 2 : 1); | 297 const int bytes_per_sample = ((img->fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? 2 : 1); |
| 298 #else | 298 #else |
| 299 const int bytes_per_sample = 1; | 299 const int bytes_per_sample = 1; |
| 300 #endif | 300 #endif |
| 301 | 301 |
| 302 for (i = 0; i < 3; ++i) { | 302 for (i = 0; i < 3; ++i) { |
| 303 const int plane = planes[i]; | 303 const int plane = planes[i]; |
| 304 const unsigned char *buf = img->planes[plane]; | 304 const unsigned char *buf = img->planes[plane]; |
| 305 const int stride = img->stride[plane]; | 305 const int stride = img->stride[plane]; |
| 306 const int w = vpx_img_plane_width(img, plane); | 306 const int w = vpx_img_plane_width(img, plane); |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 set_binary_mode(stdout); | 520 set_binary_mode(stdout); |
| 521 return stdout; | 521 return stdout; |
| 522 } else { | 522 } else { |
| 523 FILE *file = fopen(name, "wb"); | 523 FILE *file = fopen(name, "wb"); |
| 524 if (!file) | 524 if (!file) |
| 525 fatal("Failed to open output file '%s'", name); | 525 fatal("Failed to open output file '%s'", name); |
| 526 return file; | 526 return file; |
| 527 } | 527 } |
| 528 } | 528 } |
| 529 | 529 |
| 530 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 530 #if CONFIG_VP9_HIGHBITDEPTH |
| 531 static int img_shifted_realloc_required(const vpx_image_t *img, | 531 static int img_shifted_realloc_required(const vpx_image_t *img, |
| 532 const vpx_image_t *shifted, | 532 const vpx_image_t *shifted, |
| 533 vpx_img_fmt_t required_fmt) { | 533 vpx_img_fmt_t required_fmt) { |
| 534 return img->d_w != shifted->d_w || | 534 return img->d_w != shifted->d_w || |
| 535 img->d_h != shifted->d_h || | 535 img->d_h != shifted->d_h || |
| 536 required_fmt != shifted->fmt; | 536 required_fmt != shifted->fmt; |
| 537 } | 537 } |
| 538 #endif | 538 #endif |
| 539 | 539 |
| 540 static int main_loop(int argc, const char **argv_) { | 540 static int main_loop(int argc, const char **argv_) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 554 const VpxInterface *fourcc_interface = NULL; | 554 const VpxInterface *fourcc_interface = NULL; |
| 555 uint64_t dx_time = 0; | 555 uint64_t dx_time = 0; |
| 556 struct arg arg; | 556 struct arg arg; |
| 557 char **argv, **argi, **argj; | 557 char **argv, **argi, **argj; |
| 558 | 558 |
| 559 int single_file; | 559 int single_file; |
| 560 int use_y4m = 1; | 560 int use_y4m = 1; |
| 561 int opt_yv12 = 0; | 561 int opt_yv12 = 0; |
| 562 int opt_i420 = 0; | 562 int opt_i420 = 0; |
| 563 vpx_codec_dec_cfg_t cfg = {0, 0, 0}; | 563 vpx_codec_dec_cfg_t cfg = {0, 0, 0}; |
| 564 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 564 #if CONFIG_VP9_HIGHBITDEPTH |
| 565 int output_bit_depth = 0; | 565 int output_bit_depth = 0; |
| 566 #endif | 566 #endif |
| 567 #if CONFIG_VP8_DECODER | 567 #if CONFIG_VP8_DECODER |
| 568 vp8_postproc_cfg_t vp8_pp_cfg = {0}; | 568 vp8_postproc_cfg_t vp8_pp_cfg = {0}; |
| 569 int vp8_dbg_color_ref_frame = 0; | 569 int vp8_dbg_color_ref_frame = 0; |
| 570 int vp8_dbg_color_mb_modes = 0; | 570 int vp8_dbg_color_mb_modes = 0; |
| 571 int vp8_dbg_color_b_modes = 0; | 571 int vp8_dbg_color_b_modes = 0; |
| 572 int vp8_dbg_display_mv = 0; | 572 int vp8_dbg_display_mv = 0; |
| 573 #endif | 573 #endif |
| 574 int frames_corrupted = 0; | 574 int frames_corrupted = 0; |
| 575 int dec_flags = 0; | 575 int dec_flags = 0; |
| 576 int do_scale = 0; | 576 int do_scale = 0; |
| 577 vpx_image_t *scaled_img = NULL; | 577 vpx_image_t *scaled_img = NULL; |
| 578 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 578 #if CONFIG_VP9_HIGHBITDEPTH |
| 579 vpx_image_t *img_shifted = NULL; | 579 vpx_image_t *img_shifted = NULL; |
| 580 #endif | 580 #endif |
| 581 int frame_avail, got_data, flush_decoder = 0; | 581 int frame_avail, got_data, flush_decoder = 0; |
| 582 int num_external_frame_buffers = 0; | 582 int num_external_frame_buffers = 0; |
| 583 struct ExternalFrameBufferList ext_fb_list = {0, NULL}; | 583 struct ExternalFrameBufferList ext_fb_list = {0, NULL}; |
| 584 | 584 |
| 585 const char *outfile_pattern = NULL; | 585 const char *outfile_pattern = NULL; |
| 586 char outfile_name[PATH_MAX] = {0}; | 586 char outfile_name[PATH_MAX] = {0}; |
| 587 FILE *outfile = NULL; | 587 FILE *outfile = NULL; |
| 588 | 588 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 611 if (!interface) | 611 if (!interface) |
| 612 die("Error: Unrecognized argument (%s) to --codec\n", arg.val); | 612 die("Error: Unrecognized argument (%s) to --codec\n", arg.val); |
| 613 } else if (arg_match(&arg, &looparg, argi)) { | 613 } else if (arg_match(&arg, &looparg, argi)) { |
| 614 // no-op | 614 // no-op |
| 615 } else if (arg_match(&arg, &outputfile, argi)) | 615 } else if (arg_match(&arg, &outputfile, argi)) |
| 616 outfile_pattern = arg.val; | 616 outfile_pattern = arg.val; |
| 617 else if (arg_match(&arg, &use_yv12, argi)) { | 617 else if (arg_match(&arg, &use_yv12, argi)) { |
| 618 use_y4m = 0; | 618 use_y4m = 0; |
| 619 flipuv = 1; | 619 flipuv = 1; |
| 620 opt_yv12 = 1; | 620 opt_yv12 = 1; |
| 621 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 621 #if CONFIG_VP9_HIGHBITDEPTH |
| 622 output_bit_depth = 8; // For yv12 8-bit depth output is assumed | 622 output_bit_depth = 8; // For yv12 8-bit depth output is assumed |
| 623 #endif | 623 #endif |
| 624 } else if (arg_match(&arg, &use_i420, argi)) { | 624 } else if (arg_match(&arg, &use_i420, argi)) { |
| 625 use_y4m = 0; | 625 use_y4m = 0; |
| 626 flipuv = 0; | 626 flipuv = 0; |
| 627 opt_i420 = 1; | 627 opt_i420 = 1; |
| 628 } else if (arg_match(&arg, &rawvideo, argi)) { | 628 } else if (arg_match(&arg, &rawvideo, argi)) { |
| 629 use_y4m = 0; | 629 use_y4m = 0; |
| 630 } else if (arg_match(&arg, &flipuvarg, argi)) | 630 } else if (arg_match(&arg, &flipuvarg, argi)) |
| 631 flipuv = 1; | 631 flipuv = 1; |
| 632 else if (arg_match(&arg, &noblitarg, argi)) | 632 else if (arg_match(&arg, &noblitarg, argi)) |
| 633 noblit = 1; | 633 noblit = 1; |
| 634 else if (arg_match(&arg, &progressarg, argi)) | 634 else if (arg_match(&arg, &progressarg, argi)) |
| 635 progress = 1; | 635 progress = 1; |
| 636 else if (arg_match(&arg, &limitarg, argi)) | 636 else if (arg_match(&arg, &limitarg, argi)) |
| 637 stop_after = arg_parse_uint(&arg); | 637 stop_after = arg_parse_uint(&arg); |
| 638 else if (arg_match(&arg, &skiparg, argi)) | 638 else if (arg_match(&arg, &skiparg, argi)) |
| 639 arg_skip = arg_parse_uint(&arg); | 639 arg_skip = arg_parse_uint(&arg); |
| 640 else if (arg_match(&arg, &postprocarg, argi)) | 640 else if (arg_match(&arg, &postprocarg, argi)) |
| 641 postproc = 1; | 641 postproc = 1; |
| 642 else if (arg_match(&arg, &md5arg, argi)) | 642 else if (arg_match(&arg, &md5arg, argi)) |
| 643 do_md5 = 1; | 643 do_md5 = 1; |
| 644 else if (arg_match(&arg, &summaryarg, argi)) | 644 else if (arg_match(&arg, &summaryarg, argi)) |
| 645 summary = 1; | 645 summary = 1; |
| 646 else if (arg_match(&arg, &threadsarg, argi)) | 646 else if (arg_match(&arg, &threadsarg, argi)) |
| 647 cfg.threads = arg_parse_uint(&arg); | 647 cfg.threads = arg_parse_uint(&arg); |
| 648 #if CONFIG_VP9_DECODER | 648 #if CONFIG_VP9_DECODER || CONFIG_VP10_DECODER |
| 649 else if (arg_match(&arg, &frameparallelarg, argi)) | 649 else if (arg_match(&arg, &frameparallelarg, argi)) |
| 650 frame_parallel = 1; | 650 frame_parallel = 1; |
| 651 #endif | 651 #endif |
| 652 else if (arg_match(&arg, &verbosearg, argi)) | 652 else if (arg_match(&arg, &verbosearg, argi)) |
| 653 quiet = 0; | 653 quiet = 0; |
| 654 else if (arg_match(&arg, &scalearg, argi)) | 654 else if (arg_match(&arg, &scalearg, argi)) |
| 655 do_scale = 1; | 655 do_scale = 1; |
| 656 else if (arg_match(&arg, &fb_arg, argi)) | 656 else if (arg_match(&arg, &fb_arg, argi)) |
| 657 num_external_frame_buffers = arg_parse_uint(&arg); | 657 num_external_frame_buffers = arg_parse_uint(&arg); |
| 658 else if (arg_match(&arg, &continuearg, argi)) | 658 else if (arg_match(&arg, &continuearg, argi)) |
| 659 keep_going = 1; | 659 keep_going = 1; |
| 660 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 660 #if CONFIG_VP9_HIGHBITDEPTH |
| 661 else if (arg_match(&arg, &outbitdeptharg, argi)) { | 661 else if (arg_match(&arg, &outbitdeptharg, argi)) { |
| 662 output_bit_depth = arg_parse_uint(&arg); | 662 output_bit_depth = arg_parse_uint(&arg); |
| 663 } | 663 } |
| 664 #endif | 664 #endif |
| 665 #if CONFIG_VP8_DECODER | 665 #if CONFIG_VP8_DECODER |
| 666 else if (arg_match(&arg, &addnoise_level, argi)) { | 666 else if (arg_match(&arg, &addnoise_level, argi)) { |
| 667 postproc = 1; | 667 postproc = 1; |
| 668 vp8_pp_cfg.post_proc_flag |= VP8_ADDNOISE; | 668 vp8_pp_cfg.post_proc_flag |= VP8_ADDNOISE; |
| 669 vp8_pp_cfg.noise_level = arg_parse_uint(&arg); | 669 vp8_pp_cfg.noise_level = arg_parse_uint(&arg); |
| 670 } else if (arg_match(&arg, &demacroblock_level, argi)) { | 670 } else if (arg_match(&arg, &demacroblock_level, argi)) { |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 981 img = scaled_img; | 981 img = scaled_img; |
| 982 #else | 982 #else |
| 983 fprintf(stderr, "Failed to scale output frame: %s.\n" | 983 fprintf(stderr, "Failed to scale output frame: %s.\n" |
| 984 "Scaling is disabled in this configuration. " | 984 "Scaling is disabled in this configuration. " |
| 985 "To enable scaling, configure with --enable-libyuv\n", | 985 "To enable scaling, configure with --enable-libyuv\n", |
| 986 vpx_codec_error(&decoder)); | 986 vpx_codec_error(&decoder)); |
| 987 return EXIT_FAILURE; | 987 return EXIT_FAILURE; |
| 988 #endif | 988 #endif |
| 989 } | 989 } |
| 990 } | 990 } |
| 991 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 991 #if CONFIG_VP9_HIGHBITDEPTH |
| 992 // Default to codec bit depth if output bit depth not set | 992 // Default to codec bit depth if output bit depth not set |
| 993 if (!output_bit_depth) { | 993 if (!output_bit_depth) { |
| 994 output_bit_depth = img->bit_depth; | 994 output_bit_depth = img->bit_depth; |
| 995 } | 995 } |
| 996 // Shift up or down if necessary | 996 // Shift up or down if necessary |
| 997 if (output_bit_depth != img->bit_depth) { | 997 if (output_bit_depth != img->bit_depth) { |
| 998 const vpx_img_fmt_t shifted_fmt = output_bit_depth == 8 ? | 998 const vpx_img_fmt_t shifted_fmt = output_bit_depth == 8 ? |
| 999 img->fmt ^ (img->fmt & VPX_IMG_FMT_HIGHBITDEPTH) : | 999 img->fmt ^ (img->fmt & VPX_IMG_FMT_HIGHBITDEPTH) : |
| 1000 img->fmt | VPX_IMG_FMT_HIGHBITDEPTH; | 1000 img->fmt | VPX_IMG_FMT_HIGHBITDEPTH; |
| 1001 if (img_shifted && | 1001 if (img_shifted && |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1118 | 1118 |
| 1119 #if CONFIG_WEBM_IO | 1119 #if CONFIG_WEBM_IO |
| 1120 if (input.vpx_input_ctx->file_type == FILE_TYPE_WEBM) | 1120 if (input.vpx_input_ctx->file_type == FILE_TYPE_WEBM) |
| 1121 webm_free(input.webm_ctx); | 1121 webm_free(input.webm_ctx); |
| 1122 #endif | 1122 #endif |
| 1123 | 1123 |
| 1124 if (input.vpx_input_ctx->file_type != FILE_TYPE_WEBM) | 1124 if (input.vpx_input_ctx->file_type != FILE_TYPE_WEBM) |
| 1125 free(buf); | 1125 free(buf); |
| 1126 | 1126 |
| 1127 if (scaled_img) vpx_img_free(scaled_img); | 1127 if (scaled_img) vpx_img_free(scaled_img); |
| 1128 #if CONFIG_VP9 && CONFIG_VP9_HIGHBITDEPTH | 1128 #if CONFIG_VP9_HIGHBITDEPTH |
| 1129 if (img_shifted) vpx_img_free(img_shifted); | 1129 if (img_shifted) vpx_img_free(img_shifted); |
| 1130 #endif | 1130 #endif |
| 1131 | 1131 |
| 1132 for (i = 0; i < ext_fb_list.num_external_frame_buffers; ++i) { | 1132 for (i = 0; i < ext_fb_list.num_external_frame_buffers; ++i) { |
| 1133 free(ext_fb_list.ext_fb[i].data); | 1133 free(ext_fb_list.ext_fb[i].data); |
| 1134 } | 1134 } |
| 1135 free(ext_fb_list.ext_fb); | 1135 free(ext_fb_list.ext_fb); |
| 1136 | 1136 |
| 1137 fclose(infile); | 1137 fclose(infile); |
| 1138 free(argv); | 1138 free(argv); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1154 if (arg_match(&arg, &looparg, argi)) { | 1154 if (arg_match(&arg, &looparg, argi)) { |
| 1155 loops = arg_parse_uint(&arg); | 1155 loops = arg_parse_uint(&arg); |
| 1156 break; | 1156 break; |
| 1157 } | 1157 } |
| 1158 } | 1158 } |
| 1159 free(argv); | 1159 free(argv); |
| 1160 for (i = 0; !error && i < loops; i++) | 1160 for (i = 0; !error && i < loops; i++) |
| 1161 error = main_loop(argc, argv_); | 1161 error = main_loop(argc, argv_); |
| 1162 return error; | 1162 return error; |
| 1163 } | 1163 } |
| OLD | NEW |