00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00026 #ifndef AVCODEC_LIBSCHROEDINGER_H
00027 #define AVCODEC_LIBSCHROEDINGER_H
00028
00029 #include <schroedinger/schrobitstream.h>
00030 #include <schroedinger/schroframe.h>
00031
00032 #include "avcodec.h"
00033
00034 typedef struct {
00035 uint16_t width;
00036 uint16_t height;
00037 uint16_t frame_rate_num;
00038 uint16_t frame_rate_denom;
00039 } SchroVideoFormatInfo;
00040
00044 typedef struct FFSchroEncodedFrame {
00046 uint8_t *p_encbuf;
00047
00049 uint32_t size;
00050
00052 uint32_t frame_num;
00053
00055 uint16_t key_frame;
00056 } FFSchroEncodedFrame;
00057
00061 typedef struct FFSchroQueueElement {
00063 void *data;
00065 struct FFSchroQueueElement *next;
00066 } FFSchroQueueElement;
00067
00068
00072 typedef struct FFSchroQueue {
00074 FFSchroQueueElement *p_head;
00076 FFSchroQueueElement *p_tail;
00078 int size;
00079 } FFSchroQueue;
00080
00084 void ff_schro_queue_init(FFSchroQueue *queue);
00085
00089 int ff_schro_queue_push_back(FFSchroQueue *queue, void *p_data);
00090
00094 void *ff_schro_queue_pop(FFSchroQueue *queue);
00095
00101 void ff_schro_queue_free(FFSchroQueue *queue, void (*free_func)(void *));
00102
00103 static const struct {
00104 enum PixelFormat ff_pix_fmt;
00105 SchroChromaFormat schro_pix_fmt;
00106 SchroFrameFormat schro_frame_fmt;
00107 } schro_pixel_format_map[] = {
00108 { PIX_FMT_YUV420P, SCHRO_CHROMA_420, SCHRO_FRAME_FORMAT_U8_420 },
00109 { PIX_FMT_YUV422P, SCHRO_CHROMA_422, SCHRO_FRAME_FORMAT_U8_422 },
00110 { PIX_FMT_YUV444P, SCHRO_CHROMA_444, SCHRO_FRAME_FORMAT_U8_444 },
00111 };
00112
00117 SchroVideoFormatEnum ff_get_schro_video_format_preset (AVCodecContext *avccontext);
00118
00123 int ff_get_schro_frame_format(SchroChromaFormat schro_chroma_fmt,
00124 SchroFrameFormat *schro_frame_fmt);
00125
00130 SchroFrame *ff_create_schro_frame(AVCodecContext *avccontext,
00131 SchroFrameFormat schro_frame_fmt);
00132
00133 #endif