diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-10-06 14:09:33 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-10-06 14:40:31 +0400 |
commit | 5bebb6e64b6d8e1c9ed89ec2d14396984ba8ab5e (patch) | |
tree | 57cadbc78bf2fde16a58058f2900b8ce0abb2329 /libavcodec/mpeg12.c | |
parent | 1b3b4a575bc770bef13a560db6a9d4fdbab7241c (diff) |
mpeg1dec: More complete sofdec support
Fixes Ticket517
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/mpeg12.c')
-rw-r--r-- | libavcodec/mpeg12.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 647f4a22f6..341cad7a4b 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1128,6 +1128,7 @@ typedef struct Mpeg1Context { int save_width, save_height, save_progressive_seq; AVRational frame_rate_ext; ///< MPEG-2 specific framerate modificator int sync; ///< Did we reach a sync point like a GOP/SEQ/KEYFrame? + int tmpgexs; } Mpeg1Context; static av_cold int mpeg_decode_init(AVCodecContext *avctx) @@ -2122,8 +2123,22 @@ static int vcr2_init_sequence(AVCodecContext *avctx) static void mpeg_decode_user_data(AVCodecContext *avctx, const uint8_t *p, int buf_size) { + Mpeg1Context *s = avctx->priv_data; const uint8_t *buf_end = p + buf_size; + if(buf_size > 29){ + int i; + for(i=0; i<20; i++) + if(!memcmp(p+i, "\0TMPGEXS\0", 9)){ + s->tmpgexs= 1; + } + +/* for(i=0; !(!p[i-2] && !p[i-1] && p[i]==1) && i<buf_size; i++){ + av_log(0,0, "%c", p[i]); + } + av_log(0,0, "\n");*/ + } + /* we parse the DTG active format information */ if (buf_end - p >= 5 && p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') { @@ -2341,6 +2356,10 @@ static int decode_chunks(AVCodecContext *avctx, break; case PICTURE_START_CODE: + if(s->tmpgexs){ + s2->intra_dc_precision= 3; + s2->intra_matrix[0]= 1; + } if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) && s->slice_count) { int i; |