diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-03-22 22:36:57 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-03-22 22:36:57 +0100 |
commit | d375c1040032ed42f84b7d4ea53baad4a661b628 (patch) | |
tree | f5bb63830cbc49106376a418c292c452f3b0728d | |
parent | 038566a5edc73205120f30d41233a9911a42da44 (diff) | |
download | ffmpeg-d375c1040032ed42f84b7d4ea53baad4a661b628.tar.gz |
Fake-Merge remote-tracking branch 'ffmpeg-mt/master'
-rw-r--r-- | libavcodec/avcodec.h | 4 | ||||
-rw-r--r-- | libavcodec/dsputil.c | 19 | ||||
-rw-r--r-- | libavcodec/dsputil.h | 4 | ||||
-rw-r--r-- | libavcodec/h263dec.c | 5 | ||||
-rw-r--r-- | libavcodec/h264.c | 686 | ||||
-rw-r--r-- | libavcodec/h264.h | 4 | ||||
-rw-r--r-- | libavcodec/h264_direct.c | 41 | ||||
-rw-r--r-- | libavcodec/mdec.c | 20 | ||||
-rw-r--r-- | libavcodec/mimic.c | 60 | ||||
-rw-r--r-- | libavcodec/mpeg12.c | 36 | ||||
-rw-r--r-- | libavcodec/mpeg4videodec.c | 20 | ||||
-rw-r--r-- | libavcodec/mpegvideo.c | 264 | ||||
-rw-r--r-- | libavcodec/mpegvideo.h | 7 | ||||
-rw-r--r-- | libavcodec/mpegvideo_enc.c | 24 | ||||
-rw-r--r-- | libavcodec/snow.c | 6 | ||||
-rw-r--r-- | libavcodec/utils.c | 9 | ||||
-rw-r--r-- | libavcodec/vp8.c | 10 | ||||
-rw-r--r-- | libavcodec/x86/dsputil_mmx.c | 63 | ||||
-rw-r--r-- | libavutil/internal.h | 1 | ||||
-rw-r--r-- | mt-work/email.sh | 6 | ||||
-rw-r--r-- | mt-work/mplayer.diff | 13 | ||||
-rw-r--r-- | mt-work/raw.sh | 10 | ||||
-rw-r--r-- | mt-work/test-failures.txt | 2896 | ||||
-rw-r--r-- | mt-work/test.sh | 13 | ||||
-rw-r--r-- | mt-work/todo.txt | 91 | ||||
-rw-r--r-- | mt-work/valgrind-check.sh | 3 | ||||
-rw-r--r-- | mt-work/yuvcmp.c | 182 |
27 files changed, 4200 insertions, 297 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 3ea1e76989..0f9201d8e4 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -725,10 +725,12 @@ typedef struct RcOverride{ * Codec should fill in channel configuration and samplerate instead of container */ #define CODEC_CAP_CHANNEL_CONF 0x0400 + /** * Codec is able to deal with negative linesizes */ #define CODEC_CAP_NEG_LINESIZES 0x0800 + /** * Codec supports frame-level multithreading. */ @@ -2983,7 +2985,9 @@ typedef struct AVCodec { const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 const int64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 uint8_t max_lowres; ///< maximum value for lowres supported by the decoder + AVClass *priv_class; ///< AVClass for the private context + const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} /** diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index b293642b1d..d4e538cd07 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -298,7 +298,7 @@ static int sse16_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) /* draw the edges of width 'w' of an image of size width, height */ //FIXME check that this is ok for mpeg4 interlaced -static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w) +static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w, int sides) { uint8_t *ptr, *last_line; int i; @@ -306,8 +306,8 @@ static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w) last_line = buf + (height - 1) * wrap; for(i=0;i<w;i++) { /* top and bottom */ - memcpy(buf - (i + 1) * wrap, buf, width); - memcpy(last_line + (i + 1) * wrap, last_line, width); + if (sides&EDGE_TOP) memcpy(buf - (i + 1) * wrap, buf, width); + if (sides&EDGE_BOTTOM) memcpy(last_line + (i + 1) * wrap, last_line, width); } /* left and right */ ptr = buf; @@ -318,10 +318,15 @@ static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w) } /* corners */ for(i=0;i<w;i++) { - memset(buf - (i + 1) * wrap - w, buf[0], w); /* top left */ - memset(buf - (i + 1) * wrap + width, buf[width-1], w); /* top right */ - memset(last_line + (i + 1) * wrap - w, last_line[0], w); /* top left */ - memset(last_line + (i + 1) * wrap + width, last_line[width-1], w); /* top right */ + if (sides&EDGE_TOP) { + memset(buf - (i + 1) * wrap - w, buf[0], w); /* top left */ + memset(buf - (i + 1) * wrap + width, buf[width-1], w); /* top right */ + } + + if (sides&EDGE_BOTTOM) { + memset(last_line + (i + 1) * wrap - w, last_line[0], w); /* top left */ + memset(last_line + (i + 1) * wrap + width, last_line[width-1], w); /* top right */ + } } } diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 017219bc89..d42abe8956 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -492,8 +492,10 @@ typedef struct DSPContext { #define BASIS_SHIFT 16 #define RECON_SHIFT 6 - void (*draw_edges)(uint8_t *buf, int wrap, int width, int height, int w); + void (*draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int sides); #define EDGE_WIDTH 16 +#define EDGE_TOP 1 +#define EDGE_BOTTOM 2 void (*prefetch)(void *mem, int stride, int h); diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 8085b4a9eb..4830202634 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -35,6 +35,7 @@ #include "mpeg4video_parser.h" #include "msmpeg4.h" #include "vdpau_internal.h" +#include "thread.h" #include "flv.h" #include "mpeg4video.h" @@ -235,6 +236,7 @@ static int decode_slice(MpegEncContext *s){ if(++s->mb_x >= s->mb_width){ s->mb_x=0; ff_draw_horiz_band(s, s->mb_y*mb_size, mb_size); + MPV_report_decode_progress(s); s->mb_y++; } return 0; @@ -255,6 +257,7 @@ static int decode_slice(MpegEncContext *s){ } ff_draw_horiz_band(s, s->mb_y*mb_size, mb_size); + MPV_report_decode_progress(s); s->mb_x= 0; } @@ -639,6 +642,8 @@ retry: if(MPV_frame_start(s, avctx) < 0) return -1; + if (!s->divx_packed) ff_thread_finish_setup(avctx); + if (CONFIG_MPEG4_VDPAU_DECODER && (s->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU)) { ff_vdpau_mpeg4_decode_picture(s, s->gb.buffer, s->gb.buffer_end - s->gb.buffer); goto frame_end; diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 5ebf929ee9..d25b310e52 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -36,6 +36,7 @@ #include "golomb.h" #include "mathops.h" #include "rectangle.h" +#include "thread.h" #include "vdpau_internal.h" #include "libavutil/avassert.h" @@ -249,6 +250,141 @@ static int ff_h264_decode_rbsp_trailing(H264Context *h, const uint8_t *src){ return 0; } +static inline int get_lowest_part_list_y(H264Context *h, Picture *pic, int n, int height, + int y_offset, int list){ + int raw_my= h->mv_cache[list][ scan8[n] ][1]; + int filter_height= (raw_my&3) ? 2 : 0; + int full_my= (raw_my>>2) + y_offset; + int top = full_my - filter_height, bottom = full_my + height + filter_height; + + return FFMAX(abs(top), bottom); +} + +static inline void get_lowest_part_y(H264Context *h, int refs[2][48], int n, int height, + int y_offset, int list0, int list1, int *nrefs){ + MpegEncContext * const s = &h->s; + int my; + + y_offset += 16*(s->mb_y >> MB_FIELD); + + if(list0){ + int ref_n = h->ref_cache[0][ scan8[n] ]; + Picture *ref= &h->ref_list[0][ref_n]; + + // Error resilience puts the current picture in the ref list. + // Don't try to wait on these as it will cause a deadlock. + // Fields can wait on each other, though. + if(ref->thread_opaque != s->current_picture.thread_opaque || + (ref->reference&3) != s->picture_structure) { + my = get_lowest_part_list_y(h, ref, n, height, y_offset, 0); + if (refs[0][ref_n] < 0) nrefs[0] += 1; + refs[0][ref_n] = FFMAX(refs[0][ref_n], my); + } + } + + if(list1){ + int ref_n = h->ref_cache[1][ scan8[n] ]; + Picture *ref= &h->ref_list[1][ref_n]; + + if(ref->thread_opaque != s->current_picture.thread_opaque || + (ref->reference&3) != s->picture_structure) { + my = get_lowest_part_list_y(h, ref, n, height, y_offset, 1); + if (refs[1][ref_n] < 0) nrefs[1] += 1; + refs[1][ref_n] = FFMAX(refs[1][ref_n], my); + } + } +} + +/** + * Wait until all reference frames are available for MC operations. + * + * @param h the H264 context + */ +static void await_references(H264Context *h){ + MpegEncContext * const s = &h->s; + const int mb_xy= h->mb_xy; + const int mb_type= s->current_picture.mb_type[mb_xy]; + int refs[2][48]; + int nrefs[2] = {0}; + int ref, list; + + memset(refs, -1, sizeof(refs)); + + if(IS_16X16(mb_type)){ + get_lowest_part_y(h, refs, 0, 16, 0, + IS_DIR(mb_type, 0, 0), IS_DIR(mb_type, 0, 1), nrefs); + }else if(IS_16X8(mb_type)){ + get_lowest_part_y(h, refs, 0, 8, 0, + IS_DIR(mb_type, 0, 0), IS_DIR(mb_type, 0, 1), nrefs); + get_lowest_part_y(h, refs, 8, 8, 8, + IS_DIR(mb_type, 1, 0), IS_DIR(mb_type, 1, 1), nrefs); + }else if(IS_8X16(mb_type)){ + get_lowest_part_y(h, refs, 0, 16, 0, + IS_DIR(mb_type, 0, 0), IS_DIR(mb_type, 0, 1), nrefs); + get_lowest_part_y(h, refs, 4, 16, 0, + IS_DIR(mb_type, 1, 0), IS_DIR(mb_type, 1, 1), nrefs); + }else{ + int i; + + assert(IS_8X8(mb_type)); + + for(i=0; i<4; i++){ + const int sub_mb_type= h->sub_mb_type[i]; + const int n= 4*i; + int y_offset= (i&2)<<2; + + if(IS_SUB_8X8(sub_mb_type)){ + get_lowest_part_y(h, refs, n , 8, y_offset, + IS_DIR(sub_mb_type, 0, 0), IS_DIR(sub_mb_type, 0, 1), nrefs); + }else if(IS_SUB_8X4(sub_mb_type)){ + get_lowest_part_y(h, refs, n , 4, y_offset, + IS_DIR(sub_mb_type, 0, 0), IS_DIR(sub_mb_type, 0, 1), nrefs); + get_lowest_part_y(h, refs, n+2, 4, y_offset+4, + IS_DIR(sub_mb_type, 0, 0), IS_DIR(sub_mb_type, 0, 1), nrefs); + }else if(IS_SUB_4X8(sub_mb_type)){ + get_lowest_part_y(h, refs, n , 8, y_offset, + IS_DIR(sub_mb_type, 0, 0), IS_DIR(sub_mb_type, 0, 1), nrefs); + get_lowest_part_y(h, refs, n+1, 8, y_offset, + IS_DIR(sub_mb_type, 0, 0), IS_DIR(sub_mb_type, 0, 1), nrefs); + }else{ + int j; + assert(IS_SUB_4X4(sub_mb_type)); + for(j=0; j<4; j++){ + int sub_y_offset= y_offset + 2*(j&2); + get_lowest_part_y(h, refs, n+j, 4, sub_y_offset, + IS_DIR(sub_mb_type, 0, 0), IS_DIR(sub_mb_type, 0, 1), nrefs); + } + } + } + } + + for(list=h->list_count-1; list>=0; list--){ + for(ref=0; ref<48 && nrefs[list]; ref++){ + int row = refs[list][ref]; + if(row >= 0){ + Picture *ref_pic = &h->ref_list[list][ref]; + int ref_field = ref_pic->reference - 1; + int ref_field_picture = ref_pic->field_picture; + int pic_height = 16*s->mb_height >> ref_field_picture; + + row <<= MB_MBAFF; + nrefs[list]--; + + if(!FIELD_PICTURE && ref_field_picture){ // frame referencing two fields + ff_thread_await_progress((AVFrame*)ref_pic, FFMIN((row >> 1) - !(row&1), pic_height-1), 1); + ff_thread_await_progress((AVFrame*)ref_pic, FFMIN((row >> 1) , pic_height-1), 0); + }else if(FIELD_PICTURE && !ref_field_picture){ // field referencing one field of a frame + ff_thread_await_progress((AVFrame*)ref_pic, FFMIN(row*2 + ref_field , pic_height-1), 0); + }else if(FIELD_PICTURE){ + ff_thread_await_progress((AVFrame*)ref_pic, FFMIN(row, pic_height-1), ref_field); + }else{ + ff_thread_await_progress((AVFrame*)ref_pic, FFMIN(row, pic_height-1), 0); + } + } + } + } +} + #if 0 /** * DCT transforms the 16 dc values. @@ -539,6 +675,8 @@ static void hl_motion(H264Context *h, uint8_t *dest_y, uint8_t *dest_cb, uint8_t assert(IS_INTER(mb_type)); + if(HAVE_PTHREADS && s->avctx->active_thread_type&FF_THREAD_FRAME) + await_references(h); prefetch_motion(h, 0); if(IS_16X16(mb_type)){ @@ -887,7 +1025,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx){ ff_h264_decode_init_vlc(); h->thread_context[0] = h; - h->outputed_poc = INT_MIN; + h->outputed_poc = h->next_outputed_poc = INT_MIN; h->prev_poc_msb= 1<<16; h->x264_build = -1; ff_h264_reset_sei(h); @@ -910,6 +1048,125 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx){ return 0; } +static void copy_picture_range(Picture **to, Picture **from, int count, MpegEncContext *new_base, MpegEncContext *old_base) +{ + int i; + + for (i=0; i<count; i++){ + to[i] = REBASE_PICTURE(from[i], new_base, old_base); + } +} + +static void copy_parameter_set(void **to, void **from, int count, int size) +{ + int i; + + for (i=0; i<count; i++){ + if (to[i] && !from[i]) av_freep(&to[i]); + else if (from[i] && !to[i]) to[i] = av_malloc(size); + + if (from[i]) memcpy(to[i], from[i], size); + } +} + +static int decode_init_thread_copy(AVCodecContext *avctx){ + H264Context *h= avctx->priv_data; + + if (!avctx->is_copy) return 0; + memset(h->sps_buffers, 0, sizeof(h->sps_buffers)); + memset(h->pps_buffers, 0, sizeof(h->pps_buffers)); + + return 0; +} + +#define copy_fields(to, from, start_field, end_field) memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field) +static int decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src){ + H264Context *h= dst->priv_data, *h1= src->priv_data; + MpegEncContext * const s = &h->s, * const s1 = &h1->s; + int inited = s->context_initialized, err; + int i; + + if(dst == src || !s1->context_initialized) return 0; + + err = ff_mpeg_update_thread_context(dst, src); + if(err) return err; + + //FIXME handle width/height changing + if(!inited){ + for(i = 0; i < MAX_SPS_COUNT; i++) + av_freep(h->sps_buffers + i); + + for(i = 0; i < MAX_PPS_COUNT; i++) + av_freep(h->pps_buffers + i); + + memcpy(&h->s + 1, &h1->s + 1, sizeof(H264Context) - sizeof(MpegEncContext)); //copy all fields after MpegEnc + memset(h->sps_buffers, 0, sizeof(h->sps_buffers)); + memset(h->pps_buffers, 0, sizeof(h->pps_buffers)); + ff_h264_alloc_tables(h); + context_init(h); + + for(i=0; i<2; i++){ + h->rbsp_buffer[i] = NULL; + h->rbsp_buffer_size[i] = 0; + } + + h->thread_context[0] = h; + + // frame_start may not be called for the next thread (if it's decoding a bottom field) + // so this has to be allocated here + h->s.obmc_scratchpad = av_malloc(16*2*s->linesize + 8*2*s->uvlinesize); + + s->dsp.clear_blocks(h->mb); + } + + //extradata/NAL handling + h->is_avc = h1->is_avc; + + //SPS/PPS + copy_parameter_set((void**)h->sps_buffers, (void**)h1->sps_buffers, MAX_SPS_COUNT, sizeof(SPS)); + h->sps = h1->sps; + copy_parameter_set((void**)h->pps_buffers, (void**)h1->pps_buffers, MAX_PPS_COUNT, sizeof(PPS)); + h->pps = h1->pps; + + //Dequantization matrices + //FIXME these are big - can they be only copied when PPS changes? + copy_fields(h, h1, dequant4_buffer, dequant4_coeff); + + for(i=0; i<6; i++) + h->dequant4_coeff[i] = h->dequant4_buffer[0] + (h1->dequant4_coeff[i] - h1->dequant4_buffer[0]); + + for(i=0; i<2; i++) + h->dequant8_coeff[i] = h->dequant8_buffer[0] + (h1->dequant8_coeff[i] - h1->dequant8_buffer[0]); + + h->dequant_coeff_pps = h1->dequant_coeff_pps; + + //POC timing + copy_fields(h, h1, poc_lsb, redundant_pic_count); + + //reference lists + copy_fields(h, h1, ref_count, intra_gb); + copy_fields(h, h1, short_ref, cabac_init_idc); + + copy_picture_range(h->short_ref, h1->short_ref, 32, s, s1); + copy_picture_range(h->long_ref, h1->long_ref, 32, s, s1); + copy_picture_range(h->delayed_pic, h1->delayed_pic, MAX_DELAYED_PIC_COUNT+2, s, s1); + + h->last_slice_type = h1->last_slice_type; + + if(!s->current_picture_ptr) return 0; + + if(!s->dropable) { + ff_h264_execute_ref_pic_marking(h, h->mmco, h->mmco_index); + h->prev_poc_msb = h->poc_msb; + h->prev_poc_lsb = h->poc_lsb; + } + h->prev_frame_num_offset= h->frame_num_offset; + h->prev_frame_num = h->frame_num; + h->outputed_poc = h->next_outputed_poc; + + return 0; +} + int ff_h264_frame_start(H264Context *h){ MpegEncContext * const s = &h->s; int i; @@ -961,11 +1218,167 @@ int ff_h264_frame_start(H264Context *h){ s->current_picture_ptr->field_poc[0]= s->current_picture_ptr->field_poc[1]= INT_MAX; + + h->next_output_pic = NULL; + assert(s->current_picture_ptr->long_ref==0); return 0; } +/** + * Run setup operations that must be run after slice header decoding. + * This includes finding the next displayed frame. + * + * @param h h264 master context + */ +static void decode_postinit(H264Context *h){ + MpegEncContext * const s = &h->s; + Picture *out = s->current_picture_ptr; + Picture *cur = s->current_picture_ptr; + int i, pics, out_of_order, out_idx; + + s->current_picture_ptr->qscale_type= FF_QSCALE_TYPE_H264; + s->current_picture_ptr->pict_type= s->pict_type; + + if (h->next_output_pic) return; + + if (cur->field_poc[0]==INT_MAX || cur->field_poc[1]==INT_MAX) { + //FIXME this allows the next thread to start once we encounter the first field of a PAFF packet + //This works if the next packet contains the second field. It does not work if both fields are + //in the same packet. + //ff_thread_finish_setup(s->avctx); + return; + } + + cur->interlaced_frame = 0; + cur->repeat_pict = 0; + + /* Signal interlacing information externally. */ + /* Prioritize picture timing SEI information over used decoding process if it exists. */ + + if(h->sps.pic_struct_present_flag){ + switch (h->sei_pic_struct) + { + case SEI_PIC_STRUCT_FRAME: + break; + case SEI_PIC_STRUCT_TOP_FIELD: + case SEI_PIC_STRUCT_BOTTOM_FIELD: + cur->interlaced_frame = 1; + break; + case SEI_PIC_STRUCT_TOP_BOTTOM: + case SEI_PIC_STRUCT_BOTTOM_TOP: + if (FIELD_OR_MBAFF_PICTURE) + cur->interlaced_frame = 1; + else + // try to flag soft telecine progressive + cur->interlaced_frame = h->prev_interlaced_frame; + break; + case SEI_PIC_STRUCT_TOP_BOTTOM_TOP: + case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: + // Signal the possibility of telecined film externally (pic_struct 5,6) + // From these hints, let the applications decide if they apply deinterlacing. + cur->repeat_pict = 1; + break; + case SEI_PIC_STRUCT_FRAME_DOUBLING: + // Force progressive here, as doubling interlaced frame is a bad idea. + cur->repeat_pict = 2; + break; + case SEI_PIC_STRUCT_FRAME_TRIPLING: + cur->repeat_pict = 4; + break; + } + + if ((h->sei_ct_type & 3) && h->sei_pic_struct <= SEI_PIC_STRUCT_BOTTOM_TOP) + cur->interlaced_frame = (h->sei_ct_type & (1<<1)) != 0; + }else{ + /* Derive interlacing flag from used decoding process. */ + cur->interlaced_frame = FIELD_OR_MBAFF_PICTURE; + } + h->prev_interlaced_frame = cur->interlaced_frame; + + if (cur->field_poc[0] != cur->field_poc[1]){ + /* Derive top_field_first from field pocs. */ + cur->top_field_first = cur->field_poc[0] < cur->field_poc[1]; + }else{ + if(cur->interlaced_frame || h->sps.pic_struct_present_flag){ + /* Use picture timing SEI information. Even if it is a information of a past frame, better than nothing. */ + if(h->sei_pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM + || h->sei_pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM_TOP) + cur->top_field_first = 1; + else + cur->top_field_first = 0; + }else{ + /* Most likely progressive */ + cur->top_field_first = 0; + } + } + + //FIXME do something with unavailable reference frames + + /* Sort B-frames into display order */ + + if(h->sps.bitstream_restriction_flag + && s->avctx->has_b_frames < h->sps.num_reorder_frames){ + s->avctx->has_b_frames = h->sps.num_reorder_frames; + s->low_delay = 0; + } + + if( s->avctx->strict_std_compliance >= FF_COMPLIANCE_STRICT + && !h->sps.bitstream_restriction_flag){ + s->avctx->has_b_frames= MAX_DELAYED_PIC_COUNT; + s->low_delay= 0; + } + + pics = 0; + while(h->delayed_pic[pics]) pics++; + + assert(pics <= MAX_DELAYED_PIC_COUNT); + + h->delayed_pic[pics++] = cur; + if(cur->reference == 0) + cur->reference = DELAYED_PIC_REF; + + out = h->delayed_pic[0]; + out_idx = 0; + for(i=1; h->delayed_pic[i] && !h->delayed_pic[i]->key_frame && !h->delayed_pic[i]->mmco_reset; i++) + if(h->delayed_pic[i]->poc < out->poc){ + out = h->delayed_pic[i]; + out_idx = i; + } + if(s->avctx->has_b_frames == 0 && (h->delayed_pic[0]->key_frame || h->delayed_pic[0]->mmco_reset)) + h->next_outputed_poc= INT_MIN; + out_of_order = out->poc < h->next_outputed_poc; + + if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames) + { } + else if((out_of_order && pics-1 == s->avctx->has_b_frames && s->avctx->has_b_frames < MAX_DELAYED_PIC_COUNT) + || (s->low_delay && + ((h->next_outputed_poc != INT_MIN && out->poc > h->next_outputed_poc + 2) + || cur->pict_type == FF_B_TYPE))) + { + s->low_delay = 0; + s->avctx->has_b_frames++; + } + + if(out_of_order || pics > s->avctx->has_b_frames){ + out->reference &= ~DELAYED_PIC_REF; + for(i=out_idx; h->delayed_pic[i]; i++) + h->delayed_pic[i] = h->delayed_pic[i+1]; + } + if(!out_of_order && pics > s->avctx->has_b_frames){ + h->next_output_pic = out; + if(out_idx==0 && h->delayed_pic[0] && (h->delayed_pic[0]->key_frame || h->delayed_pic[0]->mmco_reset)) { + h->next_outputed_poc = INT_MIN; + } else + h->next_outputed_poc = out->poc; + }else{ + av_log(s->avctx, AV_LOG_DEBUG, "no picture\n"); + } + + ff_thread_finish_setup(s->avctx); +} + static inline void backup_mb_border(H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize, int simple){ MpegEncContext * const s = &h->s; uint8_t *top_border; @@ -1479,7 +1892,7 @@ static void flush_dpb(AVCodecContext *avctx){ h->delayed_pic[i]->reference= 0; h->delayed_pic[i]= NULL; } - h->outputed_poc= INT_MIN; + h->outputed_poc=h->next_outputed_poc= INT_MIN; h->prev_interlaced_frame = 1; idr(h); if(h->s.current_picture_ptr) @@ -1603,24 +2016,28 @@ static void init_scan_tables(H264Context *h){ } } -static void field_end(H264Context *h){ +static void field_end(H264Context *h, int in_setup){ MpegEncContext * const s = &h->s; AVCodecContext * const avctx= s->avctx; s->mb_y= 0; - s->current_picture_ptr->qscale_type= FF_QSCALE_TYPE_H264; - s->current_picture_ptr->pict_type= s->pict_type; + if (!in_setup && !s->dropable) + ff_thread_report_progress((AVFrame*)s->current_picture_ptr, (16*s->mb_height >> FIELD_PICTURE) - 1, + s->picture_structure==PICT_BOTTOM_FIELD); if (CONFIG_H264_VDPAU_DECODER && s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) ff_vdpau_h264_set_reference_frames(s); - if(!s->dropable) { - ff_h264_execute_ref_pic_marking(h, h->mmco, h->mmco_index); - h->prev_poc_msb= h->poc_msb; - h->prev_poc_lsb= h->poc_lsb; + if(in_setup || !(avctx->active_thread_type&FF_THREAD_FRAME)){ + if(!s->dropable) { + ff_h264_execute_ref_pic_marking(h, h->mmco, h->mmco_index); + h->prev_poc_msb= h->poc_msb; + h->prev_poc_lsb= h->poc_lsb; + } + h->prev_frame_num_offset= h->frame_num_offset; + h->prev_frame_num= h->frame_num; + h->outputed_poc = h->next_outputed_poc; } - h->prev_frame_num_offset= h->frame_num_offset; - h->prev_frame_num= h->frame_num; if (avctx->hwaccel) { if (avctx->hwaccel->end_frame(avctx) < 0) @@ -1737,7 +2154,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ if(first_mb_in_slice == 0){ //FIXME better field boundary detection if(h0->current_slice && FIELD_PICTURE){ - field_end(h); + field_end(h, 1); } h0->current_slice = 0; @@ -1806,8 +2223,10 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ if (s->context_initialized && ( s->width != s->avctx->width || s->height != s->avctx->height || av_cmp_q(h->sps.sar, s->avctx->sample_aspect_ratio))) { - if(h != h0) + if(h != h0) { + av_log_missing_feature(s->avctx, "Width/height changing with threads is", 0); return -1; // width / height changed during parallelized decoding + } free_tables(h, 0); flush_dpb(s->avctx); MPV_common_end(s); @@ -1852,21 +2271,26 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ init_scan_tables(h); ff_h264_alloc_tables(h); - for(i = 1; i < s->avctx->thread_count; i++) { - H264Context *c; - c = h->thread_context[i] = av_malloc(sizeof(H264Context)); - memcpy(c, h->s.thread_context[i], sizeof(MpegEncContext)); - memset(&c->s + 1, 0, sizeof(H264Context) - sizeof(MpegEncContext)); - c->h264dsp = h->h264dsp; - c->sps = h->sps; - c->pps = h->pps; - init_scan_tables(c); - clone_tables(c, h, i); - } - - for(i = 0; i < s->avctx->thread_count; i++) - if(context_init(h->thread_context[i]) < 0) + if (!HAVE_THREADS || !(s->avctx->active_thread_type&FF_THREAD_SLICE)) { + if (context_init(h) < 0) return -1; + } else { + for(i = 1; i < s->avctx->thread_count; i++) { + H264Context *c; + c = h->thread_context[i] = av_malloc(sizeof(H264Context)); + memcpy(c, h->s.thread_context[i], sizeof(MpegEncContext)); + memset(&c->s + 1, 0, sizeof(H264Context) - sizeof(MpegEncContext)); + c->h264dsp = h->h264dsp; + c->sps = h->sps; + c->pps = h->pps; + init_scan_tables(c); + clone_tables(c, h, i); + } + + for(i = 0; i < s->avctx->thread_count; i++) + if(context_init(h->thread_context[i]) < 0) + return -1; + } } h->frame_num= get_bits(&s->gb, h->sps.log2_max_frame_num); @@ -1887,6 +2311,10 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ h->mb_field_decoding_flag= s->picture_structure != PICT_FRAME; if(h0->current_slice == 0){ + if(h->frame_num != h->prev_frame_num && + (h->prev_frame_num+1)%(1<<h->sps.log2_max_frame_num) < (h->frame_num - h->sps.ref_frame_count)) + h->prev_frame_num = h->frame_num - h->sps.ref_frame_count - 1; + while(h->frame_num != h->prev_frame_num && h->frame_num != (h->prev_frame_num+1)%(1<<h->sps.log2_max_frame_num)){ Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL; @@ -1896,6 +2324,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ h->prev_frame_num++; h->prev_frame_num %= 1<<h->sps.log2_max_frame_num; s->current_picture_ptr->frame_num= h->prev_frame_num; + ff_thread_report_progress((AVFrame*)s->current_picture_ptr, INT_MAX, 0); + ff_thread_report_progress((AVFrame*)s->current_picture_ptr, INT_MAX, 1); ff_generate_sliding_window_mmcos(h); ff_h264_execute_ref_pic_marking(h, h->mmco, h->mmco_index); /* Error concealment: if a ref is missing, copy the previous ref in its place. @@ -2045,6 +2475,9 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ if(h->slice_type_nos!=FF_I_TYPE && ff_h264_decode_ref_pic_list_reordering(h) < 0) return -1; + //FIXME mt gives valgrind warnings and crashes if this is uncommented + /* + if(h->slice_type_nos!=FF_I_TYPE){ s->last_picture_ptr= &h->ref_list[0][0]; ff_copy_picture(&s->last_picture, s->last_picture_ptr); @@ -2054,6 +2487,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ ff_copy_picture(&s->next_picture, s->next_picture_ptr); } + */ + if( (h->pps.weighted_pred && h->slice_type_nos == FF_P_TYPE ) || (h->pps.weighted_bipred_idc==1 && h->slice_type_nos== FF_B_TYPE ) ) pred_weight_table(h); @@ -2200,7 +2635,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ +(h->ref_list[j][i].reference&3); } - h->emu_edge_width= (s->flags&CODEC_FLAG_EMU_EDGE) ? 0 : 16; + //FIXME: fix draw_edges+PAFF+frame threads + h->emu_edge_width= (s->flags&CODEC_FLAG_EMU_EDGE || (!h->sps.frame_mbs_only_flag && s->avctx->active_thread_type&FF_THREAD_FRAME)) ? 0 : 16; h->emu_edge_height= (FRAME_MBAFF || FIELD_PICTURE) ? 0 : h->emu_edge_width; if(s->avctx->debug&FF_DEBUG_PICT_INFO){ @@ -2521,6 +2957,40 @@ static void predict_field_decoding_flag(H264Context *h){ h->mb_mbaff = h->mb_field_decoding_flag = IS_INTERLACED(mb_type) ? 1 : 0; } +/** + * Draw edges and report progress for the last MB row. + */ +static void decode_finish_row(H264Context *h){ + MpegEncContext * const s = &h->s; + int top = 16*(s->mb_y >> FIELD_PICTURE); + int height = 16 << FRAME_MBAFF; + int deblock_border = (16 + 4) << FRAME_MBAFF; + int pic_height = 16*s->mb_height >> FIELD_PICTURE; + + if (h->deblocking_filter) { + if((top + height) >= pic_height) + height += deblock_border; + + top -= deblock_border; + } + + if (top >= pic_height || (top + height) < h->emu_edge_height) + return; + + height = FFMIN(height, pic_height - top); + if (top < h->emu_edge_height) { + height = top+height; + top = 0; + } + + ff_draw_horiz_band(s, top, height); + + if (s->dropable) return; + + ff_thread_report_progress((AVFrame*)s->current_picture_ptr, top + height - 1, + s->picture_structure==PICT_BOTTOM_FIELD); +} + static int decode_slice(struct AVCodecContext *avctx, void *arg){ H264Context *h = *(void**)arg; MpegEncContext * const s = &h->s; @@ -2574,7 +3044,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){ if( ++s->mb_x >= s->mb_width ) { s->mb_x = 0; loop_filter(h); - ff_draw_horiz_band(s, 16*s->mb_y, 16); + decode_finish_row(h); ++s->mb_y; if(FIELD_OR_MBAFF_PICTURE) { ++s->mb_y; @@ -2614,7 +3084,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){ if(++s->mb_x >= s->mb_width){ s->mb_x=0; loop_filter(h); - ff_draw_horiz_band(s, 16*s->mb_y, 16); + decode_finish_row(h); ++s->mb_y; if(FIELD_OR_MBAFF_PICTURE) { ++s->mb_y; @@ -2747,7 +3217,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){ int context_count = 0; int next_avc= h->is_avc ? 0 : buf_size; - h->max_contexts = avctx->thread_count; + h->max_contexts = (HAVE_THREADS && (s->avctx->active_thread_type&FF_THREAD_SLICE)) ? avctx->thread_count : 1; #if 0 int i; for(i=0; i<50; i++){ @@ -2842,16 +3312,21 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){ if((err = decode_slice_header(hx, h))) break; + s->current_picture_ptr->key_frame |= + (hx->nal_unit_type == NAL_IDR_SLICE) || + (h->sei_recovery_frame_cnt >= 0); + if (h->current_slice == 1) { + if(!(s->flags2 & CODEC_FLAG2_CHUNKS)) { + decode_postinit(h); + } + if (s->avctx->hwaccel && s->avctx->hwaccel->start_frame(s->avctx, NULL, 0) < 0) return -1; if(CONFIG_H264_VDPAU_DECODER && s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) ff_vdpau_h264_picture_start(s); } - s->current_picture_ptr->key_frame |= - (hx->nal_unit_type == NAL_IDR_SLICE) || - (h->sei_recovery_frame_cnt >= 0); if(hx->redundant_pic_count==0 && hx->s.hurry_up < 5 && (avctx->skip_frame < AVDISCARD_NONREF || hx->nal_ref_idc) && (avctx->skip_frame < AVDISCARD_BIDIR || hx->slice_type_nos!=FF_B_TYPE) @@ -2981,6 +3456,8 @@ static int decode_frame(AVCodecContext *avctx, Picture *out; int i, out_idx; + s->current_picture_ptr = NULL; + //FIXME factorize this with the output code below out = h->delayed_pic[0]; out_idx = 0; @@ -3017,143 +3494,18 @@ static int decode_frame(AVCodecContext *avctx, } if(!(s->flags2 & CODEC_FLAG2_CHUNKS) || (s->mb_y >= s->mb_height && s->mb_height)){ - Picture *out = s->current_picture_ptr; - Picture *cur = s->current_picture_ptr; - int i, pics, out_of_order, out_idx; - field_end(h); + if(s->flags2 & CODEC_FLAG2_CHUNKS) decode_postinit(h); - if (cur->field_poc[0]==INT_MAX || cur->field_poc[1]==INT_MAX) { + field_end(h, 0); + + if (!h->next_output_pic) { /* Wait for second field. */ *data_size = 0; } else { - cur->interlaced_frame = 0; - cur->repeat_pict = 0; - - /* Signal interlacing information externally. */ - /* Prioritize picture timing SEI information over used decoding process if it exists. */ - - if(h->sps.pic_struct_present_flag){ - switch (h->sei_pic_struct) - { - case SEI_PIC_STRUCT_FRAME: - break; - case SEI_PIC_STRUCT_TOP_FIELD: - case SEI_PIC_STRUCT_BOTTOM_FIELD: - cur->interlaced_frame = 1; - break; - case SEI_PIC_STRUCT_TOP_BOTTOM: - case SEI_PIC_STRUCT_BOTTOM_TOP: - if (FIELD_OR_MBAFF_PICTURE) - cur->interlaced_frame = 1; - else - // try to flag soft telecine progressive - cur->interlaced_frame = h->prev_interlaced_frame; - break; - case SEI_PIC_STRUCT_TOP_BOTTOM_TOP: - case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM: - // Signal the possibility of telecined film externally (pic_struct 5,6) - // From these hints, let the applications decide if they apply deinterlacing. - cur->repeat_pict = 1; - break; - case SEI_PIC_STRUCT_FRAME_DOUBLING: - // Force progressive here, as doubling interlaced frame is a bad idea. - cur->repeat_pict = 2; - break; - case SEI_PIC_STRUCT_FRAME_TRIPLING: - cur->repeat_pict = 4; - break; - } - - if ((h->sei_ct_type & 3) && h->sei_pic_struct <= SEI_PIC_STRUCT_BOTTOM_TOP) - cur->interlaced_frame = (h->sei_ct_type & (1<<1)) != 0; - }else{ - /* Derive interlacing flag from used decoding process. */ - cur->interlaced_frame = FIELD_OR_MBAFF_PICTURE; - } - h->prev_interlaced_frame = cur->interlaced_frame; - - if (cur->field_poc[0] != cur->field_poc[1]){ - /* Derive top_field_first from field pocs. */ - cur->top_field_first = cur->field_poc[0] < cur->field_poc[1]; - }else{ - if(cur->interlaced_frame || h->sps.pic_struct_present_flag){ - /* Use picture timing SEI information. Even if it is a information of a past frame, better than nothing. */ - if(h->sei_pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM - || h->sei_pic_struct == SEI_PIC_STRUCT_TOP_BOTTOM_TOP) - cur->top_field_first = 1; - else - cur->top_field_first = 0; - }else{ - /* Most likely progressive */ - cur->top_field_first = 0; - } - } - - //FIXME do something with unavailable reference frames - - /* Sort B-frames into display order */ - - if(h->sps.bitstream_restriction_flag - && s->avctx->has_b_frames < h->sps.num_reorder_frames){ - s->avctx->has_b_frames = h->sps.num_reorder_frames; - s->low_delay = 0; - } - - if( s->avctx->strict_std_compliance >= FF_COMPLIANCE_STRICT - && !h->sps.bitstream_restriction_flag){ - s->avctx->has_b_frames= MAX_DELAYED_PIC_COUNT; - s->low_delay= 0; - } - - pics = 0; - while(h->delayed_pic[pics]) pics++; - - assert(pics <= MAX_DELAYED_PIC_COUNT); - - h->delayed_pic[pics++] = cur; - if(cur->reference == 0) - cur->reference = DELAYED_PIC_REF; - - out = h->delayed_pic[0]; - out_idx = 0; - for(i=1; h->delayed_pic[i] && !h->delayed_pic[i]->key_frame && !h->delayed_pic[i]->mmco_reset; i++) - if(h->delayed_pic[i]->poc < out->poc){ - out = h->delayed_pic[i]; - out_idx = i; - } - if(s->avctx->has_b_frames == 0 && (h->delayed_pic[0]->key_frame || h->delayed_pic[0]->mmco_reset)) - h->outputed_poc= INT_MIN; - out_of_order = out->poc < h->outputed_poc; - - if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames) - { } - else if((out_of_order && pics-1 == s->avctx->has_b_frames && s->avctx->has_b_frames < MAX_DELAYED_PIC_COUNT) - || (s->low_delay && - ((h->outputed_poc != INT_MIN && out->poc > h->outputed_poc + 2) - || cur->pict_type == FF_B_TYPE))) - { - s->low_delay = 0; - s->avctx->has_b_frames++; - } - - if(out_of_order || pics > s->avctx->has_b_frames){ - out->reference &= ~DELAYED_PIC_REF; - for(i=out_idx; h->delayed_pic[i]; i++) - h->delayed_pic[i] = h->delayed_pic[i+1]; - } - if(!out_of_order && pics > s->avctx->has_b_frames){ - *data_size = sizeof(AVFrame); - - if(out_idx==0 && h->delayed_pic[0] && (h->delayed_pic[0]->key_frame || h->delayed_pic[0]->mmco_reset)) { - h->outputed_poc = INT_MIN; - } else - h->outputed_poc = out->poc; - *pict= *(AVFrame*)out; - }else{ - av_log(avctx, AV_LOG_DEBUG, "no picture\n"); - } + *data_size = sizeof(AVFrame); + *pict = *(AVFrame*)h->next_output_pic; } } @@ -3412,9 +3764,11 @@ AVCodec ff_h264_decoder = { NULL, ff_h264_decode_end, decode_frame, - /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY, + /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY | CODEC_CAP_FRAME_THREADS, .flush= flush_dpb, .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"), + .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy), + .update_thread_context = ONLY_IF_THREADS_ENABLED(decode_update_thread_context), .profiles = NULL_IF_CONFIG_SMALL(profiles), }; diff --git a/libavcodec/h264.h b/libavcodec/h264.h index b403968485..770a7ecb59 100644 --- a/libavcodec/h264.h +++ b/libavcodec/h264.h @@ -392,9 +392,9 @@ typedef struct H264Context{ /** * num_ref_idx_l0/1_active_minus1 + 1 */ + uint8_t *list_counts; ///< Array of list_count per MB specifying the slice type unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode unsigned int list_count; - uint8_t *list_counts; ///< Array of list_count per MB specifying the slice type Picture ref_list[2][48]; /**< 0..15: frame refs, 16..47: mbaff field refs. Reordered version of default_ref_list according to picture reordering in slice header */ @@ -504,7 +504,9 @@ typedef struct H264Context{ Picture *long_ref[32]; Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture Picture *delayed_pic[MAX_DELAYED_PIC_COUNT+2]; //FIXME size? + Picture *next_output_pic; int outputed_poc; + int next_outputed_poc; /** * memory management control operations buffer. diff --git a/libavcodec/h264_direct.c b/libavcodec/h264_direct.c index d22780d925..a26a51a330 100644 --- a/libavcodec/h264_direct.c +++ b/libavcodec/h264_direct.c @@ -31,6 +31,7 @@ #include "mpegvideo.h" #include "h264.h" #include "rectangle.h" +#include "thread.h" //#undef NDEBUG #include <assert.h> @@ -126,7 +127,7 @@ void ff_h264_direct_ref_list_init(H264Context * const h){ h->col_parity= (FFABS(col_poc[0] - cur_poc) >= FFABS(col_poc[1] - cur_poc)); ref1sidx=sidx= h->col_parity; }else if(!(s->picture_structure & h->ref_list[1][0].reference) && !h->ref_list[1][0].mbaff){ // FL -> FL & differ parity - h->col_fieldoff= s->mb_stride*(2*(h->ref_list[1][0].reference) - 3); + h->col_fieldoff= 2*(h->ref_list[1][0].reference) - 3; } if(cur->pict_type != FF_B_TYPE || h->direct_spatial_mv_pred) @@ -140,11 +141,27 @@ void ff_h264_direct_ref_list_init(H264Context * const h){ } } +static void await_reference_mb_row(H264Context * const h, Picture *ref, int mb_y) +{ + int ref_field = ref->reference - 1; + int ref_field_picture = ref->field_picture; + int ref_height = 16*h->s.mb_height >> ref_field_picture; + + if(!HAVE_PTHREADS || !(h->s.avctx->active_thread_type&FF_THREAD_FRAME)) + return; + + //FIXME it can be safe to access mb stuff + //even if pixels aren't deblocked yet + + ff_thread_await_progress((AVFrame*)ref, FFMIN(16*mb_y >> ref_field_picture, ref_height-1), + ref_field_picture && ref_field); +} + static void pred_spatial_direct_motion(H264Context * const h, int *mb_type){ MpegEncContext * const s = &h->s; int b8_stride = 2; int b4_stride = h->b_stride; - int mb_xy = h->mb_xy; + int mb_xy = h->mb_xy, mb_y = s->mb_y; int mb_type_col[2]; const int16_t (*l1mv0)[2], (*l1mv1)[2]; const int8_t *l1ref0, *l1ref1; @@ -157,6 +174,8 @@ static void pred_spatial_direct_motion(H264Context * const h, int *mb_type){ assert(h->ref_list[1][0].reference&3); + await_reference_mb_row(h, &h->ref_list[1][0], s->mb_y + !!IS_INTERLACED(*mb_type)); + #define MB_TYPE_16x16_OR_INTRA (MB_TYPE_16x16|MB_TYPE_INTRA4x4|MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM) @@ -217,14 +236,17 @@ static void pred_spatial_direct_motion(H264Context * const h, int *mb_type){ if(IS_INTERLACED(h->ref_list[1][0].mb_type[mb_xy])){ // AFL/AFR/FR/FL -> AFL/FL if(!IS_INTERLACED(*mb_type)){ // AFR/FR -> AFL/FL + mb_y = (s->mb_y&~1) + h->col_parity; mb_xy= s->mb_x + ((s->mb_y&~1) + h->col_parity)*s->mb_stride; b8_stride = 0; }else{ - mb_xy += h->col_fieldoff; // non zero for FL -> FL & differ parity + mb_y += h->col_fieldoff; + mb_xy += s->mb_stride*h->col_fieldoff; // non zero for FL -> FL & differ parity } goto single_col; }else{ // AFL/AFR/FR/FL -> AFR/FR if(IS_INTERLACED(*mb_type)){ // AFL /FL -> AFR/FR + mb_y = s->mb_y&~1; mb_xy= s->mb_x + (s->mb_y&~1)*s->mb_stride; mb_type_col[0] = h->ref_list[1][0].mb_type[mb_xy]; mb_type_col[1] = h->ref_list[1][0].mb_type[mb_xy + s->mb_stride]; @@ -260,6 +282,8 @@ single_col: } } + await_reference_mb_row(h, &h->ref_list[1][0], mb_y); + l1mv0 = &h->ref_list[1][0].motion_val[0][h->mb2b_xy [mb_xy]]; l1mv1 = &h->ref_list[1][0].motion_val[1][h->mb2b_xy [mb_xy]]; l1ref0 = &h->ref_list[1][0].ref_index [0][4*mb_xy]; @@ -384,7 +408,7 @@ static void pred_temp_direct_motion(H264Context * const h, int *mb_type){ MpegEncContext * const s = &h->s; int b8_stride = 2; int b4_stride = h->b_stride; - int mb_xy = h->mb_xy; + int mb_xy = h->mb_xy, mb_y = s->mb_y; int mb_type_col[2]; const int16_t (*l1mv0)[2], (*l1mv1)[2]; const int8_t *l1ref0, *l1ref1; @@ -394,16 +418,21 @@ static void pred_temp_direct_motion(H264Context * const h, int *mb_type){ assert(h->ref_list[1][0].reference&3); + await_reference_mb_row(h, &h->ref_list[1][0], s->mb_y + !!IS_INTERLACED(*mb_type)); + if(IS_INTERLACED(h->ref_list[1][0].mb_type[mb_xy])){ // AFL/AFR/FR/FL -> AFL/FL if(!IS_INTERLACED(*mb_type)){ // AFR/FR -> AFL/FL + mb_y = (s->mb_y&~1) + h->col_parity; mb_xy= s->mb_x + ((s->mb_y&~1) + h->col_parity)*s->mb_stride; b8_stride = 0; }else{ - mb_xy += h->col_fieldoff; // non zero for FL -> FL & differ parity + mb_y += h->col_fieldoff; + mb_xy += s->mb_stride*h->col_fieldoff; // non zero for FL -> FL & differ parity } goto single_col; }else{ // AFL/AFR/FR/FL -> AFR/FR if(IS_INTERLACED(*mb_type)){ // AFL /FL -> AFR/FR + mb_y = s->mb_y&~1; mb_xy= s->mb_x + (s->mb_y&~1)*s->mb_stride; mb_type_col[0] = h->ref_list[1][0].mb_type[mb_xy]; mb_type_col[1] = h->ref_list[1][0].mb_type[mb_xy + s->mb_stride]; @@ -440,6 +469,8 @@ single_col: } } + await_reference_mb_row(h, &h->ref_list[1][0], mb_y); + l1mv0 = &h->ref_list[1][0].motion_val[0][h->mb2b_xy [mb_xy]]; l1mv1 = &h->ref_list[1][0].motion_val[1][h->mb2b_xy [mb_xy]]; l1ref0 = &h->ref_list[1][0].ref_index [0][4*mb_xy]; diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c index 12d1751172..b28ac26913 100644 --- a/libavcodec/mdec.c +++ b/libavcodec/mdec.c @@ -31,6 +31,7 @@ #include "dsputil.h" #include "mpegvideo.h" #include "mpeg12.h" +#include "thread.h" typedef struct MDECContext{ AVCodecContext *avctx; @@ -162,10 +163,10 @@ static int decode_frame(AVCodecContext *avctx, int i; if(p->data[0]) - avctx->release_buffer(avctx, p); + ff_thread_release_buffer(avctx, p); p->reference= 0; - if(avctx->get_buffer(avctx, p) < 0){ + if(ff_thread_get_buffer(avctx, p) < 0){ av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } @@ -238,6 +239,18 @@ static av_cold int decode_init(AVCodecContext *avctx){ return 0; } +static av_cold int decode_init_thread_copy(AVCodecContext *avctx){ + MDECContext * const a = avctx->priv_data; + AVFrame *p = (AVFrame*)&a->picture; + + avctx->coded_frame= p; + a->avctx= avctx; + + p->qscale_table= av_mallocz( p->qstride * a->mb_height); + + return 0; +} + static av_cold int decode_end(AVCodecContext *avctx){ MDECContext * const a = avctx->priv_data; @@ -259,7 +272,8 @@ AVCodec ff_mdec_decoder = { NULL, decode_end, decode_frame, - CODEC_CAP_DR1, + CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS, .long_name= NULL_IF_CONFIG_SMALL("Sony PlayStation MDEC (Motion DECoder)"), + .init_thread_copy= ONLY_IF_THREADS_ENABLED(decode_init_thread_copy) }; diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c index 450dd65784..2f3f9d9930 100644 --- a/libavcodec/mimic.c +++ b/libavcodec/mimic.c @@ -27,6 +27,7 @@ #include "get_bits.h" #include "bytestream.h" #include "dsputil.h" +#include "thread.h" #define MIMIC_HEADER_SIZE 20 @@ -51,6 +52,10 @@ typedef struct { ScanTable scantable; DSPContext dsp; VLC vlc; + + /* Kept in the context so multithreading can have a constant to read from */ + int next_cur_index; + int next_prev_index; } MimicContext; static const uint32_t huffcodes[] = { @@ -121,6 +126,23 @@ static av_cold int mimic_decode_init(AVCodecContext *avctx) return 0; } +static int mimic_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from) +{ + MimicContext *dst = avctx->priv_data, *src = avctx_from->priv_data; + + if (avctx == avctx_from) return 0; + + dst->cur_index = src->next_cur_index; + dst->prev_index = src->next_prev_index; + + memcpy(dst->buf_ptrs, src->buf_ptrs, sizeof(src->buf_ptrs)); + memcpy(dst->flipped_ptrs, src->flipped_ptrs, sizeof(src->flipped_ptrs)); + + memset(&dst->buf_ptrs[dst->cur_index], 0, sizeof(AVFrame)); + + return 0; +} + static const int8_t vlcdec_lookup[9][64] = { { 0, }, { -1, 1, }, @@ -205,7 +227,7 @@ static int vlc_decode_block(MimicContext *ctx, int num_coeffs, int qscale) static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe) { - int y, x, plane; + int y, x, plane, cur_row = 0; for(plane = 0; plane < 3; plane++) { const int is_chroma = !!plane; @@ -236,6 +258,7 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs, int index = (ctx->cur_index+backref)&15; uint8_t *p = ctx->flipped_ptrs[index].data[0]; + ff_thread_await_progress(&ctx->buf_ptrs[index], cur_row, 0); if(p) { p += src - ctx->flipped_ptrs[ctx->prev_index].data[plane]; @@ -246,6 +269,7 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs, } } } else { + ff_thread_await_progress(&ctx->buf_ptrs[ctx->prev_index], cur_row, 0); ctx->dsp.put_pixels_tab[1][0](dst, src, stride, 8); } src += 8; @@ -253,6 +277,8 @@ static int decode(MimicContext *ctx, int quality, int num_coeffs, } src += (stride - ctx->num_hblocks[plane])<<3; dst += (stride - ctx->num_hblocks[plane])<<3; + + ff_thread_report_progress(&ctx->buf_ptrs[ctx->cur_index], cur_row++, 0); } } @@ -326,14 +352,20 @@ static int mimic_decode_frame(AVCodecContext *avctx, void *data, } ctx->buf_ptrs[ctx->cur_index].reference = 1; - if(avctx->get_buffer(avctx, &ctx->buf_ptrs[ctx->cur_index])) { + ctx->buf_ptrs[ctx->cur_index].pict_type = is_pframe ? FF_P_TYPE:FF_I_TYPE; + if(ff_thread_get_buffer(avctx, &ctx->buf_ptrs[ctx->cur_index])) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } + ctx->next_prev_index = ctx->cur_index; + ctx->next_cur_index = (ctx->cur_index - 1) & 15; + prepare_avpic(ctx, &ctx->flipped_ptrs[ctx->cur_index], (AVPicture*) &ctx->buf_ptrs[ctx->cur_index]); + ff_thread_finish_setup(avctx); + av_fast_malloc(&ctx->swap_buf, &ctx->swap_buf_size, swap_buf_size + FF_INPUT_BUFFER_PADDING_SIZE); if(!ctx->swap_buf) @@ -345,21 +377,23 @@ static int mimic_decode_frame(AVCodecContext *avctx, void *data, init_get_bits(&ctx->gb, ctx->swap_buf, swap_buf_size << 3); if(!decode(ctx, quality, num_coeffs, !is_pframe)) { - avctx->release_buffer(avctx, &ctx->buf_ptrs[ctx->cur_index]); - return -1; + if (avctx->active_thread_type&FF_THREAD_FRAME) + ff_thread_report_progress(&ctx->buf_ptrs[ctx->cur_index], INT_MAX, 0); + else { + ff_thread_release_buffer(avctx, &ctx->buf_ptrs[ctx->cur_index]); + return -1; + } } - ctx->buf_ptrs[ctx->cur_index].pict_type = is_pframe ? FF_P_TYPE:FF_I_TYPE; *(AVFrame*)data = ctx->buf_ptrs[ctx->cur_index]; *data_size = sizeof(AVFrame); - ctx->prev_index = ctx->cur_index; - ctx->cur_index--; - ctx->cur_index &= 15; + ctx->prev_index = ctx->next_prev_index; + ctx->cur_index = ctx->next_cur_index; /* Only release frames that aren't used for backreferences anymore */ if(ctx->buf_ptrs[ctx->cur_index].data[0]) - avctx->release_buffer(avctx, &ctx->buf_ptrs[ctx->cur_index]); + ff_thread_release_buffer(avctx, &ctx->buf_ptrs[ctx->cur_index]); return buf_size; } @@ -370,9 +404,12 @@ static av_cold int mimic_decode_end(AVCodecContext *avctx) int i; av_free(ctx->swap_buf); + + if(avctx->is_copy) return 0; + for(i = 0; i < 16; i++) if(ctx->buf_ptrs[i].data[0]) - avctx->release_buffer(avctx, &ctx->buf_ptrs[i]); + ff_thread_release_buffer(avctx, &ctx->buf_ptrs[i]); free_vlc(&ctx->vlc); return 0; @@ -387,6 +424,7 @@ AVCodec ff_mimic_decoder = { NULL, mimic_decode_end, mimic_decode_frame, - CODEC_CAP_DR1, + CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS, .long_name = NULL_IF_CONFIG_SMALL("Mimic"), + .update_thread_context = ONLY_IF_THREADS_ENABLED(mimic_decode_update_thread_context) }; diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index e33f597ce7..76995ad45c 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -37,6 +37,7 @@ #include "bytestream.h" #include "vdpau_internal.h" #include "xvmc_internal.h" +#include "thread.h" //#undef NDEBUG //#include <assert.h> @@ -1179,6 +1180,27 @@ static av_cold int mpeg_decode_init(AVCodecContext *avctx) return 0; } +static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from) +{ + Mpeg1Context *ctx = avctx->priv_data, *ctx_from = avctx_from->priv_data; + MpegEncContext *s = &ctx->mpeg_enc_ctx, *s1 = &ctx_from->mpeg_enc_ctx; + int err; + + if(avctx == avctx_from || !ctx_from->mpeg_enc_ctx_allocated || !s1->context_initialized) + return 0; + + err = ff_mpeg_update_thread_context(avctx, avctx_from); + if(err) return err; + + if(!ctx->mpeg_enc_ctx_allocated) + memcpy(s + 1, s1 + 1, sizeof(Mpeg1Context) - sizeof(MpegEncContext)); + + if(!(s->pict_type == FF_B_TYPE || s->low_delay)) + s->picture_number++; + + return 0; +} + static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm, const uint8_t *new_perm){ uint16_t temp_matrix[64]; @@ -1595,6 +1617,9 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) } *s->current_picture_ptr->pan_scan= s1->pan_scan; + + if (HAVE_PTHREADS && avctx->active_thread_type&FF_THREAD_FRAME) + ff_thread_finish_setup(avctx); }else{ //second field int i; @@ -1769,6 +1794,7 @@ static int mpeg_decode_slice(Mpeg1Context *s1, int mb_y, const int mb_size= 16>>s->avctx->lowres; ff_draw_horiz_band(s, mb_size*(s->mb_y>>field_pic), mb_size); + MPV_report_decode_progress(s); s->mb_x = 0; s->mb_y += 1<<field_pic; @@ -1924,7 +1950,8 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) *pict= *(AVFrame*)s->current_picture_ptr; ff_print_debug_info(s, pict); } else { - s->picture_number++; + if (avctx->active_thread_type&FF_THREAD_FRAME) + s->picture_number++; /* latency of 1 frame for I- and P-frames */ /* XXX: use another variable than picture_number */ if (s->last_picture_ptr != NULL) { @@ -2260,7 +2287,7 @@ static int decode_chunks(AVCodecContext *avctx, buf_ptr = ff_find_start_code(buf_ptr,buf_end, &start_code); if (start_code > 0x1ff){ if(s2->pict_type != FF_B_TYPE || avctx->skip_frame <= AVDISCARD_DEFAULT){ - if(avctx->thread_count > 1){ + if(HAVE_THREADS && avctx->active_thread_type&FF_THREAD_SLICE){ int i; avctx->execute(avctx, slice_decode_thread, &s2->thread_context[0], NULL, s->slice_count, sizeof(void*)); @@ -2422,7 +2449,7 @@ static int decode_chunks(AVCodecContext *avctx, break; } - if(avctx->thread_count > 1){ + if(HAVE_THREADS && avctx->active_thread_type&FF_THREAD_SLICE){ int threshold= (s2->mb_height*s->slice_count + avctx->thread_count/2) / avctx->thread_count; if(threshold <= mb_y){ MpegEncContext *thread_context= s2->thread_context[s->slice_count]; @@ -2496,6 +2523,7 @@ AVCodec ff_mpeg1video_decoder = { .flush= flush, .max_lowres= 3, .long_name= NULL_IF_CONFIG_SMALL("MPEG-1 video"), + .update_thread_context= ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context) }; AVCodec ff_mpeg2video_decoder = { @@ -2532,7 +2560,7 @@ AVCodec ff_mpegvideo_decoder = { #if CONFIG_MPEG_XVMC_DECODER static av_cold int mpeg_mc_decode_init(AVCodecContext *avctx){ - if( avctx->thread_count > 1) + if( avctx->active_thread_type & FF_THREAD_SLICE ) return -1; if( !(avctx->slice_flags & SLICE_FLAG_CODED_ORDER) ) return -1; diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index c152b3c2f2..b293bada32 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -23,6 +23,7 @@ #include "mpegvideo.h" #include "mpeg4video.h" #include "h263.h" +#include "thread.h" // The defines below define the number of bits that are read at once for // reading vlc values. Changing these may improve speed and data cache needs @@ -373,7 +374,13 @@ int mpeg4_decode_video_packet_header(MpegEncContext *s) return -1; } if(s->pict_type == FF_B_TYPE){ - while(s->next_picture.mbskip_table[ s->mb_index2xy[ mb_num ] ]) mb_num++; + int mb_x = 0, mb_y = 0; + + while(s->next_picture.mbskip_table[ s->mb_index2xy[ mb_num ] ]) { + if (!mb_x) ff_thread_await_progress((AVFrame*)s->next_picture_ptr, mb_y++, 0); + mb_num++; + if (++mb_x == s->mb_width) mb_x = 0; + } if(mb_num >= s->mb_num) return -1; // slice contains just skipped MBs which where already decoded } @@ -1303,6 +1310,8 @@ static int mpeg4_decode_mb(MpegEncContext *s, s->last_mv[i][1][0]= s->last_mv[i][1][1]= 0; } + + ff_thread_await_progress((AVFrame*)s->next_picture_ptr, s->mb_y, 0); } /* if we skipped it in the future P Frame than skip it now too */ @@ -1482,6 +1491,12 @@ end: if(s->codec_id==CODEC_ID_MPEG4){ if(mpeg4_is_resync(s)){ const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1; + + if(s->pict_type==FF_B_TYPE){ + ff_thread_await_progress((AVFrame*)s->next_picture_ptr, + (s->mb_x + delta >= s->mb_width) ? FFMIN(s->mb_y+1, s->mb_height-1) : s->mb_y, 0); + } + if(s->pict_type==FF_B_TYPE && s->next_picture.mbskip_table[xy + delta]) return SLICE_OK; return SLICE_END; @@ -2239,11 +2254,12 @@ AVCodec ff_mpeg4_decoder = { NULL, ff_h263_decode_end, ff_h263_decode_frame, - CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, + CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_FRAME_THREADS, .flush= ff_mpeg_flush, .max_lowres= 3, .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), .pix_fmts= ff_hwaccel_pixfmt_list_420, + .update_thread_context= ONLY_IF_THREADS_ENABLED(ff_mpeg_update_thread_context) }; diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 6ba7142763..10a488bb27 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -38,6 +38,7 @@ #include "msmpeg4.h" #include "faandct.h" #include "xvmc_internal.h" +#include "thread.h" #include <limits.h> //#undef NDEBUG @@ -205,7 +206,7 @@ void ff_copy_picture(Picture *dst, Picture *src){ */ static void free_frame_buffer(MpegEncContext *s, Picture *pic) { - s->avctx->release_buffer(s->avctx, (AVFrame*)pic); + ff_thread_release_buffer(s->avctx, (AVFrame*)pic); av_freep(&pic->hwaccel_picture_private); } @@ -227,7 +228,7 @@ static int alloc_frame_buffer(MpegEncContext *s, Picture *pic) } } - r = s->avctx->get_buffer(s->avctx, (AVFrame*)pic); + r = ff_thread_get_buffer(s->avctx, (AVFrame*)pic); if (r<0 || !pic->age || !pic->type || !pic->data[0]) { av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (%d %d %d %p)\n", r, pic->age, pic->type, pic->data[0]); @@ -458,6 +459,81 @@ void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src){ //STOP_TIMER("update_duplicate_context") //about 10k cycles / 0.01 sec for 1000frames on 1ghz with 2 threads } +int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) +{ + MpegEncContext *s = dst->priv_data, *s1 = src->priv_data; + + if(dst == src || !s1->context_initialized) return 0; + + //FIXME can parameters change on I-frames? in that case dst may need a reinit + if(!s->context_initialized){ + memcpy(s, s1, sizeof(MpegEncContext)); + + s->avctx = dst; + s->picture_range_start += MAX_PICTURE_COUNT; + s->picture_range_end += MAX_PICTURE_COUNT; + s->bitstream_buffer = NULL; + s->bitstream_buffer_size = s->allocated_bitstream_buffer_size = 0; + + MPV_common_init(s); + } + + s->avctx->coded_height = s1->avctx->coded_height; + s->avctx->coded_width = s1->avctx->coded_width; + s->avctx->width = s1->avctx->width; + s->avctx->height = s1->avctx->height; + + s->coded_picture_number = s1->coded_picture_number; + s->picture_number = s1->picture_number; + s->input_picture_number = s1->input_picture_number; + + memcpy(s->picture, s1->picture, s1->picture_count * sizeof(Picture)); + memcpy(&s->last_picture, &s1->last_picture, (char*)&s1->last_picture_ptr - (char*)&s1->last_picture); + + s->last_picture_ptr = REBASE_PICTURE(s1->last_picture_ptr, s, s1); + s->current_picture_ptr = REBASE_PICTURE(s1->current_picture_ptr, s, s1); + s->next_picture_ptr = REBASE_PICTURE(s1->next_picture_ptr, s, s1); + + memcpy(s->prev_pict_types, s1->prev_pict_types, PREV_PICT_TYPES_BUFFER_SIZE); + + //Error/bug resilience + s->next_p_frame_damaged = s1->next_p_frame_damaged; + s->workaround_bugs = s1->workaround_bugs; + + //MPEG4 timing info + memcpy(&s->time_increment_bits, &s1->time_increment_bits, (char*)&s1->shape - (char*)&s1->time_increment_bits); + + //B-frame info + s->max_b_frames = s1->max_b_frames; + s->low_delay = s1->low_delay; + s->dropable = s1->dropable; + + //DivX handling (doesn't work) + s->divx_packed = s1->divx_packed; + + if(s1->bitstream_buffer){ + if (s1->bitstream_buffer_size + FF_INPUT_BUFFER_PADDING_SIZE > s->allocated_bitstream_buffer_size) + av_fast_malloc(&s->bitstream_buffer, &s->allocated_bitstream_buffer_size, s1->allocated_bitstream_buffer_size); + s->bitstream_buffer_size = s1->bitstream_buffer_size; + memcpy(s->bitstream_buffer, s1->bitstream_buffer, s1->bitstream_buffer_size); + memset(s->bitstream_buffer+s->bitstream_buffer_size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + } + + //MPEG2/interlacing info + memcpy(&s->progressive_sequence, &s1->progressive_sequence, (char*)&s1->rtp_mode - (char*)&s1->progressive_sequence); + + if(!s1->first_field){ + s->last_pict_type= s1->pict_type; + if (s1->current_picture_ptr) s->last_lambda_for[s1->pict_type] = s1->current_picture_ptr->quality; + + if(s1->pict_type!=FF_B_TYPE){ + s->last_non_b_pict_type= s1->pict_type; + } + } + + return 0; +} + /** * sets the given MpegEncContext to common defaults (same for encoding and decoding). * the changed fields will not depend upon the prior state of the MpegEncContext. @@ -478,6 +554,9 @@ void MPV_common_defaults(MpegEncContext *s){ s->f_code = 1; s->b_code = 1; + + s->picture_range_start = 0; + s->picture_range_end = MAX_PICTURE_COUNT; } /** @@ -506,7 +585,8 @@ av_cold int MPV_common_init(MpegEncContext *s) return -1; } - if(s->avctx->thread_count > MAX_THREADS || (s->avctx->thread_count > s->mb_height && s->mb_height)){ + if(s->avctx->active_thread_type&FF_THREAD_SLICE && + (s->avctx->thread_count > MAX_THREADS || (s->avctx->thread_count > s->mb_height && s->mb_height))){ av_log(s->avctx, AV_LOG_ERROR, "too many threads\n"); return -1; } @@ -599,8 +679,9 @@ av_cold int MPV_common_init(MpegEncContext *s) FF_ALLOCZ_OR_GOTO(s->avctx, s->dct_offset, 2 * 64 * sizeof(uint16_t), fail) } } - FF_ALLOCZ_OR_GOTO(s->avctx, s->picture, MAX_PICTURE_COUNT * sizeof(Picture), fail) - for(i = 0; i < MAX_PICTURE_COUNT; i++) { + s->picture_count = MAX_PICTURE_COUNT * FFMAX(1, s->avctx->thread_count); + FF_ALLOCZ_OR_GOTO(s->avctx, s->picture, s->picture_count * sizeof(Picture), fail) + for(i = 0; i < s->picture_count; i++) { avcodec_get_frame_defaults((AVFrame *)&s->picture[i]); } @@ -660,20 +741,26 @@ av_cold int MPV_common_init(MpegEncContext *s) } s->context_initialized = 1; - s->thread_context[0]= s; - threads = s->avctx->thread_count; - for(i=1; i<threads; i++){ - s->thread_context[i]= av_malloc(sizeof(MpegEncContext)); - memcpy(s->thread_context[i], s, sizeof(MpegEncContext)); - } + if (HAVE_THREADS && s->avctx->active_thread_type&FF_THREAD_SLICE) { + threads = s->avctx->thread_count; - for(i=0; i<threads; i++){ - if(init_duplicate_context(s->thread_context[i], s) < 0) - goto fail; - s->thread_context[i]->start_mb_y= (s->mb_height*(i ) + s->avctx->thread_count/2) / s->avctx->thread_count; - s->thread_context[i]->end_mb_y = (s->mb_height*(i+1) + s->avctx->thread_count/2) / s->avctx->thread_count; + for(i=1; i<threads; i++){ + s->thread_context[i]= av_malloc(sizeof(MpegEncContext)); + memcpy(s->thread_context[i], s, sizeof(MpegEncContext)); + } + + for(i=0; i<threads; i++){ + if(init_duplicate_context(s->thread_context[i], s) < 0) + goto fail; + s->thread_context[i]->start_mb_y= (s->mb_height*(i ) + s->avctx->thread_count/2) / s->avctx->thread_count; + s->thread_context[i]->end_mb_y = (s->mb_height*(i+1) + s->avctx->thread_count/2) / s->avctx->thread_count; + } + } else { + if(init_duplicate_context(s, s) < 0) goto fail; + s->start_mb_y = 0; + s->end_mb_y = s->mb_height; } return 0; @@ -687,12 +774,14 @@ void MPV_common_end(MpegEncContext *s) { int i, j, k; - for(i=0; i<s->avctx->thread_count; i++){ - free_duplicate_context(s->thread_context[i]); - } - for(i=1; i<s->avctx->thread_count; i++){ - av_freep(&s->thread_context[i]); - } + if (HAVE_THREADS && s->avctx->active_thread_type&FF_THREAD_SLICE) { + for(i=0; i<s->avctx->thread_count; i++){ + free_duplicate_context(s->thread_context[i]); + } + for(i=1; i<s->avctx->thread_count; i++){ + av_freep(&s->thread_context[i]); + } + } else free_duplicate_context(s); av_freep(&s->parse_context.buffer); s->parse_context.buffer_size=0; @@ -747,8 +836,8 @@ void MPV_common_end(MpegEncContext *s) av_freep(&s->reordered_input_picture); av_freep(&s->dct_offset); - if(s->picture){ - for(i=0; i<MAX_PICTURE_COUNT; i++){ + if(s->picture && !s->avctx->is_copy){ + for(i=0; i<s->picture_count; i++){ free_picture(s, &s->picture[i]); } } @@ -762,7 +851,8 @@ void MPV_common_end(MpegEncContext *s) for(i=0; i<3; i++) av_freep(&s->visualization_buffer[i]); - avcodec_default_free_buffers(s->avctx); + if(!(s->avctx->active_thread_type&FF_THREAD_FRAME)) + avcodec_default_free_buffers(s->avctx); } void init_rl(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]) @@ -860,14 +950,14 @@ int ff_find_unused_picture(MpegEncContext *s, int shared){ int i; if(shared){ - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=s->picture_range_start; i<s->picture_range_end; i++){ if(s->picture[i].data[0]==NULL && s->picture[i].type==0) return i; } }else{ - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=s->picture_range_start; i<s->picture_range_end; i++){ if(s->picture[i].data[0]==NULL && s->picture[i].type!=0) return i; //FIXME } - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=s->picture_range_start; i<s->picture_range_end; i++){ if(s->picture[i].data[0]==NULL) return i; } } @@ -924,7 +1014,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) /* release forgotten pictures */ /* if(mpeg124/h263) */ if(!s->encoding){ - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=0; i<s->picture_count; i++){ if(s->picture[i].data[0] && &s->picture[i] != s->next_picture_ptr && s->picture[i].reference){ av_log(avctx, AV_LOG_ERROR, "releasing zombie picture\n"); free_frame_buffer(s, &s->picture[i]); @@ -936,7 +1026,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) if(!s->encoding){ /* release non reference frames */ - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=0; i<s->picture_count; i++){ if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){ free_frame_buffer(s, &s->picture[i]); } @@ -970,6 +1060,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) s->current_picture_ptr->top_field_first= (s->picture_structure == PICT_TOP_FIELD) == s->first_field; } s->current_picture_ptr->interlaced_frame= !s->progressive_frame && !s->progressive_sequence; + s->current_picture_ptr->field_picture= s->picture_structure != PICT_FRAME; } s->current_picture_ptr->pict_type= s->pict_type; @@ -998,6 +1089,8 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) s->last_picture_ptr= &s->picture[i]; if(ff_alloc_picture(s, s->last_picture_ptr, 0) < 0) return -1; + ff_thread_report_progress((AVFrame*)s->last_picture_ptr, INT_MAX, 0); + ff_thread_report_progress((AVFrame*)s->last_picture_ptr, INT_MAX, 1); } if((s->next_picture_ptr==NULL || s->next_picture_ptr->data[0]==NULL) && s->pict_type==FF_B_TYPE){ /* Allocate a dummy frame */ @@ -1005,6 +1098,8 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) s->next_picture_ptr= &s->picture[i]; if(ff_alloc_picture(s, s->next_picture_ptr, 0) < 0) return -1; + ff_thread_report_progress((AVFrame*)s->next_picture_ptr, INT_MAX, 0); + ff_thread_report_progress((AVFrame*)s->next_picture_ptr, INT_MAX, 1); } } @@ -1057,7 +1152,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) void MPV_frame_end(MpegEncContext *s) { int i; - /* draw edge for correct motion prediction if outside */ + /* redraw edges for the frame if decoding didn't complete */ //just to make sure that all data is rendered. if(CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration){ ff_xvmc_field_end(s); @@ -1067,10 +1162,14 @@ void MPV_frame_end(MpegEncContext *s) && s->current_picture.reference && !s->intra_only && !(s->flags&CODEC_FLAG_EMU_EDGE)) { - s->dsp.draw_edges(s->current_picture.data[0], s->linesize , s->h_edge_pos , s->v_edge_pos , EDGE_WIDTH ); - s->dsp.draw_edges(s->current_picture.data[1], s->uvlinesize, s->h_edge_pos>>1, s->v_edge_pos>>1, EDGE_WIDTH/2); - s->dsp.draw_edges(s->current_picture.data[2], s->uvlinesize, s->h_edge_pos>>1, s->v_edge_pos>>1, EDGE_WIDTH/2); + int edges = EDGE_BOTTOM | EDGE_TOP, h = s->v_edge_pos; + + s->dsp.draw_edges(s->current_picture_ptr->data[0], s->linesize , s->h_edge_pos , h , EDGE_WIDTH , edges); + s->dsp.draw_edges(s->current_picture_ptr->data[1], s->uvlinesize, s->h_edge_pos>>1, h>>1, EDGE_WIDTH/2, edges); + s->dsp.draw_edges(s->current_picture_ptr->data[2], s->uvlinesize, s->h_edge_pos>>1, h>>1, EDGE_WIDTH/2, edges); + } + emms_c(); s->last_pict_type = s->pict_type; @@ -1091,7 +1190,7 @@ void MPV_frame_end(MpegEncContext *s) if(s->encoding){ /* release non-reference frames */ - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=0; i<s->picture_count; i++){ if(s->picture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/){ free_frame_buffer(s, &s->picture[i]); } @@ -1104,6 +1203,10 @@ void MPV_frame_end(MpegEncContext *s) memset(&s->current_picture, 0, sizeof(Picture)); #endif s->avctx->coded_frame= (AVFrame*)s->current_picture_ptr; + + if (s->codec_id != CODEC_ID_H264 && s->current_picture.reference) { + ff_thread_report_progress((AVFrame*)s->current_picture_ptr, s->mb_height-1, 0); + } } /** @@ -1768,6 +1871,43 @@ static inline void MPV_motion_lowres(MpegEncContext *s, } } +/** + * find the lowest MB row referenced in the MVs + */ +int MPV_lowest_referenced_row(MpegEncContext *s, int dir) +{ + int my_max = INT_MIN, my_min = INT_MAX, qpel_shift = !s->quarter_sample; + int my, off, i, mvs; + + if (s->picture_structure != PICT_FRAME) goto unhandled; + + switch (s->mv_type) { + case MV_TYPE_16X16: + mvs = 1; + break; + case MV_TYPE_16X8: + mvs = 2; + break; + case MV_TYPE_8X8: + mvs = 4; + break; + default: + goto unhandled; + } + + for (i = 0; i < mvs; i++) { + my = s->mv[dir][i][1]<<qpel_shift; + my_max = FFMAX(my_max, my); + my_min = FFMIN(my_min, my); + } + + off = (FFMAX(-my_min, my_max) + 63) >> 6; + + return FFMIN(FFMAX(s->mb_y + off, 0), s->mb_height-1); +unhandled: + return s->mb_height-1; +} + /* put block[] to dest[] */ static inline void put_dct(MpegEncContext *s, DCTELEM *block, int i, uint8_t *dest, int line_size, int qscale) @@ -1932,6 +2072,16 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], /* motion handling */ /* decoding or more than one mb_type (MC was already done otherwise) */ if(!s->encoding){ + + if(HAVE_PTHREADS && s->avctx->active_thread_type&FF_THREAD_FRAME) { + if (s->mv_dir & MV_DIR_FORWARD) { + ff_thread_await_progress((AVFrame*)s->last_picture_ptr, MPV_lowest_referenced_row(s, 0), 0); + } + if (s->mv_dir & MV_DIR_BACKWARD) { + ff_thread_await_progress((AVFrame*)s->next_picture_ptr, MPV_lowest_referenced_row(s, 1), 0); + } + } + if(lowres_flag){ h264_chroma_mc_func *op_pix = s->dsp.put_h264_chroma_pixels_tab; @@ -2096,19 +2246,37 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]){ * @param h is the normal height, this will be reduced automatically if needed for the last row */ void ff_draw_horiz_band(MpegEncContext *s, int y, int h){ + const int field_pic= s->picture_structure != PICT_FRAME; + if(field_pic){ + h <<= 1; + y <<= 1; + } + + if (!s->avctx->hwaccel + && !(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) + && s->unrestricted_mv + && s->current_picture.reference + && !s->intra_only + && !(s->flags&CODEC_FLAG_EMU_EDGE)) { + int sides = 0, edge_h; + if (y==0) sides |= EDGE_TOP; + if (y + h >= s->v_edge_pos) sides |= EDGE_BOTTOM; + + edge_h= FFMIN(h, s->v_edge_pos - y); + + s->dsp.draw_edges(s->current_picture_ptr->data[0] + y *s->linesize , s->linesize , s->h_edge_pos , edge_h , EDGE_WIDTH , sides); + s->dsp.draw_edges(s->current_picture_ptr->data[1] + (y>>1)*s->uvlinesize, s->uvlinesize, s->h_edge_pos>>1, edge_h>>1, EDGE_WIDTH/2, sides); + s->dsp.draw_edges(s->current_picture_ptr->data[2] + (y>>1)*s->uvlinesize, s->uvlinesize, s->h_edge_pos>>1, edge_h>>1, EDGE_WIDTH/2, sides); + } + + h= FFMIN(h, s->avctx->height - y); + + if(field_pic && s->first_field && !(s->avctx->slice_flags&SLICE_FLAG_ALLOW_FIELD)) return; + if (s->avctx->draw_horiz_band) { AVFrame *src; - const int field_pic= s->picture_structure != PICT_FRAME; int offset[4]; - h= FFMIN(h, (s->avctx->height>>field_pic) - y); - - if(field_pic && !(s->avctx->slice_flags&SLICE_FLAG_ALLOW_FIELD)){ - h <<= 1; - y <<= 1; - if(s->first_field) return; - } - if(s->pict_type==FF_B_TYPE || s->low_delay || (s->avctx->slice_flags&SLICE_FLAG_CODED_ORDER)) src= (AVFrame*)s->current_picture_ptr; else if(s->last_picture_ptr) @@ -2174,7 +2342,7 @@ void ff_mpeg_flush(AVCodecContext *avctx){ if(s==NULL || s->picture==NULL) return; - for(i=0; i<MAX_PICTURE_COUNT; i++){ + for(i=0; i<s->picture_count; i++){ if(s->picture[i].data[0] && ( s->picture[i].type == FF_BUFFER_TYPE_INTERNAL || s->picture[i].type == FF_BUFFER_TYPE_USER)) free_frame_buffer(s, &s->picture[i]); @@ -2428,3 +2596,9 @@ void ff_set_qscale(MpegEncContext * s, int qscale) s->y_dc_scale= s->y_dc_scale_table[ qscale ]; s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; } + +void MPV_report_decode_progress(MpegEncContext *s) +{ + if (s->pict_type != FF_B_TYPE && !s->partitioned_frame) + ff_thread_report_progress((AVFrame*)s->current_picture_ptr, s->mb_y, 0); +} diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 53ab0f4a7f..3e447abd23 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -123,6 +123,7 @@ typedef struct Picture{ int ref_poc[2][2][16]; ///< h264 POCs of the frames used as reference (FIXME need per slice) int ref_count[2][2]; ///< number of entries in ref_poc (FIXME need per slice) int mbaff; ///< h264 1 -> MBAFF frame 0-> not MBAFF + int field_picture; ///< whether or not the picture was encoded in seperate fields int mb_var_sum; ///< sum of MB variance for current frame int mc_mb_var_sum; ///< motion compensated MB variance for current frame @@ -292,6 +293,8 @@ typedef struct MpegEncContext { Picture *last_picture_ptr; ///< pointer to the previous picture. Picture *next_picture_ptr; ///< pointer to the next picture (for bidir pred) Picture *current_picture_ptr; ///< pointer to the current picture + int picture_count; ///< number of allocated pictures (MAX_PICTURE_COUNT * avctx->thread_count) + int picture_range_start, picture_range_end; ///< the part of picture that this context can allocate in uint8_t *visualization_buffer[3]; //< temporary buffer vor MV visualization int last_dc[3]; ///< last DC values for MPEG1 int16_t *dc_val_base; @@ -681,6 +684,7 @@ typedef struct MpegEncContext { void (*denoise_dct)(struct MpegEncContext *s, DCTELEM *block); } MpegEncContext; +#define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? &new_ctx->picture[pic - old_ctx->picture] : NULL) void MPV_decode_defaults(MpegEncContext *s); int MPV_common_init(MpegEncContext *s); @@ -706,6 +710,9 @@ void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); int ff_find_unused_picture(MpegEncContext *s, int shared); void ff_denoise_dct(MpegEncContext *s, DCTELEM *block); void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src); +int MPV_lowest_referenced_row(MpegEncContext *s, int dir); +void MPV_report_decode_progress(MpegEncContext *s); +int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); const uint8_t *ff_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state); void ff_set_qscale(MpegEncContext * s, int qscale); diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index a7f16080f4..9255fa872a 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -36,6 +36,7 @@ #include "mjpegenc.h" #include "msmpeg4.h" #include "faandct.h" +#include "thread.h" #include "aandcttab.h" #include "flv.h" #include "mpeg4video.h" @@ -1238,9 +1239,9 @@ int MPV_encode_picture(AVCodecContext *avctx, { MpegEncContext *s = avctx->priv_data; AVFrame *pic_arg = data; - int i, stuffing_count; + int i, stuffing_count, context_count = avctx->active_thread_type&FF_THREAD_SLICE ? avctx->thread_count : 1; - for(i=0; i<avctx->thread_count; i++){ + for(i=0; i<context_count; i++){ int start_y= s->thread_context[i]->start_mb_y; int end_y= s->thread_context[i]-> end_mb_y; int h= s->mb_height; @@ -1304,7 +1305,7 @@ vbv_retry: s->last_non_b_time= s->time - s->pp_time; } // av_log(NULL, AV_LOG_ERROR, "R:%d ", s->next_lambda); - for(i=0; i<avctx->thread_count; i++){ + for(i=0; i<context_count; i++){ PutBitContext *pb= &s->thread_context[i]->pb; init_put_bits(pb, pb->buf, pb->buf_end - pb->buf); } @@ -2771,6 +2772,7 @@ static int encode_picture(MpegEncContext *s, int picture_number) { int i; int bits; + int context_count = s->avctx->active_thread_type&FF_THREAD_SLICE ? s->avctx->thread_count : 1; s->picture_number = picture_number; @@ -2810,7 +2812,7 @@ static int encode_picture(MpegEncContext *s, int picture_number) } s->mb_intra=0; //for the rate distortion & bit compare functions - for(i=1; i<s->avctx->thread_count; i++){ + for(i=1; i<context_count; i++){ ff_update_duplicate_context(s->thread_context[i], s); } @@ -2823,11 +2825,11 @@ static int encode_picture(MpegEncContext *s, int picture_number) s->lambda2= (s->lambda2* (int64_t)s->avctx->me_penalty_compensation + 128)>>8; if(s->pict_type != FF_B_TYPE && s->avctx->me_threshold==0){ if((s->avctx->pre_me && s->last_non_b_pict_type==FF_I_TYPE) || s->avctx->pre_me==2){ - s->avctx->execute(s->avctx, pre_estimate_motion_thread, &s->thread_context[0], NULL, s->avctx->thread_count, sizeof(void*)); + s->avctx->execute(s->avctx, pre_estimate_motion_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); } } - s->avctx->execute(s->avctx, estimate_motion_thread, &s->thread_context[0], NULL, s->avctx->thread_count, sizeof(void*)); + s->avctx->execute(s->avctx, estimate_motion_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); }else /* if(s->pict_type == FF_I_TYPE) */{ /* I-Frame */ for(i=0; i<s->mb_stride*s->mb_height; i++) @@ -2835,10 +2837,10 @@ static int encode_picture(MpegEncContext *s, int picture_number) if(!s->fixed_qscale){ /* finding spatial complexity for I-frame rate control */ - s->avctx->execute(s->avctx, mb_var_thread, &s->thread_context[0], NULL, s->avctx->thread_count, sizeof(void*)); + s->avctx->execute(s->avctx, mb_var_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); } } - for(i=1; i<s->avctx->thread_count; i++){ + for(i=1; i<context_count; i++){ merge_context_after_me(s, s->thread_context[i]); } s->current_picture.mc_mb_var_sum= s->current_picture_ptr->mc_mb_var_sum= s->me.mc_mb_var_sum_temp; @@ -2974,11 +2976,11 @@ static int encode_picture(MpegEncContext *s, int picture_number) bits= put_bits_count(&s->pb); s->header_bits= bits - s->last_bits; - for(i=1; i<s->avctx->thread_count; i++){ + for(i=1; i<context_count; i++){ update_duplicate_context_after_me(s->thread_context[i], s); } - s->avctx->execute(s->avctx, encode_thread, &s->thread_context[0], NULL, s->avctx->thread_count, sizeof(void*)); - for(i=1; i<s->avctx->thread_count; i++){ + s->avctx->execute(s->avctx, encode_thread, &s->thread_context[0], NULL, context_count, sizeof(void*)); + for(i=1; i<context_count; i++){ merge_context_after_encode(s, s->thread_context[i]); } emms_c(); diff --git a/libavcodec/snow.c b/libavcodec/snow.c index 9ab9fed71f..f330fe32e6 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -1976,9 +1976,9 @@ static int frame_start(SnowContext *s){ int h= s->avctx->height; if(s->current_picture.data[0]){ - s->dsp.draw_edges(s->current_picture.data[0], s->current_picture.linesize[0], w , h , EDGE_WIDTH ); - s->dsp.draw_edges(s->current_picture.data[1], s->current_picture.linesize[1], w>>1, h>>1, EDGE_WIDTH/2); - s->dsp.draw_edges(s->current_picture.data[2], s->current_picture.linesize[2], w>>1, h>>1, EDGE_WIDTH/2); + s->dsp.draw_edges(s->current_picture.data[0], s->current_picture.linesize[0], w , h , EDGE_WIDTH , EDGE_TOP|EDGE_BOTTOM); + s->dsp.draw_edges(s->current_picture.data[1], s->current_picture.linesize[1], w>>1, h>>1, EDGE_WIDTH/2, EDGE_TOP|EDGE_BOTTOM); + s->dsp.draw_edges(s->current_picture.data[2], s->current_picture.linesize[2], w>>1, h>>1, EDGE_WIDTH/2, EDGE_TOP|EDGE_BOTTOM); } release_buffer(s->avctx); diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 40d689e1f6..2c737d9625 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -366,6 +366,7 @@ void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ assert(pic->type==FF_BUFFER_TYPE_INTERNAL); assert(s->internal_buffer_count); + if(s->internal_buffer){ buf = NULL; /* avoids warning */ for(i=0; i<s->internal_buffer_count; i++){ //just 3-5 checks so is not worth to optimize buf= &((InternalBuffer*)s->internal_buffer)[i]; @@ -377,6 +378,7 @@ void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; FFSWAP(InternalBuffer, *buf, *last); + } for(i=0; i<4; i++){ pic->data[i]=NULL; @@ -572,6 +574,7 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec) goto free_and_end; } } + ret=0; end: entangled_thread_counter--; @@ -1298,9 +1301,9 @@ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) unsigned int ff_toupper4(unsigned int x) { return toupper( x &0xFF) - + (toupper((x>>8 )&0xFF)<<8 ) - + (toupper((x>>16)&0xFF)<<16) - + (toupper((x>>24)&0xFF)<<24); + + (toupper((x>>8 )&0xFF)<<8 ) + + (toupper((x>>16)&0xFF)<<16) + + (toupper((x>>24)&0xFF)<<24); } #if !HAVE_PTHREADS diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index c067f4cf2f..073de8e25a 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -471,7 +471,7 @@ void decode_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y) mb - 1 /* left */, mb + 1 /* top-left */ }; enum { CNT_ZERO, CNT_NEAREST, CNT_NEAR, CNT_SPLITMV }; - enum { EDGE_TOP, EDGE_LEFT, EDGE_TOPLEFT }; + enum { VP8_EDGE_TOP, VP8_EDGE_LEFT, VP8_EDGE_TOPLEFT }; int idx = CNT_ZERO; int cur_sign_bias = s->sign_bias[mb->ref_frame]; int8_t *sign_bias = s->sign_bias; @@ -512,7 +512,7 @@ void decode_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y) mb->mode = VP8_MVMODE_MV; /* If we have three distinct MVs, merge first and last if they're the same */ - if (cnt[CNT_SPLITMV] && AV_RN32A(&near_mv[1+EDGE_TOP]) == AV_RN32A(&near_mv[1+EDGE_TOPLEFT])) + if (cnt[CNT_SPLITMV] && AV_RN32A(&near_mv[1+VP8_EDGE_TOP]) == AV_RN32A(&near_mv[1+VP8_EDGE_TOPLEFT])) cnt[CNT_NEAREST] += 1; /* Swap near and nearest if necessary */ @@ -526,9 +526,9 @@ void decode_mvs(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y) /* Choose the best mv out of 0,0 and the nearest mv */ clamp_mv(s, &mb->mv, &near_mv[CNT_ZERO + (cnt[CNT_NEAREST] >= cnt[CNT_ZERO])]); - cnt[CNT_SPLITMV] = ((mb_edge[EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + - (mb_edge[EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + - (mb_edge[EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); + cnt[CNT_SPLITMV] = ((mb_edge[VP8_EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + + (mb_edge[VP8_EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + + (mb_edge[VP8_EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_SPLITMV]][3])) { mb->mode = VP8_MVMODE_SPLIT; diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index a5b0b3ae61..3272556a74 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -783,7 +783,7 @@ static void h263_h_loop_filter_mmx(uint8_t *src, int stride, int qscale){ /* draw the edges of width 'w' of an image of size width, height this mmx version can only handle w==8 || w==16 */ -static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, int w) +static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, int w, int sides) { uint8_t *ptr, *last_line; int i; @@ -838,34 +838,39 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, int w) for(i=0;i<w;i+=4) { /* top and bottom (and hopefully also the corners) */ - ptr= buf - (i + 1) * wrap - w; - __asm__ volatile( - "1: \n\t" - "movq (%1, %0), %%mm0 \n\t" - "movq %%mm0, (%0) \n\t" - "movq %%mm0, (%0, %2) \n\t" - "movq %%mm0, (%0, %2, 2) \n\t" - "movq %%mm0, (%0, %3) \n\t" - "add $8, %0 \n\t" - "cmp %4, %0 \n\t" - " jb 1b \n\t" - : "+r" (ptr) - : "r" ((x86_reg)buf - (x86_reg)ptr - w), "r" ((x86_reg)-wrap), "r" ((x86_reg)-wrap*3), "r" (ptr+width+2*w) - ); - ptr= last_line + (i + 1) * wrap - w; - __asm__ volatile( - "1: \n\t" - "movq (%1, %0), %%mm0 \n\t" - "movq %%mm0, (%0) \n\t" - "movq %%mm0, (%0, %2) \n\t" - "movq %%mm0, (%0, %2, 2) \n\t" - "movq %%mm0, (%0, %3) \n\t" - "add $8, %0 \n\t" - "cmp %4, %0 \n\t" - " jb 1b \n\t" - : "+r" (ptr) - : "r" ((x86_reg)last_line - (x86_reg)ptr - w), "r" ((x86_reg)wrap), "r" ((x86_reg)wrap*3), "r" (ptr+width+2*w) - ); + if (sides&EDGE_TOP) { + ptr= buf - (i + 1) * wrap - w; + __asm__ volatile( + "1: \n\t" + "movq (%1, %0), %%mm0 \n\t" + "movq %%mm0, (%0) \n\t" + "movq %%mm0, (%0, %2) \n\t" + "movq %%mm0, (%0, %2, 2) \n\t" + "movq %%mm0, (%0, %3) \n\t" + "add $8, %0 \n\t" + "cmp %4, %0 \n\t" + " jb 1b \n\t" + : "+r" (ptr) + : "r" ((x86_reg)buf - (x86_reg)ptr - w), "r" ((x86_reg)-wrap), "r" ((x86_reg)-wrap*3), "r" (ptr+width+2*w) + ); + } + + if (sides&EDGE_BOTTOM) { + ptr= last_line + (i + 1) * wrap - w; + __asm__ volatile( + "1: \n\t" + "movq (%1, %0), %%mm0 \n\t" + "movq %%mm0, (%0) \n\t" + "movq %%mm0, (%0, %2) \n\t" + "movq %%mm0, (%0, %2, 2) \n\t" + "movq %%mm0, (%0, %3) \n\t" + "add $8, %0 \n\t" + "cmp %4, %0 \n\t" + " jb 1b \n\t" + : "+r" (ptr) + : "r" ((x86_reg)last_line - (x86_reg)ptr - w), "r" ((x86_reg)wrap), "r" ((x86_reg)wrap*3), "r" (ptr+width+2*w) + ); + } } } diff --git a/libavutil/internal.h b/libavutil/internal.h index 896e0b3858..4d9a425dc7 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -181,7 +181,6 @@ # define NULL_IF_CONFIG_SMALL(x) x #endif - /** * Define a function with only the non-default version specified. * diff --git a/mt-work/email.sh b/mt-work/email.sh new file mode 100644 index 0000000000..e5cdb72338 --- /dev/null +++ b/mt-work/email.sh @@ -0,0 +1,6 @@ +#!/bin/sh -v + +# args [where to put patches] [smtp server] [destination] + +git format-patch -o "$1" --inline --subject-prefix=soc --thread origin +git send-email --no-chain-reply-to --smtp-server $2 --to $3 --dry-run "$1" diff --git a/mt-work/mplayer.diff b/mt-work/mplayer.diff new file mode 100644 index 0000000000..ef38063bf0 --- /dev/null +++ b/mt-work/mplayer.diff @@ -0,0 +1,13 @@ +diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c +index 7c68a20..135e6b1 100644 +--- a/libmpcodecs/vd_ffmpeg.c ++++ b/libmpcodecs/vd_ffmpeg.c +@@ -280,7 +280,7 @@ static int init(sh_video_t *sh){ + return 0; + } + +- if(vd_use_slices && (lavc_codec->capabilities&CODEC_CAP_DRAW_HORIZ_BAND) && !do_vis_debug) ++ if(vd_use_slices && (lavc_codec->capabilities&CODEC_CAP_DRAW_HORIZ_BAND) && !do_vis_debug && lavc_param_threads <= 1) + ctx->do_slices=1; + + if(lavc_codec->capabilities&CODEC_CAP_DR1 && !do_vis_debug && lavc_codec->id != CODEC_ID_H264 && lavc_codec->id != CODEC_ID_INTERPLAY_VIDEO && lavc_codec->id != CODEC_ID_ROQ && lavc_codec->id != CODEC_ID_VP8 && lavc_codec->id != CODEC_ID_LAGARITH) diff --git a/mt-work/raw.sh b/mt-work/raw.sh new file mode 100644 index 0000000000..0ced88e213 --- /dev/null +++ b/mt-work/raw.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +fn=`basename "$1"` +for th in 1 4; do + time ./ffmpeg_g -threads $th -skip_loop_filter all -vsync 0 -y -t 30 -i "$1" -an -f rawvideo "raw/n-$fn-$th.yuv" +done + +#for th in 1 4; do +# time ./ffmpeg_g -threads $th -vsync 0 -y -t 30 -i "$1" -an -f rawvideo "raw/$fn-$th.yuv" +#done diff --git a/mt-work/test-failures.txt b/mt-work/test-failures.txt new file mode 100644 index 0000000000..d5a24fa441 --- /dev/null +++ b/mt-work/test-failures.txt @@ -0,0 +1,2896 @@ +TEST acodec-ac3_fixed +TEST acodec-adpcm_ima_qt +TEST acodec-adpcm_ima_wav +TEST acodec-adpcm_ms +TEST acodec-adpcm_swf +TEST acodec-adpcm_yam +TEST acodec-alac +TEST acodec-flac +TEST acodec-g726 +TEST acodec-mp2 +TEST acodec-pcm +TEST acodec-wmav1 +TEST acodec-wmav2 +TEST vsynth1-asv1 +TEST vsynth1-asv2 +TEST vsynth1-dnxhd_1080i +TEST vsynth1-dnxhd_720p +TEST vsynth1-dnxhd_720p_rd +TEST vsynth1-dv +TEST vsynth1-dv50 +TEST vsynth1-error +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/error 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/error 2011-01-17 13:52:40.000000000 -0500 +@@ -1,4 +1,4 @@ +-7416dfd319f04044d4575dc9d1b406e1 *./tests/data/vsynth1/error-mpeg4-adv.avi +-756836 ./tests/data/vsynth1/error-mpeg4-adv.avi +-ef8bfcd6e0883daba95d0f32486ebe2d *./tests/data/error.vsynth1.out.yuv +-stddev: 18.05 PSNR: 23.00 MAXDIFF: 245 bytes: 7603200/ 7603200 ++f9d8d7fe421161ac102c935419b9d399 *./tests/data/vsynth1/error-mpeg4-adv.avi ++ 741404 ./tests/data/vsynth1/error-mpeg4-adv.avi ++1bd3ae7afdba45d121c657cfbe22ff8d *./tests/data/error.vsynth1.out.yuv ++stddev: 19.74 PSNR: 22.22 MAXDIFF: 236 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-error] Error 1 +TEST vsynth1-ffv1 +TEST vsynth1-flashsv +TEST vsynth1-flv +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/flv 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/flv 2011-01-17 13:52:43.000000000 -0500 +@@ -1,4 +1,4 @@ +-d6a80659cedee7698aefe9c4a8285fa4 *./tests/data/vsynth1/flv.flv +-636269 ./tests/data/vsynth1/flv.flv +-5ab46d8dd01dbb1d63df2a84858a4b05 *./tests/data/flv.vsynth1.out.yuv +-stddev: 8.02 PSNR: 30.04 MAXDIFF: 105 bytes: 7603200/ 7603200 ++6601c0822b71b0c005ab4209c8720ccd *./tests/data/vsynth1/flv.flv ++ 640001 ./tests/data/vsynth1/flv.flv ++08a465c398e4905f9ed45fca89b3efc5 *./tests/data/flv.vsynth1.out.yuv ++stddev: 8.03 PSNR: 30.03 MAXDIFF: 107 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-flv] Error 1 +TEST vsynth1-h261 +TEST vsynth1-h263 +TEST vsynth1-h263p +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/h263p 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/h263p 2011-01-17 13:52:45.000000000 -0500 +@@ -1,4 +1,4 @@ +-bbcadeceba295e1dad148aea1e57c370 *./tests/data/vsynth1/h263p.avi +-2328348 ./tests/data/vsynth1/h263p.avi +-9554cda00c3487ab3ffda2c3ea22fa2f *./tests/data/h263p.vsynth1.out.yuv +-stddev: 2.06 PSNR: 41.83 MAXDIFF: 20 bytes: 7603200/ 7603200 ++256f90bef6a24b7bc1a8dd4ae82e4e5c *./tests/data/vsynth1/h263p.avi ++ 2332538 ./tests/data/vsynth1/h263p.avi ++e02188c26d01034f6a497934398e6743 *./tests/data/h263p.vsynth1.out.yuv ++stddev: 2.06 PSNR: 41.83 MAXDIFF: 19 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-h263p] Error 1 +TEST vsynth1-huffyuv +TEST vsynth1-jpegls +TEST vsynth1-ljpeg +TEST vsynth1-mjpeg +TEST vsynth1-mpeg +TEST vsynth1-mpeg1b +TEST vsynth1-mpeg2 +TEST vsynth1-mpeg2thread +TEST vsynth1-mpeg4 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/mpeg4 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/mpeg4 2011-01-17 13:52:58.000000000 -0500 +@@ -1,4 +1,4 @@ +-fd83f2ef5887a62b4d755d7cb5f0ac59 *./tests/data/vsynth1/odivx.mp4 +-540144 ./tests/data/vsynth1/odivx.mp4 +-8828a375448dc5c2215163ba70656f89 *./tests/data/mpeg4.vsynth1.out.yuv +-stddev: 7.97 PSNR: 30.10 MAXDIFF: 105 bytes: 7603200/ 7603200 ++5295e4d1be6c1a88faf5db972dfcf62f *./tests/data/vsynth1/odivx.mp4 ++ 540826 ./tests/data/vsynth1/odivx.mp4 ++4f02d5f83da600985b84958e4e3d2fe0 *./tests/data/mpeg4.vsynth1.out.yuv ++stddev: 11.07 PSNR: 27.25 MAXDIFF: 192 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-mpeg4] Error 1 +TEST vsynth1-mpeg4adv +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/mpeg4adv 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/mpeg4adv 2011-01-17 13:53:05.000000000 -0500 +@@ -1,16 +1,16 @@ +-7d8eb01fd68d83d62a98585757704d47 *./tests/data/vsynth1/mpeg4-adv.avi +-589716 ./tests/data/vsynth1/mpeg4-adv.avi +-f8b226876b1b2c0b98fd6928fd9adbd8 *./tests/data/mpeg4adv.vsynth1.out.yuv +-stddev: 6.98 PSNR: 31.25 MAXDIFF: 84 bytes: 7603200/ 7603200 +-d6b7e724a6ad66ab5e4c5a499218b40d *./tests/data/vsynth1/mpeg4-qprd.avi +-710944 ./tests/data/vsynth1/mpeg4-qprd.avi +-e65f4c7f343fe2bad1cac44b7da5f7c4 *./tests/data/mpeg4adv.vsynth1.out.yuv +-stddev: 9.79 PSNR: 28.31 MAXDIFF: 176 bytes: 7603200/ 7603200 +-2d870c0da9ab2231ab5fc06981e70399 *./tests/data/vsynth1/mpeg4-adap.avi +-403456 ./tests/data/vsynth1/mpeg4-adap.avi +-fa2049396479b5f170aa764fed5b2a31 *./tests/data/mpeg4adv.vsynth1.out.yuv +-stddev: 14.05 PSNR: 25.17 MAXDIFF: 184 bytes: 7603200/ 7603200 +-3bf17c3d04f52988386ce106a2a58976 *./tests/data/vsynth1/mpeg4-Q.avi +-860678 ./tests/data/vsynth1/mpeg4-Q.avi +-756928496245ecc701f79eebeec8e5e6 *./tests/data/mpeg4adv.vsynth1.out.yuv +-stddev: 5.63 PSNR: 33.12 MAXDIFF: 70 bytes: 7603200/ 7603200 ++20eab3e8f00eb71cc57aa02c79b03835 *./tests/data/vsynth1/mpeg4-adv.avi ++ 591856 ./tests/data/vsynth1/mpeg4-adv.avi ++7837ca6f9c3f87c5f40cc67f3a181ca2 *./tests/data/mpeg4adv.vsynth1.out.yuv ++stddev: 10.43 PSNR: 27.76 MAXDIFF: 184 bytes: 7603200/ 7603200 ++b76c1be43fddf47030a80a60ad56ed7b *./tests/data/vsynth1/mpeg4-qprd.avi ++ 713772 ./tests/data/vsynth1/mpeg4-qprd.avi ++cbe9d36d28c82d2b1240ca871e7934a3 *./tests/data/mpeg4adv.vsynth1.out.yuv ++stddev: 10.28 PSNR: 27.89 MAXDIFF: 198 bytes: 7603200/ 7603200 ++51da4657ec89c77de32d384dc676714f *./tests/data/vsynth1/mpeg4-adap.avi ++ 409954 ./tests/data/vsynth1/mpeg4-adap.avi ++710b85cf1bd9dc4b4b84928c1ebc5816 *./tests/data/mpeg4adv.vsynth1.out.yuv ++stddev: 14.37 PSNR: 24.98 MAXDIFF: 187 bytes: 7603200/ 7603200 ++6b88216e0f57a4c60dc1b7c2054acfa4 *./tests/data/vsynth1/mpeg4-Q.avi ++ 865748 ./tests/data/vsynth1/mpeg4-Q.avi ++767ebbd8c60b10a17f10d833448123e1 *./tests/data/mpeg4adv.vsynth1.out.yuv ++stddev: 6.49 PSNR: 31.88 MAXDIFF: 147 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-mpeg4adv] Error 1 +TEST vsynth1-mpeg4nr +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/mpeg4nr 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/mpeg4nr 2011-01-17 13:53:05.000000000 -0500 +@@ -1,4 +1,4 @@ +-c02f54157ba08ca12ad979c6308212ad *./tests/data/vsynth1/mpeg4-nr.avi +-675638 ./tests/data/vsynth1/mpeg4-nr.avi +-d2b89d5958fb7331f6c9e5b7ecaaa5b6 *./tests/data/mpeg4nr.vsynth1.out.yuv +-stddev: 6.99 PSNR: 31.23 MAXDIFF: 86 bytes: 7603200/ 7603200 ++e8d04b36645ca8b07c354ff8af3a518d *./tests/data/vsynth1/mpeg4-nr.avi ++ 678948 ./tests/data/vsynth1/mpeg4-nr.avi ++d9d1b444aaae200b0839796794c84964 *./tests/data/mpeg4nr.vsynth1.out.yuv ++stddev: 9.26 PSNR: 28.79 MAXDIFF: 189 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-mpeg4nr] Error 1 +TEST vsynth1-mpeg4thread +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/mpeg4thread 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/mpeg4thread 2011-01-17 13:53:06.000000000 -0500 +@@ -1,4 +1,4 @@ +-4f4ea04faad7212374919aa1ec7ff994 *./tests/data/vsynth1/mpeg4-thread.avi +-774760 ./tests/data/vsynth1/mpeg4-thread.avi +-64b96cddf5301990e118978b3a3bcd0d *./tests/data/mpeg4thread.vsynth1.out.yuv +-stddev: 10.13 PSNR: 28.02 MAXDIFF: 183 bytes: 7603200/ 7603200 ++58bfbd4523ed25452dee0f4a1fe5fc5d *./tests/data/vsynth1/mpeg4-thread.avi ++ 770730 ./tests/data/vsynth1/mpeg4-thread.avi ++da89e47c9e341294ef92862790fb10cf *./tests/data/mpeg4thread.vsynth1.out.yuv ++stddev: 10.49 PSNR: 27.71 MAXDIFF: 183 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-mpeg4thread] Error 1 +TEST vsynth1-msmpeg4 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/msmpeg4 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/msmpeg4 2011-01-17 13:53:07.000000000 -0500 +@@ -1,4 +1,4 @@ +-4b08952b0afceb17ee3db31b67f6b778 *./tests/data/vsynth1/msmpeg4.avi +-624718 ./tests/data/vsynth1/msmpeg4.avi +-5ca72c39e3fc5df8e62f223c869589f5 *./tests/data/msmpeg4.vsynth1.out.yuv +-stddev: 7.98 PSNR: 30.09 MAXDIFF: 104 bytes: 7603200/ 7603200 ++144f400cf8f624e21a8061dc882ef086 *./tests/data/vsynth1/msmpeg4.avi ++ 629876 ./tests/data/vsynth1/msmpeg4.avi ++e741bf2208b1ab9b56ed3defe4e10398 *./tests/data/msmpeg4.vsynth1.out.yuv ++stddev: 7.98 PSNR: 30.08 MAXDIFF: 106 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-msmpeg4] Error 1 +TEST vsynth1-msmpeg4v2 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/msmpeg4v2 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/msmpeg4v2 2011-01-17 13:53:07.000000000 -0500 +@@ -1,4 +1,4 @@ +-88957e35efcc718bce0307627ad3298d *./tests/data/vsynth1/msmpeg4v2.avi +-623788 ./tests/data/vsynth1/msmpeg4v2.avi +-c6ff1041a0ef62c2a2e5ef519e5e94c4 *./tests/data/msmpeg4v2.vsynth1.out.yuv +-stddev: 7.97 PSNR: 30.10 MAXDIFF: 105 bytes: 7603200/ 7603200 ++2465f409c9077cc69ee66c6a89bd42ef *./tests/data/vsynth1/msmpeg4v2.avi ++ 628806 ./tests/data/vsynth1/msmpeg4v2.avi ++934a3e902113a0cef71a40fa494241ca *./tests/data/msmpeg4v2.vsynth1.out.yuv ++stddev: 7.98 PSNR: 30.09 MAXDIFF: 111 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-msmpeg4v2] Error 1 +TEST vsynth1-qtrle +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/qtrle 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/qtrle 2011-01-17 13:53:07.000000000 -0500 +@@ -1,4 +1,4 @@ +-3f070779d7deb54626515ac7f7002e63 *./tests/data/vsynth1/qtrle.mov +-387772 ./tests/data/vsynth1/qtrle.mov +-a3c2610e2c069c3ad22ec03da83f774f *./tests/data/qtrle.vsynth1.out.yuv +-stddev: 15.14 PSNR: 24.53 MAXDIFF: 174 bytes: 7603200/ 7603200 ++028b64ca2f1349f8abc63879066daa00 *./tests/data/vsynth1/qtrle.mov ++ 389285 ./tests/data/vsynth1/qtrle.mov ++f1ca4fee4fea7e3ae133704a88ccf686 *./tests/data/qtrle.vsynth1.out.yuv ++stddev: 15.18 PSNR: 24.50 MAXDIFF: 174 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-qtrle] Error 1 +TEST vsynth1-rc +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/rc 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/rc 2011-01-17 13:53:08.000000000 -0500 +@@ -1,4 +1,4 @@ +-1c6dadf75f60f4ba59a0fe0b6eaedf57 *./tests/data/vsynth1/mpeg4-rc.avi +-830160 ./tests/data/vsynth1/mpeg4-rc.avi +-4d95e340db9bc57a559162c039f3784e *./tests/data/rc.vsynth1.out.yuv +-stddev: 10.24 PSNR: 27.92 MAXDIFF: 196 bytes: 7603200/ 7603200 ++b7bfcd9bf6141541d8876047b31d77cc *./tests/data/vsynth1/mpeg4-rc.avi ++ 808060 ./tests/data/vsynth1/mpeg4-rc.avi ++ee2b0bcb7b76b135ce797fd8f56ff32c *./tests/data/rc.vsynth1.out.yuv ++stddev: 10.30 PSNR: 27.87 MAXDIFF: 196 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-rc] Error 1 +TEST vsynth1-rgb +TEST vsynth1-roq +TEST vsynth1-rv10 +TEST vsynth1-rv20 +TEST vsynth1-snow +TEST vsynth1-snowll +TEST vsynth1-svq1 +TEST vsynth1-wmv1 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/wmv1 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/wmv1 2011-01-17 13:53:20.000000000 -0500 +@@ -1,4 +1,4 @@ +-4f3461315776e5118866fa3819cff9b6 *./tests/data/vsynth1/wmv1.avi +-626908 ./tests/data/vsynth1/wmv1.avi +-5182edba5b5e0354b39ce4f3604b62da *./tests/data/wmv1.vsynth1.out.yuv +-stddev: 7.97 PSNR: 30.09 MAXDIFF: 110 bytes: 7603200/ 7603200 ++71bded86ad2f948150060dffc8a72ead *./tests/data/vsynth1/wmv1.avi ++ 632036 ./tests/data/vsynth1/wmv1.avi ++e5e4963a838680b830340123c4b383a5 *./tests/data/wmv1.vsynth1.out.yuv ++stddev: 7.98 PSNR: 30.09 MAXDIFF: 110 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-wmv1] Error 1 +TEST vsynth1-wmv2 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth1/wmv2 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth1/wmv2 2011-01-17 13:53:20.000000000 -0500 +@@ -1,4 +1,4 @@ +-13efda9d3811345aadc0632fc9a9332b *./tests/data/vsynth1/wmv2.avi +-659852 ./tests/data/vsynth1/wmv2.avi +-5182edba5b5e0354b39ce4f3604b62da *./tests/data/wmv2.vsynth1.out.yuv +-stddev: 7.97 PSNR: 30.09 MAXDIFF: 110 bytes: 7603200/ 7603200 ++7658e2222b1e4fbc85abea009c180548 *./tests/data/vsynth1/wmv2.avi ++ 664948 ./tests/data/vsynth1/wmv2.avi ++e5e4963a838680b830340123c4b383a5 *./tests/data/wmv2.vsynth1.out.yuv ++stddev: 7.98 PSNR: 30.09 MAXDIFF: 110 bytes: 7603200/ 7603200 +make: *** [fate-vsynth1-wmv2] Error 1 +TEST vsynth1-yuv +TEST vsynth2-asv1 +TEST vsynth2-asv2 +TEST vsynth2-dnxhd_1080i +TEST vsynth2-dnxhd_720p +TEST vsynth2-dnxhd_720p_rd +TEST vsynth2-dv +TEST vsynth2-dv50 +TEST vsynth2-error +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/error 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/error 2011-01-17 13:53:29.000000000 -0500 +@@ -1,4 +1,4 @@ +-90e65096aa9ebafa3fe3f44a5a47cdc4 *./tests/data/vsynth2/error-mpeg4-adv.avi +-176588 ./tests/data/vsynth2/error-mpeg4-adv.avi +-9fe1082179f80179439953c7397a46ef *./tests/data/error.vsynth2.out.yuv +-stddev: 9.00 PSNR: 29.04 MAXDIFF: 168 bytes: 7603200/ 7603200 ++e1a3e863e0425bce0f4aacdf4a27d192 *./tests/data/vsynth2/error-mpeg4-adv.avi ++ 180128 ./tests/data/vsynth2/error-mpeg4-adv.avi ++484f06383403447682759d822cb6ad5a *./tests/data/error.vsynth2.out.yuv ++stddev: 10.58 PSNR: 27.63 MAXDIFF: 210 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-error] Error 1 +TEST vsynth2-ffv1 +TEST vsynth2-flashsv +TEST vsynth2-flv +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/flv 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/flv 2011-01-17 13:53:32.000000000 -0500 +@@ -1,4 +1,4 @@ +-2edc92093d36506bcc0a5c0e17e86113 *./tests/data/vsynth2/flv.flv +-131360 ./tests/data/vsynth2/flv.flv +-8999c8264fb0941561f64c4a736e9d88 *./tests/data/flv.vsynth2.out.yuv +-stddev: 5.33 PSNR: 33.59 MAXDIFF: 80 bytes: 7603200/ 7603200 ++7de024c8ee8880a1886d00d85e569a66 *./tests/data/vsynth2/flv.flv ++ 136249 ./tests/data/vsynth2/flv.flv ++0df8b34edb3c1ce8658683c056837527 *./tests/data/flv.vsynth2.out.yuv ++stddev: 5.35 PSNR: 33.56 MAXDIFF: 80 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-flv] Error 1 +TEST vsynth2-h261 +TEST vsynth2-h263 +TEST vsynth2-h263p +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/h263p 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/h263p 2011-01-17 13:53:33.000000000 -0500 +@@ -1,4 +1,4 @@ +-c7644d40e9f40bbd98e5a978f9f94bb4 *./tests/data/vsynth2/h263p.avi +-868018 ./tests/data/vsynth2/h263p.avi +-4b0ee791f280029dc03c528f76f195d4 *./tests/data/h263p.vsynth2.out.yuv +-stddev: 1.91 PSNR: 42.50 MAXDIFF: 19 bytes: 7603200/ 7603200 ++68026781aaa30b3f20b9c00a15d34d44 *./tests/data/vsynth2/h263p.avi ++ 883722 ./tests/data/vsynth2/h263p.avi ++f01d197968aca266657d535eed151014 *./tests/data/h263p.vsynth2.out.yuv ++stddev: 1.91 PSNR: 42.48 MAXDIFF: 19 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-h263p] Error 1 +TEST vsynth2-huffyuv +TEST vsynth2-jpegls +TEST vsynth2-ljpeg +TEST vsynth2-mjpeg +TEST vsynth2-mpeg +TEST vsynth2-mpeg1b +TEST vsynth2-mpeg2 +TEST vsynth2-mpeg2thread +TEST vsynth2-mpeg4 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/mpeg4 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/mpeg4 2011-01-17 13:53:45.000000000 -0500 +@@ -1,4 +1,4 @@ +-47de227982e77830a2db278214a08773 *./tests/data/vsynth2/odivx.mp4 +-119797 ./tests/data/vsynth2/odivx.mp4 +-90a3577850239083a9042bef33c50e85 *./tests/data/mpeg4.vsynth2.out.yuv +-stddev: 5.34 PSNR: 33.57 MAXDIFF: 83 bytes: 7603200/ 7603200 ++a8b70f3bd83271ec52565135d74acaae *./tests/data/vsynth2/odivx.mp4 ++ 123236 ./tests/data/vsynth2/odivx.mp4 ++f60e67dd6f376b3d3e30c02bb02883e8 *./tests/data/mpeg4.vsynth2.out.yuv ++stddev: 6.25 PSNR: 32.21 MAXDIFF: 144 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-mpeg4] Error 1 +TEST vsynth2-mpeg4adv +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/mpeg4adv 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/mpeg4adv 2011-01-17 13:53:49.000000000 -0500 +@@ -1,16 +1,16 @@ +-dee7be19486a76d96c88d18eefba8f86 *./tests/data/vsynth2/mpeg4-adv.avi +-141546 ./tests/data/vsynth2/mpeg4-adv.avi +-3f3a21e9db85a9c0f7022f557a5374c1 *./tests/data/mpeg4adv.vsynth2.out.yuv +-stddev: 4.94 PSNR: 34.25 MAXDIFF: 69 bytes: 7603200/ 7603200 +-fd5ab0f55dbc959316e32923e86290df *./tests/data/vsynth2/mpeg4-qprd.avi +-231458 ./tests/data/vsynth2/mpeg4-qprd.avi +-de8a883865e2dff7a51f66da6c48df48 *./tests/data/mpeg4adv.vsynth2.out.yuv +-stddev: 3.71 PSNR: 36.72 MAXDIFF: 61 bytes: 7603200/ 7603200 +-547e1849dcf910935ff6383ca49e5706 *./tests/data/vsynth2/mpeg4-adap.avi +-198510 ./tests/data/vsynth2/mpeg4-adap.avi +-4affb83f6adc94f31024b4f9e0168945 *./tests/data/mpeg4adv.vsynth2.out.yuv +-stddev: 3.75 PSNR: 36.65 MAXDIFF: 71 bytes: 7603200/ 7603200 +-7680d2e7d34399dfdfb8a49cf1e10239 *./tests/data/vsynth2/mpeg4-Q.avi +-163688 ./tests/data/vsynth2/mpeg4-Q.avi +-26dc7c78955fa678fbf150e236eb5627 *./tests/data/mpeg4adv.vsynth2.out.yuv +-stddev: 3.97 PSNR: 36.14 MAXDIFF: 54 bytes: 7603200/ 7603200 ++47efa8a368f57670afaf4de17f163b20 *./tests/data/vsynth2/mpeg4-adv.avi ++ 145318 ./tests/data/vsynth2/mpeg4-adv.avi ++7f2726e0e1626fa4783b9e4215981e2d *./tests/data/mpeg4adv.vsynth2.out.yuv ++stddev: 6.13 PSNR: 32.37 MAXDIFF: 139 bytes: 7603200/ 7603200 ++3e06e5cbda13ad4eb137fc5432cbc9c3 *./tests/data/vsynth2/mpeg4-qprd.avi ++ 232924 ./tests/data/vsynth2/mpeg4-qprd.avi ++9bd0cae89604ba35f8b6dc34ec9e7b17 *./tests/data/mpeg4adv.vsynth2.out.yuv ++stddev: 4.59 PSNR: 34.89 MAXDIFF: 134 bytes: 7603200/ 7603200 ++635139fc5d20a4c3e48ca555a2fb8e8c *./tests/data/vsynth2/mpeg4-adap.avi ++ 198588 ./tests/data/vsynth2/mpeg4-adap.avi ++b42247bb0e313234c8abdd88a011f5bd *./tests/data/mpeg4adv.vsynth2.out.yuv ++stddev: 4.37 PSNR: 35.31 MAXDIFF: 169 bytes: 7603200/ 7603200 ++3cc54d51db4cb6183ed9d4137246a5b1 *./tests/data/vsynth2/mpeg4-Q.avi ++ 168386 ./tests/data/vsynth2/mpeg4-Q.avi ++513e786c0780c3bf3038191fcd9e3cf6 *./tests/data/mpeg4adv.vsynth2.out.yuv ++stddev: 4.33 PSNR: 35.40 MAXDIFF: 167 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-mpeg4adv] Error 1 +TEST vsynth2-mpeg4nr +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/mpeg4nr 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/mpeg4nr 2011-01-17 13:53:50.000000000 -0500 +@@ -1,4 +1,4 @@ +-c41187c99588fb7229ad330b2f80d28b *./tests/data/vsynth2/mpeg4-nr.avi +-155044 ./tests/data/vsynth2/mpeg4-nr.avi +-f7fc191308679f709405e62271f5c65f *./tests/data/mpeg4nr.vsynth2.out.yuv +-stddev: 4.73 PSNR: 34.63 MAXDIFF: 64 bytes: 7603200/ 7603200 ++66b39626eeff8137688afbabbdddbbb0 *./tests/data/vsynth2/mpeg4-nr.avi ++ 159316 ./tests/data/vsynth2/mpeg4-nr.avi ++15f2aa79d95e4326ad8dc2a0500fa061 *./tests/data/mpeg4nr.vsynth2.out.yuv ++stddev: 5.22 PSNR: 33.76 MAXDIFF: 119 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-mpeg4nr] Error 1 +TEST vsynth2-mpeg4thread +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/mpeg4thread 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/mpeg4thread 2011-01-17 13:53:51.000000000 -0500 +@@ -1,4 +1,4 @@ +-ba30d10ff70d46e7c5b7fa859ea1faa4 *./tests/data/vsynth2/mpeg4-thread.avi +-250140 ./tests/data/vsynth2/mpeg4-thread.avi +-5355deb8c7609a3f1ff2173aab1dee70 *./tests/data/mpeg4thread.vsynth2.out.yuv +-stddev: 3.69 PSNR: 36.78 MAXDIFF: 65 bytes: 7603200/ 7603200 ++584e0eea7f73b8ef2e0c5548ecc0e3bf *./tests/data/vsynth2/mpeg4-thread.avi ++ 249820 ./tests/data/vsynth2/mpeg4-thread.avi ++14698fef6a6295e8086a9cd342d4e394 *./tests/data/mpeg4thread.vsynth2.out.yuv ++stddev: 4.37 PSNR: 35.31 MAXDIFF: 162 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-mpeg4thread] Error 1 +TEST vsynth2-msmpeg4 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/msmpeg4 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/msmpeg4 2011-01-17 13:53:51.000000000 -0500 +@@ -1,4 +1,4 @@ +-26dee25a62a66daba4f38ac6bd8f4677 *./tests/data/vsynth2/msmpeg4.avi +-127680 ./tests/data/vsynth2/msmpeg4.avi +-0e1c6e25c71c6a8fa8e506e3d97ca4c9 *./tests/data/msmpeg4.vsynth2.out.yuv +-stddev: 5.33 PSNR: 33.59 MAXDIFF: 78 bytes: 7603200/ 7603200 ++d5327814000543bfe24d4bdff3edf503 *./tests/data/vsynth2/msmpeg4.avi ++ 132264 ./tests/data/vsynth2/msmpeg4.avi ++a2f18f4ffe68434a89a6dd306f0f7eb4 *./tests/data/msmpeg4.vsynth2.out.yuv ++stddev: 5.35 PSNR: 33.56 MAXDIFF: 77 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-msmpeg4] Error 1 +TEST vsynth2-msmpeg4v2 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/msmpeg4v2 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/msmpeg4v2 2011-01-17 13:53:51.000000000 -0500 +@@ -1,4 +1,4 @@ +-c09815e40a9d260628e1ebad8b2b3774 *./tests/data/vsynth2/msmpeg4v2.avi +-129918 ./tests/data/vsynth2/msmpeg4v2.avi +-8920194f8bf8f9cdd6c65b3df9e1a292 *./tests/data/msmpeg4v2.vsynth2.out.yuv +-stddev: 5.33 PSNR: 33.59 MAXDIFF: 80 bytes: 7603200/ 7603200 ++8656813e7a88eb30880b9d9199822541 *./tests/data/vsynth2/msmpeg4v2.avi ++ 134750 ./tests/data/vsynth2/msmpeg4v2.avi ++fc9e48fe41ebca2f462d4323eab5c346 *./tests/data/msmpeg4v2.vsynth2.out.yuv ++stddev: 5.35 PSNR: 33.56 MAXDIFF: 80 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-msmpeg4v2] Error 1 +TEST vsynth2-qtrle +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/qtrle 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/qtrle 2011-01-17 13:53:52.000000000 -0500 +@@ -1,4 +1,4 @@ +-5346bba8e03e7de72b482efbcf712a2e *./tests/data/vsynth2/qtrle.mov +-141533 ./tests/data/vsynth2/qtrle.mov +-f967b290c7e6d015c0e78175db828249 *./tests/data/qtrle.vsynth2.out.yuv +-stddev: 5.75 PSNR: 32.93 MAXDIFF: 92 bytes: 7603200/ 7603200 ++d2ba4fe353921353143474a2819375d7 *./tests/data/vsynth2/qtrle.mov ++ 141089 ./tests/data/vsynth2/qtrle.mov ++87ea7098ddb8ce6935f7541c342101b2 *./tests/data/qtrle.vsynth2.out.yuv ++stddev: 5.96 PSNR: 32.62 MAXDIFF: 89 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-qtrle] Error 1 +TEST vsynth2-rc +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/rc 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/rc 2011-01-17 13:53:52.000000000 -0500 +@@ -1,4 +1,4 @@ +-c25ede9e268b834a09a63f5136cd1b95 *./tests/data/vsynth2/mpeg4-rc.avi +-226332 ./tests/data/vsynth2/mpeg4-rc.avi +-2b34e606af895b62a250de98749a19b0 *./tests/data/rc.vsynth2.out.yuv +-stddev: 4.23 PSNR: 35.60 MAXDIFF: 85 bytes: 7603200/ 7603200 ++fe9eb72baeccdff613a094f47f805d8e *./tests/data/vsynth2/mpeg4-rc.avi ++ 228032 ./tests/data/vsynth2/mpeg4-rc.avi ++a1068ec4bbcf297fd08032ed7fd59eda *./tests/data/rc.vsynth2.out.yuv ++stddev: 4.30 PSNR: 35.45 MAXDIFF: 85 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-rc] Error 1 +TEST vsynth2-rgb +TEST vsynth2-roq +TEST vsynth2-rv10 +TEST vsynth2-rv20 +TEST vsynth2-snow +TEST vsynth2-snowll +TEST vsynth2-svq1 +TEST vsynth2-wmv1 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/wmv1 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/wmv1 2011-01-17 13:54:02.000000000 -0500 +@@ -1,4 +1,4 @@ +-1011e26e7d351c96d7bbfe106d831b69 *./tests/data/vsynth2/wmv1.avi +-129530 ./tests/data/vsynth2/wmv1.avi +-81eee429b665254d19a06607463c0b5e *./tests/data/wmv1.vsynth2.out.yuv +-stddev: 5.33 PSNR: 33.60 MAXDIFF: 77 bytes: 7603200/ 7603200 ++01112ed4c12bd214611284a50c8abbed *./tests/data/vsynth2/wmv1.avi ++ 134150 ./tests/data/vsynth2/wmv1.avi ++6a7491f94708fe1c9e183d49434e4036 *./tests/data/wmv1.vsynth2.out.yuv ++stddev: 5.34 PSNR: 33.57 MAXDIFF: 77 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-wmv1] Error 1 +TEST vsynth2-wmv2 +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/vsynth2/wmv2 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/vsynth2/wmv2 2011-01-17 13:54:02.000000000 -0500 +@@ -1,4 +1,4 @@ +-1f6598e9776ed00aebdc44cc8d48cb7c *./tests/data/vsynth2/wmv2.avi +-129860 ./tests/data/vsynth2/wmv2.avi +-81eee429b665254d19a06607463c0b5e *./tests/data/wmv2.vsynth2.out.yuv +-stddev: 5.33 PSNR: 33.60 MAXDIFF: 77 bytes: 7603200/ 7603200 ++7f05f2fea6312103cb46c8230d3352d9 *./tests/data/vsynth2/wmv2.avi ++ 134564 ./tests/data/vsynth2/wmv2.avi ++6a7491f94708fe1c9e183d49434e4036 *./tests/data/wmv2.vsynth2.out.yuv ++stddev: 5.34 PSNR: 33.57 MAXDIFF: 77 bytes: 7603200/ 7603200 +make: *** [fate-vsynth2-wmv2] Error 1 +TEST vsynth2-yuv +TEST lavf-aiff +TEST lavf-alaw +TEST lavf-asf +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/asf 2010-03-09 00:12:36.000000000 -0500 ++++ tests/data/regression/lavf/asf 2011-01-17 13:54:03.000000000 -0500 +@@ -1,3 +1,3 @@ +-c544bb40c2f4c09d44318db5228ee499 *./tests/data/lavf/lavf.asf ++33067713434bcfa0fbe54c5bae3f1519 *./tests/data/lavf/lavf.asf + 333375 ./tests/data/lavf/lavf.asf +-./tests/data/lavf/lavf.asf CRC=0x9f5ab3e6 ++./tests/data/lavf/lavf.asf CRC=0x71634857 +make: *** [fate-lavf-asf] Error 1 +TEST lavf-au +TEST lavf-avi +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/avi 2010-03-09 00:12:36.000000000 -0500 ++++ tests/data/regression/lavf/avi 2011-01-17 13:54:03.000000000 -0500 +@@ -1,3 +1,3 @@ +-7e5e4db8c04f0acd16cff6b30e60d0e5 *./tests/data/lavf/lavf.avi +-331032 ./tests/data/lavf/lavf.avi +-./tests/data/lavf/lavf.avi CRC=0x2a83e6b0 ++74b23e54eee46c639bf6c3a789e7c67d *./tests/data/lavf/lavf.avi ++ 331948 ./tests/data/lavf/lavf.avi ++./tests/data/lavf/lavf.avi CRC=0x893290ad +make: *** [fate-lavf-avi] Error 1 +TEST lavf-bmp +TEST lavf-dv_fmt +TEST lavf-ffm +TEST lavf-flv_fmt +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/flv_fmt 2010-03-09 00:12:36.000000000 -0500 ++++ tests/data/regression/lavf/flv_fmt 2011-01-17 13:54:05.000000000 -0500 +@@ -1,3 +1,3 @@ +-62c3177547fb5853a5116661802e1ae2 *./tests/data/lavf/lavf.flv +-329541 ./tests/data/lavf/lavf.flv +-./tests/data/lavf/lavf.flv CRC=0x881785d1 ++1d8d3440b8c314ecf1b1d82758c85513 *./tests/data/lavf/lavf.flv ++ 329502 ./tests/data/lavf/lavf.flv ++./tests/data/lavf/lavf.flv CRC=0x093a3a19 +make: *** [fate-lavf-flv_fmt] Error 1 +TEST lavf-gif +TEST lavf-gxf +TEST lavf-jpg +TEST lavf-mkv +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/mkv 2010-10-23 18:46:26.000000000 -0400 ++++ tests/data/regression/lavf/mkv 2011-01-17 13:54:06.000000000 -0500 +@@ -1,3 +1,3 @@ +-a36c2d9378b9870880556ced1cb89ecf *./tests/data/lavf/lavf.mkv +- 320478 ./tests/data/lavf/lavf.mkv +-./tests/data/lavf/lavf.mkv CRC=0x2a83e6b0 ++ee09475db82261010f837400fab465ee *./tests/data/lavf/lavf.mkv ++ 321398 ./tests/data/lavf/lavf.mkv ++./tests/data/lavf/lavf.mkv CRC=0x893290ad +make: *** [fate-lavf-mkv] Error 1 +TEST lavf-mmf +TEST lavf-mov +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/mov 2010-03-09 00:12:36.000000000 -0500 ++++ tests/data/regression/lavf/mov 2011-01-17 13:54:07.000000000 -0500 +@@ -1,3 +1,3 @@ +-c145305a775eb2de43cdf94eb1ab5240 *./tests/data/lavf/lavf.mov +-357669 ./tests/data/lavf/lavf.mov +-./tests/data/lavf/lavf.mov CRC=0x2f6a9b26 ++c0905dce1e98f9d1d2b638a5b1540f00 *./tests/data/lavf/lavf.mov ++ 358589 ./tests/data/lavf/lavf.mov ++./tests/data/lavf/lavf.mov CRC=0xd6c04523 +make: *** [fate-lavf-mov] Error 1 +TEST lavf-mpg +TEST lavf-mulaw +TEST lavf-mxf +TEST lavf-nut +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/nut 2010-03-09 00:12:36.000000000 -0500 ++++ tests/data/regression/lavf/nut 2011-01-17 13:54:09.000000000 -0500 +@@ -1,3 +1,3 @@ +-16b9d2cf8effb7dae316c6b9248a49b7 *./tests/data/lavf/lavf.nut +-319888 ./tests/data/lavf/lavf.nut +-./tests/data/lavf/lavf.nut CRC=0x2a83e6b0 ++969c60338752e6b9c285676247cd1b72 *./tests/data/lavf/lavf.nut ++ 320808 ./tests/data/lavf/lavf.nut ++./tests/data/lavf/lavf.nut CRC=0x893290ad +make: *** [fate-lavf-nut] Error 1 +TEST lavf-ogg +TEST lavf-pbmpipe +TEST lavf-pcx +TEST lavf-pgm +TEST lavf-pgmpipe +TEST lavf-pixfmt +TEST lavf-png +TEST lavf-ppm +TEST lavf-ppmpipe +TEST lavf-rm +TEST lavf-sgi +TEST lavf-swf +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/lavf/swf 2010-03-09 00:12:36.000000000 -0500 ++++ tests/data/regression/lavf/swf 2011-01-17 13:54:12.000000000 -0500 +@@ -1,3 +1,3 @@ +-62c5aeb636fc82cf6ba6277d36e42cb5 *./tests/data/lavf/lavf.swf +-329479 ./tests/data/lavf/lavf.swf +-./tests/data/lavf/lavf.swf CRC=0x881785d1 ++75d9b150f87e1dd8ad8c6c583c85624c *./tests/data/lavf/lavf.swf ++ 329440 ./tests/data/lavf/lavf.swf ++./tests/data/lavf/lavf.swf CRC=0x093a3a19 +make: *** [fate-lavf-swf] Error 1 +TEST lavf-tga +TEST lavf-tiff +TEST lavf-ts +TEST lavf-voc +TEST lavf-wav +TEST lavf-yuv4mpeg +TEST lavfi-crop +TEST lavfi-crop_scale +TEST lavfi-crop_scale_vflip +TEST lavfi-crop_vflip +TEST lavfi-null +TEST lavfi-pixdesc_le +TEST lavfi-pixfmts_copy_le +TEST lavfi-pixfmts_crop_le +TEST lavfi-pixfmts_hflip_le +TEST lavfi-pixfmts_null_le +TEST lavfi-pixfmts_pad_le +TEST lavfi-pixfmts_scale_le +TEST lavfi-pixfmts_vflip_le +TEST lavfi-scale200 +TEST lavfi-scale500 +TEST lavfi-vflip +TEST lavfi-vflip_crop +TEST lavfi-vflip_vflip +make: Target `test' not remade because of errors. +TEST 4xm-1 +TEST 4xm-2 +TEST 8bps +TEST aac-demux +TEST aasc +TEST adpcm-ea-r2 +TEST adpcm-ea-r3 +TEST aea-demux +TEST alg-mm +TEST amv +TEST armovie-escape124 +TEST auravision +TEST auravision-v2 +TEST bethsoft-vid +TEST bfi +TEST bink-demux +TEST bink-demux-video +TEST caf +TEST cdgraphics +TEST cljr +TEST corepng +TEST creative-adpcm +TEST creative-adpcm-8-2.6bit +TEST creative-adpcm-8-2bit +TEST creative-adpcm-8-4bit +TEST creatureshock-avs +TEST cryo-apc +TEST cscd +TEST cvid +TEST cvid-palette +TEST cyberia-c93 +TEST cyuv +TEST d-cinema-demux +TEST delphine-cin +TEST deluxepaint-anm +TEST dpx +TEST duck-dk3 +TEST duck-dk4 +TEST duck-tm2 +TEST ea-cdata +TEST ea-cmv +TEST ea-dct +TEST ea-mad-adpcm-ea-r1 +TEST ea-mad-pcm-planar +TEST ea-tgq +TEST ea-tgv-ima-ea-eacs +TEST ea-tgv-ima-ea-sead +TEST ea-tqi-adpcm +TEST ea-vp60 +TEST ea-vp61 +TEST feeble-dxa +TEST film-cvid-pcm-stereo-8bit +TEST flic-af11-palette-change +TEST flic-af12 +TEST flic-magiccarpet +TEST fraps-v0 +TEST fraps-v1 +TEST fraps-v2 +TEST fraps-v3 +TEST fraps-v4 +TEST fraps-v5 +TEST frwu +TEST funcom-iss +TEST id-cin-video +TEST idroq-video-dpcm +TEST idroq-video-encode +TEST iff-byterun1 +TEST iff-fibonacci +TEST iff-ilbm +TEST iff-pcm +TEST indeo2 +TEST indeo3 +TEST indeo5 +TEST interplay-mve-16bit +TEST interplay-mve-8bit +TEST iv8-demux +TEST kmvc +TEST lmlm4-demux +TEST loco-rgb +TEST loco-yuy2 +TEST lossless-appleaudio +TEST lossless-meridianaudio +TEST lossless-monkeysaudio +TEST lossless-shortenaudio +TEST lossless-tta +TEST lossless-wavpackaudio +TEST maxis-xa +TEST mimic +TEST motionpixels +TEST mpc7-demux +TEST mpc8-demux +TEST msrle-8bit +TEST msvideo1-16bit +TEST msvideo1-8bit +TEST mszh +TEST mtv +TEST mxf-demux +TEST nc-demux +TEST nsv-demux +TEST nuv +TEST oma-demux +TEST pcm_dvd +TEST psx-str +TEST psx-str-v3 +TEST ptx +TEST pva-demux +TEST qcp-demux +TEST qpeg +TEST qt-alaw-mono +TEST qt-alaw-stereo +TEST qt-ima4-mono +TEST qt-ima4-stereo +TEST qt-mac3-mono +TEST qt-mac3-stereo +TEST qt-mac6-mono +TEST qt-mac6-stereo +TEST qt-msadpcm-stereo +TEST qt-msimaadpcm-stereo +TEST qt-rawpcm-16bit-stereo-signed-be +TEST qt-rawpcm-16bit-stereo-signed-le +TEST qt-rawpcm-8bit-mono-unsigned +TEST qt-rawpcm-8bit-stereo-unsigned +TEST qt-ulaw-mono +TEST qt-ulaw-stereo +TEST qtrle-16bit +TEST qtrle-1bit +TEST qtrle-24bit +TEST qtrle-2bit +TEST qtrle-32bit +TEST qtrle-4bit +TEST qtrle-8bit +TEST quickdraw +TEST real-14_4 +TEST real-rv40 +TEST redcode-demux +TEST rl2 +TEST rpza +TEST sierra-audio +TEST sierra-vmd +TEST siff +TEST smacker +TEST smc +TEST sp5x +TEST sub-srt +TEST sunraster-1bit-raw +TEST sunraster-1bit-rle +TEST sunraster-24bit-raw +TEST sunraster-24bit-rle +TEST sunraster-8bit-raw +TEST sunraster-8bit-rle +TEST svq1 +TEST svq3 +TEST thp-mjpeg-adpcm +TEST tiertex-seq +TEST tmv +TEST truemotion1-15 +TEST truemotion1-24 +TEST tscc-15bit +TEST tscc-32bit +TEST ulti +TEST v210 +TEST vc1 +TEST vcr1 +TEST video-xl +TEST vmnc-16bit +TEST vmnc-32bit +TEST vp5 +TEST vp6a +TEST vp6f +TEST vqa-cc +TEST vqf-demux +TEST w64 +TEST wc3movie-xan +TEST westwood-aud +TEST wnv1 +TEST xan-dpcm +TEST zlib +TEST zmbv-15bit +TEST zmbv-16bit +TEST zmbv-32bit +TEST zmbv-8bit +TEST twinvq +TEST sipr-16k +TEST sipr-8k5 +TEST sipr-6k5 +TEST sipr-5k0 +TEST ra-288 +TEST ra-cook +TEST mpeg2-field-enc +TEST qcelp +TEST qdm2 +TEST imc +TEST yop +TEST pictor +TEST dts +TEST nellymoser +TEST truespeech +TEST ac3-2.0 +TEST ac3-5.1 +TEST eac3-1 +TEST eac3-2 +TEST eac3-3 +TEST eac3-4 +TEST atrac1 +TEST atrac3-1 +TEST atrac3-2 +TEST atrac3-3 +TEST gsm +TEST gsm-ms +TEST g722dec-1 +TEST msmpeg4v1 +TEST wmavoice-7k +TEST wmavoice-11k +TEST wmavoice-19k +TEST wmapro-5.1 +TEST wmapro-2ch +TEST ansi +TEST wmv8-drm +TEST wmv8-drm-nodec +TEST binkaudio-dct +TEST binkaudio-rdft +TEST txd-pal8 +TEST txd-16bpp +TEST vp3 +TEST fax-g3 +TEST fax-g3s +TEST ws_snd +TEST dxa-scummvm +TEST mjpegb +TEST rv30 +TEST sha +TEST musepack7 +TEST amrnb-4k75 +TEST amrnb-5k15 +TEST amrnb-5k9 +TEST amrnb-6k7 +TEST amrnb-7k4 +TEST amrnb-7k95 +TEST amrnb-10k2 +TEST amrnb-12k2 +TEST amrwb-6k60 +TEST amrwb-8k85 +TEST amrwb-12k65 +TEST amrwb-14k25 +TEST amrwb-15k85 +TEST amrwb-18k25 +TEST amrwb-19k85 +TEST amrwb-23k05 +TEST amrwb-23k85 +TEST amrwb-23k85-2 +TEST aac-al04_44 +TEST aac-al07_96 +TEST aac-am00_88 +TEST aac-al_sbr_hq_cm_48_2 +TEST aac-al_sbr_ps_06_ur +TEST mpeg4-als-conformance-00 +TEST mpeg4-als-conformance-01 +TEST mpeg4-als-conformance-02 +TEST mpeg4-als-conformance-03 +TEST mpeg4-als-conformance-04 +TEST mpeg4-als-conformance-05 +TEST fft +TEST ifft +TEST mdct +TEST imdct +TEST rdft +TEST irdft +TEST dct1d +TEST idct1d +TEST h264-conformance-aud_mw_e +TEST h264-conformance-ba1_ft_c +TEST h264-conformance-ba1_sony_d +TEST h264-conformance-ba2_sony_f +TEST h264-conformance-ba3_sva_c +TEST h264-conformance-ba_mw_d +TEST h264-conformance-bamq1_jvc_c +TEST h264-conformance-bamq2_jvc_c +TEST h264-conformance-banm_mw_d +TEST h264-conformance-basqp1_sony_c +TEST h264-conformance-caba1_sony_d +TEST h264-conformance-caba1_sva_b +TEST h264-conformance-caba2_sony_e +TEST h264-conformance-caba2_sva_b +TEST h264-conformance-caba3_sony_c +TEST h264-conformance-caba3_sva_b +TEST h264-conformance-caba3_toshiba_e +TEST h264-conformance-cabac_mot_fld0_full +TEST h264-conformance-cabac_mot_frm0_full +TEST h264-conformance-cabac_mot_mbaff0_full +TEST h264-conformance-cabac_mot_picaff0_full +TEST h264-conformance-cabaci3_sony_b +TEST h264-conformance-cabast3_sony_e +TEST h264-conformance-cabastbr3_sony_b +TEST h264-conformance-cabref3_sand_d +TEST h264-conformance-cacqp3_sony_d +TEST h264-conformance-cafi1_sva_c +TEST h264-conformance-cama1_sony_c +TEST h264-conformance-cama1_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cama1_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cama1_toshiba_b 2011-01-17 13:57:12.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0x9a9ce366 +-0, 3600, 152064, 0xf4639828 +-0, 7200, 152064, 0x625024a3 +-0, 10800, 152064, 0x80dc2f9d +-0, 14400, 152064, 0xb2c4feea +-0, 18000, 152064, 0x4ec6ad64 +-0, 21600, 152064, 0x1957bec3 +-0, 25200, 152064, 0xb682799d +-0, 28800, 152064, 0x34cd2053 +-0, 32400, 152064, 0x81490b4c +-0, 36000, 152064, 0x242dc943 +-0, 39600, 152064, 0x3e126734 +-0, 43200, 152064, 0x8e474ff8 +-0, 46800, 152064, 0x239d2fbd +-0, 50400, 152064, 0x0ca3e16f +-0, 54000, 152064, 0x6161d7c2 +-0, 57600, 152064, 0xca7ad1af +-0, 61200, 152064, 0xf8ef9026 +-0, 64800, 152064, 0x01f2f4c1 +-0, 68400, 152064, 0x510b19ec +-0, 72000, 152064, 0xe489028b +-0, 75600, 152064, 0x7a693c1e +-0, 79200, 152064, 0x276b23fe +-0, 82800, 152064, 0x0e9ced3a +-0, 86400, 152064, 0x658228f7 +-0, 90000, 152064, 0x6a271bc3 +-0, 93600, 152064, 0x431ecd8b +-0, 97200, 152064, 0x23a5ed14 +-0, 100800, 152064, 0x76fbe121 +-0, 104400, 152064, 0x471f919d +-0, 108000, 152064, 0x16bfabbc +-0, 111600, 152064, 0x0762993f +-0, 115200, 152064, 0x5a2b0b0e +-0, 118800, 152064, 0x81415ef7 +-0, 122400, 152064, 0xb96e4164 +-0, 126000, 152064, 0xf77aee83 +-0, 129600, 152064, 0x6af81633 +-0, 133200, 152064, 0xed78e5b5 +-0, 136800, 152064, 0x67e38e2c +-0, 140400, 152064, 0x0417ae01 +-0, 144000, 152064, 0x3887b312 +-0, 147600, 152064, 0x3a4b70fb +-0, 151200, 152064, 0xcaae9e7f +-0, 154800, 152064, 0xaf9597be +-0, 158400, 152064, 0x9bae63d3 +-0, 162000, 152064, 0x0e80825f +-0, 165600, 152064, 0x915661fd +-0, 169200, 152064, 0x67d3dc94 +-0, 172800, 152064, 0x3dcf240c +-0, 176400, 152064, 0x127ff832 +-0, 180000, 152064, 0xc8969981 +-0, 183600, 152064, 0x57179c77 +-0, 187200, 152064, 0x9f88656c +-0, 190800, 152064, 0xc28ff5d3 +-0, 194400, 152064, 0xf100fad9 +-0, 198000, 152064, 0xb570ce12 +-0, 201600, 152064, 0xe8f28955 +-0, 205200, 152064, 0x1f0a9549 +-0, 208800, 152064, 0x22b17e9b +-0, 212400, 152064, 0x7cf1400e +-0, 216000, 152064, 0xafd273b7 +-0, 219600, 152064, 0xeb9b712e +-0, 223200, 152064, 0x0f81de24 +-0, 226800, 152064, 0x8f4e1953 +-0, 230400, 152064, 0x682e2170 +-0, 234000, 152064, 0xc32ad1b2 +-0, 237600, 152064, 0x53a81d79 +-0, 241200, 152064, 0x54002596 +-0, 244800, 152064, 0x4b5fdbd9 +-0, 248400, 152064, 0x96613368 +-0, 252000, 152064, 0xd6ac0171 +-0, 255600, 152064, 0xf1c1b7b7 +-0, 259200, 152064, 0xc730d82f +-0, 262800, 152064, 0x0415d934 +-0, 266400, 152064, 0x5338915e +-0, 270000, 152064, 0x8e9dda6d +-0, 273600, 152064, 0xe3a8b0a0 +-0, 277200, 152064, 0x5fa36e44 +-0, 280800, 152064, 0x0e63dc72 +-0, 284400, 152064, 0xd0dad71f +-0, 288000, 152064, 0x0c4aac94 +-0, 291600, 152064, 0x60d50e8d +-0, 295200, 152064, 0x96872d7c +-0, 298800, 152064, 0x4fcefc33 +-0, 302400, 152064, 0x6b8157c9 +-0, 306000, 152064, 0xa40d527d +-0, 309600, 152064, 0x9884480a +-0, 313200, 152064, 0xff5d9754 +-0, 316800, 152064, 0x4a26a74d +-0, 320400, 152064, 0x81059e82 ++0, 0, 152064, 0x625024a3 ++0, 3600, 152064, 0x80dc2f9d ++0, 7200, 152064, 0xb2c4feea ++0, 10800, 152064, 0x4ec6ad64 ++0, 14400, 152064, 0x1957bec3 ++0, 18000, 152064, 0xb682799d ++0, 21600, 152064, 0x34cd2053 ++0, 25200, 152064, 0x81490b4c ++0, 28800, 152064, 0x242dc943 ++0, 32400, 152064, 0x3e126734 ++0, 36000, 152064, 0x8e474ff8 ++0, 39600, 152064, 0x239d2fbd ++0, 43200, 152064, 0x0ca3e16f ++0, 46800, 152064, 0x6161d7c2 ++0, 50400, 152064, 0xca7ad1af ++0, 54000, 152064, 0xf8ef9026 ++0, 57600, 152064, 0x01f2f4c1 ++0, 61200, 152064, 0x510b19ec ++0, 64800, 152064, 0xe489028b ++0, 68400, 152064, 0x7a693c1e ++0, 72000, 152064, 0x276b23fe ++0, 75600, 152064, 0x0e9ced3a ++0, 79200, 152064, 0x658228f7 ++0, 82800, 152064, 0x6a271bc3 ++0, 86400, 152064, 0x431ecd8b ++0, 90000, 152064, 0x23a5ed14 ++0, 93600, 152064, 0x76fbe121 ++0, 97200, 152064, 0x471f919d ++0, 100800, 152064, 0x16bfabbc ++0, 104400, 152064, 0x0762993f ++0, 108000, 152064, 0x5a2b0b0e ++0, 111600, 152064, 0x81415ef7 ++0, 115200, 152064, 0xb96e4164 ++0, 118800, 152064, 0xf77aee83 ++0, 122400, 152064, 0x6af81633 ++0, 126000, 152064, 0xed78e5b5 ++0, 129600, 152064, 0x67e38e2c ++0, 133200, 152064, 0x0417ae01 ++0, 136800, 152064, 0x3887b312 ++0, 140400, 152064, 0x3a4b70fb ++0, 144000, 152064, 0xcaae9e7f ++0, 147600, 152064, 0xaf9597be ++0, 151200, 152064, 0x9bae63d3 ++0, 154800, 152064, 0x0e80825f ++0, 158400, 152064, 0x915661fd ++0, 162000, 152064, 0x67d3dc94 ++0, 165600, 152064, 0x3dcf240c ++0, 169200, 152064, 0x127ff832 ++0, 172800, 152064, 0xc8969981 ++0, 176400, 152064, 0x57179c77 ++0, 180000, 152064, 0x9f88656c ++0, 183600, 152064, 0xc28ff5d3 ++0, 187200, 152064, 0xf100fad9 ++0, 190800, 152064, 0xb570ce12 ++0, 194400, 152064, 0xe8f28955 ++0, 198000, 152064, 0x1f0a9549 ++0, 201600, 152064, 0x22b17e9b ++0, 205200, 152064, 0x7cf1400e ++0, 208800, 152064, 0xafd273b7 ++0, 212400, 152064, 0xeb9b712e ++0, 216000, 152064, 0x0f81de24 ++0, 219600, 152064, 0x8f4e1953 ++0, 223200, 152064, 0x682e2170 ++0, 226800, 152064, 0xc32ad1b2 ++0, 230400, 152064, 0x53a81d79 ++0, 234000, 152064, 0x54002596 ++0, 237600, 152064, 0x4b5fdbd9 ++0, 241200, 152064, 0x96613368 ++0, 244800, 152064, 0xd6ac0171 ++0, 248400, 152064, 0xf1c1b7b7 ++0, 252000, 152064, 0xc730d82f ++0, 255600, 152064, 0x0415d934 ++0, 259200, 152064, 0x5338915e ++0, 262800, 152064, 0x8e9dda6d ++0, 266400, 152064, 0xe3a8b0a0 ++0, 270000, 152064, 0x5fa36e44 ++0, 273600, 152064, 0x0e63dc72 ++0, 277200, 152064, 0xd0dad71f ++0, 280800, 152064, 0x0c4aac94 ++0, 284400, 152064, 0x60d50e8d ++0, 288000, 152064, 0x96872d7c ++0, 291600, 152064, 0x4fcefc33 ++0, 295200, 152064, 0x6b8157c9 ++0, 298800, 152064, 0xa40d527d ++0, 302400, 152064, 0x9884480a ++0, 306000, 152064, 0xff5d9754 ++0, 309600, 152064, 0x4a26a74d ++0, 313200, 152064, 0x81059e82 +make: *** [fate-h264-conformance-cama1_toshiba_b] Error 1 +TEST h264-conformance-cama1_vtc_c +TEST h264-conformance-cama2_vtc_b +TEST h264-conformance-cama3_sand_e +TEST h264-conformance-cama3_vtc_b +TEST h264-conformance-camaci3_sony_c +TEST h264-conformance-camanl1_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-camanl1_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-camanl1_toshiba_b 2011-01-17 13:57:13.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0xb1edd842 +-0, 3600, 152064, 0x551f8f45 +-0, 7200, 152064, 0xb4931cb2 +-0, 10800, 152064, 0x78882b27 +-0, 14400, 152064, 0x3afef36d +-0, 18000, 152064, 0x85afad0a +-0, 21600, 152064, 0x3a8bab81 +-0, 25200, 152064, 0x2a437174 +-0, 28800, 152064, 0x22421437 +-0, 32400, 152064, 0x39c5f125 +-0, 36000, 152064, 0x256eaad2 +-0, 39600, 152064, 0x668a5d31 +-0, 43200, 152064, 0x412a4aa7 +-0, 46800, 152064, 0x3f091baf +-0, 50400, 152064, 0xbf16d262 +-0, 54000, 152064, 0x2fc4ce67 +-0, 57600, 152064, 0x119cde3e +-0, 61200, 152064, 0xb40b8632 +-0, 64800, 152064, 0x4be4f192 +-0, 68400, 152064, 0x906c1237 +-0, 72000, 152064, 0x95380024 +-0, 75600, 152064, 0x6a833025 +-0, 79200, 152064, 0x681d1c4f +-0, 82800, 152064, 0x08c8dea4 +-0, 86400, 152064, 0xc69226f0 +-0, 90000, 152064, 0x86631102 +-0, 93600, 152064, 0x7f40c77a +-0, 97200, 152064, 0xc746ddd4 +-0, 100800, 152064, 0x5f2bd3cb +-0, 104400, 152064, 0x643c8316 +-0, 108000, 152064, 0x5b7fa380 +-0, 111600, 152064, 0x82438cf7 +-0, 115200, 152064, 0xdee0f7e7 +-0, 118800, 152064, 0xc50d41f1 +-0, 122400, 152064, 0xf3453631 +-0, 126000, 152064, 0x90bce66b +-0, 129600, 152064, 0x045b03f7 +-0, 133200, 152064, 0xf64bd756 +-0, 136800, 152064, 0xff997ef2 +-0, 140400, 152064, 0x3613a0a5 +-0, 144000, 152064, 0xe6a7a8d6 +-0, 147600, 152064, 0xb0906c42 +-0, 151200, 152064, 0x4dfc912b +-0, 154800, 152064, 0x81e3991c +-0, 158400, 152064, 0x4efc61fb +-0, 162000, 152064, 0xed478395 +-0, 165600, 152064, 0x4cb25ab6 +-0, 169200, 152064, 0x28e7d51f +-0, 172800, 152064, 0x8bcc1a8d +-0, 176400, 152064, 0x2fe1f240 +-0, 180000, 152064, 0xb4978ef8 +-0, 183600, 152064, 0xe3929556 +-0, 187200, 152064, 0xd370632a +-0, 190800, 152064, 0xba86ffb2 +-0, 194400, 152064, 0x444bf18c +-0, 198000, 152064, 0xab40bd14 +-0, 201600, 152064, 0xfd488a5d +-0, 205200, 152064, 0xe1f09568 +-0, 208800, 152064, 0x09ee7a7e +-0, 212400, 152064, 0x9360397c +-0, 216000, 152064, 0xdbd467e9 +-0, 219600, 152064, 0x99726777 +-0, 223200, 152064, 0x009fd46c +-0, 226800, 152064, 0xcf770fdb +-0, 230400, 152064, 0x2a890fd9 +-0, 234000, 152064, 0x7f40de4b +-0, 237600, 152064, 0x04191304 +-0, 241200, 152064, 0x15722022 +-0, 244800, 152064, 0x59f4ea93 +-0, 248400, 152064, 0x28ba373f +-0, 252000, 152064, 0xf9e400b8 +-0, 255600, 152064, 0x85c4bd98 +-0, 259200, 152064, 0x6917d2a5 +-0, 262800, 152064, 0x61cae234 +-0, 266400, 152064, 0x752a9a2d +-0, 270000, 152064, 0x1ee2d9bd +-0, 273600, 152064, 0xdce9ab8e +-0, 277200, 152064, 0x51225fd0 +-0, 280800, 152064, 0x10e8cb60 +-0, 284400, 152064, 0x8d07cd25 +-0, 288000, 152064, 0xb18ba61b +-0, 291600, 152064, 0xb0f10280 +-0, 295200, 152064, 0x76a71f13 +-0, 298800, 152064, 0x3004f5a1 +-0, 302400, 152064, 0x9aba5724 +-0, 306000, 152064, 0x5db85385 +-0, 309600, 152064, 0xbe9d3f5b +-0, 313200, 152064, 0xa71e85bb +-0, 316800, 152064, 0xdcf59cd7 +-0, 320400, 152064, 0x5e319459 ++0, 0, 152064, 0xb4931cb2 ++0, 3600, 152064, 0x78882b27 ++0, 7200, 152064, 0x3afef36d ++0, 10800, 152064, 0x85afad0a ++0, 14400, 152064, 0x3a8bab81 ++0, 18000, 152064, 0x2a437174 ++0, 21600, 152064, 0x22421437 ++0, 25200, 152064, 0x39c5f125 ++0, 28800, 152064, 0x256eaad2 ++0, 32400, 152064, 0x668a5d31 ++0, 36000, 152064, 0x412a4aa7 ++0, 39600, 152064, 0x3f091baf ++0, 43200, 152064, 0xbf16d262 ++0, 46800, 152064, 0x2fc4ce67 ++0, 50400, 152064, 0x119cde3e ++0, 54000, 152064, 0xb40b8632 ++0, 57600, 152064, 0x4be4f192 ++0, 61200, 152064, 0x906c1237 ++0, 64800, 152064, 0x95380024 ++0, 68400, 152064, 0x6a833025 ++0, 72000, 152064, 0x681d1c4f ++0, 75600, 152064, 0x08c8dea4 ++0, 79200, 152064, 0xc69226f0 ++0, 82800, 152064, 0x86631102 ++0, 86400, 152064, 0x7f40c77a ++0, 90000, 152064, 0xc746ddd4 ++0, 93600, 152064, 0x5f2bd3cb ++0, 97200, 152064, 0x643c8316 ++0, 100800, 152064, 0x5b7fa380 ++0, 104400, 152064, 0x82438cf7 ++0, 108000, 152064, 0xdee0f7e7 ++0, 111600, 152064, 0xc50d41f1 ++0, 115200, 152064, 0xf3453631 ++0, 118800, 152064, 0x90bce66b ++0, 122400, 152064, 0x045b03f7 ++0, 126000, 152064, 0xf64bd756 ++0, 129600, 152064, 0xff997ef2 ++0, 133200, 152064, 0x3613a0a5 ++0, 136800, 152064, 0xe6a7a8d6 ++0, 140400, 152064, 0xb0906c42 ++0, 144000, 152064, 0x4dfc912b ++0, 147600, 152064, 0x81e3991c ++0, 151200, 152064, 0x4efc61fb ++0, 154800, 152064, 0xed478395 ++0, 158400, 152064, 0x4cb25ab6 ++0, 162000, 152064, 0x28e7d51f ++0, 165600, 152064, 0x8bcc1a8d ++0, 169200, 152064, 0x2fe1f240 ++0, 172800, 152064, 0xb4978ef8 ++0, 176400, 152064, 0xe3929556 ++0, 180000, 152064, 0xd370632a ++0, 183600, 152064, 0xba86ffb2 ++0, 187200, 152064, 0x444bf18c ++0, 190800, 152064, 0xab40bd14 ++0, 194400, 152064, 0xfd488a5d ++0, 198000, 152064, 0xe1f09568 ++0, 201600, 152064, 0x09ee7a7e ++0, 205200, 152064, 0x9360397c ++0, 208800, 152064, 0xdbd467e9 ++0, 212400, 152064, 0x99726777 ++0, 216000, 152064, 0x009fd46c ++0, 219600, 152064, 0xcf770fdb ++0, 223200, 152064, 0x2a890fd9 ++0, 226800, 152064, 0x7f40de4b ++0, 230400, 152064, 0x04191304 ++0, 234000, 152064, 0x15722022 ++0, 237600, 152064, 0x59f4ea93 ++0, 241200, 152064, 0x28ba373f ++0, 244800, 152064, 0xf9e400b8 ++0, 248400, 152064, 0x85c4bd98 ++0, 252000, 152064, 0x6917d2a5 ++0, 255600, 152064, 0x61cae234 ++0, 259200, 152064, 0x752a9a2d ++0, 262800, 152064, 0x1ee2d9bd ++0, 266400, 152064, 0xdce9ab8e ++0, 270000, 152064, 0x51225fd0 ++0, 273600, 152064, 0x10e8cb60 ++0, 277200, 152064, 0x8d07cd25 ++0, 280800, 152064, 0xb18ba61b ++0, 284400, 152064, 0xb0f10280 ++0, 288000, 152064, 0x76a71f13 ++0, 291600, 152064, 0x3004f5a1 ++0, 295200, 152064, 0x9aba5724 ++0, 298800, 152064, 0x5db85385 ++0, 302400, 152064, 0xbe9d3f5b ++0, 306000, 152064, 0xa71e85bb ++0, 309600, 152064, 0xdcf59cd7 ++0, 313200, 152064, 0x5e319459 +make: *** [fate-h264-conformance-camanl1_toshiba_b] Error 1 +TEST h264-conformance-camanl2_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-camanl2_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-camanl2_toshiba_b 2011-01-17 13:57:13.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0xb1edd842 +-0, 3600, 152064, 0x551f8f45 +-0, 7200, 152064, 0xb4931cb2 +-0, 10800, 152064, 0x5f352e98 +-0, 14400, 152064, 0xeba5fe28 +-0, 18000, 152064, 0x85afad0a +-0, 21600, 152064, 0x1120b6a4 +-0, 25200, 152064, 0x67506e16 +-0, 28800, 152064, 0x22421437 +-0, 32400, 152064, 0x929becd6 +-0, 36000, 152064, 0x6ffcb4b0 +-0, 39600, 152064, 0x668a5d31 +-0, 43200, 152064, 0x1b034ebb +-0, 46800, 152064, 0x7e2d213c +-0, 50400, 152064, 0xbf16d262 +-0, 54000, 152064, 0xdeaecab3 +-0, 57600, 152064, 0xd220d704 +-0, 61200, 152064, 0xb40b8632 +-0, 64800, 152064, 0xbdf0ef57 +-0, 68400, 152064, 0x7e2e10df +-0, 72000, 152064, 0x95380024 +-0, 75600, 152064, 0xdb80256d +-0, 79200, 152064, 0xa4561c61 +-0, 82800, 152064, 0x08c8dea4 +-0, 86400, 152064, 0x7bb917d6 +-0, 90000, 152064, 0x796f0e2b +-0, 93600, 152064, 0x7f40c77a +-0, 97200, 152064, 0xda32de2e +-0, 100800, 152064, 0x00ffc15a +-0, 104400, 152064, 0x643c8316 +-0, 108000, 152064, 0xb7588f7f +-0, 111600, 152064, 0xa4e07c02 +-0, 115200, 152064, 0xdee0f7e7 +-0, 118800, 152064, 0x2c3245ee +-0, 122400, 152064, 0x6565355b +-0, 126000, 152064, 0x90bce66b +-0, 129600, 152064, 0x0abffe08 +-0, 133200, 152064, 0x119ccc3e +-0, 136800, 152064, 0xff997ef2 +-0, 140400, 152064, 0xba4b9820 +-0, 144000, 152064, 0xb6dfa596 +-0, 147600, 152064, 0xb0906c42 +-0, 151200, 152064, 0xf3c29133 +-0, 154800, 152064, 0x08cd8e2b +-0, 158400, 152064, 0x4efc61fb +-0, 162000, 152064, 0x5b7c6e48 +-0, 165600, 152064, 0xd28a47c2 +-0, 169200, 152064, 0x28e7d51f +-0, 172800, 152064, 0x3a5619b1 +-0, 176400, 152064, 0xa517e7f2 +-0, 180000, 152064, 0xb4978ef8 +-0, 183600, 152064, 0x25929175 +-0, 187200, 152064, 0x20f05834 +-0, 190800, 152064, 0xba86ffb2 +-0, 194400, 152064, 0xa265f06f +-0, 198000, 152064, 0x97bbbfb7 +-0, 201600, 152064, 0xfd488a5d +-0, 205200, 152064, 0x1b0989da +-0, 208800, 152064, 0xfd1878ce +-0, 212400, 152064, 0x9360397c +-0, 216000, 152064, 0x0d8151a7 +-0, 219600, 152064, 0xe7a05bb8 +-0, 223200, 152064, 0x009fd46c +-0, 226800, 152064, 0x8751123f +-0, 230400, 152064, 0x8252101a +-0, 234000, 152064, 0x7f40de4b +-0, 237600, 152064, 0x4ea317fe +-0, 241200, 152064, 0x519224d9 +-0, 244800, 152064, 0x59f4ea93 +-0, 248400, 152064, 0xc93c1dba +-0, 252000, 152064, 0xe3c9fb61 +-0, 255600, 152064, 0x85c4bd98 +-0, 259200, 152064, 0xcebacfd3 +-0, 262800, 152064, 0x7327da99 +-0, 266400, 152064, 0x752a9a2d +-0, 270000, 152064, 0x5ea6c8d2 +-0, 273600, 152064, 0x66fd8c6f +-0, 277200, 152064, 0x51225fd0 +-0, 280800, 152064, 0x58b9be96 +-0, 284400, 152064, 0xa5abcdb7 +-0, 288000, 152064, 0xb18ba61b +-0, 291600, 152064, 0xc7d20190 +-0, 295200, 152064, 0xb6da14aa +-0, 298800, 152064, 0x3004f5a1 +-0, 302400, 152064, 0x129354e2 +-0, 306000, 152064, 0xffa148d5 +-0, 309600, 152064, 0xbe9d3f5b +-0, 313200, 152064, 0x1c7f8976 +-0, 316800, 152064, 0xa107a54d +-0, 320400, 152064, 0x5e319459 ++0, 0, 152064, 0xb4931cb2 ++0, 3600, 152064, 0x5f352e98 ++0, 7200, 152064, 0xeba5fe28 ++0, 10800, 152064, 0x85afad0a ++0, 14400, 152064, 0x1120b6a4 ++0, 18000, 152064, 0x67506e16 ++0, 21600, 152064, 0x22421437 ++0, 25200, 152064, 0x929becd6 ++0, 28800, 152064, 0x6ffcb4b0 ++0, 32400, 152064, 0x668a5d31 ++0, 36000, 152064, 0x1b034ebb ++0, 39600, 152064, 0x7e2d213c ++0, 43200, 152064, 0xbf16d262 ++0, 46800, 152064, 0xdeaecab3 ++0, 50400, 152064, 0xd220d704 ++0, 54000, 152064, 0xb40b8632 ++0, 57600, 152064, 0xbdf0ef57 ++0, 61200, 152064, 0x7e2e10df ++0, 64800, 152064, 0x95380024 ++0, 68400, 152064, 0xdb80256d ++0, 72000, 152064, 0xa4561c61 ++0, 75600, 152064, 0x08c8dea4 ++0, 79200, 152064, 0x7bb917d6 ++0, 82800, 152064, 0x796f0e2b ++0, 86400, 152064, 0x7f40c77a ++0, 90000, 152064, 0xda32de2e ++0, 93600, 152064, 0x00ffc15a ++0, 97200, 152064, 0x643c8316 ++0, 100800, 152064, 0xb7588f7f ++0, 104400, 152064, 0xa4e07c02 ++0, 108000, 152064, 0xdee0f7e7 ++0, 111600, 152064, 0x2c3245ee ++0, 115200, 152064, 0x6565355b ++0, 118800, 152064, 0x90bce66b ++0, 122400, 152064, 0x0abffe08 ++0, 126000, 152064, 0x119ccc3e ++0, 129600, 152064, 0xff997ef2 ++0, 133200, 152064, 0xba4b9820 ++0, 136800, 152064, 0xb6dfa596 ++0, 140400, 152064, 0xb0906c42 ++0, 144000, 152064, 0xf3c29133 ++0, 147600, 152064, 0x08cd8e2b ++0, 151200, 152064, 0x4efc61fb ++0, 154800, 152064, 0x5b7c6e48 ++0, 158400, 152064, 0xd28a47c2 ++0, 162000, 152064, 0x28e7d51f ++0, 165600, 152064, 0x3a5619b1 ++0, 169200, 152064, 0xa517e7f2 ++0, 172800, 152064, 0xb4978ef8 ++0, 176400, 152064, 0x25929175 ++0, 180000, 152064, 0x20f05834 ++0, 183600, 152064, 0xba86ffb2 ++0, 187200, 152064, 0xa265f06f ++0, 190800, 152064, 0x97bbbfb7 ++0, 194400, 152064, 0xfd488a5d ++0, 198000, 152064, 0x1b0989da ++0, 201600, 152064, 0xfd1878ce ++0, 205200, 152064, 0x9360397c ++0, 208800, 152064, 0x0d8151a7 ++0, 212400, 152064, 0xe7a05bb8 ++0, 216000, 152064, 0x009fd46c ++0, 219600, 152064, 0x8751123f ++0, 223200, 152064, 0x8252101a ++0, 226800, 152064, 0x7f40de4b ++0, 230400, 152064, 0x4ea317fe ++0, 234000, 152064, 0x519224d9 ++0, 237600, 152064, 0x59f4ea93 ++0, 241200, 152064, 0xc93c1dba ++0, 244800, 152064, 0xe3c9fb61 ++0, 248400, 152064, 0x85c4bd98 ++0, 252000, 152064, 0xcebacfd3 ++0, 255600, 152064, 0x7327da99 ++0, 259200, 152064, 0x752a9a2d ++0, 262800, 152064, 0x5ea6c8d2 ++0, 266400, 152064, 0x66fd8c6f ++0, 270000, 152064, 0x51225fd0 ++0, 273600, 152064, 0x58b9be96 ++0, 277200, 152064, 0xa5abcdb7 ++0, 280800, 152064, 0xb18ba61b ++0, 284400, 152064, 0xc7d20190 ++0, 288000, 152064, 0xb6da14aa ++0, 291600, 152064, 0x3004f5a1 ++0, 295200, 152064, 0x129354e2 ++0, 298800, 152064, 0xffa148d5 ++0, 302400, 152064, 0xbe9d3f5b ++0, 306000, 152064, 0x1c7f8976 ++0, 309600, 152064, 0xa107a54d ++0, 313200, 152064, 0x5e319459 +make: *** [fate-h264-conformance-camanl2_toshiba_b] Error 1 +TEST h264-conformance-camanl3_sand_e +TEST h264-conformance-camasl3_sony_b +TEST h264-conformance-camp_mot_mbaff_l30 +TEST h264-conformance-camp_mot_mbaff_l31 +TEST h264-conformance-canl1_sony_e +TEST h264-conformance-canl1_sva_b +TEST h264-conformance-canl1_toshiba_g +TEST h264-conformance-canl2_sony_e +TEST h264-conformance-canl2_sva_b +TEST h264-conformance-canl3_sony_c +TEST h264-conformance-canl3_sva_b +TEST h264-conformance-canl4_sva_b +TEST h264-conformance-canlma2_sony_c +TEST h264-conformance-canlma3_sony_c +TEST h264-conformance-capa1_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-capa1_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-capa1_toshiba_b 2011-01-17 13:57:16.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0x4040d2fc +-0, 3600, 152064, 0x0d8f9897 +-0, 7200, 152064, 0xc23321cd +-0, 10800, 152064, 0x3c9225eb +-0, 14400, 152064, 0x8927006f +-0, 18000, 152064, 0xf706a302 +-0, 21600, 152064, 0x8219c106 +-0, 25200, 152064, 0x06c990ea +-0, 28800, 152064, 0x3a0f1135 +-0, 32400, 152064, 0x4cff21d3 +-0, 36000, 152064, 0x6be0e050 +-0, 39600, 152064, 0x718b6c7b +-0, 43200, 152064, 0x24b38713 +-0, 46800, 152064, 0x500553fb +-0, 50400, 152064, 0x531ae610 +-0, 54000, 152064, 0x46f4ff1b +-0, 57600, 152064, 0xe5abe5ff +-0, 61200, 152064, 0x97daa351 +-0, 64800, 152064, 0xfbef0a8f +-0, 68400, 152064, 0xbe76134f +-0, 72000, 152064, 0xa4bf10ea +-0, 75600, 152064, 0xb2fb32af +-0, 79200, 152064, 0xd33027a5 +-0, 82800, 152064, 0x78e20c2b +-0, 86400, 152064, 0xefda2d6f +-0, 90000, 152064, 0xb99126f0 +-0, 93600, 152064, 0x89d7e465 +-0, 97200, 152064, 0x6150ff97 +-0, 100800, 152064, 0xde03d937 +-0, 104400, 152064, 0xd90ca874 +-0, 108000, 152064, 0xb120b294 +-0, 111600, 152064, 0x644eade4 +-0, 115200, 152064, 0xd1bb004f +-0, 118800, 152064, 0x99806a8b +-0, 122400, 152064, 0x8c6b635f +-0, 126000, 152064, 0xa269fa8b +-0, 129600, 152064, 0xc11c0e64 +-0, 133200, 152064, 0xac13f5eb +-0, 136800, 152064, 0x895799cf +-0, 140400, 152064, 0x95a9bea1 +-0, 144000, 152064, 0xe998dfba +-0, 147600, 152064, 0xc72d8460 +-0, 151200, 152064, 0xd1cb9b9a +-0, 154800, 152064, 0xb49aadd3 +-0, 158400, 152064, 0x8bc38547 +-0, 162000, 152064, 0x3485984b +-0, 165600, 152064, 0xdf305c0a +-0, 169200, 152064, 0x6a1ec990 +-0, 172800, 152064, 0x595e0de4 +-0, 176400, 152064, 0xe1baf7c4 +-0, 180000, 152064, 0xf08b9b47 +-0, 183600, 152064, 0x6532ba6f +-0, 187200, 152064, 0x3de67da6 +-0, 190800, 152064, 0x439ffd04 +-0, 194400, 152064, 0x6e6c1e97 +-0, 198000, 152064, 0x8e5aee7a +-0, 201600, 152064, 0xd634999a +-0, 205200, 152064, 0xadfa9e8b +-0, 208800, 152064, 0x1b9090f5 +-0, 212400, 152064, 0x29094dfc +-0, 216000, 152064, 0x56748851 +-0, 219600, 152064, 0x2316719d +-0, 223200, 152064, 0x2ee0060b +-0, 226800, 152064, 0x3edb36d4 +-0, 230400, 152064, 0x9ef437a3 +-0, 234000, 152064, 0x8d9af72e +-0, 237600, 152064, 0xab86389c +-0, 241200, 152064, 0xd3b34576 +-0, 244800, 152064, 0x9e5b04f4 +-0, 248400, 152064, 0x6a164c17 +-0, 252000, 152064, 0xcecf20ab +-0, 255600, 152064, 0x07c8e273 +-0, 259200, 152064, 0x9b46fe6a +-0, 262800, 152064, 0xc1e8002b +-0, 266400, 152064, 0xdebdbe53 +-0, 270000, 152064, 0x0d2dfd99 +-0, 273600, 152064, 0xe8ae925f +-0, 277200, 152064, 0xe1fe6272 +-0, 280800, 152064, 0xbb74d5e6 +-0, 284400, 152064, 0xc7b5d949 +-0, 288000, 152064, 0x9b15b020 +-0, 291600, 152064, 0xc8201f44 +-0, 295200, 152064, 0x30d03303 +-0, 298800, 152064, 0x9f66fbc2 +-0, 302400, 152064, 0x482b71ec +-0, 306000, 152064, 0x1c9e50bf +-0, 309600, 152064, 0x89f247e4 +-0, 313200, 152064, 0xaa5f9141 +-0, 316800, 152064, 0xb816aa8c +-0, 320400, 152064, 0x3112a619 ++0, 0, 152064, 0xc23321cd ++0, 3600, 152064, 0x3c9225eb ++0, 7200, 152064, 0x8927006f ++0, 10800, 152064, 0xf706a302 ++0, 14400, 152064, 0x8219c106 ++0, 18000, 152064, 0x06c990ea ++0, 21600, 152064, 0x3a0f1135 ++0, 25200, 152064, 0x4cff21d3 ++0, 28800, 152064, 0x6be0e050 ++0, 32400, 152064, 0x718b6c7b ++0, 36000, 152064, 0x24b38713 ++0, 39600, 152064, 0x500553fb ++0, 43200, 152064, 0x531ae610 ++0, 46800, 152064, 0x46f4ff1b ++0, 50400, 152064, 0xe5abe5ff ++0, 54000, 152064, 0x97daa351 ++0, 57600, 152064, 0xfbef0a8f ++0, 61200, 152064, 0xbe76134f ++0, 64800, 152064, 0xa4bf10ea ++0, 68400, 152064, 0xb2fb32af ++0, 72000, 152064, 0xd33027a5 ++0, 75600, 152064, 0x78e20c2b ++0, 79200, 152064, 0xefda2d6f ++0, 82800, 152064, 0xb99126f0 ++0, 86400, 152064, 0x89d7e465 ++0, 90000, 152064, 0x6150ff97 ++0, 93600, 152064, 0xde03d937 ++0, 97200, 152064, 0xd90ca874 ++0, 100800, 152064, 0xb120b294 ++0, 104400, 152064, 0x644eade4 ++0, 108000, 152064, 0xd1bb004f ++0, 111600, 152064, 0x99806a8b ++0, 115200, 152064, 0x8c6b635f ++0, 118800, 152064, 0xa269fa8b ++0, 122400, 152064, 0xc11c0e64 ++0, 126000, 152064, 0xac13f5eb ++0, 129600, 152064, 0x895799cf ++0, 133200, 152064, 0x95a9bea1 ++0, 136800, 152064, 0xe998dfba ++0, 140400, 152064, 0xc72d8460 ++0, 144000, 152064, 0xd1cb9b9a ++0, 147600, 152064, 0xb49aadd3 ++0, 151200, 152064, 0x8bc38547 ++0, 154800, 152064, 0x3485984b ++0, 158400, 152064, 0xdf305c0a ++0, 162000, 152064, 0x6a1ec990 ++0, 165600, 152064, 0x595e0de4 ++0, 169200, 152064, 0xe1baf7c4 ++0, 172800, 152064, 0xf08b9b47 ++0, 176400, 152064, 0x6532ba6f ++0, 180000, 152064, 0x3de67da6 ++0, 183600, 152064, 0x439ffd04 ++0, 187200, 152064, 0x6e6c1e97 ++0, 190800, 152064, 0x8e5aee7a ++0, 194400, 152064, 0xd634999a ++0, 198000, 152064, 0xadfa9e8b ++0, 201600, 152064, 0x1b9090f5 ++0, 205200, 152064, 0x29094dfc ++0, 208800, 152064, 0x56748851 ++0, 212400, 152064, 0x2316719d ++0, 216000, 152064, 0x2ee0060b ++0, 219600, 152064, 0x3edb36d4 ++0, 223200, 152064, 0x9ef437a3 ++0, 226800, 152064, 0x8d9af72e ++0, 230400, 152064, 0xab86389c ++0, 234000, 152064, 0xd3b34576 ++0, 237600, 152064, 0x9e5b04f4 ++0, 241200, 152064, 0x6a164c17 ++0, 244800, 152064, 0xcecf20ab ++0, 248400, 152064, 0x07c8e273 ++0, 252000, 152064, 0x9b46fe6a ++0, 255600, 152064, 0xc1e8002b ++0, 259200, 152064, 0xdebdbe53 ++0, 262800, 152064, 0x0d2dfd99 ++0, 266400, 152064, 0xe8ae925f ++0, 270000, 152064, 0xe1fe6272 ++0, 273600, 152064, 0xbb74d5e6 ++0, 277200, 152064, 0xc7b5d949 ++0, 280800, 152064, 0x9b15b020 ++0, 284400, 152064, 0xc8201f44 ++0, 288000, 152064, 0x30d03303 ++0, 291600, 152064, 0x9f66fbc2 ++0, 295200, 152064, 0x482b71ec ++0, 298800, 152064, 0x1c9e50bf ++0, 302400, 152064, 0x89f247e4 ++0, 306000, 152064, 0xaa5f9141 ++0, 309600, 152064, 0xb816aa8c ++0, 313200, 152064, 0x3112a619 +make: *** [fate-h264-conformance-capa1_toshiba_b] Error 1 +TEST h264-conformance-capama3_sand_f +TEST h264-conformance-capcm1_sand_e +TEST h264-conformance-capcmnl1_sand_e +TEST h264-conformance-capm3_sony_d +TEST h264-conformance-caqp1_sony_b +TEST h264-conformance-cavlc_mot_fld0_full_b +TEST h264-conformance-cavlc_mot_frm0_full_b +TEST h264-conformance-cavlc_mot_mbaff0_full_b +TEST h264-conformance-cavlc_mot_picaff0_full_b +TEST h264-conformance-cawp1_toshiba_e +TEST h264-conformance-cawp5_toshiba_e +TEST h264-conformance-ci1_ft_b +TEST h264-conformance-ci_mw_d +TEST h264-conformance-cvbs3_sony_c +TEST h264-conformance-cvcanlma2_sony_c +TEST h264-conformance-cvfi1_sony_d +TEST h264-conformance-cvfi1_sva_c +TEST h264-conformance-cvfi2_sony_h +TEST h264-conformance-cvfi2_sva_c +TEST h264-conformance-cvma1_sony_d +TEST h264-conformance-cvma1_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cvma1_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cvma1_toshiba_b 2011-01-17 13:57:20.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0x9a9ce366 +-0, 3600, 152064, 0xf4639828 +-0, 7200, 152064, 0x625024a3 +-0, 10800, 152064, 0x80dc2f9d +-0, 14400, 152064, 0xb2c4feea +-0, 18000, 152064, 0x4ec6ad64 +-0, 21600, 152064, 0x1957bec3 +-0, 25200, 152064, 0xb682799d +-0, 28800, 152064, 0x34cd2053 +-0, 32400, 152064, 0x81490b4c +-0, 36000, 152064, 0x242dc943 +-0, 39600, 152064, 0x3e126734 +-0, 43200, 152064, 0x8e474ff8 +-0, 46800, 152064, 0x239d2fbd +-0, 50400, 152064, 0x0ca3e16f +-0, 54000, 152064, 0x6161d7c2 +-0, 57600, 152064, 0xca7ad1af +-0, 61200, 152064, 0xf8ef9026 +-0, 64800, 152064, 0x01f2f4c1 +-0, 68400, 152064, 0x510b19ec +-0, 72000, 152064, 0xe489028b +-0, 75600, 152064, 0x7a693c1e +-0, 79200, 152064, 0x276b23fe +-0, 82800, 152064, 0x0e9ced3a +-0, 86400, 152064, 0x658228f7 +-0, 90000, 152064, 0x6a271bc3 +-0, 93600, 152064, 0x431ecd8b +-0, 97200, 152064, 0x23a5ed14 +-0, 100800, 152064, 0x76fbe121 +-0, 104400, 152064, 0x471f919d +-0, 108000, 152064, 0x16bfabbc +-0, 111600, 152064, 0x0762993f +-0, 115200, 152064, 0x5a2b0b0e +-0, 118800, 152064, 0x81415ef7 +-0, 122400, 152064, 0xb96e4164 +-0, 126000, 152064, 0xf77aee83 +-0, 129600, 152064, 0x6af81633 +-0, 133200, 152064, 0xed78e5b5 +-0, 136800, 152064, 0x67e38e2c +-0, 140400, 152064, 0x0417ae01 +-0, 144000, 152064, 0x3887b312 +-0, 147600, 152064, 0x3a4b70fb +-0, 151200, 152064, 0xcaae9e7f +-0, 154800, 152064, 0xaf9597be +-0, 158400, 152064, 0x9bae63d3 +-0, 162000, 152064, 0x0e80825f +-0, 165600, 152064, 0x915661fd +-0, 169200, 152064, 0x67d3dc94 +-0, 172800, 152064, 0x3dcf240c +-0, 176400, 152064, 0x127ff832 +-0, 180000, 152064, 0xc8969981 +-0, 183600, 152064, 0x57179c77 +-0, 187200, 152064, 0x9f88656c +-0, 190800, 152064, 0xc28ff5d3 +-0, 194400, 152064, 0xf100fad9 +-0, 198000, 152064, 0xb570ce12 +-0, 201600, 152064, 0xe8f28955 +-0, 205200, 152064, 0x1f0a9549 +-0, 208800, 152064, 0x22b17e9b +-0, 212400, 152064, 0x7cf1400e +-0, 216000, 152064, 0xafd273b7 +-0, 219600, 152064, 0xeb9b712e +-0, 223200, 152064, 0x0f81de24 +-0, 226800, 152064, 0x8f4e1953 +-0, 230400, 152064, 0x682e2170 +-0, 234000, 152064, 0xc32ad1b2 +-0, 237600, 152064, 0x53a81d79 +-0, 241200, 152064, 0x54002596 +-0, 244800, 152064, 0x4b5fdbd9 +-0, 248400, 152064, 0x96613368 +-0, 252000, 152064, 0xd6ac0171 +-0, 255600, 152064, 0xf1c1b7b7 +-0, 259200, 152064, 0xc730d82f +-0, 262800, 152064, 0x0415d934 +-0, 266400, 152064, 0x5338915e +-0, 270000, 152064, 0x8e9dda6d +-0, 273600, 152064, 0xe3a8b0a0 +-0, 277200, 152064, 0x5fa36e44 +-0, 280800, 152064, 0x0e63dc72 +-0, 284400, 152064, 0xd0dad71f +-0, 288000, 152064, 0x0c4aac94 +-0, 291600, 152064, 0x60d50e8d +-0, 295200, 152064, 0x96872d7c +-0, 298800, 152064, 0x4fcefc33 +-0, 302400, 152064, 0x6b8157c9 +-0, 306000, 152064, 0xa40d527d +-0, 309600, 152064, 0x9884480a +-0, 313200, 152064, 0xff5d9754 +-0, 316800, 152064, 0x4a26a74d +-0, 320400, 152064, 0x81059e82 ++0, 0, 152064, 0x625024a3 ++0, 3600, 152064, 0x80dc2f9d ++0, 7200, 152064, 0xb2c4feea ++0, 10800, 152064, 0x4ec6ad64 ++0, 14400, 152064, 0x1957bec3 ++0, 18000, 152064, 0xb682799d ++0, 21600, 152064, 0x34cd2053 ++0, 25200, 152064, 0x81490b4c ++0, 28800, 152064, 0x242dc943 ++0, 32400, 152064, 0x3e126734 ++0, 36000, 152064, 0x8e474ff8 ++0, 39600, 152064, 0x239d2fbd ++0, 43200, 152064, 0x0ca3e16f ++0, 46800, 152064, 0x6161d7c2 ++0, 50400, 152064, 0xca7ad1af ++0, 54000, 152064, 0xf8ef9026 ++0, 57600, 152064, 0x01f2f4c1 ++0, 61200, 152064, 0x510b19ec ++0, 64800, 152064, 0xe489028b ++0, 68400, 152064, 0x7a693c1e ++0, 72000, 152064, 0x276b23fe ++0, 75600, 152064, 0x0e9ced3a ++0, 79200, 152064, 0x658228f7 ++0, 82800, 152064, 0x6a271bc3 ++0, 86400, 152064, 0x431ecd8b ++0, 90000, 152064, 0x23a5ed14 ++0, 93600, 152064, 0x76fbe121 ++0, 97200, 152064, 0x471f919d ++0, 100800, 152064, 0x16bfabbc ++0, 104400, 152064, 0x0762993f ++0, 108000, 152064, 0x5a2b0b0e ++0, 111600, 152064, 0x81415ef7 ++0, 115200, 152064, 0xb96e4164 ++0, 118800, 152064, 0xf77aee83 ++0, 122400, 152064, 0x6af81633 ++0, 126000, 152064, 0xed78e5b5 ++0, 129600, 152064, 0x67e38e2c ++0, 133200, 152064, 0x0417ae01 ++0, 136800, 152064, 0x3887b312 ++0, 140400, 152064, 0x3a4b70fb ++0, 144000, 152064, 0xcaae9e7f ++0, 147600, 152064, 0xaf9597be ++0, 151200, 152064, 0x9bae63d3 ++0, 154800, 152064, 0x0e80825f ++0, 158400, 152064, 0x915661fd ++0, 162000, 152064, 0x67d3dc94 ++0, 165600, 152064, 0x3dcf240c ++0, 169200, 152064, 0x127ff832 ++0, 172800, 152064, 0xc8969981 ++0, 176400, 152064, 0x57179c77 ++0, 180000, 152064, 0x9f88656c ++0, 183600, 152064, 0xc28ff5d3 ++0, 187200, 152064, 0xf100fad9 ++0, 190800, 152064, 0xb570ce12 ++0, 194400, 152064, 0xe8f28955 ++0, 198000, 152064, 0x1f0a9549 ++0, 201600, 152064, 0x22b17e9b ++0, 205200, 152064, 0x7cf1400e ++0, 208800, 152064, 0xafd273b7 ++0, 212400, 152064, 0xeb9b712e ++0, 216000, 152064, 0x0f81de24 ++0, 219600, 152064, 0x8f4e1953 ++0, 223200, 152064, 0x682e2170 ++0, 226800, 152064, 0xc32ad1b2 ++0, 230400, 152064, 0x53a81d79 ++0, 234000, 152064, 0x54002596 ++0, 237600, 152064, 0x4b5fdbd9 ++0, 241200, 152064, 0x96613368 ++0, 244800, 152064, 0xd6ac0171 ++0, 248400, 152064, 0xf1c1b7b7 ++0, 252000, 152064, 0xc730d82f ++0, 255600, 152064, 0x0415d934 ++0, 259200, 152064, 0x5338915e ++0, 262800, 152064, 0x8e9dda6d ++0, 266400, 152064, 0xe3a8b0a0 ++0, 270000, 152064, 0x5fa36e44 ++0, 273600, 152064, 0x0e63dc72 ++0, 277200, 152064, 0xd0dad71f ++0, 280800, 152064, 0x0c4aac94 ++0, 284400, 152064, 0x60d50e8d ++0, 288000, 152064, 0x96872d7c ++0, 291600, 152064, 0x4fcefc33 ++0, 295200, 152064, 0x6b8157c9 ++0, 298800, 152064, 0xa40d527d ++0, 302400, 152064, 0x9884480a ++0, 306000, 152064, 0xff5d9754 ++0, 309600, 152064, 0x4a26a74d ++0, 313200, 152064, 0x81059e82 +make: *** [fate-h264-conformance-cvma1_toshiba_b] Error 1 +TEST h264-conformance-cvmanl1_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cvmanl1_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cvmanl1_toshiba_b 2011-01-17 13:57:20.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0xb1edd842 +-0, 3600, 152064, 0x551f8f45 +-0, 7200, 152064, 0xb4931cb2 +-0, 10800, 152064, 0x78882b27 +-0, 14400, 152064, 0x3afef36d +-0, 18000, 152064, 0x85afad0a +-0, 21600, 152064, 0x3a8bab81 +-0, 25200, 152064, 0x2a437174 +-0, 28800, 152064, 0x22421437 +-0, 32400, 152064, 0x39c5f125 +-0, 36000, 152064, 0x256eaad2 +-0, 39600, 152064, 0x668a5d31 +-0, 43200, 152064, 0x412a4aa7 +-0, 46800, 152064, 0x3f091baf +-0, 50400, 152064, 0xbf16d262 +-0, 54000, 152064, 0x2fc4ce67 +-0, 57600, 152064, 0x119cde3e +-0, 61200, 152064, 0xb40b8632 +-0, 64800, 152064, 0x4be4f192 +-0, 68400, 152064, 0x906c1237 +-0, 72000, 152064, 0x95380024 +-0, 75600, 152064, 0x6a833025 +-0, 79200, 152064, 0x681d1c4f +-0, 82800, 152064, 0x08c8dea4 +-0, 86400, 152064, 0xc69226f0 +-0, 90000, 152064, 0x86631102 +-0, 93600, 152064, 0x7f40c77a +-0, 97200, 152064, 0xc746ddd4 +-0, 100800, 152064, 0x5f2bd3cb +-0, 104400, 152064, 0x643c8316 +-0, 108000, 152064, 0x5b7fa380 +-0, 111600, 152064, 0x82438cf7 +-0, 115200, 152064, 0xdee0f7e7 +-0, 118800, 152064, 0xc50d41f1 +-0, 122400, 152064, 0xf3453631 +-0, 126000, 152064, 0x90bce66b +-0, 129600, 152064, 0x045b03f7 +-0, 133200, 152064, 0xf64bd756 +-0, 136800, 152064, 0xff997ef2 +-0, 140400, 152064, 0x3613a0a5 +-0, 144000, 152064, 0xe6a7a8d6 +-0, 147600, 152064, 0xb0906c42 +-0, 151200, 152064, 0x4dfc912b +-0, 154800, 152064, 0x81e3991c +-0, 158400, 152064, 0x4efc61fb +-0, 162000, 152064, 0xed478395 +-0, 165600, 152064, 0x4cb25ab6 +-0, 169200, 152064, 0x28e7d51f +-0, 172800, 152064, 0x8bcc1a8d +-0, 176400, 152064, 0x2fe1f240 +-0, 180000, 152064, 0xb4978ef8 +-0, 183600, 152064, 0xe3929556 +-0, 187200, 152064, 0xd370632a +-0, 190800, 152064, 0xba86ffb2 +-0, 194400, 152064, 0x444bf18c +-0, 198000, 152064, 0xab40bd14 +-0, 201600, 152064, 0xfd488a5d +-0, 205200, 152064, 0xe1f09568 +-0, 208800, 152064, 0x09ee7a7e +-0, 212400, 152064, 0x9360397c +-0, 216000, 152064, 0xdbd467e9 +-0, 219600, 152064, 0x99726777 +-0, 223200, 152064, 0x009fd46c +-0, 226800, 152064, 0xcf770fdb +-0, 230400, 152064, 0x2a890fd9 +-0, 234000, 152064, 0x7f40de4b +-0, 237600, 152064, 0x04191304 +-0, 241200, 152064, 0x15722022 +-0, 244800, 152064, 0x59f4ea93 +-0, 248400, 152064, 0x28ba373f +-0, 252000, 152064, 0xf9e400b8 +-0, 255600, 152064, 0x85c4bd98 +-0, 259200, 152064, 0x6917d2a5 +-0, 262800, 152064, 0x61cae234 +-0, 266400, 152064, 0x752a9a2d +-0, 270000, 152064, 0x1ee2d9bd +-0, 273600, 152064, 0xdce9ab8e +-0, 277200, 152064, 0x51225fd0 +-0, 280800, 152064, 0x10e8cb60 +-0, 284400, 152064, 0x8d07cd25 +-0, 288000, 152064, 0xb18ba61b +-0, 291600, 152064, 0xb0f10280 +-0, 295200, 152064, 0x76a71f13 +-0, 298800, 152064, 0x3004f5a1 +-0, 302400, 152064, 0x9aba5724 +-0, 306000, 152064, 0x5db85385 +-0, 309600, 152064, 0xbe9d3f5b +-0, 313200, 152064, 0xa71e85bb +-0, 316800, 152064, 0xdcf59cd7 +-0, 320400, 152064, 0x5e319459 ++0, 0, 152064, 0xb4931cb2 ++0, 3600, 152064, 0x78882b27 ++0, 7200, 152064, 0x3afef36d ++0, 10800, 152064, 0x85afad0a ++0, 14400, 152064, 0x3a8bab81 ++0, 18000, 152064, 0x2a437174 ++0, 21600, 152064, 0x22421437 ++0, 25200, 152064, 0x39c5f125 ++0, 28800, 152064, 0x256eaad2 ++0, 32400, 152064, 0x668a5d31 ++0, 36000, 152064, 0x412a4aa7 ++0, 39600, 152064, 0x3f091baf ++0, 43200, 152064, 0xbf16d262 ++0, 46800, 152064, 0x2fc4ce67 ++0, 50400, 152064, 0x119cde3e ++0, 54000, 152064, 0xb40b8632 ++0, 57600, 152064, 0x4be4f192 ++0, 61200, 152064, 0x906c1237 ++0, 64800, 152064, 0x95380024 ++0, 68400, 152064, 0x6a833025 ++0, 72000, 152064, 0x681d1c4f ++0, 75600, 152064, 0x08c8dea4 ++0, 79200, 152064, 0xc69226f0 ++0, 82800, 152064, 0x86631102 ++0, 86400, 152064, 0x7f40c77a ++0, 90000, 152064, 0xc746ddd4 ++0, 93600, 152064, 0x5f2bd3cb ++0, 97200, 152064, 0x643c8316 ++0, 100800, 152064, 0x5b7fa380 ++0, 104400, 152064, 0x82438cf7 ++0, 108000, 152064, 0xdee0f7e7 ++0, 111600, 152064, 0xc50d41f1 ++0, 115200, 152064, 0xf3453631 ++0, 118800, 152064, 0x90bce66b ++0, 122400, 152064, 0x045b03f7 ++0, 126000, 152064, 0xf64bd756 ++0, 129600, 152064, 0xff997ef2 ++0, 133200, 152064, 0x3613a0a5 ++0, 136800, 152064, 0xe6a7a8d6 ++0, 140400, 152064, 0xb0906c42 ++0, 144000, 152064, 0x4dfc912b ++0, 147600, 152064, 0x81e3991c ++0, 151200, 152064, 0x4efc61fb ++0, 154800, 152064, 0xed478395 ++0, 158400, 152064, 0x4cb25ab6 ++0, 162000, 152064, 0x28e7d51f ++0, 165600, 152064, 0x8bcc1a8d ++0, 169200, 152064, 0x2fe1f240 ++0, 172800, 152064, 0xb4978ef8 ++0, 176400, 152064, 0xe3929556 ++0, 180000, 152064, 0xd370632a ++0, 183600, 152064, 0xba86ffb2 ++0, 187200, 152064, 0x444bf18c ++0, 190800, 152064, 0xab40bd14 ++0, 194400, 152064, 0xfd488a5d ++0, 198000, 152064, 0xe1f09568 ++0, 201600, 152064, 0x09ee7a7e ++0, 205200, 152064, 0x9360397c ++0, 208800, 152064, 0xdbd467e9 ++0, 212400, 152064, 0x99726777 ++0, 216000, 152064, 0x009fd46c ++0, 219600, 152064, 0xcf770fdb ++0, 223200, 152064, 0x2a890fd9 ++0, 226800, 152064, 0x7f40de4b ++0, 230400, 152064, 0x04191304 ++0, 234000, 152064, 0x15722022 ++0, 237600, 152064, 0x59f4ea93 ++0, 241200, 152064, 0x28ba373f ++0, 244800, 152064, 0xf9e400b8 ++0, 248400, 152064, 0x85c4bd98 ++0, 252000, 152064, 0x6917d2a5 ++0, 255600, 152064, 0x61cae234 ++0, 259200, 152064, 0x752a9a2d ++0, 262800, 152064, 0x1ee2d9bd ++0, 266400, 152064, 0xdce9ab8e ++0, 270000, 152064, 0x51225fd0 ++0, 273600, 152064, 0x10e8cb60 ++0, 277200, 152064, 0x8d07cd25 ++0, 280800, 152064, 0xb18ba61b ++0, 284400, 152064, 0xb0f10280 ++0, 288000, 152064, 0x76a71f13 ++0, 291600, 152064, 0x3004f5a1 ++0, 295200, 152064, 0x9aba5724 ++0, 298800, 152064, 0x5db85385 ++0, 302400, 152064, 0xbe9d3f5b ++0, 306000, 152064, 0xa71e85bb ++0, 309600, 152064, 0xdcf59cd7 ++0, 313200, 152064, 0x5e319459 +make: *** [fate-h264-conformance-cvmanl1_toshiba_b] Error 1 +TEST h264-conformance-cvmanl2_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cvmanl2_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cvmanl2_toshiba_b 2011-01-17 13:57:20.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0xb1edd842 +-0, 3600, 152064, 0x551f8f45 +-0, 7200, 152064, 0xb4931cb2 +-0, 10800, 152064, 0x5f352e98 +-0, 14400, 152064, 0xeba5fe28 +-0, 18000, 152064, 0x85afad0a +-0, 21600, 152064, 0x1120b6a4 +-0, 25200, 152064, 0x67506e16 +-0, 28800, 152064, 0x22421437 +-0, 32400, 152064, 0x929becd6 +-0, 36000, 152064, 0x6ffcb4b0 +-0, 39600, 152064, 0x668a5d31 +-0, 43200, 152064, 0x1b034ebb +-0, 46800, 152064, 0x7e2d213c +-0, 50400, 152064, 0xbf16d262 +-0, 54000, 152064, 0xdeaecab3 +-0, 57600, 152064, 0xd220d704 +-0, 61200, 152064, 0xb40b8632 +-0, 64800, 152064, 0xbdf0ef57 +-0, 68400, 152064, 0x7e2e10df +-0, 72000, 152064, 0x95380024 +-0, 75600, 152064, 0xdb80256d +-0, 79200, 152064, 0xa4561c61 +-0, 82800, 152064, 0x08c8dea4 +-0, 86400, 152064, 0x7bb917d6 +-0, 90000, 152064, 0x796f0e2b +-0, 93600, 152064, 0x7f40c77a +-0, 97200, 152064, 0xda32de2e +-0, 100800, 152064, 0x00ffc15a +-0, 104400, 152064, 0x643c8316 +-0, 108000, 152064, 0xb7588f7f +-0, 111600, 152064, 0xa4e07c02 +-0, 115200, 152064, 0xdee0f7e7 +-0, 118800, 152064, 0x2c3245ee +-0, 122400, 152064, 0x6565355b +-0, 126000, 152064, 0x90bce66b +-0, 129600, 152064, 0x0abffe08 +-0, 133200, 152064, 0x119ccc3e +-0, 136800, 152064, 0xff997ef2 +-0, 140400, 152064, 0xba4b9820 +-0, 144000, 152064, 0xb6dfa596 +-0, 147600, 152064, 0xb0906c42 +-0, 151200, 152064, 0xf3c29133 +-0, 154800, 152064, 0x08cd8e2b +-0, 158400, 152064, 0x4efc61fb +-0, 162000, 152064, 0x5b7c6e48 +-0, 165600, 152064, 0xd28a47c2 +-0, 169200, 152064, 0x28e7d51f +-0, 172800, 152064, 0x3a5619b1 +-0, 176400, 152064, 0xa517e7f2 +-0, 180000, 152064, 0xb4978ef8 +-0, 183600, 152064, 0x25929175 +-0, 187200, 152064, 0x20f05834 +-0, 190800, 152064, 0xba86ffb2 +-0, 194400, 152064, 0xa265f06f +-0, 198000, 152064, 0x97bbbfb7 +-0, 201600, 152064, 0xfd488a5d +-0, 205200, 152064, 0x1b0989da +-0, 208800, 152064, 0xfd1878ce +-0, 212400, 152064, 0x9360397c +-0, 216000, 152064, 0x0d8151a7 +-0, 219600, 152064, 0xe7a05bb8 +-0, 223200, 152064, 0x009fd46c +-0, 226800, 152064, 0x8751123f +-0, 230400, 152064, 0x8252101a +-0, 234000, 152064, 0x7f40de4b +-0, 237600, 152064, 0x4ea317fe +-0, 241200, 152064, 0x519224d9 +-0, 244800, 152064, 0x59f4ea93 +-0, 248400, 152064, 0xc93c1dba +-0, 252000, 152064, 0xe3c9fb61 +-0, 255600, 152064, 0x85c4bd98 +-0, 259200, 152064, 0xcebacfd3 +-0, 262800, 152064, 0x7327da99 +-0, 266400, 152064, 0x752a9a2d +-0, 270000, 152064, 0x5ea6c8d2 +-0, 273600, 152064, 0x66fd8c6f +-0, 277200, 152064, 0x51225fd0 +-0, 280800, 152064, 0x58b9be96 +-0, 284400, 152064, 0xa5abcdb7 +-0, 288000, 152064, 0xb18ba61b +-0, 291600, 152064, 0xc7d20190 +-0, 295200, 152064, 0xb6da14aa +-0, 298800, 152064, 0x3004f5a1 +-0, 302400, 152064, 0x129354e2 +-0, 306000, 152064, 0xffa148d5 +-0, 309600, 152064, 0xbe9d3f5b +-0, 313200, 152064, 0x1c7f8976 +-0, 316800, 152064, 0xa107a54d +-0, 320400, 152064, 0x5e319459 ++0, 0, 152064, 0xb4931cb2 ++0, 3600, 152064, 0x5f352e98 ++0, 7200, 152064, 0xeba5fe28 ++0, 10800, 152064, 0x85afad0a ++0, 14400, 152064, 0x1120b6a4 ++0, 18000, 152064, 0x67506e16 ++0, 21600, 152064, 0x22421437 ++0, 25200, 152064, 0x929becd6 ++0, 28800, 152064, 0x6ffcb4b0 ++0, 32400, 152064, 0x668a5d31 ++0, 36000, 152064, 0x1b034ebb ++0, 39600, 152064, 0x7e2d213c ++0, 43200, 152064, 0xbf16d262 ++0, 46800, 152064, 0xdeaecab3 ++0, 50400, 152064, 0xd220d704 ++0, 54000, 152064, 0xb40b8632 ++0, 57600, 152064, 0xbdf0ef57 ++0, 61200, 152064, 0x7e2e10df ++0, 64800, 152064, 0x95380024 ++0, 68400, 152064, 0xdb80256d ++0, 72000, 152064, 0xa4561c61 ++0, 75600, 152064, 0x08c8dea4 ++0, 79200, 152064, 0x7bb917d6 ++0, 82800, 152064, 0x796f0e2b ++0, 86400, 152064, 0x7f40c77a ++0, 90000, 152064, 0xda32de2e ++0, 93600, 152064, 0x00ffc15a ++0, 97200, 152064, 0x643c8316 ++0, 100800, 152064, 0xb7588f7f ++0, 104400, 152064, 0xa4e07c02 ++0, 108000, 152064, 0xdee0f7e7 ++0, 111600, 152064, 0x2c3245ee ++0, 115200, 152064, 0x6565355b ++0, 118800, 152064, 0x90bce66b ++0, 122400, 152064, 0x0abffe08 ++0, 126000, 152064, 0x119ccc3e ++0, 129600, 152064, 0xff997ef2 ++0, 133200, 152064, 0xba4b9820 ++0, 136800, 152064, 0xb6dfa596 ++0, 140400, 152064, 0xb0906c42 ++0, 144000, 152064, 0xf3c29133 ++0, 147600, 152064, 0x08cd8e2b ++0, 151200, 152064, 0x4efc61fb ++0, 154800, 152064, 0x5b7c6e48 ++0, 158400, 152064, 0xd28a47c2 ++0, 162000, 152064, 0x28e7d51f ++0, 165600, 152064, 0x3a5619b1 ++0, 169200, 152064, 0xa517e7f2 ++0, 172800, 152064, 0xb4978ef8 ++0, 176400, 152064, 0x25929175 ++0, 180000, 152064, 0x20f05834 ++0, 183600, 152064, 0xba86ffb2 ++0, 187200, 152064, 0xa265f06f ++0, 190800, 152064, 0x97bbbfb7 ++0, 194400, 152064, 0xfd488a5d ++0, 198000, 152064, 0x1b0989da ++0, 201600, 152064, 0xfd1878ce ++0, 205200, 152064, 0x9360397c ++0, 208800, 152064, 0x0d8151a7 ++0, 212400, 152064, 0xe7a05bb8 ++0, 216000, 152064, 0x009fd46c ++0, 219600, 152064, 0x8751123f ++0, 223200, 152064, 0x8252101a ++0, 226800, 152064, 0x7f40de4b ++0, 230400, 152064, 0x4ea317fe ++0, 234000, 152064, 0x519224d9 ++0, 237600, 152064, 0x59f4ea93 ++0, 241200, 152064, 0xc93c1dba ++0, 244800, 152064, 0xe3c9fb61 ++0, 248400, 152064, 0x85c4bd98 ++0, 252000, 152064, 0xcebacfd3 ++0, 255600, 152064, 0x7327da99 ++0, 259200, 152064, 0x752a9a2d ++0, 262800, 152064, 0x5ea6c8d2 ++0, 266400, 152064, 0x66fd8c6f ++0, 270000, 152064, 0x51225fd0 ++0, 273600, 152064, 0x58b9be96 ++0, 277200, 152064, 0xa5abcdb7 ++0, 280800, 152064, 0xb18ba61b ++0, 284400, 152064, 0xc7d20190 ++0, 288000, 152064, 0xb6da14aa ++0, 291600, 152064, 0x3004f5a1 ++0, 295200, 152064, 0x129354e2 ++0, 298800, 152064, 0xffa148d5 ++0, 302400, 152064, 0xbe9d3f5b ++0, 306000, 152064, 0x1c7f8976 ++0, 309600, 152064, 0xa107a54d ++0, 313200, 152064, 0x5e319459 +make: *** [fate-h264-conformance-cvmanl2_toshiba_b] Error 1 +TEST h264-conformance-cvmapaqp3_sony_e +TEST h264-conformance-cvmaqp2_sony_g +TEST h264-conformance-cvmaqp3_sony_d +TEST h264-conformance-cvmp_mot_fld_l30_b +TEST h264-conformance-cvmp_mot_frm_l31_b +TEST h264-conformance-cvnlfi1_sony_c +TEST h264-conformance-cvnlfi2_sony_h +TEST h264-conformance-cvpa1_toshiba_b +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cvpa1_toshiba_b 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cvpa1_toshiba_b 2011-01-17 13:57:22.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0x128cd77a +-0, 3600, 152064, 0x565b9fc1 +-0, 7200, 152064, 0xbe322679 +-0, 10800, 152064, 0x0ea4238f +-0, 14400, 152064, 0x1e08fb3c +-0, 18000, 152064, 0x6da3a93c +-0, 21600, 152064, 0x75e5b181 +-0, 25200, 152064, 0xa0b39334 +-0, 28800, 152064, 0xa0d10d6d +-0, 32400, 152064, 0x33842bcb +-0, 36000, 152064, 0x9a74e1e4 +-0, 39600, 152064, 0xc2037244 +-0, 43200, 152064, 0x364b8ae4 +-0, 46800, 152064, 0x18c04971 +-0, 50400, 152064, 0x7234ecb5 +-0, 54000, 152064, 0x3719f8bc +-0, 57600, 152064, 0x1285ead1 +-0, 61200, 152064, 0xd3bfab18 +-0, 64800, 152064, 0x898111e2 +-0, 68400, 152064, 0x681c15fc +-0, 72000, 152064, 0x8e501572 +-0, 75600, 152064, 0xd7c838be +-0, 79200, 152064, 0xede424b2 +-0, 82800, 152064, 0xcfc20240 +-0, 86400, 152064, 0x13992e86 +-0, 90000, 152064, 0x56fb251a +-0, 93600, 152064, 0xee9be320 +-0, 97200, 152064, 0xea650153 +-0, 100800, 152064, 0x2cb6dabe +-0, 104400, 152064, 0xf44fa4b5 +-0, 108000, 152064, 0xdac2adff +-0, 111600, 152064, 0x9e15a1dc +-0, 115200, 152064, 0x28d00970 +-0, 118800, 152064, 0xe4277347 +-0, 122400, 152064, 0xebd25ad1 +-0, 126000, 152064, 0x029402da +-0, 129600, 152064, 0x1a2311ef +-0, 133200, 152064, 0xb86bf96a +-0, 136800, 152064, 0x67d7a5b0 +-0, 140400, 152064, 0x573abc2d +-0, 144000, 152064, 0xbe97dec0 +-0, 147600, 152064, 0x592b91a4 +-0, 151200, 152064, 0x9adda65e +-0, 154800, 152064, 0x0354b2cb +-0, 158400, 152064, 0x91e27ff9 +-0, 162000, 152064, 0x389f8625 +-0, 165600, 152064, 0x90175850 +-0, 169200, 152064, 0x2d36c427 +-0, 172800, 152064, 0xc0dd14ab +-0, 176400, 152064, 0xd49bf131 +-0, 180000, 152064, 0x0d4a9b92 +-0, 183600, 152064, 0xae9bb2f1 +-0, 187200, 152064, 0x36847ade +-0, 190800, 152064, 0x74810382 +-0, 194400, 152064, 0xc56d1d9f +-0, 198000, 152064, 0xcfefe3ae +-0, 201600, 152064, 0xeaa39353 +-0, 205200, 152064, 0x14289aef +-0, 208800, 152064, 0x74ba8f3b +-0, 212400, 152064, 0xdcaa518d +-0, 216000, 152064, 0x6e4881c2 +-0, 219600, 152064, 0xa4db767d +-0, 223200, 152064, 0x239b0b19 +-0, 226800, 152064, 0x5d054236 +-0, 230400, 152064, 0x6f392d7c +-0, 234000, 152064, 0x5c2af146 +-0, 237600, 152064, 0x26b439af +-0, 241200, 152064, 0xba7043ab +-0, 244800, 152064, 0x0816000c +-0, 248400, 152064, 0x3a713c05 +-0, 252000, 152064, 0xb3111f6d +-0, 255600, 152064, 0xdbf8dae2 +-0, 259200, 152064, 0x09ddf22e +-0, 262800, 152064, 0x8871fa7e +-0, 266400, 152064, 0x9f5db7a1 +-0, 270000, 152064, 0xcc38f225 +-0, 273600, 152064, 0xa1d18df9 +-0, 277200, 152064, 0x9b1c5d6a +-0, 280800, 152064, 0x9f2bc696 +-0, 284400, 152064, 0xc39bd11a +-0, 288000, 152064, 0x4ceca7d0 +-0, 291600, 152064, 0x63a60f1d +-0, 295200, 152064, 0x4cd31f28 +-0, 298800, 152064, 0x9c9af5d1 +-0, 302400, 152064, 0x6def65fc +-0, 306000, 152064, 0x1011466d +-0, 309600, 152064, 0xfeca406d +-0, 313200, 152064, 0xd1ca8a1e +-0, 316800, 152064, 0x30caa195 +-0, 320400, 152064, 0x31a09a48 ++0, 0, 152064, 0xbe322679 ++0, 3600, 152064, 0x0ea4238f ++0, 7200, 152064, 0x1e08fb3c ++0, 10800, 152064, 0x6da3a93c ++0, 14400, 152064, 0x75e5b181 ++0, 18000, 152064, 0xa0b39334 ++0, 21600, 152064, 0xa0d10d6d ++0, 25200, 152064, 0x33842bcb ++0, 28800, 152064, 0x9a74e1e4 ++0, 32400, 152064, 0xc2037244 ++0, 36000, 152064, 0x364b8ae4 ++0, 39600, 152064, 0x18c04971 ++0, 43200, 152064, 0x7234ecb5 ++0, 46800, 152064, 0x3719f8bc ++0, 50400, 152064, 0x1285ead1 ++0, 54000, 152064, 0xd3bfab18 ++0, 57600, 152064, 0x898111e2 ++0, 61200, 152064, 0x681c15fc ++0, 64800, 152064, 0x8e501572 ++0, 68400, 152064, 0xd7c838be ++0, 72000, 152064, 0xede424b2 ++0, 75600, 152064, 0xcfc20240 ++0, 79200, 152064, 0x13992e86 ++0, 82800, 152064, 0x56fb251a ++0, 86400, 152064, 0xee9be320 ++0, 90000, 152064, 0xea650153 ++0, 93600, 152064, 0x2cb6dabe ++0, 97200, 152064, 0xf44fa4b5 ++0, 100800, 152064, 0xdac2adff ++0, 104400, 152064, 0x9e15a1dc ++0, 108000, 152064, 0x28d00970 ++0, 111600, 152064, 0xe4277347 ++0, 115200, 152064, 0xebd25ad1 ++0, 118800, 152064, 0x029402da ++0, 122400, 152064, 0x1a2311ef ++0, 126000, 152064, 0xb86bf96a ++0, 129600, 152064, 0x67d7a5b0 ++0, 133200, 152064, 0x573abc2d ++0, 136800, 152064, 0xbe97dec0 ++0, 140400, 152064, 0x592b91a4 ++0, 144000, 152064, 0x9adda65e ++0, 147600, 152064, 0x0354b2cb ++0, 151200, 152064, 0x91e27ff9 ++0, 154800, 152064, 0x389f8625 ++0, 158400, 152064, 0x90175850 ++0, 162000, 152064, 0x2d36c427 ++0, 165600, 152064, 0xc0dd14ab ++0, 169200, 152064, 0xd49bf131 ++0, 172800, 152064, 0x0d4a9b92 ++0, 176400, 152064, 0xae9bb2f1 ++0, 180000, 152064, 0x36847ade ++0, 183600, 152064, 0x74810382 ++0, 187200, 152064, 0xc56d1d9f ++0, 190800, 152064, 0xcfefe3ae ++0, 194400, 152064, 0xeaa39353 ++0, 198000, 152064, 0x14289aef ++0, 201600, 152064, 0x74ba8f3b ++0, 205200, 152064, 0xdcaa518d ++0, 208800, 152064, 0x6e4881c2 ++0, 212400, 152064, 0xa4db767d ++0, 216000, 152064, 0x239b0b19 ++0, 219600, 152064, 0x5d054236 ++0, 223200, 152064, 0x6f392d7c ++0, 226800, 152064, 0x5c2af146 ++0, 230400, 152064, 0x26b439af ++0, 234000, 152064, 0xba7043ab ++0, 237600, 152064, 0x0816000c ++0, 241200, 152064, 0x3a713c05 ++0, 244800, 152064, 0xb3111f6d ++0, 248400, 152064, 0xdbf8dae2 ++0, 252000, 152064, 0x09ddf22e ++0, 255600, 152064, 0x8871fa7e ++0, 259200, 152064, 0x9f5db7a1 ++0, 262800, 152064, 0xcc38f225 ++0, 266400, 152064, 0xa1d18df9 ++0, 270000, 152064, 0x9b1c5d6a ++0, 273600, 152064, 0x9f2bc696 ++0, 277200, 152064, 0xc39bd11a ++0, 280800, 152064, 0x4ceca7d0 ++0, 284400, 152064, 0x63a60f1d ++0, 288000, 152064, 0x4cd31f28 ++0, 291600, 152064, 0x9c9af5d1 ++0, 295200, 152064, 0x6def65fc ++0, 298800, 152064, 0x1011466d ++0, 302400, 152064, 0xfeca406d ++0, 306000, 152064, 0xd1ca8a1e ++0, 309600, 152064, 0x30caa195 ++0, 313200, 152064, 0x31a09a48 +make: *** [fate-h264-conformance-cvpa1_toshiba_b] Error 1 +TEST h264-conformance-cvpcmnl1_sva_c +TEST h264-conformance-cvpcmnl2_sva_c +TEST h264-conformance-cvwp1_toshiba_e +TEST h264-conformance-cvwp2_toshiba_e +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cvwp2_toshiba_e 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cvwp2_toshiba_e 2011-01-17 13:57:22.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0xf503fb79 +-0, 3600, 152064, 0xeaa4ba5d +-0, 7200, 152064, 0x50865a33 +-0, 10800, 152064, 0x34125f86 +-0, 14400, 152064, 0xc5a8bb68 +-0, 18000, 152064, 0xe6e9b376 +-0, 21600, 152064, 0x4e41d48e +-0, 25200, 152064, 0xea73cc5d +-0, 28800, 152064, 0xc0c60ac0 +-0, 32400, 152064, 0xd7110670 +-0, 36000, 152064, 0x00465d0d +-0, 39600, 152064, 0xa37a726b +-0, 43200, 152064, 0x5dd13b2a +-0, 46800, 152064, 0x08471f31 +-0, 50400, 152064, 0x2bb2b055 +-0, 54000, 152064, 0xd06d7f1c +-0, 57600, 152064, 0x91fde84a +-0, 61200, 152064, 0xdbb52d2b +-0, 64800, 152064, 0x505c08b4 +-0, 68400, 152064, 0xd8aeef9f +-0, 72000, 152064, 0x4e3f8721 +-0, 75600, 152064, 0xce534aee +-0, 79200, 152064, 0x51f80737 +-0, 82800, 152064, 0x8fa0e443 +-0, 86400, 152064, 0xe8c9db17 +-0, 90000, 152064, 0xc84bcee6 +-0, 93600, 152064, 0xa7916158 +-0, 97200, 152064, 0x16149c36 +-0, 100800, 152064, 0xe55213fd +-0, 104400, 152064, 0xa701e59d +-0, 108000, 152064, 0xad65e200 +-0, 111600, 152064, 0x4606dc82 +-0, 115200, 152064, 0x582f9f64 +-0, 118800, 152064, 0xc630662a +-0, 122400, 152064, 0xe54bacf5 +-0, 126000, 152064, 0x230e387f +-0, 129600, 152064, 0x1a9c746c +-0, 133200, 152064, 0xfa002d7c +-0, 136800, 152064, 0xe617c4a9 +-0, 140400, 152064, 0xd3a4df19 +-0, 144000, 152064, 0x25b9ca8c +-0, 147600, 152064, 0x0c505f7c +-0, 151200, 152064, 0x43f84f88 +-0, 154800, 152064, 0x859fb3af +-0, 158400, 152064, 0x9680fc13 +-0, 162000, 152064, 0x3fe6ecb6 +-0, 165600, 152064, 0xf4c05a9c +-0, 169200, 152064, 0x16ba3b13 +-0, 172800, 152064, 0x72f33fb9 +-0, 176400, 152064, 0x3076e567 +-0, 180000, 152064, 0x4e69b604 +-0, 183600, 152064, 0x9c37a98b +-0, 187200, 152064, 0x0d5756c7 +-0, 190800, 152064, 0xa4a46a81 +-0, 194400, 152064, 0xadfc89d7 +-0, 198000, 152064, 0x35693493 +-0, 201600, 152064, 0xe3baedbf +-0, 205200, 152064, 0x78cfb405 +-0, 208800, 152064, 0xd85c7074 +-0, 212400, 152064, 0x14ab350e +-0, 216000, 152064, 0xaf55433e +-0, 219600, 152064, 0x75a8e79f +-0, 223200, 152064, 0x2fb599f6 +-0, 226800, 152064, 0xbe30bdfe +-0, 230400, 152064, 0x8b07a5ce +-0, 234000, 152064, 0x99b32730 +-0, 237600, 152064, 0x9265182d +-0, 241200, 152064, 0x91e789fd +-0, 244800, 152064, 0x1c1e6d16 +-0, 248400, 152064, 0xfa06bdaa +-0, 252000, 152064, 0x7177041f +-0, 255600, 152064, 0xd902f99d +-0, 259200, 152064, 0x29bdc134 +-0, 262800, 152064, 0xd713ab76 +-0, 266400, 152064, 0x60e4788e +-0, 270000, 152064, 0xb18c7789 +-0, 273600, 152064, 0x0b7829a5 +-0, 277200, 152064, 0xf676d780 +-0, 280800, 152064, 0xa88a3a57 +-0, 284400, 152064, 0x825cf289 +-0, 288000, 152064, 0x78928201 +-0, 291600, 152064, 0x013a589c +-0, 295200, 152064, 0x9269fa64 +-0, 298800, 152064, 0x6db5f5fa +-0, 302400, 152064, 0x49ad9d6a +-0, 306000, 152064, 0x1b7c290f +-0, 309600, 152064, 0x99716ad1 +-0, 313200, 152064, 0x371527c2 +-0, 316800, 152064, 0x9f351841 +-0, 320400, 152064, 0x884bb432 ++0, 0, 152064, 0x50865a33 ++0, 3600, 152064, 0x34125f86 ++0, 7200, 152064, 0xc5a8bb68 ++0, 10800, 152064, 0xe6e9b376 ++0, 14400, 152064, 0x4e41d48e ++0, 18000, 152064, 0xea73cc5d ++0, 21600, 152064, 0xc0c60ac0 ++0, 25200, 152064, 0xd7110670 ++0, 28800, 152064, 0x00465d0d ++0, 32400, 152064, 0xa37a726b ++0, 36000, 152064, 0x5dd13b2a ++0, 39600, 152064, 0x08471f31 ++0, 43200, 152064, 0x2bb2b055 ++0, 46800, 152064, 0xd06d7f1c ++0, 50400, 152064, 0x91fde84a ++0, 54000, 152064, 0xdbb52d2b ++0, 57600, 152064, 0x505c08b4 ++0, 61200, 152064, 0xd8aeef9f ++0, 64800, 152064, 0x4e3f8721 ++0, 68400, 152064, 0xce534aee ++0, 72000, 152064, 0x51f80737 ++0, 75600, 152064, 0x8fa0e443 ++0, 79200, 152064, 0xe8c9db17 ++0, 82800, 152064, 0xc84bcee6 ++0, 86400, 152064, 0xa7916158 ++0, 90000, 152064, 0x16149c36 ++0, 93600, 152064, 0xe55213fd ++0, 97200, 152064, 0xa701e59d ++0, 100800, 152064, 0xad65e200 ++0, 104400, 152064, 0x4606dc82 ++0, 108000, 152064, 0x582f9f64 ++0, 111600, 152064, 0xc630662a ++0, 115200, 152064, 0xe54bacf5 ++0, 118800, 152064, 0x230e387f ++0, 122400, 152064, 0x1a9c746c ++0, 126000, 152064, 0xfa002d7c ++0, 129600, 152064, 0xe617c4a9 ++0, 133200, 152064, 0xd3a4df19 ++0, 136800, 152064, 0x25b9ca8c ++0, 140400, 152064, 0x0c505f7c ++0, 144000, 152064, 0x43f84f88 ++0, 147600, 152064, 0x859fb3af ++0, 151200, 152064, 0x9680fc13 ++0, 154800, 152064, 0x3fe6ecb6 ++0, 158400, 152064, 0xf4c05a9c ++0, 162000, 152064, 0x16ba3b13 ++0, 165600, 152064, 0x72f33fb9 ++0, 169200, 152064, 0x3076e567 ++0, 172800, 152064, 0x4e69b604 ++0, 176400, 152064, 0x9c37a98b ++0, 180000, 152064, 0x0d5756c7 ++0, 183600, 152064, 0xa4a46a81 ++0, 187200, 152064, 0xadfc89d7 ++0, 190800, 152064, 0x35693493 ++0, 194400, 152064, 0xe3baedbf ++0, 198000, 152064, 0x78cfb405 ++0, 201600, 152064, 0xd85c7074 ++0, 205200, 152064, 0x14ab350e ++0, 208800, 152064, 0xaf55433e ++0, 212400, 152064, 0x75a8e79f ++0, 216000, 152064, 0x2fb599f6 ++0, 219600, 152064, 0xbe30bdfe ++0, 223200, 152064, 0x8b07a5ce ++0, 226800, 152064, 0x99b32730 ++0, 230400, 152064, 0x9265182d ++0, 234000, 152064, 0x91e789fd ++0, 237600, 152064, 0x1c1e6d16 ++0, 241200, 152064, 0xfa06bdaa ++0, 244800, 152064, 0x7177041f ++0, 248400, 152064, 0xd902f99d ++0, 252000, 152064, 0x29bdc134 ++0, 255600, 152064, 0xd713ab76 ++0, 259200, 152064, 0x60e4788e ++0, 262800, 152064, 0xb18c7789 ++0, 266400, 152064, 0x0b7829a5 ++0, 270000, 152064, 0xf676d780 ++0, 273600, 152064, 0xa88a3a57 ++0, 277200, 152064, 0x825cf289 ++0, 280800, 152064, 0x78928201 ++0, 284400, 152064, 0x013a589c ++0, 288000, 152064, 0x9269fa64 ++0, 291600, 152064, 0x6db5f5fa ++0, 295200, 152064, 0x49ad9d6a ++0, 298800, 152064, 0x1b7c290f ++0, 302400, 152064, 0x99716ad1 ++0, 306000, 152064, 0x371527c2 ++0, 309600, 152064, 0x9f351841 ++0, 313200, 152064, 0x884bb432 +make: *** [fate-h264-conformance-cvwp2_toshiba_e] Error 1 +TEST h264-conformance-cvwp3_toshiba_e +--- /Users/astrange/Projects/video/ffmpeg-soc/tests/ref/fate/h264-conformance-cvwp3_toshiba_e 2010-05-11 03:02:59.000000000 -0400 ++++ tests/data/fate/h264-conformance-cvwp3_toshiba_e 2011-01-17 13:57:23.000000000 -0500 +@@ -1,90 +1,88 @@ +-0, 0, 152064, 0x3b3ffd31 +-0, 3600, 152064, 0x14e0b899 +-0, 7200, 152064, 0x50865a33 +-0, 10800, 152064, 0x12e749e5 +-0, 14400, 152064, 0xe5921130 +-0, 18000, 152064, 0x2ca3b10d +-0, 21600, 152064, 0xa9a39f04 +-0, 25200, 152064, 0x2c78761a +-0, 28800, 152064, 0x70890ad7 +-0, 32400, 152064, 0x4fc30132 +-0, 36000, 152064, 0x10e4d2c9 +-0, 39600, 152064, 0xa3326b50 +-0, 43200, 152064, 0x8e054bf1 +-0, 46800, 152064, 0x5bd91687 +-0, 50400, 152064, 0x70bab119 +-0, 54000, 152064, 0x9a1ab472 +-0, 57600, 152064, 0x490776a0 +-0, 61200, 152064, 0xdbb52d2b +-0, 64800, 152064, 0x142714b9 +-0, 68400, 152064, 0xa051ee6f +-0, 72000, 152064, 0xafa97fdf +-0, 75600, 152064, 0x1ae67347 +-0, 79200, 152064, 0xc4f42ed6 +-0, 82800, 152064, 0x4445dc60 +-0, 86400, 152064, 0xaef4d04b +-0, 90000, 152064, 0x6a51be82 +-0, 93600, 152064, 0x48356190 +-0, 97200, 152064, 0xc09b5f5d +-0, 100800, 152064, 0x933d3379 +-0, 104400, 152064, 0xfb57e471 +-0, 108000, 152064, 0xb5b2f45c +-0, 111600, 152064, 0xce36e45e +-0, 115200, 152064, 0x582f9f64 +-0, 118800, 152064, 0x2f45b1fd +-0, 122400, 152064, 0x90708fa0 +-0, 126000, 152064, 0xee483b8f +-0, 129600, 152064, 0xd2163e6c +-0, 133200, 152064, 0x39492dfe +-0, 136800, 152064, 0xf89cc57f +-0, 140400, 152064, 0xbfc3c411 +-0, 144000, 152064, 0x919eb007 +-0, 147600, 152064, 0x2c526309 +-0, 151200, 152064, 0x39f067a2 +-0, 154800, 152064, 0xb7653abb +-0, 158400, 152064, 0xe26a035c +-0, 162000, 152064, 0xcef1eb3b +-0, 165600, 152064, 0xb8b3c55f +-0, 169200, 152064, 0x16ba3b13 +-0, 172800, 152064, 0x153a3117 +-0, 176400, 152064, 0x90a21859 +-0, 180000, 152064, 0x9231b756 +-0, 183600, 152064, 0x65fcbcb9 +-0, 187200, 152064, 0x447eaf44 +-0, 190800, 152064, 0xa26b6a8e +-0, 194400, 152064, 0x100464f8 +-0, 198000, 152064, 0x479648ec +-0, 201600, 152064, 0x6742f51f +-0, 205200, 152064, 0x14e9d906 +-0, 208800, 152064, 0xa058ab87 +-0, 212400, 152064, 0x8d093874 +-0, 216000, 152064, 0xef7f2965 +-0, 219600, 152064, 0x200d02bd +-0, 223200, 152064, 0x2fb599f6 +-0, 226800, 152064, 0xf65fb6e4 +-0, 230400, 152064, 0x489a9152 +-0, 234000, 152064, 0xbe8a2fc2 +-0, 237600, 152064, 0xea04097e +-0, 241200, 152064, 0xaf0cd627 +-0, 244800, 152064, 0xc0a26b27 +-0, 248400, 152064, 0x985f67e7 +-0, 252000, 152064, 0x7d1b4c4c +-0, 255600, 152064, 0x9908f838 +-0, 259200, 152064, 0xb8fef131 +-0, 262800, 152064, 0xb1feaf6c +-0, 266400, 152064, 0x37b16bda +-0, 270000, 152064, 0x242471aa +-0, 273600, 152064, 0xf18c3839 +-0, 277200, 152064, 0xf676d780 +-0, 280800, 152064, 0x17bd0f76 +-0, 284400, 152064, 0x3703e7a6 +-0, 288000, 152064, 0x69ba8a8a +-0, 291600, 152064, 0x205281b3 +-0, 295200, 152064, 0x54bf51e1 +-0, 298800, 152064, 0xf6daf8ed +-0, 302400, 152064, 0x8728e805 +-0, 306000, 152064, 0xe98cd2b0 +-0, 309600, 152064, 0x7ef76e26 +-0, 313200, 152064, 0x0fbf5230 +-0, 316800, 152064, 0x9e4d104b +-0, 320400, 152064, 0xd562b815 ++0, 0, 152064, 0x50865a33 ++0, 3600, 152064, 0x12e749e5 ++0, 7200, 152064, 0xe5921130 ++0, 10800, 152064, 0x2ca3b10d ++0, 14400, 152064, 0xa9a39f04 ++0, 18000, 152064, 0x2c78761a ++0, 21600, 152064, 0x70890ad7 ++0, 25200, 152064, 0x4fc30132 ++0, 28800, 152064, 0x10e4d2c9 ++0, 32400, 152064, 0xa3326b50 ++0, 36000, 152064, 0x8e054bf1 ++0, 39600, 152064, 0x5bd91687 ++0, 43200, 152064, 0x70bab119 ++0, 46800, 152064, 0x9a1ab472 ++0, 50400, 152064, 0x490776a0 ++0, 54000, 152064, 0xdbb52d2b ++0, 57600, 152064, 0x142714b9 ++0, 61200, 152064, 0xa051ee6f ++0, 64800, 152064, 0xafa97fdf ++0, 68400, 152064, 0x1ae67347 ++0, 72000, 152064, 0xc4f42ed6 ++0, 75600, 152064, 0x4445dc60 ++0, 79200, 152064, 0xaef4d04b ++0, 82800, 152064, 0x6a51be82 ++0, 86400, 152064, 0x48356190 ++0, 90000, 152064, 0xc09b5f5d ++0, 93600, 152064, 0x933d3379 ++0, 97200, 152064, 0xfb57e471 ++0, 100800, 152064, 0xb5b2f45c ++0, 104400, 152064, 0xce36e45e ++0, 108000, 152064, 0x582f9f64 ++0, 111600, 152064, 0x2f45b1fd ++0, 115200, 152064, 0x90708fa0 ++0, 118800, 152064, 0xee483b8f ++0, 122400, 152064, 0xd2163e6c ++0, 126000, 152064, 0x39492dfe ++0, 129600, 152064, 0xf89cc57f ++0, 133200, 152064, 0xbfc3c411 ++0, 136800, 152064, 0x919eb007 ++0, 140400, 152064, 0x2c526309 ++0, 144000, 152064, 0x39f067a2 ++0, 147600, 152064, 0xb7653abb ++0, 151200, 152064, 0xe26a035c ++0, 154800, 152064, 0xcef1eb3b ++0, 158400, 152064, 0xb8b3c55f ++0, 162000, 152064, 0x16ba3b13 ++0, 165600, 152064, 0x153a3117 ++0, 169200, 152064, 0x90a21859 ++0, 172800, 152064, 0x9231b756 ++0, 176400, 152064, 0x65fcbcb9 ++0, 180000, 152064, 0x447eaf44 ++0, 183600, 152064, 0xa26b6a8e ++0, 187200, 152064, 0x100464f8 ++0, 190800, 152064, 0x479648ec ++0, 194400, 152064, 0x6742f51f ++0, 198000, 152064, 0x14e9d906 ++0, 201600, 152064, 0xa058ab87 ++0, 205200, 152064, 0x8d093874 ++0, 208800, 152064, 0xef7f2965 ++0, 212400, 152064, 0x200d02bd ++0, 216000, 152064, 0x2fb599f6 ++0, 219600, 152064, 0xf65fb6e4 ++0, 223200, 152064, 0x489a9152 ++0, 226800, 152064, 0xbe8a2fc2 ++0, 230400, 152064, 0xea04097e ++0, 234000, 152064, 0xaf0cd627 ++0, 237600, 152064, 0xc0a26b27 ++0, 241200, 152064, 0x985f67e7 ++0, 244800, 152064, 0x7d1b4c4c ++0, 248400, 152064, 0x9908f838 ++0, 252000, 152064, 0xb8fef131 ++0, 255600, 152064, 0xb1feaf6c ++0, 259200, 152064, 0x37b16bda ++0, 262800, 152064, 0x242471aa ++0, 266400, 152064, 0xf18c3839 ++0, 270000, 152064, 0xf676d780 ++0, 273600, 152064, 0x17bd0f76 ++0, 277200, 152064, 0x3703e7a6 ++0, 280800, 152064, 0x69ba8a8a ++0, 284400, 152064, 0x205281b3 ++0, 288000, 152064, 0x54bf51e1 ++0, 291600, 152064, 0xf6daf8ed ++0, 295200, 152064, 0x8728e805 ++0, 298800, 152064, 0xe98cd2b0 ++0, 302400, 152064, 0x7ef76e26 ++0, 306000, 152064, 0x0fbf5230 ++0, 309600, 152064, 0x9e4d104b ++0, 313200, 152064, 0xd562b815 +make: *** [fate-h264-conformance-cvwp3_toshiba_e] Error 1 +TEST h264-conformance-cvwp5_toshiba_e +TEST h264-conformance-fi1_sony_e +TEST h264-conformance-frext-alphaconformanceg +TEST h264-conformance-frext-bcrm_freh10 +TEST h264-conformance-frext-brcm_freh11 +TEST h264-conformance-frext-brcm_freh3 +TEST h264-conformance-frext-brcm_freh4 +TEST h264-conformance-frext-brcm_freh5 +TEST h264-conformance-frext-brcm_freh8 +TEST h264-conformance-frext-brcm_freh9 +TEST h264-conformance-frext-freh12_b +TEST h264-conformance-frext-freh1_b +TEST h264-conformance-frext-freh2_b +TEST h264-conformance-frext-freh6 +TEST h264-conformance-frext-freh7_b +TEST h264-conformance-frext-frext01_jvc_d +TEST h264-conformance-frext-frext02_jvc_c +TEST h264-conformance-frext-frext1_panasonic_c +TEST h264-conformance-frext-frext2_panasonic_b +TEST h264-conformance-frext-frext3_panasonic_d +TEST h264-conformance-frext-frext4_panasonic_a +TEST h264-conformance-frext-frext_mmco4_sony_b +TEST h264-conformance-frext-hcaff1_hhi_b +TEST h264-conformance-frext-hcafr1_hhi_c +TEST h264-conformance-frext-hcafr2_hhi_a +TEST h264-conformance-frext-hcafr3_hhi_a +TEST h264-conformance-frext-hcafr4_hhi_a +TEST h264-conformance-frext-hcamff1_hhi_b +TEST h264-conformance-frext-hpca_brcm_c +TEST h264-conformance-frext-hpcadq_brcm_b +TEST h264-conformance-frext-hpcafl_bcrm_c +TEST h264-conformance-frext-hpcaflnl_bcrm_c +TEST h264-conformance-frext-hpcalq_brcm_b +TEST h264-conformance-frext-hpcamapalq_bcrm_b +TEST h264-conformance-frext-hpcamolq_brcm_b +TEST h264-conformance-frext-hpcanl_brcm_c +TEST h264-conformance-frext-hpcaq2lq_brcm_b +TEST h264-conformance-frext-hpcv_brcm_a +TEST h264-conformance-frext-hpcvfl_bcrm_a +TEST h264-conformance-frext-hpcvflnl_bcrm_a +TEST h264-conformance-frext-hpcvmolq_brcm_b +TEST h264-conformance-frext-hpcvnl_brcm_a +TEST h264-conformance-hcbp2_hhi_a +TEST h264-conformance-hcmp1_hhi_a +TEST h264-conformance-ls_sva_d +TEST h264-conformance-midr_mw_d +TEST h264-conformance-mps_mw_a +TEST h264-conformance-mr1_bt_a +TEST h264-conformance-mr1_mw_a +TEST h264-conformance-mr2_mw_a +TEST h264-conformance-mr2_tandberg_e +TEST h264-conformance-mr3_tandberg_b +TEST h264-conformance-mr4_tandberg_c +TEST h264-conformance-mr5_tandberg_c +TEST h264-conformance-mr6_bt_b +TEST h264-conformance-mr7_bt_b +TEST h264-conformance-mr8_bt_b +TEST h264-conformance-mr9_bt_b +TEST h264-conformance-mv1_brcm_d +TEST h264-conformance-nl1_sony_d +TEST h264-conformance-nl2_sony_h +TEST h264-conformance-nl3_sva_e +TEST h264-conformance-nlmq1_jvc_c +TEST h264-conformance-nlmq2_jvc_c +TEST h264-conformance-nrf_mw_e +TEST h264-conformance-sharp_mp_field_1_b +TEST h264-conformance-sharp_mp_field_2_b +TEST h264-conformance-sharp_mp_field_3_b +TEST h264-conformance-sharp_mp_paff_1r2 +TEST h264-conformance-sharp_mp_paff_2r +TEST h264-conformance-sl1_sva_b +TEST h264-conformance-sva_ba1_b +TEST h264-conformance-sva_ba2_d +TEST h264-conformance-sva_base_b +TEST h264-conformance-sva_cl1_e +TEST h264-conformance-sva_fm1_e +TEST h264-conformance-sva_nl1_b +TEST h264-conformance-sva_nl2_e +TEST h264-interlace-crop +TEST mp3-float-conf-compl +TEST mp3-float-conf-he_32khz +TEST mp3-float-conf-he_44khz +TEST mp3-float-conf-he_48khz +TEST mp3-float-conf-hecommon +TEST mp3-float-conf-si +TEST mp3-float-conf-si_block +TEST vorbis-1 +TEST vorbis-2 +TEST vorbis-3 +TEST vorbis-4 +TEST vorbis-5 +TEST vorbis-6 +TEST vorbis-7 +TEST vorbis-8 +TEST vorbis-9 +TEST vorbis-10 +TEST vorbis-11 +TEST vorbis-12 +TEST vorbis-13 +TEST vorbis-14 +TEST vorbis-15 +TEST vorbis-16 +TEST vorbis-17 +TEST vorbis-18 +TEST vorbis-19 +TEST vp8-test-vector-001 +TEST vp8-test-vector-002 +TEST vp8-test-vector-003 +TEST vp8-test-vector-004 +TEST vp8-test-vector-005 +TEST vp8-test-vector-006 +TEST vp8-test-vector-007 +TEST vp8-test-vector-008 +TEST vp8-test-vector-009 +TEST vp8-test-vector-010 +TEST vp8-test-vector-011 +TEST vp8-test-vector-012 +TEST vp8-test-vector-013 +TEST vp8-test-vector-014 +TEST vp8-test-vector-015 +TEST vp8-test-vector-016 +TEST vp8-test-vector-017 +TEST vp8-sign-bias +TEST vp8-test-vector-emu-edge-001 +TEST vp8-test-vector-emu-edge-002 +TEST vp8-test-vector-emu-edge-003 +TEST vp8-test-vector-emu-edge-004 +TEST vp8-test-vector-emu-edge-005 +TEST vp8-test-vector-emu-edge-006 +TEST vp8-test-vector-emu-edge-007 +TEST vp8-test-vector-emu-edge-008 +TEST vp8-test-vector-emu-edge-009 +TEST vp8-test-vector-emu-edge-010 +TEST vp8-test-vector-emu-edge-011 +TEST vp8-test-vector-emu-edge-012 +TEST vp8-test-vector-emu-edge-013 +TEST vp8-test-vector-emu-edge-014 +TEST vp8-test-vector-emu-edge-015 +TEST vp8-test-vector-emu-edge-016 +TEST vp8-test-vector-emu-edge-017 +TEST vp8-sign-bias-emu-edge +make: Target `fate' not remade because of errors. diff --git a/mt-work/test.sh b/mt-work/test.sh new file mode 100644 index 0000000000..a88a35bfe6 --- /dev/null +++ b/mt-work/test.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +fn=`basename "$1"` +for th in 1 2 3 4; do + time ./ffmpeg_g -threads $th -flags2 +fast -vsync 0 -y -t 30 -i "$1" -an -f framecrc "crc/$fn-$th.txt" >/dev/null 2>&1 +done + +./ffmpeg_g -threads 1 -y -t 10 -i "$1" -an -f framecrc "crc/$fn-1-vsync.txt" >/dev/null 2>&1 +./ffmpeg_g -threads 3 -y -t 10 -i "$1" -an -f framecrc "crc/$fn-3-vsync.txt" >/dev/null 2>&1 + +md5 "crc/$fn-"[1234].txt +echo +md5 "crc/$fn-"*vsync.txt diff --git a/mt-work/todo.txt b/mt-work/todo.txt new file mode 100644 index 0000000000..a27f181759 --- /dev/null +++ b/mt-work/todo.txt @@ -0,0 +1,91 @@ +Todo + +-- For other people +- Multithread vp8 or vc1. +- Multithread an intra codec like mjpeg. +- Fix mpeg1 (see below). +- Try the first three items under Optimization. +- Fix h264 (see below). +- Try mpeg4 (see below). + +-- Bug fixes + +General critical: +- Error resilience has to run before ff_report_frame_progress() +is called. Otherwise there will be race conditions. (This might already +work.) In general testing error paths should be done more. + +h264: +- Files split at the wrong NAL unit don't (and can't) +be decoded with threads (e.g. TS split so PPS is after +the frame, PAFF with two fields in a packet). Scan the +packet at the start of decode and don't finish setup +until all PPS/SPS have been encountered. + +mpeg4: +- Packed B-frames need to be explicitly split up +when frame threading is on. It's not very fast +without this. +- The buffer age optimization is disabled due to +the way buffers are allocated across threads. The +branch 'fix_buffer_age' has an attempt to fix it +which breaks ffplay. +- Support interlaced. + +mpeg1/2: +- Seeking always prints "first frame not a keyframe" +with threads on. Currently disabled for this reason. + +-- Prove correct + +- decode_update_progress() in h264.c +h264_race_checking branch has some work on h264, +but not that function. It might be worth putting +the branch under #ifdef DEBUG in mainline, but +the code would have to be cleaner. +- MPV_lowest_referenced_row() and co in mpegvideo.c +- Same in vp3. + +-- Optimization + +- EMU_EDGE is always set for h264 PAFF+MT +because draw_edges() writes into the other field's +thread's pixels. +- Check update_thread_context() functions and make +sure they only copy what they need to. +- Try some more optimization of the "ref < 48; ref++" +loop in h264.c await_references(), try turning the list0/list1 check +above into a loop without being slower. +- Support frame+slice threading at the same time +by assigning slice_count threads for frame threads +to use with execute(). This is simpler but unbalanced +if only one frame thread uses any. + +-- Features + +- Support streams with width/height changing. This +requires flushing all current frames (and buffering +the input in the meantime), closing the codec and +reopening it. Or don't support it. +- Support encoding. Might need more threading primitives +for good ratecontrol; would be nice for audio and libavfilter too. +- Async decoding part 1: instead of trying to +start every thread at the beginning, return a picture +if the earliest thread is already done, but don't wait +for it. Not sure what effect this would have. +- Part 2: have an API that doesn't wait for the decoding +thread, only returns EAGAIN if it's not ready. What will +it do with the next input packet if it returns that? +- Have an API that returns finished pictures but doesn't +require sending new ones. Maybe allow NULL avpkt when +not at the end of the stream. + +-- Samples + +http://astrange.ithinksw.net/ffmpeg/mt-samples/ + +See yuvcmp.c in this directory to compare decoded samples. + +For debugging, try commenting out ff_thread_finish_setup calls so +that only one thread runs at once, and then binary search+ +scatter printfs to look for differences in codec contexts. diff --git a/mt-work/valgrind-check.sh b/mt-work/valgrind-check.sh new file mode 100644 index 0000000000..dc3833abb6 --- /dev/null +++ b/mt-work/valgrind-check.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +valgrind --leak-check=full ./ffmpeg_g -threads 3 -vsync 0 -y -t 30 -i "$1" -an -f framecrc /dev/null
\ No newline at end of file diff --git a/mt-work/yuvcmp.c b/mt-work/yuvcmp.c new file mode 100644 index 0000000000..11585f9b4c --- /dev/null +++ b/mt-work/yuvcmp.c @@ -0,0 +1,182 @@ +/* + * originally by Andreas Ă–man (andoma) + * some changes by Alexander Strange + */ + +#include <string.h> +#include <stdlib.h> +#include <inttypes.h> +#include <stdio.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> + + +int +main(int argc, char **argv) +{ + int fd[2]; + int print_pixels = 0; + int dump_blocks = 0; + + int width; + int height; + int to_skip = 0; + + if (argc < 6) { + fprintf(stderr, "%s [YUV file 1] [YUV file 2] width height pixelcmp|blockdump (# to skip)\n", argv[0]); + return 1; + } + + width = atoi(argv[3]); + height = atoi(argv[4]); + if (argc > 6) + to_skip = atoi(argv[6]); + + uint8_t *Y[2], *C[2][2]; + int i, v, c, p; + int lsiz = width * height; + int csiz = width * height / 4; + int x, y; + int cwidth = width / 2; + int fr = to_skip; + int mb; + char *mberrors; + int mb_x, mb_y; + uint8_t *a; + uint8_t *b; + int die = 0; + + print_pixels = strstr(argv[5], "pixelcmp") ? 1 : 0; + dump_blocks = strstr(argv[5], "blockdump") ? 1 : 0; + + for(i = 0; i < 2; i++) { + Y[i] = malloc(lsiz); + C[0][i] = malloc(csiz); + C[1][i] = malloc(csiz); + + fd[i] = open(argv[1 + i], O_RDONLY); + if(fd[i] == -1) { + perror("open"); + exit(1); + } + fcntl(fd[i], F_NOCACHE, 1); + + if (to_skip) + lseek(fd[i], to_skip * (lsiz + 2*csiz), SEEK_SET); + } + + mb_x = width / 16; + mb_y = height / 16; + + mberrors = malloc(mb_x * mb_y); + + while(!die) { + memset(mberrors, 0, mb_x * mb_y); + + printf("Loading frame %d\n", ++fr); + + for(i = 0; i < 2; i++) { + v = read(fd[i], Y[i], lsiz); + if(v != lsiz) { + fprintf(stderr, "Unable to read Y from file %d, exiting\n", i + 1); + return 1; + } + } + + + for(c = 0; c < lsiz; c++) { + if(Y[0][c] != Y[1][c]) { + x = c % width; + y = c / width; + + mb = x / 16 + (y / 16) * mb_x; + + if(print_pixels) + printf("Luma diff 0x%02x != 0x%02x at pixel (%4d,%-4d) mb(%d,%d) #%d\n", + Y[0][c], + Y[1][c], + x, y, + x / 16, + y / 16, + mb); + + mberrors[mb] |= 1; + } + } + + /* Chroma planes */ + + for(p = 0; p < 2; p++) { + + for(i = 0; i < 2; i++) { + v = read(fd[i], C[p][i], csiz); + if(v != csiz) { + fprintf(stderr, "Unable to read %c from file %d, exiting\n", + "UV"[p], i + 1); + return 1; + } + } + + for(c = 0; c < csiz; c++) { + if(C[p][0][c] != C[p][1][c]) { + x = c % cwidth; + y = c / cwidth; + + mb = x / 8 + (y / 8) * mb_x; + + mberrors[mb] |= 2 << p; + + if(print_pixels) + + printf("c%c diff 0x%02x != 0x%02x at pixel (%4d,%-4d) " + "mb(%3d,%-3d) #%d\n", + p ? 'r' : 'b', + C[p][0][c], + C[p][1][c], + + x, y, + x / 8, + y / 8, + x / 8 + y / 8 * cwidth / 8); + } + } + } + + for(i = 0; i < mb_x * mb_y; i++) { + x = i % mb_x; + y = i / mb_x; + + if(mberrors[i]) { + die = 1; + + printf("MB (%3d,%-3d) %4d %d %c%c%c damaged\n", + x, y, i, mberrors[i], + mberrors[i] & 1 ? 'Y' : ' ', + mberrors[i] & 2 ? 'U' : ' ', + mberrors[i] & 4 ? 'V' : ' '); + + if(dump_blocks) { + a = Y[0] + x * 16 + y * 16 * width; + b = Y[1] + x * 16 + y * 16 * width; + + for(y = 0; y < 16; y++) { + printf("%c ", "TB"[y&1]); + for(x = 0; x < 16; x++) + printf("%02x%c", a[x + y * width], + a[x + y * width] != b[x + y * width] ? '<' : ' '); + + printf("| "); + for(x = 0; x < 16; x++) + printf("%02x%c", b[x + y * width], + a[x + y * width] != b[x + y * width] ? '<' : ' '); + + printf("\n"); + } + } + } + } + } + + return 0; +} |