Lines Matching refs:os

852 void ogg_stream_init(ogg_stream_state *os, int serialno){
853 memset(os, 0, sizeof(*os));
854 os->serialno=serialno;
855 os->pageno=-1;
859 ogg_stream_state *os=_ogg_calloc(1,sizeof(*os));
860 os->serialno=serialno;
861 os->pageno=-1;
862 return os;
865 int ogg_stream_clear(ogg_stream_state *os){
866 if(os){
867 ogg_buffer_release(os->header_tail);
868 ogg_buffer_release(os->body_tail);
869 memset(os,0,sizeof(*os));
874 int ogg_stream_destroy(ogg_stream_state *os){
875 if(os){
876 ogg_buffer_release(os->header_tail);
877 ogg_buffer_release(os->body_tail);
878 memset(os,0,sizeof(*os));
879 _ogg_free(os);
888 static void _next_lace(oggbyte_buffer *ob,ogg_stream_state *os){
890 os->body_fill_next=0;
891 while(os->laceptr<os->lacing_fill){
892 int val=oggbyte_read1(ob,27+os->laceptr++);
893 os->body_fill_next+=val;
895 os->body_fill_next|=FINFLAG;
896 os->clearflag=1;
902 static void _span_queued_page(ogg_stream_state *os){
903 while( !(os->body_fill&FINFLAG) ){
905 if(!os->header_tail)break;
910 if(os->lacing_fill>=0)
911 os->header_tail=ogg_buffer_pretruncate(os->header_tail,
912 os->lacing_fill+27);
913 os->lacing_fill=0;
914 os->laceptr=0;
915 os->clearflag=0;
917 if(!os->header_tail){
918 os->header_head=0;
927 og.header=os->header_tail; /* only for parsing header values */
930 oggbyte_init(&ob,os->header_tail);
931 os->lacing_fill=oggbyte_read1(&ob,26);
934 if(pageno!=os->pageno){
935 if(os->pageno==-1) /* indicates seek or reset */
936 os->holeflag=1; /* set for internal use */
938 os->holeflag=2; /* set for external reporting */
940 os->body_tail=ogg_buffer_pretruncate(os->body_tail,
941 os->body_fill);
942 if(os->body_tail==0)os->body_head=0;
943 os->body_fill=0;
948 if(os->body_fill==0){
951 _next_lace(&ob,os);
952 os->body_tail=
953 ogg_buffer_pretruncate(os->body_tail,os->body_fill_next&FINMASK);
954 if(os->body_tail==0)os->body_head=0;
956 if(!os->spanflag && !os->holeflag)os->spanflag=2;
959 if(os->body_fill>0){
962 os->body_tail=ogg_buffer_pretruncate(os->body_tail,
963 os->body_fill);
964 if(os->body_tail==0)os->body_head=0;
965 os->body_fill=0;
968 if(!os->spanflag && !os->holeflag)os->spanflag=2;
972 if(os->laceptr<os->lacing_fill){
973 os->granulepos=ogg_page_granulepos(&og);
976 _next_lace(&ob,os);
977 os->body_fill+=os->body_fill_next; /* addition handles the flag fine;
980 _next_lace(&ob,os);
984 os->pageno=pageno+1;
985 os->e_o_s=ogg_page_eos(&og);
986 os->b_o_s=ogg_page_bos(&og);
995 int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
1001 if(serialno!=os->serialno){
1011 if(!os->body_tail){
1012 os->body_tail=og->body;
1013 os->body_head=ogg_buffer_walk(og->body);
1015 os->body_head=ogg_buffer_cat(os->body_head,og->body);
1017 if(!os->header_tail){
1018 os->header_tail=og->header;
1019 os->header_head=ogg_buffer_walk(og->header);
1020 os->lacing_fill=-27;
1022 os->header_head=ogg_buffer_cat(os->header_head,og->header);
1029 int ogg_stream_reset(ogg_stream_state *os){
1031 ogg_buffer_release(os->header_tail);
1032 ogg_buffer_release(os->body_tail);
1033 os->header_tail=os->header_head=0;
1034 os->body_tail=os->body_head=0;
1036 os->e_o_s=0;
1037 os->b_o_s=0;
1038 os->pageno=-1;
1039 os->packetno=0;
1040 os->granulepos=0;
1042 os->body_fill=0;
1043 os->lacing_fill=0;
1045 os->holeflag=0;
1046 os->spanflag=0;
1047 os->clearflag=0;
1048 os->laceptr=0;
1049 os->body_fill_next=0;
1054 int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){
1055 ogg_stream_reset(os);
1056 os->serialno=serialno;
1060 static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){
1063 _span_queued_page(os);
1065 if(os->holeflag){
1066 int temp=os->holeflag;
1067 if(os->clearflag)
1068 os->holeflag=0;
1070 os->holeflag=1;
1072 os->packetno++;
1076 if(os->spanflag){
1077 int temp=os->spanflag;
1078 if(os->clearflag)
1079 os->spanflag=0;
1081 os->spanflag=1;
1083 os->packetno++;
1088 if(!(os->body_fill&FINFLAG)) return 0;
1093 op->b_o_s=os->b_o_s;
1094 if(os->e_o_s && os->body_fill_next==0)
1095 op->e_o_s=os->e_o_s;
1098 if( (os->body_fill&FINFLAG) && !(os->body_fill_next&FINFLAG) )
1099 op->granulepos=os->granulepos;
1102 op->packetno=os->packetno;
1107 oggbyte_init(&ob,os->header_tail);
1111 op->packet=ogg_buffer_split(&os->body_tail,&os->body_head,
1112 os->body_fill&FINMASK);
1113 op->bytes=os->body_fill&FINMASK;
1115 os->body_tail=ogg_buffer_pretruncate(os->body_tail,
1116 os->body_fill&FINMASK);
1117 if(os->body_tail==0)os->body_head=0;
1121 os->body_fill=os->body_fill_next;
1122 _next_lace(&ob,os);
1125 op->packet=ogg_buffer_sub(os->body_tail,os->body_fill&FINMASK);
1126 op->bytes=os->body_fill&FINMASK;
1131 os->packetno++;
1132 os->b_o_s=0;
1138 int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){
1139 return _packetout(os,op,1);
1142 int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){
1143 return _packetout(os,op,0);