From: David Flynn <[email protected]> This isn't required across decoder iterations (as opposed to, say, md5), remove from global state.
Signed-off-by: David Flynn <[email protected]> --- schroedinger/schrodecoder.c | 41 +++++++++++++++++++++++++---------------- schroedinger/schrodecoder.h | 5 ++--- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/schroedinger/schrodecoder.c b/schroedinger/schrodecoder.c index 4c0e7a3..d9f63e0 100644 --- a/schroedinger/schrodecoder.c +++ b/schroedinger/schrodecoder.c @@ -703,12 +703,18 @@ int schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) { SchroUnpack unpack; + int parse_code; decoder->flushing = FALSE; schro_unpack_init_with_data (&unpack, buffer->data, buffer->length, 1); - schro_decoder_decode_parse_header(&unpack); + parse_code = schro_decoder_decode_parse_header(&unpack); - if (decoder->parse_code == SCHRO_PARSE_CODE_SEQUENCE_HEADER) { + if (parse_code == -1) { + schro_buffer_unref (buffer); + return; + } + + if (parse_code == SCHRO_PARSE_CODE_SEQUENCE_HEADER) { int ret; SCHRO_INFO ("decoding sequence header"); @@ -731,7 +737,7 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) return ret; } - if (decoder->parse_code == SCHRO_PARSE_CODE_AUXILIARY_DATA) { + if (parse_code == SCHRO_PARSE_CODE_AUXILIARY_DATA) { int code; code = schro_unpack_decode_bits (&unpack, 8); @@ -748,12 +754,12 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) return SCHRO_DECODER_OK; } - if (SCHRO_PARSE_CODE_IS_PADDING(decoder->parse_code)) { + if (SCHRO_PARSE_CODE_IS_PADDING(parse_code)) { schro_buffer_unref (buffer); return SCHRO_DECODER_OK; } - if (SCHRO_PARSE_CODE_IS_END_OF_SEQUENCE (decoder->parse_code)) { + if (SCHRO_PARSE_CODE_IS_END_OF_SEQUENCE (parse_code)) { SCHRO_DEBUG ("decoding end sequence"); schro_buffer_unref (buffer); decoder->end_of_stream = TRUE; @@ -761,7 +767,7 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) return SCHRO_DECODER_EOS; } - if (SCHRO_PARSE_CODE_IS_PICTURE(decoder->parse_code)) { + if (SCHRO_PARSE_CODE_IS_PICTURE(parse_code)) { if (!decoder->sequence_header_buffer) { SCHRO_INFO ("no sequence header -- dropping picture"); @@ -769,7 +775,7 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) return SCHRO_DECODER_OK; } - return schro_decoder_iterate_picture (decoder, buffer, &unpack); + return schro_decoder_iterate_picture (decoder, buffer, &unpack, parse_code); } schro_buffer_unref (buffer); @@ -777,7 +783,7 @@ schro_decoder_push (SchroDecoder *decoder, SchroBuffer *buffer) } int -schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer, SchroUnpack *unpack) +schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer, SchroUnpack *unpack, int parse_code) { SchroPicture *picture; SchroParams *params; @@ -787,10 +793,10 @@ schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer, Schro picture->input_buffer = buffer; - params->num_refs = SCHRO_PARSE_CODE_NUM_REFS(decoder->parse_code); - params->is_lowdelay = SCHRO_PARSE_CODE_IS_LOW_DELAY(decoder->parse_code); - params->is_noarith = !SCHRO_PARSE_CODE_USING_AC(decoder->parse_code); - picture->is_ref = SCHRO_PARSE_CODE_IS_REFERENCE(decoder->parse_code); + params->num_refs = SCHRO_PARSE_CODE_NUM_REFS(parse_code); + params->is_lowdelay = SCHRO_PARSE_CODE_IS_LOW_DELAY(parse_code); + params->is_noarith = !SCHRO_PARSE_CODE_USING_AC(parse_code); + picture->is_ref = SCHRO_PARSE_CODE_IS_REFERENCE(parse_code); if (decoder->has_md5) { picture->has_md5 = TRUE; @@ -1410,10 +1416,11 @@ schro_decoder_x_upsample (SchroAsyncStage *stage) } } -void +int schro_decoder_decode_parse_header (SchroUnpack *unpack) { int v1, v2, v3, v4; + int parse_code; v1 = schro_unpack_decode_bits (unpack, 8); v2 = schro_unpack_decode_bits (unpack, 8); @@ -1422,16 +1429,18 @@ schro_decoder_decode_parse_header (SchroUnpack *unpack) SCHRO_DEBUG ("parse header %02x %02x %02x %02x", v1, v2, v3, v4); if (v1 != 'B' || v2 != 'B' || v3 != 'C' || v4 != 'D') { SCHRO_ERROR ("expected parse header"); - return; + return -1; } - decoder->parse_code = schro_unpack_decode_bits (unpack, 8); - SCHRO_DEBUG ("parse code %02x", decoder->parse_code); + parse_code = schro_unpack_decode_bits (unpack, 8); + SCHRO_DEBUG ("parse code %02x", parse_code); decoder->next_parse_offset = schro_unpack_decode_bits (unpack, 32); SCHRO_DEBUG ("next_parse_offset %d", decoder->next_parse_offset); decoder->prev_parse_offset = schro_unpack_decode_bits (unpack, 32); SCHRO_DEBUG ("prev_parse_offset %d", decoder->prev_parse_offset); + + return parse_code; } static int diff --git a/schroedinger/schrodecoder.h b/schroedinger/schrodecoder.h index f3dce17..dffb5b1 100644 --- a/schroedinger/schrodecoder.h +++ b/schroedinger/schrodecoder.h @@ -60,7 +60,6 @@ struct _SchroDecoder { SchroPictureNumber earliest_frame; - int parse_code; int next_parse_offset; int prev_parse_offset; @@ -159,7 +158,7 @@ int schro_decoder_need_output_frame (SchroDecoder *decoder); #ifdef SCHRO_ENABLE_UNSTABLE_API -void schro_decoder_decode_parse_header (SchroUnpack *unpack); +int 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); @@ -176,7 +175,7 @@ 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, SchroUnpack *unpack); +int schro_decoder_iterate_picture (SchroDecoder *decoder, SchroBuffer *buffer, SchroUnpack *unpack, int parse_code); 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); -- 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
