Originally committed as revision 2165 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -220,7 +220,6 @@ static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, | |||||
#define CODEC_CAP_PARSE_ONLY 0x0004 | #define CODEC_CAP_PARSE_ONLY 0x0004 | ||||
#define CODEC_CAP_TRUNCATED 0x0008 | #define CODEC_CAP_TRUNCATED 0x0008 | ||||
#define FF_COMMON_FRAME \ | #define FF_COMMON_FRAME \ | ||||
/**\ | /**\ | ||||
* pointer to the picture planes.\ | * pointer to the picture planes.\ | ||||
@@ -464,7 +463,7 @@ typedef struct AVCodecContext { | |||||
* do something for a generic case as well. | * do something for a generic case as well. | ||||
* - decoding: set by lavc. | * - decoding: set by lavc. | ||||
*/ | */ | ||||
enum PixelFormat pix_fmt; //FIXME move to AVFrme | |||||
enum PixelFormat pix_fmt; | |||||
/** | /** | ||||
* Frame rate emulation. If not zero lower layer (i.e. format handler) | * Frame rate emulation. If not zero lower layer (i.e. format handler) | ||||
@@ -712,7 +711,7 @@ typedef struct AVCodecContext { | |||||
data is returned. Only MPEG codecs support this now. */ | data is returned. Only MPEG codecs support this now. */ | ||||
/** | /** | ||||
* 0-> default, 1-> mpeg quant. | |||||
* 0-> h263 quant 1-> mpeg quant. | |||||
* - encoding: set by user. | * - encoding: set by user. | ||||
* - decoding: unused | * - decoding: unused | ||||
*/ | */ | ||||
@@ -1590,7 +1589,7 @@ typedef enum { | |||||
int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout); | int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout); | ||||
/* memory */ | /* memory */ | ||||
void *av_malloc(unsigned int size); //FIXME unsigned could be bad, dunno, need thinking | |||||
void *av_malloc(unsigned int size); | |||||
void *av_mallocz(unsigned int size); | void *av_mallocz(unsigned int size); | ||||
void *av_realloc(void *ptr, unsigned int size); | void *av_realloc(void *ptr, unsigned int size); | ||||
void av_free(void *ptr); | void av_free(void *ptr); | ||||
@@ -32,8 +32,8 @@ | |||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
#undef NDEBUG | |||||
#include <assert.h> | |||||
//#undef NDEBUG | |||||
//#include <assert.h> | |||||
#define SQ(a) ((a)*(a)) | #define SQ(a) ((a)*(a)) | ||||
@@ -1674,53 +1674,3 @@ void ff_fix_long_b_mvs(MpegEncContext * s, int16_t (*mv_table)[2], int f_code, i | |||||
} | } | ||||
} | } | ||||
} | } | ||||
#if 0 | |||||
/** | |||||
* estimates global motion and inits sprite_ref | |||||
*/ | |||||
void ff_estimate_global_motion(MpegEncContext *s, int sprite_ref[3][2]){ | |||||
int y; | |||||
int num= 16<<s->f_code; | |||||
int score[2][num]; | |||||
int best_i[2]={0,0}; | |||||
int best_score[2]={0,0}; | |||||
memset(score, 0, 2*num*sizeof(int)); | |||||
for(y=0; y<s->mb_height; y++){ | |||||
int x; | |||||
int xy= (y+1)* (s->mb_width+2)+1; | |||||
int i= y*s->mb_width; | |||||
for(x=0; x<s->mb_width; x++){ | |||||
int mv[2]; | |||||
if(!(s->mb_type[i]&MB_TYPE_INTER)) | |||||
continue; | |||||
mv[0]= s->p_mv_table[xy][0]; | |||||
mv[1]= s->p_mv_table[xy][1]; | |||||
if(mv[0]==0 && mv[1]==0) continue; | |||||
score[0][mv[0] + num/2]++; | |||||
score[1][mv[1] + num/2]++; | |||||
} | |||||
} | |||||
for(n=0; n<2; n++){ | |||||
for(i=1; i<num-1; i++){ | |||||
int s= score[n][i-1] + score[n][i]*2 + score[n][i+1]; | |||||
if(s > best_score[n]){ | |||||
best_score[n]= s; | |||||
best_i[n]= i; | |||||
} | |||||
} | |||||
} | |||||
sprite_ref[0][0]= best_i[0] - num/2; | |||||
sprite_ref[0][1]= best_i[1] - num/2; | |||||
// decide block type | |||||
} | |||||
#endif |
@@ -34,8 +34,8 @@ | |||||
#include "fastmemcpy.h" | #include "fastmemcpy.h" | ||||
#endif | #endif | ||||
#undef NDEBUG | |||||
#include <assert.h> | |||||
//#undef NDEBUG | |||||
//#include <assert.h> | |||||
#ifdef CONFIG_ENCODERS | #ifdef CONFIG_ENCODERS | ||||
static void encode_picture(MpegEncContext *s, int picture_number); | static void encode_picture(MpegEncContext *s, int picture_number); | ||||
@@ -191,7 +191,7 @@ int DCT_common_init(MpegEncContext *s) | |||||
#endif | #endif | ||||
#ifdef HAVE_MMX | #ifdef HAVE_MMX | ||||
MPV_common_init_mmx(s); //FIXME dont pass mpegenccontext to these, rather use dspcontext | |||||
MPV_common_init_mmx(s); | |||||
#endif | #endif | ||||
#ifdef ARCH_ALPHA | #ifdef ARCH_ALPHA | ||||
MPV_common_init_axp(s); | MPV_common_init_axp(s); | ||||
@@ -279,7 +279,7 @@ static int alloc_picture(MpegEncContext *s, Picture *pic, int shared){ | |||||
} | } | ||||
CHECKED_ALLOCZ(pic->mbskip_table , mb_array_size * sizeof(uint8_t)+2) //the +2 is for the slice end check | CHECKED_ALLOCZ(pic->mbskip_table , mb_array_size * sizeof(uint8_t)+2) //the +2 is for the slice end check | ||||
CHECKED_ALLOCZ(pic->qscale_table , mb_array_size * sizeof(uint8_t)+3) //+3 for mpeg2 SIMD >>1 | |||||
CHECKED_ALLOCZ(pic->qscale_table , mb_array_size * sizeof(uint8_t)) | |||||
CHECKED_ALLOCZ(pic->mb_type_base , big_mb_num * sizeof(int)) | CHECKED_ALLOCZ(pic->mb_type_base , big_mb_num * sizeof(int)) | ||||
pic->mb_type= pic->mb_type_base + s->mb_stride+1; | pic->mb_type= pic->mb_type_base + s->mb_stride+1; | ||||
if(s->out_format == FMT_H264){ | if(s->out_format == FMT_H264){ | ||||
@@ -424,7 +424,7 @@ int MPV_common_init(MpegEncContext *s) | |||||
CHECKED_ALLOCZ(s->error_status_table, mb_array_size*sizeof(uint8_t)) | CHECKED_ALLOCZ(s->error_status_table, mb_array_size*sizeof(uint8_t)) | ||||
if (s->out_format == FMT_H263 || s->encoding || 1) { | |||||
if (s->out_format == FMT_H263 || s->encoding) { | |||||
int size; | int size; | ||||
/* MV prediction */ | /* MV prediction */ | ||||
@@ -581,7 +581,7 @@ int MPV_encode_init(AVCodecContext *avctx) | |||||
s->data_partitioning= avctx->flags & CODEC_FLAG_PART; | s->data_partitioning= avctx->flags & CODEC_FLAG_PART; | ||||
s->quarter_sample= (avctx->flags & CODEC_FLAG_QPEL)!=0; | s->quarter_sample= (avctx->flags & CODEC_FLAG_QPEL)!=0; | ||||
s->mpeg_quant= avctx->mpeg_quant; | s->mpeg_quant= avctx->mpeg_quant; | ||||
if (s->gop_size <= 1) { | if (s->gop_size <= 1) { | ||||
s->intra_only = 1; | s->intra_only = 1; | ||||
s->gop_size = 12; | s->gop_size = 12; | ||||
@@ -622,12 +622,12 @@ int MPV_encode_init(AVCodecContext *avctx) | |||||
fprintf(stderr, "b frames not supporetd by codec\n"); | fprintf(stderr, "b frames not supporetd by codec\n"); | ||||
return -1; | return -1; | ||||
} | } | ||||
/* | |||||
if(s->mpeg_quant && s->codec_id != CODEC_ID_MPEG4){ //FIXME mpeg2 uses that too | if(s->mpeg_quant && s->codec_id != CODEC_ID_MPEG4){ //FIXME mpeg2 uses that too | ||||
fprintf(stderr, "mpeg2 style quantization not supporetd by codec\n"); | fprintf(stderr, "mpeg2 style quantization not supporetd by codec\n"); | ||||
return -1; | return -1; | ||||
} | } | ||||
*/ | |||||
if(s->codec_id==CODEC_ID_MJPEG){ | if(s->codec_id==CODEC_ID_MJPEG){ | ||||
s->intra_quant_bias= 1<<(QUANT_BIAS_SHIFT-1); //(a + x/2)/x | s->intra_quant_bias= 1<<(QUANT_BIAS_SHIFT-1); //(a + x/2)/x | ||||
s->inter_quant_bias= 0; | s->inter_quant_bias= 0; | ||||
@@ -1009,7 +1009,6 @@ alloc: | |||||
if( alloc_picture(s, (Picture*)pic, 0) < 0) | if( alloc_picture(s, (Picture*)pic, 0) < 0) | ||||
return -1; | return -1; | ||||
assert(pic->data[0]); | |||||
s->current_picture_ptr= &s->picture[i]; | s->current_picture_ptr= &s->picture[i]; | ||||
} | } | ||||
@@ -2352,8 +2351,7 @@ static inline void MPV_motion(MpegEncContext *s, | |||||
} | } | ||||
} | } | ||||
break; | break; | ||||
default: | |||||
printf("X"); | |||||
} | } | ||||
} | } | ||||
@@ -3005,9 +3003,7 @@ static void encode_mb(MpegEncContext *s, int motion_x, int motion_y) | |||||
for(i=0;i<6;i++) { | for(i=0;i<6;i++) { | ||||
if(!skip_dct[i]){ | if(!skip_dct[i]){ | ||||
int overflow; | int overflow; | ||||
START_TIMER; | |||||
s->block_last_index[i] = s->dct_quantize(s, s->block[i], i, s->qscale, &overflow); | s->block_last_index[i] = s->dct_quantize(s, s->block[i], i, s->qscale, &overflow); | ||||
STOP_TIMER("dct_quant"); | |||||
// FIXME we could decide to change to quantizer instead of clipping | // FIXME we could decide to change to quantizer instead of clipping | ||||
// JS: I don't think that would be a good idea it could lower quality instead | // JS: I don't think that would be a good idea it could lower quality instead | ||||
// of improve it. Just INTRADC clipping deserves changes in quantizer | // of improve it. Just INTRADC clipping deserves changes in quantizer | ||||
@@ -4018,7 +4014,7 @@ static int dct_quantize_trellis_c(MpegEncContext *s, | |||||
start_i = 1; | start_i = 1; | ||||
last_non_zero = 0; | last_non_zero = 0; | ||||
qmat = s->q_intra_matrix[qscale]; | qmat = s->q_intra_matrix[qscale]; | ||||
if(s->mpeg_quant) | |||||
if(s->mpeg_quant || s->out_format == FMT_MPEG1) | |||||
bias= 1<<(QMAT_SHIFT-1); | bias= 1<<(QMAT_SHIFT-1); | ||||
length = s->intra_ac_vlc_length; | length = s->intra_ac_vlc_length; | ||||
last_length= s->intra_ac_vlc_last_length; | last_length= s->intra_ac_vlc_last_length; | ||||
@@ -48,13 +48,8 @@ enum OutputFormat { | |||||
#define MAX_PICTURE_COUNT 15 | #define MAX_PICTURE_COUNT 15 | ||||
#if 1 | |||||
#define ME_MAP_SIZE 4096 | |||||
#define ME_MAP_SHIFT 6 | |||||
#else | |||||
#define ME_MAP_SIZE 64 | #define ME_MAP_SIZE 64 | ||||
#define ME_MAP_SHIFT 3 | #define ME_MAP_SHIFT 3 | ||||
#endif | |||||
#define ME_MAP_MV_BITS 11 | #define ME_MAP_MV_BITS 11 | ||||
/* run length table */ | /* run length table */ | ||||
@@ -390,10 +385,8 @@ typedef struct MpegEncContext { | |||||
int me_method; ///< ME algorithm | int me_method; ///< ME algorithm | ||||
int scene_change_score; | int scene_change_score; | ||||
int mv_dir; | int mv_dir; | ||||
#define MV_DIR_L1 1 | |||||
#define MV_DIR_L0 2 | |||||
#define MV_DIR_BACKWARD MV_DIR_L1 | |||||
#define MV_DIR_FORWARD MV_DIR_L0 | |||||
#define MV_DIR_BACKWARD 1 | |||||
#define MV_DIR_FORWARD 2 | |||||
#define MV_DIRECT 4 ///< bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4) | #define MV_DIRECT 4 ///< bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4) | ||||
int mv_type; | int mv_type; | ||||
#define MV_TYPE_16X16 0 ///< 1 vector for the whole mb | #define MV_TYPE_16X16 0 ///< 1 vector for the whole mb | ||||
@@ -575,11 +568,6 @@ typedef struct MpegEncContext { | |||||
uint8_t *tex_pb_buffer; | uint8_t *tex_pb_buffer; | ||||
uint8_t *pb2_buffer; | uint8_t *pb2_buffer; | ||||
int mpeg_quant; | int mpeg_quant; | ||||
#define FF_QUANT_DEFAULT 0 | |||||
#define FF_QUANT_MPEG2 1 | |||||
#define FF_QUANT_MPEG1 2 | |||||
#define FF_QUANT_H263 3 | |||||
int16_t (*field_mv_table)[2][2]; ///< used for interlaced b frame decoding | int16_t (*field_mv_table)[2][2]; ///< used for interlaced b frame decoding | ||||
int8_t (*field_select_table)[2]; ///< wtf, no really another table for interlaced b frames | int8_t (*field_select_table)[2]; ///< wtf, no really another table for interlaced b frames | ||||
int t_frame; ///< time distance of first I -> B, used for interlaced b frames | int t_frame; ///< time distance of first I -> B, used for interlaced b frames | ||||
@@ -663,7 +651,7 @@ typedef struct MpegEncContext { | |||||
/* RTP specific */ | /* RTP specific */ | ||||
/* These are explained on avcodec.h */ | /* These are explained on avcodec.h */ | ||||
int rtp_mode; //FIXME simplify this mess (remove callback, merge mode + payload) | |||||
int rtp_mode; | |||||
int rtp_payload_size; | int rtp_payload_size; | ||||
void (*rtp_callback)(void *data, int size, int packet_number); | void (*rtp_callback)(void *data, int size, int packet_number); | ||||
uint8_t *ptr_lastgob; | uint8_t *ptr_lastgob; | ||||
@@ -881,7 +869,6 @@ int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size); | |||||
int ff_msmpeg4_decode_init(MpegEncContext *s); | int ff_msmpeg4_decode_init(MpegEncContext *s); | ||||
void ff_msmpeg4_encode_init(MpegEncContext *s); | void ff_msmpeg4_encode_init(MpegEncContext *s); | ||||
int ff_wmv2_decode_picture_header(MpegEncContext * s); | int ff_wmv2_decode_picture_header(MpegEncContext * s); | ||||
int ff_wmv2_decode_secondary_picture_header(MpegEncContext * s); | |||||
void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr); | void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr); | ||||
void ff_mspel_motion(MpegEncContext *s, | void ff_mspel_motion(MpegEncContext *s, | ||||
uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, | uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, | ||||