ref: 2e937b74d3d5f044c77200b8c3ee0a0b4f487571
dir: /js/h264bsd.js/
//
// Copyright (c) 2013 Sam Leitch. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//
/*
* This class wraps the details of the h264bsd library.
*/
function H264Decoder(Module) {
this.Module = Module;
this.released = false;
this.pStorage = H264Decoder.h264bsdAlloc();
H264Decoder.h264bsdInit(this.Module, this.pStorage, 0);
}
H264Decoder.prototype.release = function() {
if(this.released) return;
this.released = true;
H264Decoder.h264bsdShutdown(this.Module, this.pStorage);
H264Decoder.h264bsdFree(this.Module, this.pStorage);
}
H264Decoder.RDY = 0;
H264Decoder.PIC_RDY = 1;
H264Decoder.HDRS_RDY = 2;
H264Decoder.ERROR = 3;
H264Decoder.PARAM_SET_ERROR = 4;
H264Decoder.MEMALLOC_ERROR = 5;
// storage_t* h264bsdAlloc();
H264Decoder.h264bsdAlloc = function(Module) {
return Module.ccall('_h264bsdAlloc', number);
}
// void h264bsdFree(storage_t *pStorage);
H264Decoder.h264bsdFree = function(Module, pStorage) {
Module.ccall('_h264bsdFree', null, [number], [pStorage]);
}
// u32 h264bsdInit(storage_t *pStorage, u32 noOutputReordering);
H264Decoder.h264bsdInit = function(Module, pStorage, noOutputReordering) {
return Module.ccall('_h264bsdInit', number, [number, number], [pStorage, noOutputReordering]);
}
//void h264bsdShutdown(storage_t *pStorage);
H264Decoder.h264bsdShutdown = function(Module, pStorage) {
Module.ccall('_h264bsdShutdown', null, [number], [pStorage]);
}
// u32 h264bsdDecode(storage_t *pStorage, u8 *byteStrm, u32 len, u32 picId, u32 *readBytes);
H264Decoder.h264bsdDecode = function(Module, pStorage, pBytes, len, picId, pBytesRead) {
return Module.ccall('_h264bsdDecode',
number,
[number, number, number, number, number],
[pStorage, pBytes, len, picId, pReadBytes]);
}
// u8* h264bsdNextOutputPicture(storage_t *pStorage, u32 *picId, u32 *isIdrPic, u32 *numErrMbs);
H264Decoder.h264bsdNextOutputPicture = function(Module, pStorage, pPicId, pIsIdrPic, pNumErrMbs) {
return Module.ccall('_h264bsdNextOutputPicture',
number,
[number, number, number, number],
[pStorage, pPicId, pIsIdrPic, pNumErrMbs]);
}
// u32 h264bsdPicWidth(storage_t *pStorage);
H264Decoder.h264bsdPicWidth = function(Module, pStorage) {
return Module.ccall('_h264bsdPicWidth', number, [number], [pStorage]);
}
// u32 h264bsdPicHeight(storage_t *pStorage);
H264Decoder.h264bsdPicHeight = function(Module, pStorage) {
return Module.ccall('_h264bsdPicHeight', number, [number], [pStorage]);
}
// void h264bsdCroppingParams(storage_t *pStorage, u32 *croppingFlag, u32 *left, u32 *width, u32 *top, u32 *height);
H264Decoder.h264bsdCroppingParams = function(Module, pStorage, pCroppingFlag, pLeft, pWidth, pTop, pHeight) {
return Module.ccall('_h264bsdCroppingParams',
number,
[number, number, number, number, number, number, number],
[pStorage, pCroppingFlag, pLeft, pWidth, pTop, pHeight]);
}
// u32 h264bsdCheckValidParamSets(storage_t *pStorage);
H264Decoder.h264bsdCheckValidParamSets = function(Module, pStorage){
return Module.ccall('_h264bsdCheckValidParamSets', number, [number], [pStorage]);
}