/* GStreamer * Copyright (C) <1999> Erik Walthinsen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __BUFFER_H__ #define __BUFFER_H__ #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define MPEG1MUX_BUFFER_QUEUED(mb) (g_list_length((mb)->timecode_list)) #define MPEG1MUX_BUFFER_SPACE(mb) ((mb)->length) #define MPEG1MUX_BUFFER_DATA(mb) ((mb)->buffer) #define MPEG1MUX_BUFFER_TYPE(mb) ((mb)->buffer) #define MPEG1MUX_BUFFER_FIRST_TIMECODE(mb) (g_list_first((mb)->timecode_list)->data) #define BUFFER_TYPE_VIDEO 1 #define BUFFER_TYPE_AUDIO 2 #define FRAME_TYPE_IFRAME 1 #define FRAME_TYPE_BFRAME 2 #define FRAME_TYPE_PFRAME 3 #define FRAME_TYPE_AUDIO 4 typedef struct _Mpeg1MuxBuffer Mpeg1MuxBuffer; typedef struct _Mpeg1MuxTimecode Mpeg1MuxTimecode; typedef struct video_struc /* Informationen ueber Video Stream */ { unsigned int stream_length; unsigned int num_sequence; unsigned int num_seq_end; unsigned int num_pictures; unsigned int num_groups; unsigned int num_frames[4]; unsigned int avg_frames[4]; unsigned int horizontal_size; unsigned int vertical_size; unsigned int aspect_ratio; unsigned int picture_rate; unsigned int bit_rate; unsigned int comp_bit_rate; unsigned int vbv_buffer_size; unsigned int CSPF; guint64 PTS; guint64 DTS; guint64 current_PTS; guint64 current_DTS; guchar current_type; double secs_per_frame; gulong group_order, decoding_order; } Video_struc; typedef struct audio_struc /* Informationen ueber Audio Stream */ { unsigned int stream_length; unsigned int num_syncword; unsigned int num_frames[2]; unsigned int framesize; unsigned int layer; unsigned int protection; unsigned int bit_rate; unsigned int frequency; unsigned int mode; unsigned int mode_extension; unsigned int copyright; unsigned int original_copy; unsigned int emphasis; guint64 PTS; guint64 current_PTS; double samples_per_second; gulong decoding_order; } Audio_struc; struct _Mpeg1MuxTimecode { gulong length; gulong original_length; guchar frame_type; guint64 PTS; guint64 DTS; }; struct _Mpeg1MuxBuffer { unsigned char *buffer; gulong length; gulong base; gulong scan_pos; gulong last_pos; gulong current_start; guchar buffer_type; guchar stream_id; gboolean new_frame; guint64 next_frame_time; union { Video_struc video; Audio_struc audio; } info; GList *timecode_list; GList *queued_list; }; Mpeg1MuxBuffer *mpeg1mux_buffer_new (guchar type, guchar id); void mpeg1mux_buffer_queue (Mpeg1MuxBuffer * mb, GstBuffer * buf); void mpeg1mux_buffer_shrink (Mpeg1MuxBuffer * mb, gulong size); gulong mpeg1mux_buffer_update_queued (Mpeg1MuxBuffer * mb, guint64 scr); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BUFFER_H__ */