summaryrefslogtreecommitdiff
path: root/src/libmpeg2new/libmpeg2/header.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmpeg2new/libmpeg2/header.c')
-rw-r--r--src/libmpeg2new/libmpeg2/header.c128
1 files changed, 115 insertions, 13 deletions
diff --git a/src/libmpeg2new/libmpeg2/header.c b/src/libmpeg2new/libmpeg2/header.c
index 55f16f1ee..62c87c700 100644
--- a/src/libmpeg2new/libmpeg2/header.c
+++ b/src/libmpeg2new/libmpeg2/header.c
@@ -23,14 +23,16 @@
#include "config.h"
+#include <stdio.h> /* For printf */
#include <inttypes.h>
#include <stdlib.h> /* defines NULL */
#include <string.h> /* memcmp */
+#include <assert.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "convert.h"
-#include "attributes.h"
+#include "../include/convert.h"
+#include "../include/attributes.h"
#define SEQ_EXT 2
#define SEQ_DISPLAY_EXT 4
@@ -91,6 +93,7 @@ static void reset_info (mpeg2_info_t * info)
info->current_picture = info->current_picture_2nd = NULL;
info->display_picture = info->display_picture_2nd = NULL;
info->current_fbuf = info->display_fbuf = info->discard_fbuf = NULL;
+ printf("mpeg2dec:reset_info\n");
info->user_data = NULL; info->user_data_len = 0;
}
@@ -362,13 +365,19 @@ void mpeg2_set_fbuf (mpeg2dec_t * mpeg2dec, int coding_type)
if (mpeg2dec->fbuf[1] != &mpeg2dec->fbuf_alloc[i].fbuf &&
mpeg2dec->fbuf[2] != &mpeg2dec->fbuf_alloc[i].fbuf) {
mpeg2dec->fbuf[0] = &mpeg2dec->fbuf_alloc[i].fbuf;
- mpeg2dec->info.current_fbuf = mpeg2dec->fbuf[0];
- if ((coding_type == B_TYPE) ||
- (mpeg2dec->sequence.flags & SEQ_FLAG_LOW_DELAY)) {
- if ((coding_type == B_TYPE) || (mpeg2dec->convert_start))
- mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
- mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
- }
+ if (!mpeg2dec->custom_fbuf) {
+ printf("mpeg2dec:set_fbuf:NO NO NO!!!\n");
+ mpeg2dec->info.current_fbuf = mpeg2dec->fbuf[0];
+ if ((coding_type == B_TYPE) ||
+ (mpeg2dec->sequence.flags & SEQ_FLAG_LOW_DELAY)) {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
+ if ((coding_type == B_TYPE) || (mpeg2dec->convert_start)) {
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->fbuf[0]=0;
+ printf("mpeg2dec:set_fbuf:discard_fbuf=fbuf[0]\n");
+ }
+ }
+ }
break;
}
}
@@ -446,9 +455,17 @@ int mpeg2_header_picture (mpeg2dec_t * mpeg2dec)
mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[1];
}
}
- if (!low_delay + !mpeg2dec->convert_start)
+ if (!low_delay + !mpeg2dec->convert_start) {
mpeg2dec->info.discard_fbuf =
mpeg2dec->fbuf[!low_delay + !mpeg2dec->convert_start];
+ // FIXME: Might want to wipe this whole section, once pictures is sorted.
+ // mpeg2dec->fbuf[!low_delay + !mpeg2dec->convert_start]=0;
+ printf("mpeg2dec:header_picture:discard_fbuf=??\n");
+ printf("mpeg2dec:header_picture:express = %d\n",!low_delay + !mpeg2dec->convert_start);
+ printf("mpeg2dec:header_picture:fbuf[0]=%p\n", mpeg2dec->fbuf[0]);
+ printf("mpeg2dec:header_picture:fbuf[1]=%p\n", mpeg2dec->fbuf[1]);
+ printf("mpeg2dec:header_picture:fbuf[2]=%p\n", mpeg2dec->fbuf[2]);
+ }
}
if (!mpeg2dec->custom_fbuf) {
while (mpeg2dec->alloc_index < 3) {
@@ -471,6 +488,7 @@ int mpeg2_header_picture (mpeg2dec_t * mpeg2dec)
fbuf->buf[2] = fbuf->buf[1] + (size >> 2);
}
}
+ assert(0);
mpeg2_set_fbuf (mpeg2dec, type);
}
} else {
@@ -695,9 +713,51 @@ mpeg2_state_t mpeg2_header_slice_start (mpeg2dec_t * mpeg2dec)
mpeg2dec->fbuf[b_type]->buf);
}
mpeg2dec->action = NULL;
+ printf("mpeg2dec:action = NULL\n");
return (mpeg2_state_t)-1;
}
+mpeg2_state_t mpeg2_header_end_btype2 (mpeg2dec_t * mpeg2dec)
+{
+ mpeg2dec->info.display_fbuf = 0;
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[1];
+ printf("mpeg2dec:header_end_btype2:discard_fbuf=1\n");
+ mpeg2dec->fbuf[1]=0;
+ mpeg2dec->action = mpeg2_seek_sequence;
+ printf("mpeg2dec:action = mpeg2_seek_sequence\n");
+ mpeg2dec->first = 1;
+ return STATE_END;
+}
+mpeg2_state_t mpeg2_header_end_btype (mpeg2dec_t * mpeg2dec)
+{
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[1];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[2];
+ printf("mpeg2dec:header_end_btype:discard_fbuf=0\n");
+ mpeg2dec->fbuf[2]=0;
+ mpeg2dec->action = mpeg2_header_end_btype2;
+ printf("mpeg2dec:action = mpeg2_header_end_btype2\n");
+ return STATE_SLICE;
+}
+mpeg2_state_t mpeg2_header_end_itype2 (mpeg2dec_t * mpeg2dec)
+{
+ mpeg2dec->info.display_fbuf = 0;
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->fbuf[0]=0;
+ mpeg2dec->action = mpeg2_seek_sequence;
+ printf("mpeg2dec:action = mpeg2_seek_sequence\n");
+ mpeg2dec->first = 1;
+ return STATE_END;
+}
+mpeg2_state_t mpeg2_header_end_itype (mpeg2dec_t * mpeg2dec)
+{
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[1];
+ mpeg2dec->fbuf[1]=0;
+ mpeg2dec->action = mpeg2_header_end_itype2;
+ printf("mpeg2dec:action = mpeg2_header_end_itype2\n");
+ return STATE_SLICE;
+}
+
mpeg2_state_t mpeg2_header_end (mpeg2dec_t * mpeg2dec)
{
mpeg2_picture_t * picture;
@@ -710,16 +770,58 @@ mpeg2_state_t mpeg2_header_end (mpeg2dec_t * mpeg2dec)
mpeg2dec->state = STATE_END;
reset_info (&(mpeg2dec->info));
+ if (b_type) {
+ mpeg2dec->info.display_picture = picture;
+ if (picture->nb_fields == 1)
+ mpeg2dec->info.display_picture_2nd = picture + 1;
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->fbuf[0]=0;
+ mpeg2dec->action = mpeg2_header_end_btype;
+ printf("mpeg2dec:action = mpeg2_header_end_btype\n");
+ return STATE_SLICE;
+ } else {
+ mpeg2dec->info.display_picture = picture;
+ if (picture->nb_fields == 1)
+ mpeg2dec->info.display_picture_2nd = picture + 1;
+ if (mpeg2dec->fbuf[2]) {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[1];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[2];
+ mpeg2dec->fbuf[2]=0;
+ mpeg2dec->action = mpeg2_header_end_itype;
+ printf("mpeg2dec:action = mpeg2_header_end_itype\n");
+ return STATE_SLICE;
+ } else {
+ mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
+ mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[1];
+ mpeg2dec->fbuf[1]=0;
+ mpeg2dec->action = mpeg2_header_end_itype2;
+ printf("mpeg2dec:action = mpeg2_header_end_itype2\n");
+ return STATE_SLICE;
+ }
+
+ }
+
+
+#if 0
if (!(mpeg2dec->sequence.flags & SEQ_FLAG_LOW_DELAY)) {
mpeg2dec->info.display_picture = picture;
if (picture->nb_fields == 1)
mpeg2dec->info.display_picture_2nd = picture + 1;
mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[b_type];
- if (!mpeg2dec->convert_start)
+ if (!mpeg2dec->convert_start) {
mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[b_type + 1];
- } else if (!mpeg2dec->convert_start)
+ printf("mpeg2dec:header_end:discard_fbuf=b_type+1\n");
+ }
+ } else if (!mpeg2dec->convert_start) {
mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[b_type];
+ printf("mpeg2dec:header_end:discard_fbuf=b_type\n");
+ }
mpeg2dec->action = mpeg2_seek_sequence;
+ printf("mpeg2dec:action = mpeg2_seek_sequence\n");
mpeg2dec->first = 1;
return STATE_END;
+#endif
}
+
+