summaryrefslogtreecommitdiff
path: root/src/libmpeg2new/libmpeg2/decode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmpeg2new/libmpeg2/decode.c')
-rw-r--r--src/libmpeg2new/libmpeg2/decode.c100
1 files changed, 96 insertions, 4 deletions
diff --git a/src/libmpeg2new/libmpeg2/decode.c b/src/libmpeg2new/libmpeg2/decode.c
index df2ca2f28..382798f75 100644
--- a/src/libmpeg2new/libmpeg2/decode.c
+++ b/src/libmpeg2new/libmpeg2/decode.c
@@ -23,13 +23,14 @@
#include "config.h"
+#include <stdio.h> /* For testing printf */
#include <string.h> /* memcmp/memset, try to remove */
#include <stdlib.h>
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "convert.h"
+#include "../include/convert.h"
static int mpeg2_accels = 0;
@@ -160,6 +161,20 @@ mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec)
{
int size_buffer, size_chunk, copied;
+ printf("mpeg2dec-lib:decode.c:CODE=%x\n",mpeg2dec->code);
+ printf("mpeg2_parse:mpeg2dec->fbuf[0]=%p",mpeg2dec->fbuf[0]);
+ if (mpeg2dec->fbuf[0]) printf(", img=%p\n", mpeg2dec->fbuf[0]->id);
+ else printf("\n");
+ printf("mpeg2_parse:mpeg2dec->fbuf[1]=%p",mpeg2dec->fbuf[1]);
+ if (mpeg2dec->fbuf[1]) printf(", img=%p\n", mpeg2dec->fbuf[1]->id);
+ else printf("\n");
+ printf("mpeg2_parse:mpeg2dec->fbuf[2]=%p",mpeg2dec->fbuf[2]);
+ if (mpeg2dec->fbuf[2]) printf(", img=%p\n", mpeg2dec->fbuf[2]->id);
+ else printf("\n");
+ printf("mpeg2_parse:mpeg2dec->decoder->pictures[0]=%p\n",&mpeg2dec->pictures[0]);
+ printf("mpeg2_parse:mpeg2dec->decoder->pictures[1]=%p\n",&mpeg2dec->pictures[1]);
+ printf("mpeg2_parse:mpeg2dec->decoder->pictures[2]=%p\n",&mpeg2dec->pictures[2]);
+ printf("mpeg2_parse:mpeg2dec->decoder->pictures[3]=%p\n",&mpeg2dec->pictures[3]);
if (mpeg2dec->action) {
mpeg2_state_t state;
@@ -187,6 +202,7 @@ mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec)
/* filled the chunk buffer without finding a start code */
mpeg2dec->bytes_since_pts += size_chunk;
mpeg2dec->action = seek_chunk;
+ printf("mpeg2dec:action = mpeg2_seek_chunk\n");
return STATE_INVALID;
}
}
@@ -202,22 +218,80 @@ mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec)
if (seek_chunk (mpeg2dec) == STATE_BUFFER)
return STATE_BUFFER;
}
-
+ printf("mpeg2dec-lib:decode.c:CODE2=%x\n",mpeg2dec->code);
+ printf("mpeg2_parse:mpeg2dec->fbuf[0]=%p\n",mpeg2dec->fbuf[0]);
+ printf("mpeg2_parse:mpeg2dec->fbuf[1]=%p\n",mpeg2dec->fbuf[1]);
+ printf("mpeg2_parse:mpeg2dec->fbuf[2]=%p\n",mpeg2dec->fbuf[2]);
switch (mpeg2dec->code) {
case 0x00:
mpeg2dec->action = mpeg2_header_picture_start;
+ printf("mpeg2dec:action = mpeg2_header_picture_start\n");
+ printf("mpeg2dec:returning state = %d\n", mpeg2dec->state);
+ if (mpeg2dec->state == STATE_SLICE) {
+ printf("mpeg2dec:slicing info0\n");
+ mpeg2dec->info.current_picture = mpeg2dec->info.current_picture_2nd = NULL;
+ mpeg2dec->info.display_picture = mpeg2dec->info.display_picture_2nd = NULL;
+ mpeg2dec->info.current_fbuf = mpeg2dec->info.display_fbuf = mpeg2dec->info.discard_fbuf = NULL;
+ printf("mpeg2dec:reset_info in CODE\n");
+ mpeg2dec->info.user_data = NULL;
+ mpeg2dec->info.user_data_len = 0;
+
+ mpeg2dec->info.current_fbuf = mpeg2dec->fbuf[0];
+ if (mpeg2dec->decoder.coding_type == B_TYPE) {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->fbuf[0]=0;
+ printf("mpeg2dec:mpeg_parse:discard_fbuf=fbuf[0]\n");
+ } else {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[1];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[2];
+ mpeg2dec->fbuf[2]=0;
+ printf("mpeg2dec:mpeg_parse:discard_fbuf=fbuf[2]\n");
+ }
+ }
+
return mpeg2dec->state;
case 0xb7:
mpeg2dec->action = mpeg2_header_end;
+ printf("mpeg2dec:action = mpeg2_header_end\n");
break;
case 0xb3:
case 0xb8:
mpeg2dec->action = mpeg2_parse_header;
+ printf("mpeg2dec:action = mpeg2_parse_header\n");
break;
default:
mpeg2dec->action = seek_chunk;
+ printf("mpeg2dec:action = seek_chunk\n");
+ printf("mpeg2dec:returning state = %d\n", mpeg2dec->state);
return STATE_INVALID;
}
+ if (mpeg2dec->state == STATE_SLICE) {
+ printf("mpeg2dec:slicing info\n");
+ mpeg2dec->info.current_picture = mpeg2dec->info.current_picture_2nd = NULL;
+ mpeg2dec->info.display_picture = mpeg2dec->info.display_picture_2nd = NULL;
+ mpeg2dec->info.current_fbuf = mpeg2dec->info.display_fbuf = mpeg2dec->info.discard_fbuf = NULL;
+ printf("mpeg2dec:reset_info in CODE\n");
+ mpeg2dec->info.user_data = NULL;
+ mpeg2dec->info.user_data_len = 0;
+
+ mpeg2dec->info.current_fbuf = mpeg2dec->fbuf[0];
+ if (mpeg2dec->decoder.coding_type == B_TYPE) {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->fbuf[0]=0;
+ printf("mpeg2dec:mpeg_parse:discard_fbuf=fbuf[0]\n");
+ } else {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[1];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[2];
+ mpeg2dec->fbuf[2]=0;
+ printf("mpeg2dec:mpeg_parse:discard_fbuf=fbuf[2]\n");
+ }
+ }
+
+
+
+ printf("mpeg2dec:returning state = %d\n", mpeg2dec->state);
return (mpeg2dec->state == STATE_SLICE) ? STATE_SLICE : STATE_INVALID;
}
@@ -230,6 +304,7 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
int size_buffer, size_chunk, copied;
mpeg2dec->action = mpeg2_parse_header;
+ printf("mpeg2dec:action = mpeg2_parse_header\n");
while (1) {
size_buffer = mpeg2dec->buf_end - mpeg2dec->buf_start;
size_chunk = (mpeg2dec->chunk_buffer + BUFFER_SIZE -
@@ -248,6 +323,7 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
mpeg2dec->bytes_since_pts += size_chunk;
mpeg2dec->code = 0xb4;
mpeg2dec->action = seek_header;
+ printf("mpeg2dec:action = seek_header\n");
return STATE_INVALID;
}
}
@@ -256,15 +332,18 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
if (process_header[mpeg2dec->code & 0x0b] (mpeg2dec)) {
mpeg2dec->code = mpeg2dec->buf_start[-1];
mpeg2dec->action = seek_header;
+ printf("mpeg2dec:action = seek_header\n");
return STATE_INVALID;
}
mpeg2dec->code = mpeg2dec->buf_start[-1];
+ printf("mpeg2dec:CODE3=%x, state=%x\n",mpeg2dec->code, mpeg2dec->state);
switch (RECEIVED (mpeg2dec->code, mpeg2dec->state)) {
/* state transition after a sequence header */
case RECEIVED (0x00, STATE_SEQUENCE):
mpeg2dec->action = mpeg2_header_picture_start;
+ printf("mpeg2dec:action = mpeg2_header_picture_start\n");
case RECEIVED (0xb8, STATE_SEQUENCE):
mpeg2_header_sequence_finalize (mpeg2dec);
break;
@@ -272,11 +351,13 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
/* other legal state transitions */
case RECEIVED (0x00, STATE_GOP):
mpeg2dec->action = mpeg2_header_picture_start;
+ printf("mpeg2dec:action = mpeg2_header_picture_start\n");
break;
case RECEIVED (0x01, STATE_PICTURE):
case RECEIVED (0x01, STATE_PICTURE_2ND):
mpeg2_header_matrix_finalize (mpeg2dec);
mpeg2dec->action = mpeg2_header_slice_start;
+ printf("mpeg2dec:action = mpeg2_header_slice_start\n");
break;
/* legal headers within a given state */
@@ -292,6 +373,7 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
default:
mpeg2dec->action = seek_header;
+ printf("mpeg2dec:action = seek_header\n");
return STATE_INVALID;
}
@@ -359,6 +441,10 @@ void mpeg2_set_buf (mpeg2dec_t * mpeg2dec, uint8_t * buf[3], void * id)
void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf)
{
mpeg2dec->custom_fbuf = custom_fbuf;
+ mpeg2dec->fbuf[0] = NULL;
+ mpeg2dec->fbuf[1] = NULL;
+ mpeg2dec->fbuf[2] = NULL;
+
}
void mpeg2_skip (mpeg2dec_t * mpeg2dec, int skip)
@@ -414,14 +500,20 @@ mpeg2dec_t * mpeg2_init (void)
mpeg2dec->shift = 0xffffff00;
mpeg2dec->action = mpeg2_seek_sequence;
+ printf("mpeg2dec:action = mpeg2_seek_sequence\n");
mpeg2dec->code = 0xb4;
mpeg2dec->first_decode_slice = 1;
mpeg2dec->nb_decode_slices = 0xb0 - 1;
mpeg2dec->convert_id = NULL;
/* initialize substructures */
+ printf("mpeg2_init:mpeg2dec->fbuf[0]=%p\n",mpeg2dec->fbuf[0]);
+ printf("mpeg2_init:mpeg2dec->fbuf[1]=%p\n",mpeg2dec->fbuf[1]);
+ printf("mpeg2_init:mpeg2dec->fbuf[2]=%p\n",mpeg2dec->fbuf[2]);
mpeg2_header_state_init (mpeg2dec);
-
+ printf("mpeg2_init:mpeg2dec->fbuf[0]=%p\n",mpeg2dec->fbuf[0]);
+ printf("mpeg2_init:mpeg2dec->fbuf[1]=%p\n",mpeg2dec->fbuf[1]);
+ printf("mpeg2_init:mpeg2dec->fbuf[2]=%p\n",mpeg2dec->fbuf[2]);
return mpeg2dec;
}