summaryrefslogtreecommitdiff
path: root/src/libmpeg2new/libmpeg2
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmpeg2new/libmpeg2')
-rw-r--r--src/libmpeg2new/libmpeg2/Makefile.am25
-rw-r--r--src/libmpeg2new/libmpeg2/alloc.c2
-rw-r--r--src/libmpeg2new/libmpeg2/cpu_accel.c2
-rw-r--r--src/libmpeg2new/libmpeg2/cpu_state.c6
-rw-r--r--src/libmpeg2new/libmpeg2/decode.c100
-rw-r--r--src/libmpeg2new/libmpeg2/header.c128
-rw-r--r--src/libmpeg2new/libmpeg2/idct.c4
-rw-r--r--src/libmpeg2new/libmpeg2/idct_altivec.c4
-rw-r--r--src/libmpeg2new/libmpeg2/idct_mlib.c2
-rw-r--r--src/libmpeg2new/libmpeg2/idct_mmx.c6
-rw-r--r--src/libmpeg2new/libmpeg2/motion_comp.c2
-rw-r--r--src/libmpeg2new/libmpeg2/motion_comp_alpha.c4
-rw-r--r--src/libmpeg2new/libmpeg2/motion_comp_altivec.c2
-rw-r--r--src/libmpeg2new/libmpeg2/motion_comp_mlib.c2
-rw-r--r--src/libmpeg2new/libmpeg2/motion_comp_mmx.c6
-rw-r--r--src/libmpeg2new/libmpeg2/slice.c28
16 files changed, 263 insertions, 60 deletions
diff --git a/src/libmpeg2new/libmpeg2/Makefile.am b/src/libmpeg2new/libmpeg2/Makefile.am
index ed9b50e21..3ba2d6542 100644
--- a/src/libmpeg2new/libmpeg2/Makefile.am
+++ b/src/libmpeg2new/libmpeg2/Makefile.am
@@ -1,19 +1,16 @@
-AM_CFLAGS = $(OPT_CFLAGS) $(LIBMPEG2_CFLAGS)
+include $(top_srcdir)/misc/Makefile.common
+
+
+AM_CFLAGS = @ANSI_FLAGS@
+
+noinst_LTLIBRARIES = libmpeg2.la libmpeg2arch.la
-lib_LTLIBRARIES = libmpeg2.la
libmpeg2_la_SOURCES = alloc.c header.c decode.c slice.c motion_comp.c idct.c \
- motion_comp_mlib.c idct_mlib.c
-libmpeg2_la_LIBADD = libmpeg2arch.la $(LIBMPEG2_LIBS)
-libmpeg2_la_LDFLAGS = -no-undefined
+ motion_comp_mlib.c idct_mlib.c
+libmpeg2_la_LIBADD = libmpeg2arch.la
-noinst_LTLIBRARIES = libmpeg2arch.la
libmpeg2arch_la_SOURCES = motion_comp_mmx.c idct_mmx.c \
- motion_comp_altivec.c idct_altivec.c \
- motion_comp_alpha.c idct_alpha.c \
- cpu_accel.c cpu_state.c
-libmpeg2arch_la_CFLAGS = $(OPT_CFLAGS) $(ARCH_OPT_CFLAGS) $(LIBMPEG2_CFLAGS)
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = libmpeg2.pc
+ motion_comp_altivec.c idct_altivec.c \
+ motion_comp_alpha.c idct_alpha.c \
+ cpu_accel.c cpu_state.c
-EXTRA_DIST = configure.incl vlc.h mpeg2_internal.h
diff --git a/src/libmpeg2new/libmpeg2/alloc.c b/src/libmpeg2new/libmpeg2/alloc.c
index 2e4792e94..67a5d5c6a 100644
--- a/src/libmpeg2new/libmpeg2/alloc.c
+++ b/src/libmpeg2new/libmpeg2/alloc.c
@@ -26,7 +26,7 @@
#include <stdlib.h>
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
#if defined(HAVE_MEMALIGN) && !defined(__cplusplus)
diff --git a/src/libmpeg2new/libmpeg2/cpu_accel.c b/src/libmpeg2new/libmpeg2/cpu_accel.c
index 97e5ea3ca..a1096f2ef 100644
--- a/src/libmpeg2new/libmpeg2/cpu_accel.c
+++ b/src/libmpeg2new/libmpeg2/cpu_accel.c
@@ -25,7 +25,7 @@
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#ifdef ACCEL_DETECT
#ifdef ARCH_X86
diff --git a/src/libmpeg2new/libmpeg2/cpu_state.c b/src/libmpeg2new/libmpeg2/cpu_state.c
index a94e5fedc..6761747fa 100644
--- a/src/libmpeg2new/libmpeg2/cpu_state.c
+++ b/src/libmpeg2new/libmpeg2/cpu_state.c
@@ -26,11 +26,11 @@
#include <stdlib.h>
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "attributes.h"
+#include "../include/attributes.h"
#ifdef ARCH_X86
-#include "mmx.h"
+#include "../include/mmx.h"
#endif
void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
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;
}
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
}
+
+
diff --git a/src/libmpeg2new/libmpeg2/idct.c b/src/libmpeg2new/libmpeg2/idct.c
index 932efcf2a..57aba175b 100644
--- a/src/libmpeg2new/libmpeg2/idct.c
+++ b/src/libmpeg2new/libmpeg2/idct.c
@@ -26,9 +26,9 @@
#include <stdlib.h>
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "attributes.h"
+#include "../include/attributes.h"
#define W1 2841 /* 2048 * sqrt (2) * cos (1 * pi / 16) */
#define W2 2676 /* 2048 * sqrt (2) * cos (2 * pi / 16) */
diff --git a/src/libmpeg2new/libmpeg2/idct_altivec.c b/src/libmpeg2new/libmpeg2/idct_altivec.c
index e9fc28bc4..d8f3ceab0 100644
--- a/src/libmpeg2new/libmpeg2/idct_altivec.c
+++ b/src/libmpeg2new/libmpeg2/idct_altivec.c
@@ -30,9 +30,9 @@
#endif
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "attributes.h"
+#include "../include/attributes.h"
typedef vector signed char vector_s8_t;
typedef vector unsigned char vector_u8_t;
diff --git a/src/libmpeg2new/libmpeg2/idct_mlib.c b/src/libmpeg2new/libmpeg2/idct_mlib.c
index 83c39738d..e8f321a83 100644
--- a/src/libmpeg2new/libmpeg2/idct_mlib.c
+++ b/src/libmpeg2new/libmpeg2/idct_mlib.c
@@ -31,7 +31,7 @@
#include <string.h>
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
void mpeg2_idct_add_mlib (const int last, int16_t * const block,
diff --git a/src/libmpeg2new/libmpeg2/idct_mmx.c b/src/libmpeg2new/libmpeg2/idct_mmx.c
index e2afe6bb4..c0e88f220 100644
--- a/src/libmpeg2new/libmpeg2/idct_mmx.c
+++ b/src/libmpeg2new/libmpeg2/idct_mmx.c
@@ -27,10 +27,10 @@
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "attributes.h"
-#include "mmx.h"
+#include "../include/attributes.h"
+#include "../include/mmx.h"
#define ROW_SHIFT 11
#define COL_SHIFT 6
diff --git a/src/libmpeg2new/libmpeg2/motion_comp.c b/src/libmpeg2new/libmpeg2/motion_comp.c
index 24cfee1e1..cf9f807e2 100644
--- a/src/libmpeg2new/libmpeg2/motion_comp.c
+++ b/src/libmpeg2new/libmpeg2/motion_comp.c
@@ -25,7 +25,7 @@
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
mpeg2_mc_t mpeg2_mc;
diff --git a/src/libmpeg2new/libmpeg2/motion_comp_alpha.c b/src/libmpeg2new/libmpeg2/motion_comp_alpha.c
index 662221b4d..efa0c44af 100644
--- a/src/libmpeg2new/libmpeg2/motion_comp_alpha.c
+++ b/src/libmpeg2new/libmpeg2/motion_comp_alpha.c
@@ -26,9 +26,9 @@
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "alpha_asm.h"
+#include "../include/alpha_asm.h"
static inline uint64_t avg2 (uint64_t a, uint64_t b)
{
diff --git a/src/libmpeg2new/libmpeg2/motion_comp_altivec.c b/src/libmpeg2new/libmpeg2/motion_comp_altivec.c
index f5d884e6e..f0b6fa691 100644
--- a/src/libmpeg2new/libmpeg2/motion_comp_altivec.c
+++ b/src/libmpeg2new/libmpeg2/motion_comp_altivec.c
@@ -30,7 +30,7 @@
#endif
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
typedef vector signed char vector_s8_t;
diff --git a/src/libmpeg2new/libmpeg2/motion_comp_mlib.c b/src/libmpeg2new/libmpeg2/motion_comp_mlib.c
index c7ed6b285..96f000991 100644
--- a/src/libmpeg2new/libmpeg2/motion_comp_mlib.c
+++ b/src/libmpeg2new/libmpeg2/motion_comp_mlib.c
@@ -30,7 +30,7 @@
#include <mlib_video.h>
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
static void MC_put_o_16_mlib (uint8_t * dest, const uint8_t * ref,
diff --git a/src/libmpeg2new/libmpeg2/motion_comp_mmx.c b/src/libmpeg2new/libmpeg2/motion_comp_mmx.c
index 2434ccee1..fc8e83abc 100644
--- a/src/libmpeg2new/libmpeg2/motion_comp_mmx.c
+++ b/src/libmpeg2new/libmpeg2/motion_comp_mmx.c
@@ -27,10 +27,10 @@
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "attributes.h"
-#include "mmx.h"
+#include "../include/attributes.h"
+#include "../include/mmx.h"
#define CPU_MMXEXT 0
#define CPU_3DNOW 1
diff --git a/src/libmpeg2new/libmpeg2/slice.c b/src/libmpeg2new/libmpeg2/slice.c
index 3e2db0803..095fc4c82 100644
--- a/src/libmpeg2new/libmpeg2/slice.c
+++ b/src/libmpeg2new/libmpeg2/slice.c
@@ -25,9 +25,9 @@
#include <inttypes.h>
-#include "mpeg2.h"
+#include "../include/mpeg2.h"
#include "mpeg2_internal.h"
-#include "attributes.h"
+#include "../include/attributes.h"
extern mpeg2_mc_t mpeg2_mc;
extern void (* mpeg2_idct_copy) (int16_t * block, uint8_t * dest, int stride);
@@ -1469,9 +1469,15 @@ void mpeg2_init_fbuf (mpeg2_decoder_t * decoder, uint8_t * current_fbuf[3],
decoder->picture_dest[1] = current_fbuf[1] + (offset >> 1);
decoder->picture_dest[2] = current_fbuf[2] + (offset >> 1);
- decoder->f_motion.ref[0][0] = forward_fbuf[0] + offset;
- decoder->f_motion.ref[0][1] = forward_fbuf[1] + (offset >> 1);
- decoder->f_motion.ref[0][2] = forward_fbuf[2] + (offset >> 1);
+ if (forward_fbuf) {
+ decoder->f_motion.ref[0][0] = forward_fbuf[0] + offset;
+ decoder->f_motion.ref[0][1] = forward_fbuf[1] + (offset >> 1);
+ decoder->f_motion.ref[0][2] = forward_fbuf[2] + (offset >> 1);
+ } else {
+ decoder->f_motion.ref[0][0] = 0;
+ decoder->f_motion.ref[0][1] = 0;
+ decoder->f_motion.ref[0][2] = 0;
+ }
decoder->b_motion.ref[0][0] = backward_fbuf[0] + offset;
decoder->b_motion.ref[0][1] = backward_fbuf[1] + (offset >> 1);
@@ -1488,9 +1494,15 @@ void mpeg2_init_fbuf (mpeg2_decoder_t * decoder, uint8_t * current_fbuf[3],
if (decoder->second_field && (decoder->coding_type != B_TYPE))
forward_fbuf = current_fbuf;
- decoder->f_motion.ref[1][0] = forward_fbuf[0] + offset;
- decoder->f_motion.ref[1][1] = forward_fbuf[1] + (offset >> 1);
- decoder->f_motion.ref[1][2] = forward_fbuf[2] + (offset >> 1);
+ if (forward_fbuf) {
+ decoder->f_motion.ref[1][0] = forward_fbuf[0] + offset;
+ decoder->f_motion.ref[1][1] = forward_fbuf[1] + (offset >> 1);
+ decoder->f_motion.ref[1][2] = forward_fbuf[2] + (offset >> 1);
+ } else {
+ decoder->f_motion.ref[0][0] = 0;
+ decoder->f_motion.ref[0][1] = 0;
+ decoder->f_motion.ref[0][2] = 0;
+ }
decoder->b_motion.ref[1][0] = backward_fbuf[0] + offset;
decoder->b_motion.ref[1][1] = backward_fbuf[1] + (offset >> 1);