1/* 2 * Copyright (c) 2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com > 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21/** 22* @file libavcodec/libdirac_libschro.h 23* data structures common to libdirac and libschroedinger 24*/ 25 26#ifndef AVCODEC_LIBDIRAC_LIBSCHRO_H 27#define AVCODEC_LIBDIRAC_LIBSCHRO_H 28 29#include "avcodec.h" 30 31typedef struct 32{ 33 uint16_t width; 34 uint16_t height; 35 uint16_t frame_rate_num; 36 uint16_t frame_rate_denom; 37} FfmpegDiracSchroVideoFormatInfo; 38 39/** 40* Returns the index into the Dirac Schro common video format info table 41*/ 42unsigned int ff_dirac_schro_get_video_format_idx (AVCodecContext *avccontext); 43 44/** 45* contains a single encoded frame returned from Dirac or Schroedinger 46*/ 47typedef struct FfmpegDiracSchroEncodedFrame 48{ 49 /** encoded frame data */ 50 uint8_t *p_encbuf; 51 52 /** encoded frame size */ 53 uint32_t size; 54 55 /** encoded frame number. Will be used as pts */ 56 uint32_t frame_num; 57 58 /** key frame flag. 1 : is key frame , 0 : in not key frame */ 59 uint16_t key_frame; 60} FfmpegDiracSchroEncodedFrame; 61 62/** 63* queue element 64*/ 65typedef struct FfmpegDiracSchroQueueElement 66{ 67 /** Data to be stored in queue*/ 68 void *data; 69 /** Pointer to next element queue */ 70 struct FfmpegDiracSchroQueueElement *next; 71} FfmpegDiracSchroQueueElement; 72 73 74/** 75* A simple queue implementation used in libdirac and libschroedinger 76*/ 77typedef struct FfmpegDiracSchroQueue 78{ 79 /** Pointer to head of queue */ 80 FfmpegDiracSchroQueueElement *p_head; 81 /** Pointer to tail of queue */ 82 FfmpegDiracSchroQueueElement *p_tail; 83 /** Queue size*/ 84 int size; 85} FfmpegDiracSchroQueue; 86 87/** 88* Initialise the queue 89*/ 90void ff_dirac_schro_queue_init(FfmpegDiracSchroQueue *queue); 91 92/** 93* Add an element to the end of the queue 94*/ 95int ff_dirac_schro_queue_push_back (FfmpegDiracSchroQueue *queue, void *p_data); 96 97/** 98* Return the first element in the queue 99*/ 100void *ff_dirac_schro_queue_pop (FfmpegDiracSchroQueue *queue); 101 102/** 103* Free the queue resources. free_func is a function supplied by the caller to 104* free any resources allocated by the caller. The data field of the queue 105* element is passed to it. 106*/ 107void ff_dirac_schro_queue_free(FfmpegDiracSchroQueue *queue, 108 void (*free_func)(void *)); 109#endif /* AVCODEC_LIBDIRAC_LIBSCHRO_H */ 110