00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #define KATE_INTERNAL
00011 #include "kate_internal.h"
00012
00013 #ifdef HAVE_STDLIB_H
00014 #include <stdlib.h>
00015 #endif
00016 #ifdef HAVE_STRING_H
00017 #include <string.h>
00018 #endif
00019 #include "kate/oggkate.h"
00020 #include "kate_encode_state.h"
00021
00022 static void kate_packet_wrap_ogg(kate_packet *kp,const ogg_packet *op)
00023 {
00024 kate_packet_wrap(kp,op->bytes,op->packet);
00025 }
00026
00027 static int kate_packet_create_ogg(kate_packet *kp,ogg_packet *op,kate_encode_state *kes,int eos)
00028 {
00029 op->b_o_s=(kes->packetno==0);
00030 op->e_o_s=eos;
00031 op->packetno=kes->packetno;
00032 op->granulepos=kes->granulepos;
00033 op->bytes=kp->nbytes;
00034 op->packet=_ogg_malloc(kp->nbytes);
00035 if (!op->packet) {
00036 kate_free(kp->data);
00037 return KATE_E_OUT_OF_MEMORY;
00038 }
00039 memcpy(op->packet,kp->data,kp->nbytes);
00040 kate_free(kp->data);
00041 return 0;
00042 }
00043
00054 int kate_ogg_encode_headers(kate_state *k,kate_comment *kc,ogg_packet *op)
00055 {
00056 kate_packet kp;
00057 int ret=kate_encode_headers(k,kc,&kp);
00058 if (ret<0) return ret;
00059 if (ret>0) return ret;
00060 return kate_packet_create_ogg(&kp,op,k->kes,0);
00061 }
00062
00075 int kate_ogg_encode_text(kate_state *k,kate_float start_time,kate_float stop_time,const char *text,size_t sz,ogg_packet *op)
00076 {
00077 kate_packet kp;
00078 int ret=kate_encode_text(k,start_time,stop_time,text,sz,&kp);
00079 if (ret<0) return ret;
00080 return kate_packet_create_ogg(&kp,op,k->kes,0);
00081 }
00082
00095 int kate_ogg_encode_text_raw_times(kate_state *k,kate_int64_t start_time,kate_int64_t stop_time,const char *text,size_t sz,ogg_packet *op)
00096 {
00097 kate_packet kp;
00098 int ret=kate_encode_text_raw_times(k,start_time,stop_time,text,sz,&kp);
00099 if (ret<0) return ret;
00100 return kate_packet_create_ogg(&kp,op,k->kes,0);
00101 }
00102
00114 int kate_ogg_encode_repeat(kate_state *k,kate_float t,kate_float threshold,ogg_packet *op)
00115 {
00116 kate_packet kp;
00117 int ret=kate_encode_repeat(k,t,threshold,&kp);
00118 if (ret<0) return ret;
00119 if (ret>0) {
00120 int pret=kate_packet_create_ogg(&kp,op,k->kes,0);
00121 if (pret<0) return pret;
00122 }
00123 return ret;
00124 }
00125
00137 int kate_ogg_encode_repeat_raw_times(kate_state *k,kate_int64_t t,kate_int64_t threshold,ogg_packet *op)
00138 {
00139 kate_packet kp;
00140 int ret=kate_encode_repeat_raw_times(k,t,threshold,&kp);
00141 if (ret<0) return ret;
00142 if (ret>0) {
00143 int pret=kate_packet_create_ogg(&kp,op,k->kes,0);
00144 if (pret<0) return pret;
00145 }
00146 return ret;
00147 }
00148
00158 int kate_ogg_encode_keepalive(kate_state *k,kate_float t,ogg_packet *op)
00159 {
00160 kate_packet kp;
00161 int ret=kate_encode_keepalive(k,t,&kp);
00162 if (ret<0) return ret;
00163 return kate_packet_create_ogg(&kp,op,k->kes,0);
00164 }
00165
00175 int kate_ogg_encode_keepalive_raw_times(kate_state *k,kate_int64_t t,ogg_packet *op)
00176 {
00177 kate_packet kp;
00178 int ret=kate_encode_keepalive_raw_times(k,t,&kp);
00179 if (ret<0) return ret;
00180 return kate_packet_create_ogg(&kp,op,k->kes,0);
00181 }
00182
00193 int kate_ogg_encode_finish(kate_state *k,kate_float t,ogg_packet *op)
00194 {
00195 kate_packet kp;
00196 int ret=kate_encode_finish(k,t,&kp);
00197 if (ret<0) return ret;
00198 return kate_packet_create_ogg(&kp,op,k->kes,1);
00199 }
00200
00211 int kate_ogg_encode_finish_raw_times(kate_state *k,kate_int64_t t,ogg_packet *op)
00212 {
00213 kate_packet kp;
00214 int ret=kate_encode_finish_raw_times(k,t,&kp);
00215 if (ret<0) return ret;
00216 return kate_packet_create_ogg(&kp,op,k->kes,1);
00217 }
00218
00226 int kate_ogg_decode_is_idheader(const ogg_packet *op)
00227 {
00228 kate_packet kp;
00229 if (!op) return 0;
00230 if (op->packetno!=0) return 0;
00231 kate_packet_wrap_ogg(&kp,op);
00232 return kate_decode_is_idheader(&kp);
00233 }
00234
00244 int kate_ogg_decode_headerin(kate_info *ki,kate_comment *kc,ogg_packet *op)
00245 {
00246 kate_packet kp;
00247 if (!op) return KATE_E_INVALID_PARAMETER;
00248 kate_packet_wrap_ogg(&kp,op);
00249 return kate_decode_headerin(ki,kc,&kp);
00250 }
00251
00260 int kate_ogg_decode_packetin(kate_state *k,ogg_packet *op)
00261 {
00262 kate_packet kp;
00263 if (!op) return KATE_E_INVALID_PARAMETER;
00264 kate_packet_wrap_ogg(&kp,op);
00265 return kate_decode_packetin(k,&kp);
00266 }
00267