From: David Flynn <[email protected]> - This isn't required across decoder iterations (eg md5), remove from global state - prune *decoder from decode_parse_header
Signed-off-by: David Flynn <[email protected]> --- schroedinger/schrodecoder.c | 56 ++++++++++++++++++------------------------ schroedinger/schrodecoder.h | 21 +++++++-------- 2 files changed, 34 insertions(+), 43 deletions(-) diff --git a/schroedinger/schrodecoder.c b/schroedinger/schrodecoder.c index 8175efb..4c0e7a3 100644 --- a/schroedinger/schrodecoder.c +++ b/schroedinger/schrodecoder.c @@ -702,17 +702,18 @@ schro_decoder_set_flushing (SchroDecoder *decoder, int value) int schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) { + SchroUnpack unpack; decoder->flushing = FALSE; - schro_unpack_init_with_data (&decoder->unpack, buffer->data, buffer->length, 1); - schro_decoder_decode_parse_header(decoder); + schro_unpack_init_with_data (&unpack, buffer->data, buffer->length, 1); + schro_decoder_decode_parse_header(&unpack); if (decoder->parse_code == SCHRO_PARSE_CODE_SEQUENCE_HEADER) { int ret; SCHRO_INFO ("decoding sequence header"); if (!decoder->sequence_header_buffer) { - schro_decoder_parse_sequence_header(decoder); + schro_decoder_parse_sequence_header(decoder, &unpack); decoder->sequence_header_buffer = schro_buffer_dup (buffer); ret = SCHRO_DECODER_FIRST_ACCESS_UNIT; @@ -733,12 +734,12 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) if (decoder->parse_code == SCHRO_PARSE_CODE_AUXILIARY_DATA) { int code; - code = schro_unpack_decode_bits (&decoder->unpack, 8); + code = schro_unpack_decode_bits (&unpack, 8); if (code == SCHRO_AUX_DATA_MD5_CHECKSUM) { int i; for(i=0;i<16;i++){ - decoder->md5_checksum[i] = schro_unpack_decode_bits (&decoder->unpack, 8); + decoder->md5_checksum[i] = schro_unpack_decode_bits (&unpack, 8); } decoder->has_md5 = TRUE; } @@ -768,7 +769,7 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) return SCHRO_DECODER_OK; } - return schro_decoder_iterate_picture (decoder, buffer); + return schro_decoder_iterate_picture (decoder, buffer, &unpack); } schro_buffer_unref (buffer); @@ -776,7 +777,7 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) } int -schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer) +schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer, SchroUnpack *unpack) { SchroPicture *picture; SchroParams *params; @@ -797,7 +798,7 @@ schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer) decoder->has_md5 = FALSE; } - schro_decoder_parse_picture_header(picture); + schro_decoder_parse_picture_header(picture, unpack); SCHRO_DEBUG("picturenumber: %u", picture->picture_number); @@ -816,7 +817,7 @@ schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer) schro_decoder_reference_add (decoder, picture); schro_async_unlock (decoder->async); } - schro_decoder_parse_picture (picture); + schro_decoder_parse_picture (picture, unpack); if (picture->error) { picture->skip = TRUE; @@ -874,10 +875,9 @@ schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer) } void -schro_decoder_parse_picture (SchroPicture *picture) +schro_decoder_parse_picture (SchroPicture *picture, SchroUnpack *unpack) { SchroParams *params = &picture->params; - SchroUnpack *unpack = &picture->decoder->unpack; if (params->num_refs > 0) { SCHRO_DEBUG("inter"); @@ -904,14 +904,14 @@ schro_decoder_parse_picture (SchroPicture *picture) schro_async_unlock (picture->decoder->async); schro_unpack_byte_sync (unpack); - schro_decoder_parse_picture_prediction_parameters (picture); + schro_decoder_parse_picture_prediction_parameters (picture, unpack); if (!picture->error) { schro_params_calculate_mc_sizes (params); } schro_unpack_byte_sync (unpack); - schro_decoder_parse_block_data (picture); + schro_decoder_parse_block_data (picture, unpack); } schro_unpack_byte_sync (unpack); @@ -923,14 +923,14 @@ schro_decoder_parse_picture (SchroPicture *picture) } if (!picture->zero_residual) { - schro_decoder_parse_transform_parameters (picture); + schro_decoder_parse_transform_parameters (picture, unpack); schro_params_calculate_iwt_sizes (params); schro_unpack_byte_sync (unpack); if (params->is_lowdelay) { - schro_decoder_parse_lowdelay_transform_data (picture); + schro_decoder_parse_lowdelay_transform_data (picture, unpack); } else { - schro_decoder_parse_transform_data (picture); + schro_decoder_parse_transform_data (picture, unpack); if (picture->decoder->use_opengl) { #ifdef HAVE_OPENGL @@ -1411,9 +1411,8 @@ schro_decoder_x_upsample (SchroAsyncStage *stage) } void -schro_decoder_decode_parse_header (SchroDecoder *decoder) +schro_decoder_decode_parse_header (SchroUnpack *unpack) { - SchroUnpack *unpack = &decoder->unpack; int v1, v2, v3, v4; v1 = schro_unpack_decode_bits (unpack, 8); @@ -1458,12 +1457,11 @@ schro_decoder_compare_sequence_header_buffer (SchroBuffer *a, SchroBuffer *b) } void -schro_decoder_parse_sequence_header (SchroDecoder *decoder) +schro_decoder_parse_sequence_header (SchroDecoder *decoder, SchroUnpack *unpack) { int bit; int index; SchroVideoFormat *format = &decoder->video_format; - SchroUnpack *unpack = &decoder->unpack; SCHRO_DEBUG("decoding sequence header"); @@ -1622,9 +1620,8 @@ schro_decoder_parse_sequence_header (SchroDecoder *decoder) } void -schro_decoder_parse_picture_header (SchroPicture *picture) +schro_decoder_parse_picture_header (SchroPicture *picture, SchroUnpack *unpack) { - SchroUnpack *unpack = &picture->decoder->unpack; SchroParams *params = &picture->params; schro_unpack_byte_sync(unpack); @@ -1651,10 +1648,9 @@ schro_decoder_parse_picture_header (SchroPicture *picture) } void -schro_decoder_parse_picture_prediction_parameters (SchroPicture *picture) +schro_decoder_parse_picture_prediction_parameters (SchroPicture *picture, SchroUnpack *unpack) { SchroParams *params = &picture->params; - SchroUnpack *unpack = &picture->decoder->unpack; int bit; int index; int ret; @@ -1775,10 +1771,9 @@ enum { }; void -schro_decoder_parse_block_data (SchroPicture *picture) +schro_decoder_parse_block_data (SchroPicture *picture, SchroUnpack *unpack) { SchroParams *params = &picture->params; - SchroUnpack *unpack = &picture->decoder->unpack; int i; for(i=0;i<9;i++){ @@ -2045,12 +2040,11 @@ schro_decoder_decode_prediction_unit(SchroPicture *picture, SchroArith **arith, } void -schro_decoder_parse_transform_parameters (SchroPicture *picture) +schro_decoder_parse_transform_parameters (SchroPicture *picture, SchroUnpack *unpack) { int bit; int i; SchroParams *params = &picture->params; - SchroUnpack *unpack = &picture->decoder->unpack; /* transform */ params->wavelet_filter_index = schro_unpack_decode_uint (unpack); @@ -2152,10 +2146,9 @@ schro_decoder_init_subband_frame_data (SchroPicture *picture) } void -schro_decoder_parse_lowdelay_transform_data (SchroPicture *picture) +schro_decoder_parse_lowdelay_transform_data (SchroPicture *picture, SchroUnpack *unpack) { SchroParams *params = &picture->params; - SchroUnpack *unpack = &picture->decoder->unpack; int length; length = (params->slice_bytes_num * params->n_horiz_slices * @@ -2168,12 +2161,11 @@ schro_decoder_parse_lowdelay_transform_data (SchroPicture *picture) } void -schro_decoder_parse_transform_data (SchroPicture *picture) +schro_decoder_parse_transform_data (SchroPicture *picture, SchroUnpack *unpack) { int i; int component; SchroParams *params = &picture->params; - SchroUnpack *unpack = &picture->decoder->unpack; int subband_length; if (picture->error) return; diff --git a/schroedinger/schrodecoder.h b/schroedinger/schrodecoder.h index 318471f..f3dce17 100644 --- a/schroedinger/schrodecoder.h +++ b/schroedinger/schrodecoder.h @@ -60,7 +60,6 @@ struct _SchroDecoder { SchroPictureNumber earliest_frame; - SchroUnpack unpack; int parse_code; int next_parse_offset; int prev_parse_offset; @@ -160,8 +159,8 @@ int schro_decoder_need_output_frame (SchroDecoder *decoder); #ifdef SCHRO_ENABLE_UNSTABLE_API -void schro_decoder_decode_parse_header (SchroDecoder *decoder); -void schro_decoder_parse_sequence_header (SchroDecoder *decoder); +void schro_decoder_decode_parse_header (SchroUnpack *unpack); +void schro_decoder_parse_sequence_header (SchroDecoder *decoder, SchroUnpack *unpack); int schro_decoder_compare_sequence_header_buffer (SchroBuffer *a, SchroBuffer *b); void schro_decoder_subband_dc_predict (SchroFrameData *fd); @@ -177,14 +176,14 @@ SchroPicture *schro_picturequeue_find (SchroPictureQueue *queue, SchroPictureNum void schro_picturequeue_delete (SchroPictureQueue *queue, SchroPictureNumber picture_number); SchroPicture *schro_picturequeue_remove (SchroPictureQueue *queue, SchroPictureNumber picture_number); -int schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer); -void schro_decoder_parse_picture (SchroPicture *picture); -void schro_decoder_parse_picture_header (SchroPicture *picture); -void schro_decoder_parse_picture_prediction_parameters (SchroPicture *picture); -void schro_decoder_parse_block_data (SchroPicture *picture); -void schro_decoder_parse_transform_parameters (SchroPicture *picture); -void schro_decoder_parse_transform_data (SchroPicture *picture); -void schro_decoder_parse_lowdelay_transform_data (SchroPicture *picture); +int schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer, SchroUnpack *unpack); +void schro_decoder_parse_picture (SchroPicture *picture, SchroUnpack *unpack); +void schro_decoder_parse_picture_header (SchroPicture *picture, SchroUnpack *unpack); +void schro_decoder_parse_picture_prediction_parameters (SchroPicture *picture, SchroUnpack *unpack); +void schro_decoder_parse_block_data (SchroPicture *picture, SchroUnpack *unpack); +void schro_decoder_parse_transform_parameters (SchroPicture *picture, SchroUnpack *unpack); +void schro_decoder_parse_transform_data (SchroPicture *picture, SchroUnpack *unpack); +void schro_decoder_parse_lowdelay_transform_data (SchroPicture *picture, SchroUnpack *unpack); void schro_decoder_init_subband_frame_data_interleaved (SchroPicture *picture); void schro_decoder_init_subband_frame_data (SchroPicture *picture); void schro_decoder_decode_block_data (SchroPicture *picture); -- 1.5.6.5 ------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword _______________________________________________ Schrodinger-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/schrodinger-devel
