Difference between revisions of "Writ"

From XiphWiki
Jump to navigation Jump to search
m (→‎"The Old Way": spam removal)
Line 314: Line 314:
will scroll the previous data upwards with no line breaks seperating them
will scroll the previous data upwards with no line breaks seperating them
(unless present in text).
(unless present in text).
[http://www.shop263.com/i-413/938.htm 灌装机]
[http://www.shop263.com/i-413/939.htm 光触媒材料]
[http://www.shop263.com/i-413/940.htm 光固化地坪]
[http://www.shop263.com/i-413/941.htm 光固化涂料用树脂]
[http://www.shop263.com/i-413/942.htm 光缆集中监测系统]
[http://www.shop263.com/i-413/943.htm 光膜]
[http://www.shop263.com/i-413/944.htm 光学材料制造]
[http://www.shop263.com/i-413/945.htm 光学眼镜毛坯]
[http://www.shop263.com/i-413/946.htm 光阻剂]
[http://www.shop263.com/i-413/947.htm 广播级摄像机锂离子电池]
[http://www.shop263.com/i-413/948.htm 广告袋]
[http://www.shop263.com/i-413/949.htm 广告赠品]
[http://www.shop263.com/i-413/950.htm 规整波纹填料]
[http://www.shop263.com/i-413/951.htm 硅胶]
[http://www.shop263.com/i-413/952.htm 硅胶按键]
[http://www.shop263.com/i-413/953.htm 硅胶小包装]
[http://www.shop263.com/i-413/954.htm 硅凝胶]
[http://www.shop263.com/i-413/955.htm 硅酸锆]
[http://www.shop263.com/i-413/956.htm 硅酸盐水泥]
[http://www.shop263.com/i-413/957.htm 硅酮胶包装瓶]
[http://www.shop263.com/i-413/958.htm 硅烷交联聚乙烯电缆绝缘料耐环]
[http://www.shop263.com/i-413/959.htm 硅微粉]
[http://www.shop263.com/i-413/960.htm 国际国内贸易]
[http://www.shop263.com/i-413/961.htm 过滤布]
[http://www.shop263.com/i-413/962.htm 过滤稀土瓷砂]
[http://www.shop263.com/i-413/963.htm 海水电解不溶性氧化物电极]
[http://www.shop263.com/i-413/964.htm 含油尼龙]
[http://www.shop263.com/i-413/965.htm 航空煤油]
[http://www.shop263.com/i-413/966.htm 航空器材]
[http://www.shop263.com/i-413/967.htm 航空润滑油]
[http://www.shop263.com/i-413/968.htm 合成革]
[http://www.shop263.com/i-413/969.htm 合成树脂]
[http://www.shop263.com/i-413/970.htm 合成型热传导液]
[http://www.shop263.com/i-413/971.htm 黑白全色胶卷]
[http://www.shop263.com/i-413/972.htm 黑白全色胶片]
[http://www.shop263.com/i-413/973.htm 黑色抗静电塑料原料]
[http://www.shop263.com/i-413/974.htm 红外防伪发光材料]
[http://www.shop263.com/i-413/975.htm 红外激光探测板]
[http://www.shop263.com/i-413/976.htm 糊用聚氯乙烯树脂]
[http://www.shop263.com/i-413/977.htm 护耳罩]
[http://www.shop263.com/i-413/978.htm 护罩盖]
[http://www.shop263.com/i-413/979.htm 花钵]
[http://www.shop263.com/i-413/980.htm 花岗岩板材]
[http://www.shop263.com/i-413/981.htm 花坛]
[http://www.shop263.com/i-413/982.htm 滑石粉]
[http://www.shop263.com/i-413/983.htm 化肥]
[http://www.shop263.com/i-413/984.htm 化工填料]
[http://www.shop263.com/i-413/985.htm 化合物纳米粉末]
[http://www.shop263.com/i-413/986.htm 化纤]
[http://www.shop263.com/i-413/987.htm 化纤绸]
[http://www.shop263.com/i-413/988.htm 化纤面料]
[http://www.shop263.com/i-413/989.htm 化学矿]
[http://www.shop263.com/i-413/990.htm 化学试剂]
[http://www.shop263.com/i-413/991.htm 化学纤维丝网]
[http://www.shop263.com/i-413/992.htm 化学纤维油剂]
[http://www.shop263.com/i-413/993.htm 化油器清洗剂]
[http://www.shop263.com/i-413/994.htm 化妆品]
[http://www.shop263.com/i-413/995.htm 化妆品玻璃]
[http://www.shop263.com/i-413/996.htm 化妆品工艺]
[http://www.shop263.com/i-413/997.htm 化妆品瓶]
[http://www.shop263.com/i-413/998.htm 化妆品容器]
[http://www.shop263.com/i-413/999.htm 化妆品添加剂]
[http://www.shop263.com/i-413/1000.htm 环保大芯板]
[http://www.shop263.com/i-413/1001.htm 环保垃圾桶]
[http://www.shop263.com/i-413/1001.htm 环保滤料]
[http://www.shop263.com/i-413/1002.htm 环保乳胶漆]
[http://www.shop263.com/i-413/1003.htm 环境工程]
[http://www.shop263.com/i-413/1004.htm 环氧胶系列]
[http://www.shop263.com/i-413/1005.htm 环氧树脂]
[http://www.shop263.com/i-413/1006.htm 环氧系列固化稀释剂]
[http://www.shop263.com/i-413/1007.htm 黄蜡]
[http://www.shop263.com/i-413/1008.htm 黄抛光膏]
[http://www.shop263.com/i-413/1009.htm 磺化酞菁钴]
[http://www.shop263.com/i-413/1010.htm 回位装置]
[http://www.shop263.com/i-413/1011.htm 混苯]
[http://www.shop263.com/i-413/1012.htm 混合气体]
[http://www.shop263.com/i-413/1013.htm 混凝土防水屏障]
[http://www.shop263.com/i-413/1014.htm 混凝土膨剂]
[http://www.shop263.com/i-413/1015.htm 火柴]
[http://www.shop263.com/i-413/1016.htm 机械护罩]
[http://www.shop263.com/i-413/1017.htm 机械油]
[http://www.shop263.com/i-413/1018.htm 机械油封]
[http://www.shop263.com/i-413/1019.htm 机制甘油香皂]
[http://www.shop263.com/i-413/1020.htm 机制透明皂]
[http://www.shop263.com/i-413/1021.htm 激光照排胶片冲洗套药]
[http://www.shop263.com/i-413/1022.htm 集装桶]
[http://www.shop263.com/i-413/1023.htm 加氢阻垢剂]
[http://www.shop263.com/i-413/1024.htm 夹层玻璃]
[http://www.shop263.com/i-413/1025.htm 家庭急救用品]
[http://www.shop263.com/i-413/1026.htm 甲苯]
[http://www.shop263.com/i-413/1027.htm 甲基苯三唑]
[http://www.shop263.com/i-413/1028.htm 甲基丙烯酸甲酯]
[http://www.shop263.com/i-413/1029.htm 甲基儿茶酚]
[http://www.shop263.com/i-413/1030.htm 甲基二乙醇胺]
[http://www.shop263.com/i-413/1031.htm 甲基腈]
[http://www.shop263.com/i-413/1032.htm 甲基萘]
[http://www.shop263.com/i-413/1033.htm 甲基异丁基甲酮]
[http://www.shop263.com/i-413/1034.htm 甲醚化六羟甲基三聚氰胺树脂]
[http://www.shop263.com/i-413/1035.htm 甲酸]
[http://www.shop263.com/i-413/1036.htm 减速机专用脂]
[http://www.shop263.com/i-413/1037.htm 剪切平直型]
[http://www.shop263.com/i-413/1038.htm 碱锌光亮剂]
[http://www.shop263.com/i-413/1039.htm 碱性锌锰]
[http://www.shop263.com/i-413/1040.htm 碱性锌锰干电池]
[http://www.shop263.com/i-413/1041.htm 建材]
[http://www.shop263.com/i-413/1042.htm 建筑材料]
[http://www.shop263.com/i-413/1043.htm 建筑钢材]
[http://www.shop263.com/i-413/1044.htm 建筑模板]
[http://www.shop263.com/i-413/1045.htm 建筑模板生产车间]
[http://www.shop263.com/i-413/1046.htm 健身器材]
[http://www.shop263.com/i-413/1047.htm 键盘内衬]
[http://www.shop263.com/i-413/1048.htm 胶辊胶]
[http://www.shop263.com/i-413/1049.htm 胶合板模板平铺施工]
[http://www.shop263.com/i-413/1050.htm 胶木粉]
[http://www.shop263.com/i-413/1051.htm 焦宝石]
[http://www.shop263.com/i-413/1052.htm 焦亚硫酸钠]
[http://www.shop263.com/i-413/1053.htm 巾包装袋]
[http://www.shop263.com/i-413/1054.htm 金锭]
[http://www.shop263.com/i-413/1055.htm 金漆镶嵌]
[http://www.shop263.com/i-413/1056.htm 金属表面处理剂]
[http://www.shop263.com/i-413/1057.htm 金属加工用油]
[http://www.shop263.com/i-413/1058.htm 金属加工油]
[http://www.shop263.com/i-413/1059.htm 金属纳米粉末]
[http://www.shop263.com/i-413/1060.htm 锦纶6聚合]
[http://www.shop263.com/i-413/1061.htm 锦纶丝]
[http://www.shop263.com/i-413/1062.htm 锦纶线]
[http://www.shop263.com/i-413/1063.htm 精甲醇]
[http://www.shop263.com/i-413/1064.htm 精密仪器]
[http://www.shop263.com/i-413/1065.htm 精密铸造]
[http://www.shop263.com/i-413/1066.htm 精品搪瓷]
[http://www.shop263.com/i-413/1067.htm 精塑制品]
[http://www.shop263.com/i-413/1068.htm 精细化工]
[http://www.shop263.com/i-413/1069.htm 精制盐]
[http://www.shop263.com/i-413/1070.htm 警示带]
[http://www.shop263.com/i-413/1071.htm 净化设备]
[http://www.shop263.com/i-413/1072.htm 镜片胶]
[http://www.shop263.com/i-413/1073.htm 镜铜纸]
[http://www.shop263.com/i-413/1074.htm 酒精消毒湿巾]
[http://www.shop263.com/i-413/1075.htm 局部镀铝膜]
[http://www.shop263.com/i-413/1076.htm 矩形镀铜碳棒]
[http://www.shop263.com/i-413/1077.htm 矩形气刨炭棒]
[http://www.shop263.com/i-413/1078.htm 聚氨脂防水涂料]
[http://www.shop263.com/i-413/1079.htm 聚氨酯]
[http://www.shop263.com/i-413/1080.htm 聚氨酯树脂]
[http://www.shop263.com/i-413/1081.htm 聚胺脂泡沫填缝剂]
[http://www.shop263.com/i-413/1082.htm 聚丙烯]
[http://www.shop263.com/i-413/1083.htm 聚丙烯捆扎绳]
[http://www.shop263.com/i-413/1084.htm 聚丙烯填料]
[http://www.shop263.com/i-413/1085.htm 聚合硫酸铁]
[http://www.shop263.com/i-413/1086.htm 聚合物锂离子电池]
[http://www.shop263.com/i-413/1087.htm 聚氯乙烯复合管]
[http://www.shop263.com/i-413/1088.htm 聚氯乙烯加工助剂]
[http://www.shop263.com/i-413/1089.htm 聚氯乙烯排水管]
[http://www.shop263.com/i-413/1090.htm 聚醚多元醇]
[http://www.shop263.com/i-413/1091.htm 聚四氟乙烯]
[http://www.shop263.com/i-413/1092.htm 聚四氟乙烯密封圈]
[http://www.shop263.com/i-413/1093.htm 聚四氟乙烯制品]
[http://www.shop263.com/i-413/1094.htm 聚烯烃复合纤维]
[http://www.shop263.com/i-413/1095.htm 聚乙二醇]
[http://www.shop263.com/i-413/1096.htm 聚乙烯]
[http://www.shop263.com/i-413/1097.htm 聚乙烯醇]
[http://www.shop263.com/i-413/1098.htm 聚乙烯工农用薄膜]
[http://www.shop263.com/i-413/1099.htm 聚乙烯购物袋]
[http://www.shop263.com/i-413/1100.htm 聚酯薄膜]
[http://www.shop263.com/i-413/1101.htm 聚酯切片]
[http://www.shop263.com/i-413/1102.htm 聚酯芯输送带]
[http://www.shop263.com/i-413/1103.htm 卷装背心]
[http://www.shop263.com/i-413/1104.htm 卷装食品保鲜袋]
[http://www.shop263.com/i-413/1105.htm 绝缘护套]
[http://www.shop263.com/i-413/1106.htm 绝缘料聚丙烯管材专用料]
[http://www.shop263.com/i-413/1107.htm 军用高分子材料]
[http://www.shop263.com/i-413/1108.htm 卡扣线系列产品]
[http://www.shop263.com/i-413/1109.htm 聚晶石]
[http://www.shop263.com/i-413/1110.htm 开缸剂]
[http://www.shop263.com/i-413/1111.htm 开水炉]
[http://www.shop263.com/i-413/1112.htm 康复理疗器械]
[http://www.shop263.com/i-413/1113.htm 抗静电高分子材料]
[http://www.shop263.com/i-413/1114.htm 抗磨液压油]
[http://www.shop263.com/i-413/1115.htm 空气除尘滤袋]
[http://www.shop263.com/i-413/1116.htm 空气清新剂]
[http://www.shop263.com/i-413/1117.htm 苦味酸]
[http://www.shop263.com/i-413/1118.htm 矿物型导热油]
[http://www.shop263.com/i-413/1119.htm 矿渣硅酸盐水泥]
[http://www.shop263.com/i-413/1120.htm 垃圾袋]
[http://www.shop263.com/i-413/1121.htm 拉挤树脂]
[http://www.shop263.com/i-413/1122.htm 拉链片]
[http://www.shop263.com/i-413/1123.htm 蜡烛]
[http://www.shop263.com/i-413/1124.htm 蜡烛台玻璃]
[http://www.shop263.com/i-413/1125.htm 老弱病残护理商品]
[http://www.shop263.com/i-413/1126.htm 雷射]
[http://www.shop263.com/i-413/1127.htm 雷射雕刻按键]
[http://www.shop263.com/i-413/1128.htm 镭射膜]
[http://www.shop263.com/i-413/1129.htm 镭射转印膜]
[http://www.shop263.com/i-413/1130.htm 冷拔钢丝型]
[http://www.shop263.com/i-413/1131.htm 冷却塔]
[http://www.shop263.com/i-413/1132.htm 冷热水管]
[http://www.shop263.com/i-413/1133.htm 离子交换树脂]
[http://www.shop263.com/i-413/1134.htm 礼花弹]
[http://www.shop263.com/i-413/1135.htm 礼品玻璃]
[http://www.shop263.com/i-413/1136.htm 锂离子电池充电器]
[http://www.shop263.com/i-413/1137.htm 沥青]
[http://www.shop263.com/i-413/1138.htm 连接气刨炭棒]
[http://www.shop263.com/i-413/1139.htm 连接式镀铜碳棒]
[http://www.shop263.com/i-413/1140.htm 连卷袋]
[http://www.shop263.com/i-413/1141.htm 连体豪华玻璃洗手盆]
[http://www.shop263.com/i-413/1142.htm 连铸保护渣]
[http://www.shop263.com/i-413/1143.htm 炼油]
[http://www.shop263.com/i-413/1144.htm 磷矿粉]
[http://www.shop263.com/i-413/1145.htm 磷矿石]
[http://www.shop263.com/i-413/1146.htm 磷酸二氢铝]
[http://www.shop263.com/i-413/1147.htm 磷酸二氢镁]
[http://www.shop263.com/i-413/1148.htm 磷酸氢镁]
[http://www.shop263.com/i-413/1149.htm 磷酸盐]
[http://www.shop263.com/i-413/1150.htm 流态化石灰粉]
[http://www.shop263.com/i-413/1151.htm 硫磺块]
[http://www.shop263.com/i-413/1152.htm 硫酸锆]
[http://www.shop263.com/i-413/1153.htm 硫酸铅]
[http://www.shop263.com/i-413/1154.htm 硫酸氧锆]
[http://www.shop263.com/i-413/1155.htm 柳编制品]
[http://www.shop263.com/i-413/1156.htm 滤紫外线石英管]
[http://www.shop263.com/i-413/1157.htm 铝箔封口垫片]
[http://www.shop263.com/i-413/1158.htm 铝箔食品容器]
[http://www.shop263.com/i-413/1159.htm 铝材光亮剂]
[http://www.shop263.com/i-413/1160.htm 铝合金氧化]
[http://www.shop263.com/i-413/1161.htm 铝用碳素]
[http://www.shop263.com/i-413/1162.htm 绿色环保型增塑剂]
[http://www.shop263.com/i-413/1163.htm 氯化铵]
[http://www.shop263.com/i-413/1164.htm 氯化钾]
[http://www.shop263.com/i-413/1165.htm 氯化聚乙烯卷材]
[http://www.shop263.com/i-413/1166.htm 氯化镁]
[http://www.shop263.com/i-413/1167.htm 氯化石蜡]
[http://www.shop263.com/i-413/1168.htm 氯化石蜡油清]
[http://www.shop263.com/i-413/1169.htm 氯碱工业隔膜法]
[http://www.shop263.com/i-413/1170.htm 氯碱化工]
[http://www.shop263.com/i-413/1171.htm 氯霉素原料药]
[http://www.shop263.com/i-413/1172.htm 氯霉素中间体]
[http://www.shop263.com/i-413/1173.htm 氯酸盐工业用金属阳极]
[http://www.shop263.com/i-413/1174.htm 箩筐]
[http://www.shop263.com/i-413/1175.htm 螺栓松动剂]
[http://www.shop263.com/i-413/1176.htm 埋弧焊用烧结焊剂]
[http://www.shop263.com/i-413/1177.htm 梅花点波纹填料]
[http://www.shop263.com/i-413/1178.htm 煤焦油瓷漆]
[http://www.shop263.com/i-413/1179.htm 煤炭]
[http://www.shop263.com/i-413/1180.htm 煤油]
[http://www.shop263.com/i-413/1181.htm 美容面罩]
[http://www.shop263.com/i-413/1182.htm 美容泡泡沐浴露]
[http://www.shop263.com/i-413/1183.htm 美容纸]
[http://www.shop263.com/i-413/1184.htm 镁基脱硫剂]
[http://www.shop263.com/i-413/1185.htm 密封材料]
[http://www.shop263.com/i-413/1186.htm 密封段]
[http://www.shop263.com/i-413/1187.htm 密封件]
[http://www.shop263.com/i-413/1188.htm 密封胶溶剂]
[http://www.shop263.com/i-413/1189.htm 密封胶条]
[http://www.shop263.com/i-413/1190.htm 密压板]
[http://www.shop263.com/i-413/1191.htm 棉麻固色油]
[http://www.shop263.com/i-413/1192.htm 免洗型助焊剂]
[http://www.shop263.com/i-413/1193.htm 模具标准件加工]
[http://www.shop263.com/i-413/1194.htm 模具硅胶]
[http://www.shop263.com/i-413/1195.htm 模具注塑]
[http://www.shop263.com/i-413/1196.htm 模内标签]
[http://www.shop263.com/i-413/1197.htm 模内转印]
[http://www.shop263.com/i-413/1198.htm 模造纸]
[http://www.shop263.com/i-413/1199.htm 摩托车挡风玻璃]
[http://www.shop263.com/i-413/1200.htm 磨擦试验机]
[http://www.shop263.com/i-413/1201.htm 木材表面转印膜]
[http://www.shop263.com/i-413/1202.htm 木钙]
[http://www.shop263.com/i-413/1203.htm 木钠]
[http://www.shop263.com/i-413/1204.htm 木糖]
[http://www.shop263.com/i-413/1205.htm 木糖醇]
[http://www.shop263.com/i-413/1206.htm 木质素磺酸钙]
[http://www.shop263.com/i-413/1207.htm 内燃机油]
[http://www.shop263.com/i-413/1208.htm 高效脱硫剂]
[http://www.shop263.com/i-413/1209.htm 高效脱硫脱碳剂]
[http://www.shop263.com/i-413/1210.htm 高效脱漆剂]
[http://www.shop263.com/i-413/1211.htm 高效阻燃剂]
[http://www.shop263.com/i-413/1212.htm 复合橡胶分散剂]
[http://www.shop263.com/i-413/1213.htm 锆氟酸铵]
[http://www.shop263.com/i-413/1214.htm 锆氟酸钾]
[http://www.shop263.com/i-413/1215.htm 锆刚玉]
[http://www.shop263.com/i-413/1216.htm 锆英粉]
[http://www.shop263.com/i-413/1217.htm 锆英砂]
[http://www.shop263.com/i-413/1218.htm 隔热耐烧蚀涂料]
[http://www.shop263.com/i-413/1219.htm 各种溶剂]
[http://www.shop263.com/i-413/1220.htm 各种卫生纸]
[http://www.shop263.com/i-413/1221.htm 各种橡胶杂件]
[http://www.shop263.com/i-413/1222.htm 各种粘结剂]
[http://www.shop263.com/i-413/1223.htm 铬矿]
[http://www.shop263.com/i-413/1224.htm 给排水管件管材]
[http://www.shop263.com/i-413/1225.htm 给水管材]
[http://www.shop263.com/i-413/1226.htm 工程塑料包装]
[http://www.shop263.com/i-413/1227.htm 工程橡塑]
[http://www.shop263.com/i-413/1228.htm 工具箱]
[http://www.shop263.com/i-413/1229.htm 工矿橡胶配件]
[http://www.shop263.com/i-413/1230.htm 工业苯]
[http://www.shop263.com/i-413/1231.htm 工业齿轮油]
[http://www.shop263.com/i-413/1232.htm 工业缝包线]
[http://www.shop263.com/i-413/1233.htm 设备清洗]
[http://www.shop263.com/i-413/1234.htm 工业级羊毛脂]
[http://www.shop263.com/i-413/1235.htm 工业甲醛]
[http://www.shop263.com/i-413/1236.htm 工业硫酸]
[http://www.shop263.com/i-413/1237.htm 工业清洗剂]
[http://www.shop263.com/i-413/1238.htm 工业热风炉]
[http://www.shop263.com/i-413/1239.htm 工业润滑油]
[http://www.shop263.com/i-413/1240.htm 工业碳酸锂]
[http://www.shop263.com/i-413/1241.htm 工业陶瓷]
[http://www.shop263.com/i-413/1242.htm 工业盐]
[http://www.shop263.com/i-413/1243.htm 工业用润滑油]
[http://www.shop263.com/i-413/1244.htm 工业用塑料薄膜]
[http://www.shop263.com/i-413/1245.htm 工业用油]
[http://www.shop263.com/i-413/1246.htm 工艺玻璃]
[http://www.shop263.com/i-413/1247.htm 工艺雕刻用牛角]
[http://www.shop263.com/i-413/1248.htm 工艺品树脂]
[http://www.shop263.com/i-413/1249.htm 健康监测仪器]

Revision as of 19:58, 31 October 2004


Ogg Writ is a text phrase codec. While its primary purpose is to embed subtitles or captions in a Theora stream, its design makes it useful for many other purposes. It could provide lyrics to song encoded in Vorbis, a transcript to a political debate encoded in Speex, or even incorporate a live chat session as part of a continuous video stream.

One of the unique aspects of Writ is its discontinuous nature, that is, unlike other Ogg codecs the granules for which seperate packets effect may overlap. See the Granules and Muxing section below for how this works.


Current Ogg Writ development is on Xiph SVN as /trunk/writ/. It's being developed to use libogg2, so you'll need both to work on it. The reference encoder and decoder are available as part of the py-ogg2 package which is available on Xiph SVN as /trunk/py-ogg2/.

This is a (near final) working draft of the spec
Writ has been designed so that encoders/decoders can support a bare minimum and be fully compatable with future subversions. Each subversion adds a new feature, some building on others, adding a new header packet and likely a new field to each body packet.

Decoders should ignore header packets beyond what they were written to support and also ignore extra fields in data packets beyond their current version. This allows new features to be added without requiring that all software, or even most software, to support them.

We will be conservative about adding future subversions.

Header Packet 0 (BOS, 16 bytes):
 0x00                                   ( 8 bit Header 0)
 "writ" (LSB 0x74697277)                (32 bit codec identification)
 version                                ( 8 bit unsigned int, 0 = Alpha)
 subversion                             ( 8 bit unsigned int)
 granulerate_numerator                  (32 bit unsigned int)
 granulerate_denominator                (32 bit unsigned int)

Data Packet (each):
 0xFF                                   ( 8 bit 0xFF = data packet)
 granule_start                          (64 bit signed integer)
 granule_duration                       (32 bit unsigned integer)
 text_length                            ( 8 bit unsigned integer)
 text_string                            (variable-length UTF-8 string)

<B>Subversion 1 adds multiple language support</B>

Header Packet 1 (Language Definition, 8+ bytes) :
 0x01                                   ( 8 bit Header 1)
 "writ" (LSB 0x74697277)                (32 bit codec identification)
 num_languages                          ( 8 bit unsigned int)
 [repeated 1+num_languages times] :
   language_length                      ( 8 bit unsigned int)
   language_string                      (0+language_length rfc3066)
   language_desc_length                 ( 8 bit unsigned int)
   language_desc_string                 (0+language_desc_length UTF-8)

Data Packet (each):
 0xFF                                   ( 8 bit 0xFF = data packet)
 granule_start                          (64 bit signed integer)
 granule_duration                       (32 bit unsigned integer)
 [repeated num_languages times] :
   text_length                          ( 8 bit unsigned integer)
   text_string                          (variable-length UTF-8 string)

<B>Subversion 2 adds text window support</B>

Header Packet 2 (Window Definition, 10+ bytes) :
 0x02                                   ( 8 bit Header 2)
 "writ" (LSB 0x74697277)                (32 bit codec identification)
 location_scale_x                       (16 bit unsigned int)
 location_scale_y                       (16 bit unsigned int)
 num_windows                            ( 8 bit unsigned int)
 [if (window_num > 0) repeated window_num times] :
   location_x                           (variable length, see below)
   location_y                           (variable length, see below)
   location_width                       (variable length, see below)
   location_height                      (variable length, see below)
   alignment_x                          ( 2 bit alignment, see below)
   alignment_y                          ( 2 bit alignment, see below)

Data Packet (each):
 0xFF                                   ( 8 bit 0xFF = data packet)
 granule_start                          (64 bit signed integer)
 granule_duration                       (32 bit unsigned integer)
 [repeated num_languages times] :
   text_length                          ( 8 bit unsigned integer)
   text_string                          (variable-length UTF-8 string)
 [if (window_num > 1)] :
   window_id                            ( 8 bit unsigned integer)

<B>Example Stream</B>
 Header Packet 0
  version 0
  subversion 2
  granulenum 1
  granuledom 1

 Header Packet 1
  num_languages 2
   Language 0:
    language en
    language_desc English
   Language 1:
    language es
    language_desc Spanish

 Header Packet 2
  location_scale_x 4000 (12 bits)
  location_scale_y 270  ( 9 bits)
  num_windows 2
   Window 0:
    location_x 1
    location_y 2
    location_width 3
    location_height 1
    alignment_x 3 (Full)
    alignment_y 3 (Full)
   Window 1:
    location_x 5
    location_y 6
    location_width 7
    location_height 1
    alignment_x 3 (Full)
    alignment_y 3 (Full)

 Phrase Packet:
  granule_start 5
  granule_duration 10
  Language 0: "Hello World!"
  Language 1: "Hola, Mundo!"
  window_id 0
 \xff\x05\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x0cHello World!\x0cHola, Mundo!\x00

 Phrase Packet:
  granule_start 12
  granule_duration 15
  Language 0: "It's a beautiful day to be born."
  Language 1: "Es un día hermoso para que se llevará."
  window_id 1
 \xff\x0c\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x20It's a beautiful day to be born.\x26Es un d\xeda hermoso para que se llevar\xe1.\x01

Granules and Muxing

Granulepos in Writ (as well as future discontinuous codecs) will be by start time, not end time, that the data in a given page is tagged for. This greatly simplifies this specification (see the old method below).

All Writ phrases will be provided at and given the granulepos of their start time, ordered by their start time within the logical bitstream.

Phrase packets with long durations should be repeated in the logical bitstream at regular intervals to ensure that a player seeking to the middle of their duration will still see them. These packet copies will be identical to their original, including the start and duration fields, the granulepos of the page they reside on will be incremented for each copy to place it forward on the logical bitstream.

No two phrases can start on the same granule. On decoding, each packets' start granule is checked against already known packets. If a match is found the new packet is ignored. This prevents phrase copies from being interpreted as new phrases.

Seeking Example

Here is a timeline (granule numbers at top, read down) of a sample stream:

                        <- Granules ->
 ___________  ____________  ____________  ____________  _____________
 ____________________   ____________________________________
|_A____________>_____| |_D____________>______________>______|
     _________      ___    __________     ___________
    |_B_______|    |_C_|  |_E________|   |_F_________|

 (note: these have been seperated vertically for easy viewing only)

Packet  Granule Description
 V H0   0       Vorbis Header 0x01 (page by itself)
 W H0   0       Writ Header 0 (page by itself)
 V H1   0       Vorbis Header 0x03
 V H2   0       Vorbis Header 0x05
 W H1   0       Writ Header 1 (Language Defs)
 W H2   0       Writ Header 2 (Window Defs)
 W A    0       Writ Phrase A
 W B    4       Writ Phrase B
 V      12      Vorbis 0-12
 W A    15      Writ Phrase A
 W C    19      Writ Phrase C
 W D    23      Writ Phrase D
 V      26      Vorbis 13-26
 W E    26      Writ Phrase E
 W D    38      Writ Phrase D
 V      40      Vorbis 27-40
 W F    41      Writ Phrase F
 W D    53      Writ Phrase D (EOF)
 V      54      Vorbis 41-54
 V      69      Vorbis 55-69 (EOF)

Player begins decoding at beginning of stream. It reads the BOS pages for both codecs, then receives a non-BOS page. At this point it knows that it has two bitstreams to decode and has resolved that one is Writ and the other Vorbis. It'll continue processing the headers for both.

Next it's going to find two Writ packets (phrases A and B) and toss them into libwrit. Then it'll get to the first Vorbis data page. It now has data from both bitstreams, and it knows (from the granulepos on the Vorbis page) that it has enough data to run until 12. If there were any Writ packets before 12 they would have appeared first.

At around granule 9 the listener seeks forward to 24. This will cause a rapid seek through the file to find the first page with a granulepos greater than the seek position and begin decoding at that point.

It'll find a Vorbis packet containing 13-26 (and not use 13-23) and Writ phrase E. Again, having data from both bitstreams it can begin playing. D would normally appear at granule 24 but is not known about yet. The player knows that this is only enough to decode until 26 so, knowing enough to prebuffer, continues reading the file as it plays the media.

The next packet it finds is Writ phrase D, and passing it to libwrit, is found that the current granulepos is within the duration. It is thus displayed immediatly, as it's prebuffered, without waiting for granulepos 38. It'll keep reading (because the maximum decoded Vorbis is still 26) and find a Vorbis packet with a 40 granulepos.

As it nears 38 it'll read the file again and find Writ phrase F, which takes it out to 41. Vorbis only goes until 40, so it'll have to keep reading until the next Vorbis packet.

Next it'll find Writ phrase D, which will be ignored by libwrit because phrase D is already known (matches start granule of earlier D), and the EOF on that page marks this as the last of the Writ stream.

It'll continue reading for the next Vorbis data and find the packet for granule 54, followed by the Vorbis packet for granule 69. With that it's EOS, EOF, finished.

This is of course a simplistic example, Writ and Vorbis will rarely have granules which equal the same amount of time. Each bitstream has its' own granule -> time mapping which is calculated when muxing concurrent bitstreams within the file. So if there are 44100 Vorbis granules per second and only 4 Writ granules per second, pages would be ordered as W25 V297892 W31 V385932 W39 W41 V463057 etc. The logic used in the above example works after this granule-time mapping is calculated.

Ongoing Discussion

  • How does this get "encoded" and "merged"?
    • <purple_haese> The muxing rule is pages are arranged in ascending order by the timestamp that is represented by their granulepos.
  • For what reason is the 0x00 and 0xFF byte at the beginning of header and data packet respectively?
    • <xiphmont> If, after a seek, I hand your codec a header packet, what does the codec do?
    • <xiphmont> It does *nothing*. If I haven't told it to reset, the header is not data, *it must ignore the header*.
    • <xiphmont> this eliminates a huge raft of special cases in Ogg seeking.

"The Old Way"

The section below is for historical purposes only!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  In a lengthy discussion with Monty and Derf the decidion to change the
  behavior of discontinuous bitstreams in Ogg, or rather, extend the
  current Ogg specification to handle discontinuous codecs, was made.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The Ogg granulepos of each page is equal to the expiration of the text, packets are ordered by expiration time and may overlap. So, at or before text A is to be displayed, the following sequence is included:

Physical        Text    Text    Text
Location        Packet  Start   Expire  (text expire = page granulepos)
00              B       04      14
00              D       19      23
00              C       09      24
00              F       27      34
00              E       26      37
00              G       35      47
00              H       42      54
00              A       00      59
51              I       51      66

So B, D, C, F, E, G, and H are all defined before A, building a FIFO (first in first out) buffer in the player. Encoders should limit the extend of this behavior to reduce nessesary buffer size on the player side by prematurly expiring captions and recreating them periodically.

The screen should not be updated with the new captions until they've all been processed to prevent "flicker". New caption data to the same position will scroll the previous data upwards with no line breaks seperating them (unless present in text).