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 |