diff options
Diffstat (limited to 'src/libmpeg2new/libmpeg2')
-rw-r--r-- | src/libmpeg2new/libmpeg2/Makefile.am | 25 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/alloc.c | 2 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/cpu_accel.c | 2 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/cpu_state.c | 6 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/decode.c | 100 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/header.c | 128 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/idct.c | 4 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/idct_altivec.c | 4 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/idct_mlib.c | 2 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/idct_mmx.c | 6 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/motion_comp.c | 2 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/motion_comp_alpha.c | 4 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/motion_comp_altivec.c | 2 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/motion_comp_mlib.c | 2 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/motion_comp_mmx.c | 6 | ||||
-rw-r--r-- | src/libmpeg2new/libmpeg2/slice.c | 28 |
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); |