35 #include "aom_scale/yv12config.h" 
   36 #include "av1/common/enums.h" 
   37 #include "common/tools_common.h" 
   38 #include "common/video_reader.h" 
   40 static const char *exec_name;
 
   42 void usage_exit(
void) {
 
   44           "Usage: %s <infile> <outfile> <num_references> <num_tile_lists> " 
   45           "<output format(optional)>\n",
 
   53   unsigned int tile_size = 0;
 
   55     die_codec(codec, 
"Failed to get the tile size");
 
   56   const unsigned int tile_width = tile_size >> 16;
 
   57   const unsigned int tile_height = tile_size & 65535;
 
   58   const uint32_t output_frame_width_in_tiles = img->
d_w / tile_width;
 
   60   unsigned int tile_count = 0;
 
   62     die_codec(codec, 
"Failed to get the tile size");
 
   66   unsigned int tile_idx;
 
   68   for (tile_idx = 0; tile_idx < tile_count; ++tile_idx) {
 
   69     const int row_offset =
 
   70         (tile_idx / output_frame_width_in_tiles) * tile_height;
 
   71     const int col_offset =
 
   72         (tile_idx % output_frame_width_in_tiles) * tile_width;
 
   75     for (plane = 0; plane < 3; ++plane) {
 
   76       const unsigned char *buf = img->
planes[plane];
 
   77       const int stride = img->
stride[plane];
 
   82       const int w = (plane > 0) ? ((tile_width >> img->
x_chroma_shift) << shift)
 
   83                                 : (tile_width << shift);
 
   89       buf += roffset * stride + (coffset << shift);
 
   91       for (y = 0; y < h; ++y) {
 
   92         fwrite(buf, 1, w, file);
 
   99 int main(
int argc, 
char **argv) {
 
  100   FILE *outfile = NULL;
 
  102   AvxVideoReader *reader = NULL;
 
  103   const AvxInterface *decoder = NULL;
 
  104   const AvxVideoInfo *info = NULL;
 
  107   aom_image_t reference_images[MAX_EXTERNAL_REFERENCES];
 
  108   size_t frame_size = 0;
 
  109   const unsigned char *frame = NULL;
 
  110   int output_format = YUV1D;
 
  115   if (argc < 5) die(
"Invalid number of arguments.");
 
  117   reader = aom_video_reader_open(argv[1]);
 
  118   if (!reader) die(
"Failed to open %s for reading.", argv[1]);
 
  120   if (!(outfile = fopen(argv[2], 
"wb")))
 
  121     die(
"Failed to open %s for writing.", argv[2]);
 
  123   num_references = (int)strtol(argv[3], NULL, 0);
 
  124   num_tile_lists = (int)strtol(argv[4], NULL, 0);
 
  126   if (argc > 5) output_format = (int)strtol(argv[5], NULL, 0);
 
  127   if (output_format < YUV1D || output_format > NV12)
 
  128     die(
"Output format out of range [0, 2]");
 
  130   info = aom_video_reader_get_info(reader);
 
  132   decoder = get_aom_decoder_by_fourcc(info->codec_fourcc);
 
  133   if (!decoder) die(
"Unknown input codec.");
 
  137     die_codec(&codec, 
"Failed to initialize decoder.");
 
  141     die(
"Failed to set annex b status");
 
  146   for (i = 0; i < num_references; ++i) {
 
  147     aom_video_reader_read_frame(reader);
 
  148     frame = aom_video_reader_get_frame(reader, &frame_size);
 
  150       die_codec(&codec, 
"Failed to decode frame.");
 
  155         die_codec(&codec, 
"Failed to get the image format");
 
  159         die_codec(&codec, 
"Failed to get the image frame size");
 
  163       for (j = 0; j < num_references; j++) {
 
  164         unsigned int border = AOM_DEC_BORDER_IN_PIXELS;
 
  166                                        frame_res[0], frame_res[1], 32, 8,
 
  168           die(
"Failed to allocate references.");
 
  174                                       &reference_images[i]))
 
  175       die_codec(&codec, 
"Failed to copy decoded reference frame");
 
  181       snprintf(name, 
sizeof(name), 
"ref_%d.yuv", i);
 
  182       printf(
"writing ref image to %s, %d, %d\n", name, img->
d_w, img->
d_h);
 
  183       FILE *ref_file = fopen(name, 
"wb");
 
  184       aom_img_write(img, ref_file);
 
  196   aom_video_reader_read_frame(reader);
 
  197   frame = aom_video_reader_get_frame(reader, &frame_size);
 
  199     die_codec(&codec, 
"Failed to decode the frame.");
 
  201   for (n = 0; n < num_tile_lists; n++) {
 
  202     aom_video_reader_read_frame(reader);
 
  203     frame = aom_video_reader_get_frame(reader, &frame_size);
 
  206       die_codec(&codec, 
"Failed to decode the tile list.");
 
  209     if (!img) die_codec(&codec, 
"Failed to get frame.");
 
  211     if (output_format == YUV1D)
 
  213       write_tile_yuv1d(&codec, img, outfile);
 
  214     else if (output_format == YUV)
 
  215       aom_img_write(img, outfile);
 
  218       aom_img_write_nv12(img, outfile);
 
  221   for (i = 0; i < num_references; i++) 
aom_img_free(&reference_images[i]);
 
  223   aom_video_reader_close(reader);