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

Reply via email to