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