Merge remote-tracking branch 'qatar/release/0.7' into release/0.8
* qatar/release/0.7: (96 commits) intfloat_readwrite: fix signed addition overflows smacker: validate channels and sample format. smacker: check buffer size before reading output size smacker: validate number of channels sipr: fix get_bits(0) calls motion_est: make MotionExtContext.map_generation unsigned 4xm: prevent NULL dereference with invalid huffman table 4xmdemux: prevent use of uninitialized memory 4xm: clear FF_INPUT_BUFFER_PADDING_SIZE bytes in temporary buffers ptx: check for out of bound reads tiffdec: fix out of bound reads/writes eacmv: check for out of bound reads eacmv: fix potential pointer arithmetic overflows adpcm: fix out of bound reads due to integer overflow anm: prevent infinite loop avsdemux: check for out of bound writes avs: check for out of bound reads avsdemux: check for corrupted data mxfdec: Fix some buffer overreads caused by the misuse of AVPacket related functions. vaapi: Fix VC-1 decoding (reconstruct bitstream TTFRM correctly). ... Conflicts: libavcodec/adpcm.c libavcodec/bink.c libavcodec/h264.c libavcodec/h264.h libavcodec/h264_cabac.c libavcodec/h264_cavlc.c libavcodec/motion_est_template.c libavcodec/mpegvideo.c libavcodec/nellymoserdec.c libavcodec/ptx.c libavcodec/svq3.c libavcodec/vaapi_vc1.c libavcodec/xan.c libavfilter/vf_scale.c libavformat/4xm.c libavformat/flvdec.c libavformat/mpeg.c tests/ref/fate/motionpixels Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -1760,9 +1760,9 @@ interlaced video, accepts one of the following values:
|
|||||||
|
|
||||||
@table @option
|
@table @option
|
||||||
@item 0
|
@item 0
|
||||||
assume bottom field first
|
|
||||||
@item 1
|
|
||||||
assume top field first
|
assume top field first
|
||||||
|
@item 1
|
||||||
|
assume bottom field first
|
||||||
@item -1
|
@item -1
|
||||||
enable automatic detection
|
enable automatic detection
|
||||||
@end table
|
@end table
|
||||||
|
@@ -1360,11 +1360,17 @@ static int adpcm_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CODEC_ID_ADPCM_EA:
|
case CODEC_ID_ADPCM_EA:
|
||||||
if (buf_size < 12 || AV_RL32(src) > (buf_size - 12)/30*28) {
|
/* Each EA ADPCM frame has a 12-byte header followed by 30-byte pieces,
|
||||||
src += buf_size;
|
each coding 28 stereo samples. */
|
||||||
break;
|
if (buf_size < 12) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "frame too small\n");
|
||||||
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
samples_in_chunk = AV_RL32(src);
|
samples_in_chunk = AV_RL32(src);
|
||||||
|
if (samples_in_chunk / 28 > (buf_size - 12) / 30) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "invalid frame\n");
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
src += 4;
|
src += 4;
|
||||||
current_left_sample = (int16_t)bytestream_get_le16(&src);
|
current_left_sample = (int16_t)bytestream_get_le16(&src);
|
||||||
previous_left_sample = (int16_t)bytestream_get_le16(&src);
|
previous_left_sample = (int16_t)bytestream_get_le16(&src);
|
||||||
|
@@ -457,8 +457,8 @@ static int read_dcs(AVCodecContext *avctx, GetBitContext *gb, Bundle *b,
|
|||||||
int start_bits, int has_sign)
|
int start_bits, int has_sign)
|
||||||
{
|
{
|
||||||
int i, j, len, len2, bsize, sign, v, v2;
|
int i, j, len, len2, bsize, sign, v, v2;
|
||||||
int16_t *dst = (int16_t*)b->cur_dec;
|
int16_t *dst = (int16_t*)b->cur_dec;
|
||||||
int16_t *dst_end =( int16_t*)b->data_end;
|
int16_t *dst_end = (int16_t*)b->data_end;
|
||||||
|
|
||||||
CHECK_READ_VAL(gb, b, len);
|
CHECK_READ_VAL(gb, b, len);
|
||||||
v = get_bits(gb, start_bits - has_sign);
|
v = get_bits(gb, start_bits - has_sign);
|
||||||
|
@@ -108,7 +108,10 @@ int ff_h264_check_intra4x4_pred_mode(H264Context *h){
|
|||||||
return 0;
|
return 0;
|
||||||
} //FIXME cleanup like check_intra_pred_mode
|
} //FIXME cleanup like check_intra_pred_mode
|
||||||
|
|
||||||
static int check_intra_pred_mode(H264Context *h, int mode, int is_chroma){
|
/**
|
||||||
|
* checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.
|
||||||
|
*/
|
||||||
|
int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma){
|
||||||
MpegEncContext * const s = &h->s;
|
MpegEncContext * const s = &h->s;
|
||||||
static const int8_t top [7]= {LEFT_DC_PRED8x8, 1,-1,-1};
|
static const int8_t top [7]= {LEFT_DC_PRED8x8, 1,-1,-1};
|
||||||
static const int8_t left[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8};
|
static const int8_t left[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8};
|
||||||
@@ -140,23 +143,6 @@ static int check_intra_pred_mode(H264Context *h, int mode, int is_chroma){
|
|||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.
|
|
||||||
*/
|
|
||||||
int ff_h264_check_intra16x16_pred_mode(H264Context *h, int mode)
|
|
||||||
{
|
|
||||||
return check_intra_pred_mode(h, mode, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* checks if the top & left blocks are available if needed & changes the dc mode so it only uses the available blocks.
|
|
||||||
*/
|
|
||||||
int ff_h264_check_intra_chroma_pred_mode(H264Context *h, int mode)
|
|
||||||
{
|
|
||||||
return check_intra_pred_mode(h, mode, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src, int *dst_length, int *consumed, int length){
|
const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src, int *dst_length, int *consumed, int length){
|
||||||
int i, si, di;
|
int i, si, di;
|
||||||
uint8_t *dst;
|
uint8_t *dst;
|
||||||
@@ -2231,7 +2217,11 @@ static void implicit_weight_table(H264Context *h, int field){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(field < 0){
|
if(field < 0){
|
||||||
cur_poc = s->current_picture_ptr->poc;
|
if (s->picture_structure == PICT_FRAME) {
|
||||||
|
cur_poc = s->current_picture_ptr->poc;
|
||||||
|
} else {
|
||||||
|
cur_poc = s->current_picture_ptr->field_poc[s->picture_structure - 1];
|
||||||
|
}
|
||||||
if( h->ref_count[0] == 1 && h->ref_count[1] == 1 && !FRAME_MBAFF
|
if( h->ref_count[0] == 1 && h->ref_count[1] == 1 && !FRAME_MBAFF
|
||||||
&& h->ref_list[0][0].poc + h->ref_list[1][0].poc == 2*cur_poc){
|
&& h->ref_list[0][0].poc + h->ref_list[1][0].poc == 2*cur_poc){
|
||||||
h->use_weight= 0;
|
h->use_weight= 0;
|
||||||
@@ -3761,7 +3751,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
|
|||||||
case NAL_IDR_SLICE:
|
case NAL_IDR_SLICE:
|
||||||
case NAL_SLICE:
|
case NAL_SLICE:
|
||||||
init_get_bits(&hx->s.gb, ptr, bit_length);
|
init_get_bits(&hx->s.gb, ptr, bit_length);
|
||||||
if(!get_ue_golomb(&hx->s.gb))
|
if (!get_ue_golomb(&hx->s.gb))
|
||||||
nals_needed = nal_index;
|
nals_needed = nal_index;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@@ -658,12 +658,7 @@ int ff_h264_check_intra4x4_pred_mode(H264Context *h);
|
|||||||
/**
|
/**
|
||||||
* Check if the top & left blocks are available if needed & change the dc mode so it only uses the available blocks.
|
* Check if the top & left blocks are available if needed & change the dc mode so it only uses the available blocks.
|
||||||
*/
|
*/
|
||||||
int ff_h264_check_intra16x16_pred_mode(H264Context *h, int mode);
|
int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma);
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the top & left blocks are available if needed & change the dc mode so it only uses the available blocks.
|
|
||||||
*/
|
|
||||||
int ff_h264_check_intra_chroma_pred_mode(H264Context *h, int mode);
|
|
||||||
|
|
||||||
void ff_h264_write_back_intra_pred_mode(H264Context *h);
|
void ff_h264_write_back_intra_pred_mode(H264Context *h);
|
||||||
void ff_h264_hl_decode_mb(H264Context *h);
|
void ff_h264_hl_decode_mb(H264Context *h);
|
||||||
|
@@ -2003,14 +2003,14 @@ decode_intra_mb:
|
|||||||
ff_h264_write_back_intra_pred_mode(h);
|
ff_h264_write_back_intra_pred_mode(h);
|
||||||
if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
|
if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
|
||||||
} else {
|
} else {
|
||||||
h->intra16x16_pred_mode= ff_h264_check_intra16x16_pred_mode( h, h->intra16x16_pred_mode );
|
h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
|
||||||
if( h->intra16x16_pred_mode < 0 ) return -1;
|
if( h->intra16x16_pred_mode < 0 ) return -1;
|
||||||
}
|
}
|
||||||
if(decode_chroma){
|
if(decode_chroma){
|
||||||
h->chroma_pred_mode_table[mb_xy] =
|
h->chroma_pred_mode_table[mb_xy] =
|
||||||
pred_mode = decode_cabac_mb_chroma_pre_mode( h );
|
pred_mode = decode_cabac_mb_chroma_pre_mode( h );
|
||||||
|
|
||||||
pred_mode= ff_h264_check_intra_chroma_pred_mode( h, pred_mode );
|
pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
|
||||||
if( pred_mode < 0 ) return -1;
|
if( pred_mode < 0 ) return -1;
|
||||||
h->chroma_pred_mode= pred_mode;
|
h->chroma_pred_mode= pred_mode;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -238,17 +238,18 @@ static inline int pred_non_zero_count(H264Context *h, int n){
|
|||||||
}
|
}
|
||||||
|
|
||||||
static av_cold void init_cavlc_level_tab(void){
|
static av_cold void init_cavlc_level_tab(void){
|
||||||
int suffix_length, mask;
|
int suffix_length;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for(suffix_length=0; suffix_length<7; suffix_length++){
|
for(suffix_length=0; suffix_length<7; suffix_length++){
|
||||||
for(i=0; i<(1<<LEVEL_TAB_BITS); i++){
|
for(i=0; i<(1<<LEVEL_TAB_BITS); i++){
|
||||||
int prefix= LEVEL_TAB_BITS - av_log2(2*i);
|
int prefix= LEVEL_TAB_BITS - av_log2(2*i);
|
||||||
int level_code= (prefix<<suffix_length) + (i>>(LEVEL_TAB_BITS-prefix-1-suffix_length)) - (1<<suffix_length);
|
|
||||||
|
|
||||||
mask= -(level_code&1);
|
|
||||||
level_code= (((2+level_code)>>1) ^ mask) - mask;
|
|
||||||
if(prefix + 1 + suffix_length <= LEVEL_TAB_BITS){
|
if(prefix + 1 + suffix_length <= LEVEL_TAB_BITS){
|
||||||
|
int level_code = (prefix << suffix_length) +
|
||||||
|
(i >> (av_log2(i) - suffix_length)) - (1 << suffix_length);
|
||||||
|
int mask = -(level_code&1);
|
||||||
|
level_code = (((2 + level_code) >> 1) ^ mask) - mask;
|
||||||
cavlc_level_tab[suffix_length][i][0]= level_code;
|
cavlc_level_tab[suffix_length][i][0]= level_code;
|
||||||
cavlc_level_tab[suffix_length][i][1]= prefix + 1 + suffix_length;
|
cavlc_level_tab[suffix_length][i][1]= prefix + 1 + suffix_length;
|
||||||
}else if(prefix + 1 <= LEVEL_TAB_BITS){
|
}else if(prefix + 1 <= LEVEL_TAB_BITS){
|
||||||
@@ -735,12 +736,12 @@ decode_intra_mb:
|
|||||||
if( ff_h264_check_intra4x4_pred_mode(h) < 0)
|
if( ff_h264_check_intra4x4_pred_mode(h) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}else{
|
}else{
|
||||||
h->intra16x16_pred_mode= ff_h264_check_intra16x16_pred_mode(h, h->intra16x16_pred_mode);
|
h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode(h, h->intra16x16_pred_mode, 0);
|
||||||
if(h->intra16x16_pred_mode < 0)
|
if(h->intra16x16_pred_mode < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(decode_chroma){
|
if(decode_chroma){
|
||||||
pred_mode= ff_h264_check_intra_chroma_pred_mode(h, get_ue_golomb_31(&s->gb));
|
pred_mode= ff_h264_check_intra_pred_mode(h, get_ue_golomb_31(&s->gb), 1);
|
||||||
if(pred_mode < 0)
|
if(pred_mode < 0)
|
||||||
return -1;
|
return -1;
|
||||||
h->chroma_pred_mode= pred_mode;
|
h->chroma_pred_mode= pred_mode;
|
||||||
|
@@ -485,6 +485,7 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length){
|
|||||||
unsigned int pps_id= get_ue_golomb(&s->gb);
|
unsigned int pps_id= get_ue_golomb(&s->gb);
|
||||||
PPS *pps;
|
PPS *pps;
|
||||||
const int qp_bd_offset = 6*(h->sps.bit_depth_luma-8);
|
const int qp_bd_offset = 6*(h->sps.bit_depth_luma-8);
|
||||||
|
int bits_left;
|
||||||
|
|
||||||
if(pps_id >= MAX_PPS_COUNT) {
|
if(pps_id >= MAX_PPS_COUNT) {
|
||||||
av_log(h->s.avctx, AV_LOG_ERROR, "pps_id (%d) out of range\n", pps_id);
|
av_log(h->s.avctx, AV_LOG_ERROR, "pps_id (%d) out of range\n", pps_id);
|
||||||
@@ -561,7 +562,9 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length){
|
|||||||
memcpy(pps->scaling_matrix4, h->sps_buffers[pps->sps_id]->scaling_matrix4, sizeof(pps->scaling_matrix4));
|
memcpy(pps->scaling_matrix4, h->sps_buffers[pps->sps_id]->scaling_matrix4, sizeof(pps->scaling_matrix4));
|
||||||
memcpy(pps->scaling_matrix8, h->sps_buffers[pps->sps_id]->scaling_matrix8, sizeof(pps->scaling_matrix8));
|
memcpy(pps->scaling_matrix8, h->sps_buffers[pps->sps_id]->scaling_matrix8, sizeof(pps->scaling_matrix8));
|
||||||
|
|
||||||
if(get_bits_count(&s->gb) < bit_length){
|
bits_left = bit_length - get_bits_count(&s->gb);
|
||||||
|
if (bits_left && (bits_left > 8 ||
|
||||||
|
show_bits(&s->gb, bits_left) != 1 << (bits_left - 1))) {
|
||||||
pps->transform_8x8_mode= get_bits1(&s->gb);
|
pps->transform_8x8_mode= get_bits1(&s->gb);
|
||||||
decode_scaling_matrices(h, h->sps_buffers[pps->sps_id], pps, 0, pps->scaling_matrix4, pps->scaling_matrix8);
|
decode_scaling_matrices(h, h->sps_buffers[pps->sps_id], pps, 0, pps->scaling_matrix4, pps->scaling_matrix8);
|
||||||
pps->chroma_qp_index_offset[1]= get_se_golomb(&s->gb); //second_chroma_qp_index_offset
|
pps->chroma_qp_index_offset[1]= get_se_golomb(&s->gb); //second_chroma_qp_index_offset
|
||||||
|
@@ -52,7 +52,7 @@ static inline int sad_hpel_motion_search(MpegEncContext * s,
|
|||||||
int src_index, int ref_index,
|
int src_index, int ref_index,
|
||||||
int size, int h);
|
int size, int h);
|
||||||
|
|
||||||
static inline int update_map_generation(MotionEstContext *c)
|
static inline unsigned update_map_generation(MotionEstContext *c)
|
||||||
{
|
{
|
||||||
c->map_generation+= 1<<(ME_MAP_MV_BITS*2);
|
c->map_generation+= 1<<(ME_MAP_MV_BITS*2);
|
||||||
if(c->map_generation==0){
|
if(c->map_generation==0){
|
||||||
|
@@ -158,9 +158,8 @@ static int hpel_motion_search(MpegEncContext * s,
|
|||||||
const int b= score_map[(index+(1<<ME_MAP_SHIFT))&(ME_MAP_SIZE-1)]
|
const int b= score_map[(index+(1<<ME_MAP_SHIFT))&(ME_MAP_SIZE-1)]
|
||||||
+ (mv_penalty[bx - pred_x] + mv_penalty[by+2 - pred_y])*c->penalty_factor;
|
+ (mv_penalty[bx - pred_x] + mv_penalty[by+2 - pred_y])*c->penalty_factor;
|
||||||
|
|
||||||
#if 1
|
unsigned key;
|
||||||
int key;
|
unsigned map_generation= c->map_generation;
|
||||||
int map_generation= c->map_generation;
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
uint32_t *map= c->map;
|
uint32_t *map= c->map;
|
||||||
#endif
|
#endif
|
||||||
@@ -172,7 +171,6 @@ static int hpel_motion_search(MpegEncContext * s,
|
|||||||
assert(map[(index+1)&(ME_MAP_SIZE-1)] == key);
|
assert(map[(index+1)&(ME_MAP_SIZE-1)] == key);
|
||||||
key= ((my)<<ME_MAP_MV_BITS) + (mx-1) + map_generation;
|
key= ((my)<<ME_MAP_MV_BITS) + (mx-1) + map_generation;
|
||||||
assert(map[(index-1)&(ME_MAP_SIZE-1)] == key);
|
assert(map[(index-1)&(ME_MAP_SIZE-1)] == key);
|
||||||
#endif
|
|
||||||
if(t<=b){
|
if(t<=b){
|
||||||
CHECK_HALF_MV(0, 1, mx ,my-1)
|
CHECK_HALF_MV(0, 1, mx ,my-1)
|
||||||
if(l<=r){
|
if(l<=r){
|
||||||
@@ -280,7 +278,7 @@ static int qpel_motion_search(MpegEncContext * s,
|
|||||||
const int mx = *mx_ptr;
|
const int mx = *mx_ptr;
|
||||||
const int my = *my_ptr;
|
const int my = *my_ptr;
|
||||||
const int penalty_factor= c->sub_penalty_factor;
|
const int penalty_factor= c->sub_penalty_factor;
|
||||||
const int map_generation= c->map_generation;
|
const unsigned map_generation = c->map_generation;
|
||||||
const int subpel_quality= c->avctx->me_subpel_quality;
|
const int subpel_quality= c->avctx->me_subpel_quality;
|
||||||
uint32_t *map= c->map;
|
uint32_t *map= c->map;
|
||||||
me_cmp_func cmpf, chroma_cmpf;
|
me_cmp_func cmpf, chroma_cmpf;
|
||||||
@@ -497,7 +495,7 @@ static int qpel_motion_search(MpegEncContext * s,
|
|||||||
|
|
||||||
#define CHECK_MV(x,y)\
|
#define CHECK_MV(x,y)\
|
||||||
{\
|
{\
|
||||||
const int key= ((y)<<ME_MAP_MV_BITS) + (x) + map_generation;\
|
const unsigned key = ((y)<<ME_MAP_MV_BITS) + (x) + map_generation;\
|
||||||
const int index= (((y)<<ME_MAP_SHIFT) + (x))&(ME_MAP_SIZE-1);\
|
const int index= (((y)<<ME_MAP_SHIFT) + (x))&(ME_MAP_SIZE-1);\
|
||||||
assert((x) >= xmin);\
|
assert((x) >= xmin);\
|
||||||
assert((x) <= xmax);\
|
assert((x) <= xmax);\
|
||||||
@@ -525,7 +523,7 @@ static int qpel_motion_search(MpegEncContext * s,
|
|||||||
|
|
||||||
#define CHECK_MV_DIR(x,y,new_dir)\
|
#define CHECK_MV_DIR(x,y,new_dir)\
|
||||||
{\
|
{\
|
||||||
const int key= ((y)<<ME_MAP_MV_BITS) + (x) + map_generation;\
|
const unsigned key = ((y)<<ME_MAP_MV_BITS) + (x) + map_generation;\
|
||||||
const int index= (((y)<<ME_MAP_SHIFT) + (x))&(ME_MAP_SIZE-1);\
|
const int index= (((y)<<ME_MAP_SHIFT) + (x))&(ME_MAP_SIZE-1);\
|
||||||
/*printf("check_mv_dir %d %d %d\n", x, y, new_dir);*/\
|
/*printf("check_mv_dir %d %d %d\n", x, y, new_dir);*/\
|
||||||
if(map[index]!=key){\
|
if(map[index]!=key){\
|
||||||
@@ -563,13 +561,13 @@ static av_always_inline int small_diamond_search(MpegEncContext * s, int *best,
|
|||||||
int next_dir=-1;
|
int next_dir=-1;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf= s->dsp.me_cmp[size];
|
cmpf= s->dsp.me_cmp[size];
|
||||||
chroma_cmpf= s->dsp.me_cmp[size+1];
|
chroma_cmpf= s->dsp.me_cmp[size+1];
|
||||||
|
|
||||||
{ /* ensure that the best point is in the MAP as h/qpel refinement needs it */
|
{ /* ensure that the best point is in the MAP as h/qpel refinement needs it */
|
||||||
const int key= (best[1]<<ME_MAP_MV_BITS) + best[0] + map_generation;
|
const unsigned key = (best[1]<<ME_MAP_MV_BITS) + best[0] + map_generation;
|
||||||
const int index= ((best[1]<<ME_MAP_SHIFT) + best[0])&(ME_MAP_SIZE-1);
|
const int index= ((best[1]<<ME_MAP_SHIFT) + best[0])&(ME_MAP_SIZE-1);
|
||||||
if(map[index]!=key){ //this will be executed only very rarey
|
if(map[index]!=key){ //this will be executed only very rarey
|
||||||
score_map[index]= cmp(s, best[0], best[1], 0, 0, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);
|
score_map[index]= cmp(s, best[0], best[1], 0, 0, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);
|
||||||
@@ -605,7 +603,7 @@ static int funny_diamond_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
int dia_size;
|
int dia_size;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf= s->dsp.me_cmp[size];
|
cmpf= s->dsp.me_cmp[size];
|
||||||
chroma_cmpf= s->dsp.me_cmp[size+1];
|
chroma_cmpf= s->dsp.me_cmp[size+1];
|
||||||
@@ -646,7 +644,7 @@ static int hex_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
me_cmp_func cmpf, chroma_cmpf;
|
me_cmp_func cmpf, chroma_cmpf;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
int x,y,d;
|
int x,y,d;
|
||||||
const int dec= dia_size & (dia_size-1);
|
const int dec= dia_size & (dia_size-1);
|
||||||
|
|
||||||
@@ -680,7 +678,7 @@ static int l2s_dia_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
me_cmp_func cmpf, chroma_cmpf;
|
me_cmp_func cmpf, chroma_cmpf;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
int x,y,i,d;
|
int x,y,i,d;
|
||||||
int dia_size= c->dia_size&0xFF;
|
int dia_size= c->dia_size&0xFF;
|
||||||
const int dec= dia_size & (dia_size-1);
|
const int dec= dia_size & (dia_size-1);
|
||||||
@@ -718,7 +716,7 @@ static int umh_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
me_cmp_func cmpf, chroma_cmpf;
|
me_cmp_func cmpf, chroma_cmpf;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
int x,y,x2,y2, i, j, d;
|
int x,y,x2,y2, i, j, d;
|
||||||
const int dia_size= c->dia_size&0xFE;
|
const int dia_size= c->dia_size&0xFE;
|
||||||
static const int hex[16][2]={{-4,-2}, {-4,-1}, {-4, 0}, {-4, 1}, {-4, 2},
|
static const int hex[16][2]={{-4,-2}, {-4,-1}, {-4, 0}, {-4, 1}, {-4, 2},
|
||||||
@@ -765,7 +763,7 @@ static int full_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
me_cmp_func cmpf, chroma_cmpf;
|
me_cmp_func cmpf, chroma_cmpf;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
int x,y, d;
|
int x,y, d;
|
||||||
const int dia_size= c->dia_size&0xFF;
|
const int dia_size= c->dia_size&0xFF;
|
||||||
|
|
||||||
@@ -794,7 +792,7 @@ static int full_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
|
|
||||||
#define SAB_CHECK_MV(ax,ay)\
|
#define SAB_CHECK_MV(ax,ay)\
|
||||||
{\
|
{\
|
||||||
const int key= ((ay)<<ME_MAP_MV_BITS) + (ax) + map_generation;\
|
const unsigned key = ((ay)<<ME_MAP_MV_BITS) + (ax) + map_generation;\
|
||||||
const int index= (((ay)<<ME_MAP_SHIFT) + (ax))&(ME_MAP_SIZE-1);\
|
const int index= (((ay)<<ME_MAP_SHIFT) + (ax))&(ME_MAP_SIZE-1);\
|
||||||
/*printf("sab check %d %d\n", ax, ay);*/\
|
/*printf("sab check %d %d\n", ax, ay);*/\
|
||||||
if(map[index]!=key){\
|
if(map[index]!=key){\
|
||||||
@@ -833,7 +831,7 @@ static int sab_diamond_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
int i, j;
|
int i, j;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf= s->dsp.me_cmp[size];
|
cmpf= s->dsp.me_cmp[size];
|
||||||
chroma_cmpf= s->dsp.me_cmp[size+1];
|
chroma_cmpf= s->dsp.me_cmp[size+1];
|
||||||
@@ -918,7 +916,7 @@ static int var_diamond_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
int dia_size;
|
int dia_size;
|
||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
int map_generation= c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf= s->dsp.me_cmp[size];
|
cmpf= s->dsp.me_cmp[size];
|
||||||
chroma_cmpf= s->dsp.me_cmp[size+1];
|
chroma_cmpf= s->dsp.me_cmp[size+1];
|
||||||
@@ -1010,7 +1008,7 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int
|
|||||||
int d; ///< the score (cmp + penalty) of any given mv
|
int d; ///< the score (cmp + penalty) of any given mv
|
||||||
int dmin; /*!< the best value of d, i.e. the score
|
int dmin; /*!< the best value of d, i.e. the score
|
||||||
corresponding to the mv stored in best[]. */
|
corresponding to the mv stored in best[]. */
|
||||||
int map_generation;
|
unsigned map_generation;
|
||||||
int penalty_factor;
|
int penalty_factor;
|
||||||
const int ref_mv_stride= s->mb_stride; //pass as arg FIXME
|
const int ref_mv_stride= s->mb_stride; //pass as arg FIXME
|
||||||
const int ref_mv_xy= s->mb_x + s->mb_y*ref_mv_stride; //add to last_mv beforepassing FIXME
|
const int ref_mv_xy= s->mb_x + s->mb_y*ref_mv_stride; //add to last_mv beforepassing FIXME
|
||||||
@@ -1138,7 +1136,7 @@ static int epzs_motion_search4(MpegEncContext * s,
|
|||||||
MotionEstContext * const c= &s->me;
|
MotionEstContext * const c= &s->me;
|
||||||
int best[2]={0, 0};
|
int best[2]={0, 0};
|
||||||
int d, dmin;
|
int d, dmin;
|
||||||
int map_generation;
|
unsigned map_generation;
|
||||||
const int penalty_factor= c->penalty_factor;
|
const int penalty_factor= c->penalty_factor;
|
||||||
const int size=1;
|
const int size=1;
|
||||||
const int h=8;
|
const int h=8;
|
||||||
@@ -1198,7 +1196,7 @@ static int epzs_motion_search2(MpegEncContext * s,
|
|||||||
MotionEstContext * const c= &s->me;
|
MotionEstContext * const c= &s->me;
|
||||||
int best[2]={0, 0};
|
int best[2]={0, 0};
|
||||||
int d, dmin;
|
int d, dmin;
|
||||||
int map_generation;
|
unsigned map_generation;
|
||||||
const int penalty_factor= c->penalty_factor;
|
const int penalty_factor= c->penalty_factor;
|
||||||
const int size=0; //FIXME pass as arg
|
const int size=0; //FIXME pass as arg
|
||||||
const int h=8;
|
const int h=8;
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
#include "mathops.h"
|
||||||
#include "mpegvideo.h"
|
#include "mpegvideo.h"
|
||||||
|
|
||||||
#include "mpeg12.h"
|
#include "mpeg12.h"
|
||||||
@@ -681,8 +682,7 @@ static void mpeg1_encode_motion(MpegEncContext *s, int val, int f_or_b_code)
|
|||||||
int bit_size = f_or_b_code - 1;
|
int bit_size = f_or_b_code - 1;
|
||||||
int range = 1 << bit_size;
|
int range = 1 << bit_size;
|
||||||
/* modulo encoding */
|
/* modulo encoding */
|
||||||
int l= INT_BIT - 5 - bit_size;
|
val = sign_extend(val, 5 + bit_size);
|
||||||
val= (val<<l)>>l;
|
|
||||||
|
|
||||||
if (val >= 0) {
|
if (val >= 0) {
|
||||||
val--;
|
val--;
|
||||||
|
@@ -366,8 +366,8 @@ static int init_duplicate_context(MpegEncContext *s, MpegEncContext *base){
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
// edge emu needs blocksize + filter length - 1 (=17x17 for halfpel / 21x21 for h264)
|
// edge emu needs blocksize + filter length - 1 (=17x17 for halfpel / 21x21 for h264)
|
||||||
FF_ALLOCZ_OR_GOTO(s->avctx, s->allocated_edge_emu_buffer, (s->width+64)*2*21*2*2, fail); //(width + edge + align)*interlaced*MBsize*tolerance
|
FF_ALLOCZ_OR_GOTO(s->avctx, s->edge_emu_buffer, (s->width+64)*2*21*2*2, fail); //(width + edge + align)*interlaced*MBsize*tolerance
|
||||||
s->edge_emu_buffer= s->allocated_edge_emu_buffer + (s->width+64)*2*21*2;
|
|
||||||
|
|
||||||
//FIXME should be linesize instead of s->width*2 but that is not known before get_buffer()
|
//FIXME should be linesize instead of s->width*2 but that is not known before get_buffer()
|
||||||
FF_ALLOCZ_OR_GOTO(s->avctx, s->me.scratchpad, (s->width+64)*4*16*2*sizeof(uint8_t), fail)
|
FF_ALLOCZ_OR_GOTO(s->avctx, s->me.scratchpad, (s->width+64)*4*16*2*sizeof(uint8_t), fail)
|
||||||
@@ -405,7 +405,7 @@ fail:
|
|||||||
static void free_duplicate_context(MpegEncContext *s){
|
static void free_duplicate_context(MpegEncContext *s){
|
||||||
if(s==NULL) return;
|
if(s==NULL) return;
|
||||||
|
|
||||||
av_freep(&s->allocated_edge_emu_buffer); s->edge_emu_buffer= NULL;
|
av_freep(&s->edge_emu_buffer);
|
||||||
av_freep(&s->me.scratchpad);
|
av_freep(&s->me.scratchpad);
|
||||||
s->me.temp=
|
s->me.temp=
|
||||||
s->rd_scratchpad=
|
s->rd_scratchpad=
|
||||||
@@ -422,7 +422,6 @@ static void free_duplicate_context(MpegEncContext *s){
|
|||||||
|
|
||||||
static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src){
|
static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src){
|
||||||
#define COPY(a) bak->a= src->a
|
#define COPY(a) bak->a= src->a
|
||||||
COPY(allocated_edge_emu_buffer);
|
|
||||||
COPY(edge_emu_buffer);
|
COPY(edge_emu_buffer);
|
||||||
COPY(me.scratchpad);
|
COPY(me.scratchpad);
|
||||||
COPY(me.temp);
|
COPY(me.temp);
|
||||||
|
@@ -153,7 +153,7 @@ typedef struct MotionEstContext{
|
|||||||
int best_bits;
|
int best_bits;
|
||||||
uint32_t *map; ///< map to avoid duplicate evaluations
|
uint32_t *map; ///< map to avoid duplicate evaluations
|
||||||
uint32_t *score_map; ///< map to store the scores
|
uint32_t *score_map; ///< map to store the scores
|
||||||
int map_generation;
|
unsigned map_generation;
|
||||||
int pre_penalty_factor;
|
int pre_penalty_factor;
|
||||||
int penalty_factor; /*!< an estimate of the bits required to
|
int penalty_factor; /*!< an estimate of the bits required to
|
||||||
code a given mv value, e.g. (1,0) takes
|
code a given mv value, e.g. (1,0) takes
|
||||||
@@ -317,8 +317,7 @@ typedef struct MpegEncContext {
|
|||||||
uint8_t *mbintra_table; ///< used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding
|
uint8_t *mbintra_table; ///< used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding
|
||||||
uint8_t *cbp_table; ///< used to store cbp, ac_pred for partitioned decoding
|
uint8_t *cbp_table; ///< used to store cbp, ac_pred for partitioned decoding
|
||||||
uint8_t *pred_dir_table; ///< used to store pred_dir for partitioned decoding
|
uint8_t *pred_dir_table; ///< used to store pred_dir for partitioned decoding
|
||||||
uint8_t *allocated_edge_emu_buffer;
|
uint8_t *edge_emu_buffer; ///< temporary buffer for if MVs point to out-of-frame data
|
||||||
uint8_t *edge_emu_buffer; ///< points into the middle of allocated_edge_emu_buffer
|
|
||||||
uint8_t *rd_scratchpad; ///< scratchpad for rate distortion mb decision
|
uint8_t *rd_scratchpad; ///< scratchpad for rate distortion mb decision
|
||||||
uint8_t *obmc_scratchpad;
|
uint8_t *obmc_scratchpad;
|
||||||
uint8_t *b_scratchpad; ///< scratchpad used for writing into write only buffers
|
uint8_t *b_scratchpad; ///< scratchpad used for writing into write only buffers
|
||||||
|
@@ -157,19 +157,26 @@ static int decode_tag(AVCodecContext * avctx,
|
|||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
NellyMoserDecodeContext *s = avctx->priv_data;
|
NellyMoserDecodeContext *s = avctx->priv_data;
|
||||||
int data_max = *data_size;
|
int data_max = *data_size;
|
||||||
int blocks, i;
|
int blocks, i, block_size;
|
||||||
int16_t* samples;
|
int16_t* samples;
|
||||||
*data_size = 0;
|
|
||||||
samples = (int16_t*)data;
|
samples = (int16_t*)data;
|
||||||
|
|
||||||
if (buf_size < avctx->block_align)
|
if (buf_size < avctx->block_align) {
|
||||||
|
*data_size = 0;
|
||||||
return buf_size;
|
return buf_size;
|
||||||
|
}
|
||||||
|
|
||||||
if (buf_size % 64) {
|
if (buf_size % 64) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Tag size %d.\n", buf_size);
|
av_log(avctx, AV_LOG_ERROR, "Tag size %d.\n", buf_size);
|
||||||
|
*data_size = 0;
|
||||||
return buf_size;
|
return buf_size;
|
||||||
}
|
}
|
||||||
blocks = buf_size / 64;
|
block_size = NELLY_SAMPLES * av_get_bytes_per_sample(avctx->sample_fmt);
|
||||||
|
blocks = FFMIN(buf_size / 64, *data_size / block_size);
|
||||||
|
if (blocks <= 0) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "Output buffer is too small\n");
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
/* Normal numbers of blocks for sample rates:
|
/* Normal numbers of blocks for sample rates:
|
||||||
* 8000 Hz - 1
|
* 8000 Hz - 1
|
||||||
* 11025 Hz - 2
|
* 11025 Hz - 2
|
||||||
@@ -183,8 +190,8 @@ static int decode_tag(AVCodecContext * avctx,
|
|||||||
return i > 0 ? i * NELLY_BLOCK_LEN : -1;
|
return i > 0 ? i * NELLY_BLOCK_LEN : -1;
|
||||||
nelly_decode_block(s, &buf[i*NELLY_BLOCK_LEN], s->float_buf);
|
nelly_decode_block(s, &buf[i*NELLY_BLOCK_LEN], s->float_buf);
|
||||||
s->fmt_conv.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES);
|
s->fmt_conv.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES);
|
||||||
*data_size += NELLY_SAMPLES*sizeof(int16_t);
|
|
||||||
}
|
}
|
||||||
|
*data_size = blocks * block_size;
|
||||||
|
|
||||||
return buf_size;
|
return buf_size;
|
||||||
}
|
}
|
||||||
|
@@ -60,7 +60,6 @@ static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
|
|
||||||
avctx->pix_fmt = PIX_FMT_RGB555;
|
avctx->pix_fmt = PIX_FMT_RGB555;
|
||||||
|
|
||||||
|
|
||||||
if (buf_end - buf < offset)
|
if (buf_end - buf < offset)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
if (offset != 0x2c)
|
if (offset != 0x2c)
|
||||||
|
@@ -612,7 +612,7 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type)
|
|||||||
dir = i_mb_type_info[mb_type - 8].pred_mode;
|
dir = i_mb_type_info[mb_type - 8].pred_mode;
|
||||||
dir = (dir >> 1) ^ 3*(dir & 1) ^ 1;
|
dir = (dir >> 1) ^ 3*(dir & 1) ^ 1;
|
||||||
|
|
||||||
if ((h->intra16x16_pred_mode = ff_h264_check_intra16x16_pred_mode(h, dir)) == -1){
|
if ((h->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, dir, 0)) == -1){
|
||||||
av_log(h->s.avctx, AV_LOG_ERROR, "check_intra_pred_mode = -1\n");
|
av_log(h->s.avctx, AV_LOG_ERROR, "check_intra_pred_mode = -1\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -711,7 +711,7 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type)
|
|||||||
s->current_picture.mb_type[mb_xy] = mb_type;
|
s->current_picture.mb_type[mb_xy] = mb_type;
|
||||||
|
|
||||||
if (IS_INTRA(mb_type)) {
|
if (IS_INTRA(mb_type)) {
|
||||||
h->chroma_pred_mode = ff_h264_check_intra_chroma_pred_mode(h, DC_PRED8x8);
|
h->chroma_pred_mode = ff_h264_check_intra_pred_mode(h, DC_PRED8x8, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -555,8 +555,10 @@ static int xan_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
buf_size = buf_end - buf;
|
buf_size = buf_end - buf;
|
||||||
}
|
}
|
||||||
if (s->palettes_count <= 0)
|
if (s->palettes_count <= 0) {
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "No palette found\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = avctx->get_buffer(avctx, &s->current_frame))) {
|
if ((ret = avctx->get_buffer(avctx, &s->current_frame))) {
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
|
||||||
|
@@ -157,7 +157,7 @@ static int config_input(AVFilterLink *inlink)
|
|||||||
var_values[VAR_OUT_H] = var_values[VAR_OH] = NAN;
|
var_values[VAR_OUT_H] = var_values[VAR_OH] = NAN;
|
||||||
var_values[VAR_A] = (float) inlink->w / inlink->h;
|
var_values[VAR_A] = (float) inlink->w / inlink->h;
|
||||||
var_values[VAR_HSUB] = 1<<pad->hsub;
|
var_values[VAR_HSUB] = 1<<pad->hsub;
|
||||||
var_values[VAR_VSUB] = 2<<pad->vsub;
|
var_values[VAR_VSUB] = 1<<pad->vsub;
|
||||||
|
|
||||||
/* evaluate width and height */
|
/* evaluate width and height */
|
||||||
av_expr_parse_and_eval(&res, (expr = pad->w_expr),
|
av_expr_parse_and_eval(&res, (expr = pad->w_expr),
|
||||||
|
@@ -232,9 +232,11 @@ static int config_props(AVFilterLink *outlink)
|
|||||||
if (!scale->sws || !scale->isws[0] || !scale->isws[1])
|
if (!scale->sws || !scale->isws[0] || !scale->isws[1])
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
|
|
||||||
if (inlink->sample_aspect_ratio.num){
|
if (inlink->sample_aspect_ratio.num)
|
||||||
outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink->w, outlink->w * inlink->h}, inlink->sample_aspect_ratio);
|
outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h*inlink->w,
|
||||||
} else
|
outlink->w*inlink->h},
|
||||||
|
inlink->sample_aspect_ratio);
|
||||||
|
else
|
||||||
outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
|
outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -36,8 +36,8 @@ typedef struct {
|
|||||||
int mode;
|
int mode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 0: bottom field first
|
* 0: top field first
|
||||||
* 1: top field first
|
* 1: bottom field first
|
||||||
* -1: auto-detection
|
* -1: auto-detection
|
||||||
*/
|
*/
|
||||||
int parity;
|
int parity;
|
||||||
@@ -195,9 +195,12 @@ static void return_frame(AVFilterContext *ctx, int is_second)
|
|||||||
tff = yadif->parity^1;
|
tff = yadif->parity^1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_second)
|
if (is_second) {
|
||||||
yadif->out = avfilter_get_video_buffer(link, AV_PERM_WRITE | AV_PERM_PRESERVE |
|
yadif->out = avfilter_get_video_buffer(link, AV_PERM_WRITE | AV_PERM_PRESERVE |
|
||||||
AV_PERM_REUSE, link->w, link->h);
|
AV_PERM_REUSE, link->w, link->h);
|
||||||
|
avfilter_copy_buffer_ref_props(yadif->out, yadif->cur);
|
||||||
|
yadif->out->video->interlaced = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!yadif->csp)
|
if (!yadif->csp)
|
||||||
yadif->csp = &av_pix_fmt_descriptors[link->format];
|
yadif->csp = &av_pix_fmt_descriptors[link->format];
|
||||||
|
@@ -176,7 +176,7 @@ static int fourxm_read_header(AVFormatContext *s,
|
|||||||
sizeof(AudioTrack),
|
sizeof(AudioTrack),
|
||||||
current_track + 1);
|
current_track + 1);
|
||||||
if (!fourxm->tracks) {
|
if (!fourxm->tracks) {
|
||||||
ret= AVERROR(ENOMEM);
|
ret = AVERROR(ENOMEM);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
memset(&fourxm->tracks[fourxm->track_count], 0,
|
memset(&fourxm->tracks[fourxm->track_count], 0,
|
||||||
|
@@ -173,8 +173,8 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timeslen == fileposlen) {
|
if (!ret && timeslen == fileposlen) {
|
||||||
for(i = 0; i < timeslen; i++)
|
for (i = 0; i < fileposlen; i++)
|
||||||
av_add_index_entry(vstream, filepositions[i], times[i]*1000, 0, 0, AVINDEX_KEYFRAME);
|
av_add_index_entry(vstream, filepositions[i], times[i]*1000, 0, 0, AVINDEX_KEYFRAME);
|
||||||
} else
|
} else
|
||||||
av_log(s, AV_LOG_WARNING, "Invalid keyframes object, skipping.\n");
|
av_log(s, AV_LOG_WARNING, "Invalid keyframes object, skipping.\n");
|
||||||
|
@@ -397,7 +397,7 @@ int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext
|
|||||||
len = ff_mp4_read_descr(fc, pb, &tag);
|
len = ff_mp4_read_descr(fc, pb, &tag);
|
||||||
if (tag == MP4DecSpecificDescrTag) {
|
if (tag == MP4DecSpecificDescrTag) {
|
||||||
av_dlog(fc, "Specific MPEG4 header len=%d\n", len);
|
av_dlog(fc, "Specific MPEG4 header len=%d\n", len);
|
||||||
if((uint64_t)len > (1<<30))
|
if (!len || (uint64_t)len > (1<<30))
|
||||||
return -1;
|
return -1;
|
||||||
av_free(st->codec->extradata);
|
av_free(st->codec->extradata);
|
||||||
st->codec->extradata = av_mallocz(len + FF_INPUT_BUFFER_PADDING_SIZE);
|
st->codec->extradata = av_mallocz(len + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
@@ -423,7 +423,7 @@ static int mpegps_read_packet(AVFormatContext *s,
|
|||||||
{
|
{
|
||||||
MpegDemuxContext *m = s->priv_data;
|
MpegDemuxContext *m = s->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int len, startcode, i, es_type;
|
int len, startcode, i, es_type, ret;
|
||||||
int request_probe= 0;
|
int request_probe= 0;
|
||||||
enum CodecID codec_id = CODEC_ID_NONE;
|
enum CodecID codec_id = CODEC_ID_NONE;
|
||||||
enum AVMediaType type;
|
enum AVMediaType type;
|
||||||
@@ -568,8 +568,7 @@ static int mpegps_read_packet(AVFormatContext *s,
|
|||||||
else if (st->codec->bits_per_coded_sample == 28)
|
else if (st->codec->bits_per_coded_sample == 28)
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
av_new_packet(pkt, len);
|
ret = av_get_packet(s->pb, pkt, len);
|
||||||
avio_read(s->pb, pkt->data, pkt->size);
|
|
||||||
pkt->pts = pts;
|
pkt->pts = pts;
|
||||||
pkt->dts = dts;
|
pkt->dts = dts;
|
||||||
pkt->pos = dummy_pos;
|
pkt->pos = dummy_pos;
|
||||||
@@ -578,7 +577,7 @@ static int mpegps_read_packet(AVFormatContext *s,
|
|||||||
pkt->stream_index, pkt->pts / 90000.0, pkt->dts / 90000.0,
|
pkt->stream_index, pkt->pts / 90000.0, pkt->dts / 90000.0,
|
||||||
pkt->size);
|
pkt->size);
|
||||||
|
|
||||||
return 0;
|
return (ret < 0) ? ret : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index,
|
static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index,
|
||||||
|
@@ -132,6 +132,8 @@ static int sol_read_packet(AVFormatContext *s,
|
|||||||
if (url_feof(s->pb))
|
if (url_feof(s->pb))
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
ret= av_get_packet(s->pb, pkt, MAX_SIZE);
|
ret= av_get_packet(s->pb, pkt, MAX_SIZE);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
pkt->stream_index = 0;
|
pkt->stream_index = 0;
|
||||||
|
|
||||||
/* note: we need to modify the packet size here to handle the last
|
/* note: we need to modify the packet size here to handle the last
|
||||||
|
@@ -30,13 +30,13 @@
|
|||||||
#include "intfloat_readwrite.h"
|
#include "intfloat_readwrite.h"
|
||||||
|
|
||||||
double av_int2dbl(int64_t v){
|
double av_int2dbl(int64_t v){
|
||||||
if(v+v > 0xFFEULL<<52)
|
if((uint64_t)v+v > 0xFFEULL<<52)
|
||||||
return NAN;
|
return NAN;
|
||||||
return ldexp(((v&((1LL<<52)-1)) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075);
|
return ldexp(((v&((1LL<<52)-1)) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075);
|
||||||
}
|
}
|
||||||
|
|
||||||
float av_int2flt(int32_t v){
|
float av_int2flt(int32_t v){
|
||||||
if(v+v > 0xFF000000U)
|
if((uint32_t)v+v > 0xFF000000U)
|
||||||
return NAN;
|
return NAN;
|
||||||
return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150);
|
return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150);
|
||||||
}
|
}
|
||||||
|
@@ -175,7 +175,7 @@ fate-maxis-xa: CMD = md5 -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -f s16le
|
|||||||
FATE_TESTS += fate-mimic
|
FATE_TESTS += fate-mimic
|
||||||
fate-mimic: CMD = framecrc -idct simple -i $(SAMPLES)/mimic/mimic2-womanloveffmpeg.cam -vsync 0
|
fate-mimic: CMD = framecrc -idct simple -i $(SAMPLES)/mimic/mimic2-womanloveffmpeg.cam -vsync 0
|
||||||
FATE_TESTS += fate-motionpixels
|
FATE_TESTS += fate-motionpixels
|
||||||
fate-motionpixels: CMD = framecrc -i $(SAMPLES)/motion-pixels/INTRO-partial.MVI -an -pix_fmt rgb24
|
fate-motionpixels: CMD = framecrc -i $(SAMPLES)/motion-pixels/INTRO-partial.MVI -an -pix_fmt rgb24 -vframes 111
|
||||||
FATE_TESTS += fate-mpc7-demux
|
FATE_TESTS += fate-mpc7-demux
|
||||||
fate-mpc7-demux: CMD = crc -i $(SAMPLES)/musepack/inside-mp7.mpc -acodec copy
|
fate-mpc7-demux: CMD = crc -i $(SAMPLES)/musepack/inside-mp7.mpc -acodec copy
|
||||||
FATE_TESTS += fate-mpc8-demux
|
FATE_TESTS += fate-mpc8-demux
|
||||||
|
@@ -109,4 +109,3 @@
|
|||||||
0, 648003, 230400, 0xb343f372
|
0, 648003, 230400, 0xb343f372
|
||||||
0, 654003, 230400, 0xf7f1e588
|
0, 654003, 230400, 0xf7f1e588
|
||||||
0, 660003, 230400, 0x9682bdb2
|
0, 660003, 230400, 0x9682bdb2
|
||||||
0, 666003, 230400, 0x009f4640
|
|
||||||
|
Reference in New Issue
Block a user