83 lines · 2.2 KB · C
RawDownload
/* *  Copyright (c) 2014 The WebM project authors. All Rights Reserved. * *  Use of this source code is governed by a BSD-style license *  that can be found in the LICENSE file in the root of the source *  tree. An additional intellectual property rights grant can be found *  in the file PATENTS.  All contributing project authors may *  be found in the AUTHORS file in the root of the source tree. */ #include <stdlib.h>#include <string.h> #include "./ivfdec.h"#include "./video_reader.h" #include "vpx_ports/mem_ops.h" static const char *const kIVFSignature = "DKIF"; struct VpxVideoReaderStruct {  VpxVideoInfo info;  FILE *file;  uint8_t *buffer;  size_t buffer_size;  size_t frame_size;}; VpxVideoReader *vpx_video_reader_open(const char *filename) {  char header[32];  VpxVideoReader *reader = NULL;  FILE *const file = fopen(filename, "rb");  if (!file)    return NULL;  // Can't open file   if (fread(header, 1, 32, file) != 32)    return NULL;  // Can't read file header   if (memcmp(kIVFSignature, header, 4) != 0)    return NULL;  // Wrong IVF signature   if (mem_get_le16(header + 4) != 0)    return NULL;  // Wrong IVF version   reader = calloc(1, sizeof(*reader));  if (!reader)    return NULL;  // Can't allocate VpxVideoReader   reader->file = file;  reader->info.codec_fourcc = mem_get_le32(header + 8);  reader->info.frame_width = mem_get_le16(header + 12);  reader->info.frame_height = mem_get_le16(header + 14);  reader->info.time_base.numerator = mem_get_le32(header + 16);  reader->info.time_base.denominator = mem_get_le32(header + 20);   return reader;} void vpx_video_reader_close(VpxVideoReader *reader) {  if (reader) {    fclose(reader->file);    free(reader->buffer);    free(reader);  }} int vpx_video_reader_read_frame(VpxVideoReader *reader) {  return !ivf_read_frame(reader->file, &reader->buffer, &reader->frame_size,                         &reader->buffer_size);} const uint8_t *vpx_video_reader_get_frame(VpxVideoReader *reader,                                          size_t *size) {  if (size)    *size = reader->frame_size;   return reader->buffer;} const VpxVideoInfo *vpx_video_reader_get_info(VpxVideoReader *reader) {  return &reader->info;} 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t