package theora
Bindings to libtheora
Install
Dune Dependency
Authors
Maintainers
Sources
v1.0.0.tar.gz
md5=4a1490eba0b6bcd06e7849acfdf2c98a
sha512=625b1faed23a06c5f9a37bef3da817f9bac1b7493ceaab7d693d11aedd3125f75df50ae59ffd3088ffb0cb1e673ab82d14f4d684e757460a126232273865e846
doc/src/theora.decoder/theora_decoder.ml.html
Source file theora_decoder.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
(* * Copyright 2007-2011 Savonet team * * This file is part of ocaml-theora. * * ocaml-theora is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * ocaml-theora 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ocaml-theora; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) let check = Theora.Decoder.check let decoder ~fill:_ os = let decoder = Theora.Decoder.create () in let data = ref None in let latest_yuv = ref None in let os = ref os in let init () = match !data with | Some (dec, info, m) -> (dec, info, m) | None -> let packet = Ogg.Stream.get_packet !os in let decoder, info, vendor, m = Theora.Decoder.headerin decoder packet in let meta = (vendor, m) in data := Some (decoder, info, meta); (decoder, info, meta) in let decode feed = let decoder, info, _ = init () in let ret = try let yuv = Theora.Decoder.get_yuv decoder !os in latest_yuv := Some yuv; yuv with Theora.Duplicate_frame -> ( match !latest_yuv with | Some yuv -> yuv | None -> raise Theora.Internal_error) in let format = match info.Theora.pixel_fmt with | Theora.PF_420 -> Ogg_decoder.Yuvj_420 | Theora.PF_reserved -> assert false | Theora.PF_422 -> Ogg_decoder.Yuvj_422 | Theora.PF_444 -> Ogg_decoder.Yuvj_444 in let ret = { Ogg_decoder.format; frame_width = info.Theora.frame_width; frame_height = info.Theora.frame_height; y_stride = ret.Theora.y_stride; uv_stride = ret.Theora.u_stride; y = ret.Theora.y; u = ret.Theora.u; v = ret.Theora.v; } in feed ret in let info () = let _, info, m = init () in ( { Ogg_decoder.fps_numerator = info.Theora.fps_numerator; fps_denominator = info.Theora.fps_denominator; width = info.Theora.frame_width; height = info.Theora.frame_height; }, m ) in let restart ~fill:_ new_os = os := new_os in let samples_of_granulepos pos = let decoder, _, _ = init () in Theora.Decoder.frames_of_granulepos decoder pos in Ogg_decoder.Video { Ogg_decoder.name = "theora"; info; decode; restart; samples_of_granulepos; } let register () = Hashtbl.add Ogg_decoder.ogg_decoders "theora" (check, decoder)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>