mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 00:55:37 +00:00
a2d1c31646
Bug 872822 - Update WebVTT library to v0.5. r=rillian
126 lines
3.5 KiB
C
126 lines
3.5 KiB
C
/**
|
|
* Copyright (c) 2013 Mozilla Foundation and Contributors
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* - Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* - Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "parser_internal.h"
|
|
#include "cue_internal.h"
|
|
|
|
WEBVTT_EXPORT webvtt_status
|
|
webvtt_create_cue( webvtt_cue **pcue )
|
|
{
|
|
webvtt_cue *cue;
|
|
if( !pcue ) {
|
|
return WEBVTT_INVALID_PARAM;
|
|
}
|
|
cue = (webvtt_cue *)webvtt_alloc0( sizeof(*cue) );
|
|
if( !cue ) {
|
|
return WEBVTT_OUT_OF_MEMORY;
|
|
}
|
|
/**
|
|
* From http://dev.w3.org/html5/webvtt/#parsing (10/25/2012)
|
|
*
|
|
* Let cue's text track cue snap-to-lines flag be true.
|
|
*
|
|
* Let cue's text track cue line position be auto.
|
|
*
|
|
* Let cue's text track cue text position be 50.
|
|
*
|
|
* Let cue's text track cue size be 100.
|
|
*
|
|
* Let cue's text track cue alignment be middle alignment.
|
|
*/
|
|
webvtt_ref( &cue->refs );
|
|
webvtt_init_string( &cue->id );
|
|
webvtt_init_string( &cue->body );
|
|
cue->from = 0xFFFFFFFFFFFFFFFF;
|
|
cue->until = 0xFFFFFFFFFFFFFFFF;
|
|
cue->snap_to_lines = 1;
|
|
cue->settings.position = 50;
|
|
cue->settings.size = 100;
|
|
cue->settings.align = WEBVTT_ALIGN_MIDDLE;
|
|
cue->settings.line = WEBVTT_AUTO;
|
|
cue->settings.vertical = WEBVTT_HORIZONTAL;
|
|
|
|
*pcue = cue;
|
|
return WEBVTT_SUCCESS;
|
|
}
|
|
|
|
WEBVTT_EXPORT void
|
|
webvtt_ref_cue( webvtt_cue *cue )
|
|
{
|
|
if( cue ) {
|
|
webvtt_ref( &cue->refs );
|
|
}
|
|
}
|
|
|
|
WEBVTT_EXPORT void
|
|
webvtt_release_cue( webvtt_cue **pcue )
|
|
{
|
|
if( pcue && *pcue ) {
|
|
webvtt_cue *cue = *pcue;
|
|
*pcue = 0;
|
|
if( webvtt_deref( &cue->refs ) == 0 ) {
|
|
webvtt_release_string( &cue->id );
|
|
webvtt_release_string( &cue->body );
|
|
webvtt_release_node( &cue->node_head );
|
|
webvtt_free( cue );
|
|
}
|
|
}
|
|
}
|
|
|
|
WEBVTT_EXPORT int
|
|
webvtt_validate_cue( webvtt_cue *cue )
|
|
{
|
|
if( cue ) {
|
|
/**
|
|
* validate cue-times (Can't do checks against previously parsed cuetimes.
|
|
* That's the applications responsibility
|
|
*/
|
|
if( BAD_TIMESTAMP(cue->from) || BAD_TIMESTAMP(cue->until) ) {
|
|
goto error;
|
|
}
|
|
|
|
if( cue->until <= cue->from ) {
|
|
goto error;
|
|
}
|
|
|
|
/**
|
|
* Don't do any payload validation, because this would involve parsing the
|
|
* payload, which is optional.
|
|
*/
|
|
return 1;
|
|
}
|
|
|
|
error:
|
|
return 0;
|
|
}
|
|
|
|
WEBVTT_INTERN webvtt_bool
|
|
cue_is_incomplete( const webvtt_cue *cue ) {
|
|
return !cue || ( cue->flags & CUE_HEADER_MASK ) == CUE_HAVE_ID;
|
|
}
|
|
|