X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fdecsrtsub.c;h=15015aae21ddd7c001f58cb23df0dd0c4a3e316f;hb=033e32de9c380f54c7d1362a3979da205ebc3a29;hp=bf35c9e4503e4a3e8a0433ed296fc65679d6c176;hpb=87e9d4250f836aec55bd3a0eae5ae23e59c9daaa;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/decsrtsub.c b/libhb/decsrtsub.c index bf35c9e4..15015aae 100644 --- a/libhb/decsrtsub.c +++ b/libhb/decsrtsub.c @@ -89,7 +89,12 @@ static int utf8_fill( hb_work_private_t * pv ) pv->pos = 0; pv->end = bytes; if( bytes == 0 ) - return 0; + { + if( conversion ) + return 1; + else + return 0; + } } p = pv->buf + pv->pos; @@ -232,7 +237,8 @@ static hb_buffer_t *srt_read( hb_work_private_t *pv ) if( *pv->current_entry.text ) { long length; - char *p; + char *p, *q; + int line = 1; uint64_t start_time = ( pv->current_entry.start + pv->subtitle->config.offset ) * 90; uint64_t stop_time = ( pv->current_entry.stop + @@ -249,13 +255,32 @@ static hb_buffer_t *srt_read( hb_work_private_t *pv ) length = strlen( pv->current_entry.text ); - for( p = pv->current_entry.text; *p; p++) + for( q = p = pv->current_entry.text; *p; p++) { - if( *p == '\n' || *p == '\r' ) + if( *p == '\n' ) { - *p = ' '; + if ( line == 1 ) + { + *q = *p; + line = 2; + } + else + { + *q = ' '; + } + q++; + } + else if( *p != '\r' ) + { + *q = *p; + q++; + } + else + { + length--; } } + *q = '\0'; buffer = hb_buffer_init( length + 1 ); @@ -290,6 +315,69 @@ static hb_buffer_t *srt_read( hb_work_private_t *pv ) } } } + + hb_buffer_t *buffer = NULL; + if( *pv->current_entry.text ) + { + long length; + char *p, *q; + int line = 1; + uint64_t start_time = ( pv->current_entry.start + + pv->subtitle->config.offset ) * 90; + uint64_t stop_time = ( pv->current_entry.stop + + pv->subtitle->config.offset ) * 90; + + if( !( start_time > pv->start_time && stop_time < pv->stop_time ) ) + { + hb_deep_log( 3, "Discarding SRT at time start %"PRId64", stop %"PRId64, start_time, stop_time); + memset( &pv->current_entry, 0, sizeof( srt_entry_t ) ); + return NULL; + } + + length = strlen( pv->current_entry.text ); + + for( q = p = pv->current_entry.text; *p; p++) + { + if( *p == '\n' ) + { + if ( line == 1 ) + { + *q = *p; + line = 2; + } + else + { + *q = ' '; + } + q++; + } + else if( *p != '\r' ) + { + *q = *p; + q++; + } + else + { + length--; + } + } + *q = '\0'; + + buffer = hb_buffer_init( length + 1 ); + + if( buffer ) + { + buffer->start = start_time - pv->start_time; + buffer->stop = stop_time - pv->start_time; + + memcpy( buffer->data, pv->current_entry.text, length + 1 ); + } + } + memset( &pv->current_entry, 0, sizeof( srt_entry_t ) ); + if( buffer ) + { + return buffer; + } return NULL; }