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

Reply via email to