Originally committed as revision 12428 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -429,7 +429,7 @@ encompassing your FFmpeg includes using @code{extern "C"}. | |||||
| See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3} | See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3} | ||||
| @section I have a file in memory / a API different from *open/*read/ libc how do i use it with libavformat? | |||||
| @section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat? | |||||
| You have to implement a URLProtocol, see libavformat/file.c in FFmpeg | You have to implement a URLProtocol, see libavformat/file.c in FFmpeg | ||||
| and libmpdemux/demux_lavf.c in MPlayer sources. | and libmpdemux/demux_lavf.c in MPlayer sources. | ||||
| @@ -99,7 +99,7 @@ to the ffmpeg-devel mailing list, ... | |||||
| !warning These alignments might not match reality, (missing attribute((align)) | !warning These alignments might not match reality, (missing attribute((align)) | ||||
| stuff somewhere possible). | stuff somewhere possible). | ||||
| I (Michael) did not check them, these are just the alignments which i think | |||||
| I (Michael) did not check them, these are just the alignments which I think | |||||
| could be reached easily ... | could be reached easily ... | ||||
| !future video codecs might need functions with less strict alignment | !future video codecs might need functions with less strict alignment | ||||
| @@ -483,8 +483,9 @@ static int flic_decode_frame_15_16BPP(AVCodecContext *avctx, | |||||
| switch (chunk_type) { | switch (chunk_type) { | ||||
| case FLI_256_COLOR: | case FLI_256_COLOR: | ||||
| case FLI_COLOR: | case FLI_COLOR: | ||||
| /* For some reason, it seems that non-paletised flics do include one of these */ | |||||
| /* chunks in their first frame. Why i do not know, it seems rather extraneous */ | |||||
| /* For some reason, it seems that non-palettized flics do | |||||
| * include one of these chunks in their first frame. | |||||
| * Why I do not know, it seems rather extraneous. */ | |||||
| /* av_log(avctx, AV_LOG_ERROR, "Unexpected Palette chunk %d in non-paletised FLC\n",chunk_type);*/ | /* av_log(avctx, AV_LOG_ERROR, "Unexpected Palette chunk %d in non-paletised FLC\n",chunk_type);*/ | ||||
| stream_ptr = stream_ptr + chunk_size - 6; | stream_ptr = stream_ptr + chunk_size - 6; | ||||
| break; | break; | ||||
| @@ -91,7 +91,8 @@ static void fill_caches(H264Context *h, int mb_type, int for_deblock){ | |||||
| if(for_deblock && (h->slice_num == 1 || h->slice_table[mb_xy] == h->slice_table[top_xy]) && !FRAME_MBAFF) | if(for_deblock && (h->slice_num == 1 || h->slice_table[mb_xy] == h->slice_table[top_xy]) && !FRAME_MBAFF) | ||||
| return; | return; | ||||
| //wow what a mess, why didn't they simplify the interlacing&intra stuff, i can't imagine that these complex rules are worth it | |||||
| /* Wow, what a mess, why didn't they simplify the interlacing & intra | |||||
| * stuff, I can't imagine that these complex rules are worth it. */ | |||||
| topleft_xy = top_xy - 1; | topleft_xy = top_xy - 1; | ||||
| topright_xy= top_xy + 1; | topright_xy= top_xy + 1; | ||||
| @@ -1589,7 +1590,7 @@ static inline int get_chroma_qp(H264Context *h, int t, int qscale){ | |||||
| return h->pps.chroma_qp_table[t][qscale & 0xff]; | return h->pps.chroma_qp_table[t][qscale & 0xff]; | ||||
| } | } | ||||
| //FIXME need to check that this does not overflow signed 32 bit for low qp, i am not sure, it's very close | |||||
| //FIXME need to check that this does not overflow signed 32 bit for low qp, I am not sure, it's very close | |||||
| //FIXME check that gcc inlines this (and optimizes intra & separate_dc stuff away) | //FIXME check that gcc inlines this (and optimizes intra & separate_dc stuff away) | ||||
| static inline int quantize_c(DCTELEM *block, uint8_t *scantable, int qscale, int intra, int separate_dc){ | static inline int quantize_c(DCTELEM *block, uint8_t *scantable, int qscale, int intra, int separate_dc){ | ||||
| int i; | int i; | ||||
| @@ -349,7 +349,7 @@ typedef struct H264Context{ | |||||
| GetBitContext *inter_gb_ptr; | GetBitContext *inter_gb_ptr; | ||||
| DECLARE_ALIGNED_16(DCTELEM, mb[16*24]); | DECLARE_ALIGNED_16(DCTELEM, mb[16*24]); | ||||
| DCTELEM mb_padding[256]; ///< as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not to large or ensure that there is some unused stuff after mb | |||||
| DCTELEM mb_padding[256]; ///< as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not too large or ensure that there is some unused stuff after mb | |||||
| /** | /** | ||||
| * Cabac | * Cabac | ||||
| @@ -539,7 +539,7 @@ static const AVOption options[]={ | |||||
| {"normal", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_NORMAL, INT_MIN, INT_MAX, V|E, "strict"}, | {"normal", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_NORMAL, INT_MIN, INT_MAX, V|E, "strict"}, | ||||
| {"inofficial", "allow inofficial extensions", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_INOFFICIAL, INT_MIN, INT_MAX, V|E, "strict"}, | {"inofficial", "allow inofficial extensions", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_INOFFICIAL, INT_MIN, INT_MAX, V|E, "strict"}, | ||||
| {"experimental", "allow non standardized experimental things", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_EXPERIMENTAL, INT_MIN, INT_MAX, V|E, "strict"}, | {"experimental", "allow non standardized experimental things", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_EXPERIMENTAL, INT_MIN, INT_MAX, V|E, "strict"}, | ||||
| {"b_qoffset", "qp offset between p and b frames", OFFSET(b_quant_offset), FF_OPT_TYPE_FLOAT, 1.25, FLT_MIN, FLT_MAX, V|E}, | |||||
| {"b_qoffset", "qp offset between P and B frames", OFFSET(b_quant_offset), FF_OPT_TYPE_FLOAT, 1.25, FLT_MIN, FLT_MAX, V|E}, | |||||
| {"er", "set error resilience strategy", OFFSET(error_resilience), FF_OPT_TYPE_INT, FF_ER_CAREFUL, INT_MIN, INT_MAX, A|V|D, "er"}, | {"er", "set error resilience strategy", OFFSET(error_resilience), FF_OPT_TYPE_INT, FF_ER_CAREFUL, INT_MIN, INT_MAX, A|V|D, "er"}, | ||||
| {"careful", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_CAREFUL, INT_MIN, INT_MAX, V|D, "er"}, | {"careful", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_CAREFUL, INT_MIN, INT_MAX, V|D, "er"}, | ||||
| {"compliant", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_COMPLIANT, INT_MIN, INT_MAX, V|D, "er"}, | {"compliant", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_COMPLIANT, INT_MIN, INT_MAX, V|D, "er"}, | ||||
| @@ -560,8 +560,8 @@ static const AVOption options[]={ | |||||
| {"minrate", "set min video bitrate tolerance (in bits/s)", OFFSET(rc_min_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | {"minrate", "set min video bitrate tolerance (in bits/s)", OFFSET(rc_min_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | ||||
| {"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|V|E}, | {"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|V|E}, | ||||
| {"rc_buf_aggressivity", "currently useless", OFFSET(rc_buffer_aggressivity), FF_OPT_TYPE_FLOAT, 1.0, FLT_MIN, FLT_MAX, V|E}, | {"rc_buf_aggressivity", "currently useless", OFFSET(rc_buffer_aggressivity), FF_OPT_TYPE_FLOAT, 1.0, FLT_MIN, FLT_MAX, V|E}, | ||||
| {"i_qfactor", "qp factor between p and i frames", OFFSET(i_quant_factor), FF_OPT_TYPE_FLOAT, -0.8, -FLT_MAX, FLT_MAX, V|E}, | |||||
| {"i_qoffset", "qp offset between p and i frames", OFFSET(i_quant_offset), FF_OPT_TYPE_FLOAT, 0.0, -FLT_MAX, FLT_MAX, V|E}, | |||||
| {"i_qfactor", "qp factor between P and I frames", OFFSET(i_quant_factor), FF_OPT_TYPE_FLOAT, -0.8, -FLT_MAX, FLT_MAX, V|E}, | |||||
| {"i_qoffset", "qp offset between P and I frames", OFFSET(i_quant_offset), FF_OPT_TYPE_FLOAT, 0.0, -FLT_MAX, FLT_MAX, V|E}, | |||||
| {"rc_init_cplx", "initial complexity for 1-pass encoding", OFFSET(rc_initial_cplx), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, | {"rc_init_cplx", "initial complexity for 1-pass encoding", OFFSET(rc_initial_cplx), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, | ||||
| {"dct", "DCT algorithm", OFFSET(dct_algo), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|E, "dct"}, | {"dct", "DCT algorithm", OFFSET(dct_algo), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|E, "dct"}, | ||||
| {"auto", "autoselect a good one (default)", 0, FF_OPT_TYPE_CONST, FF_DCT_AUTO, INT_MIN, INT_MAX, V|E, "dct"}, | {"auto", "autoselect a good one (default)", 0, FF_OPT_TYPE_CONST, FF_DCT_AUTO, INT_MIN, INT_MAX, V|E, "dct"}, | ||||
| @@ -275,7 +275,7 @@ const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; | |||||
| for(i=0; i<blocks_per_mb; i++){ | for(i=0; i<blocks_per_mb; i++){ | ||||
| if(s->block_last_index[i] >= 0){ | if(s->block_last_index[i] >= 0){ | ||||
| // i do not have unsigned_intra MOCO to test, hope it is OK | |||||
| // I do not have unsigned_intra MOCO to test, hope it is OK | |||||
| if( (s->mb_intra) && ( render->idct || (!render->idct && !render->unsigned_intra)) ) | if( (s->mb_intra) && ( render->idct || (!render->idct && !render->unsigned_intra)) ) | ||||
| s->pblocks[i][0]-=1<<10; | s->pblocks[i][0]-=1<<10; | ||||
| if(!render->idct){ | if(!render->idct){ | ||||
| @@ -854,7 +854,7 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flag | |||||
| next_node[0]->back_ptr, next_node[1]->back_ptr, flags, &ts, nut_read_timestamp); | next_node[0]->back_ptr, next_node[1]->back_ptr, flags, &ts, nut_read_timestamp); | ||||
| if(pos2>=0) | if(pos2>=0) | ||||
| pos= pos2; | pos= pos2; | ||||
| //FIXME dir but i think it does not matter | |||||
| //FIXME dir but I think it does not matter | |||||
| } | } | ||||
| dummy.pos= pos; | dummy.pos= pos; | ||||
| sp= av_tree_find(nut->syncpoints, &dummy, ff_nut_sp_pos_cmp, NULL); | sp= av_tree_find(nut->syncpoints, &dummy, ff_nut_sp_pos_cmp, NULL); | ||||
| @@ -72,7 +72,7 @@ void *av_malloc(unsigned int size) | |||||
| Because some CPUs need alignment, for example SSE2 on P4, & most RISC CPUs | Because some CPUs need alignment, for example SSE2 on P4, & most RISC CPUs | ||||
| it will just trigger an exception and the unaligned load will be done in the | it will just trigger an exception and the unaligned load will be done in the | ||||
| exception handler or it will just segfault (SSE2 on P4) | exception handler or it will just segfault (SSE2 on P4) | ||||
| Why not larger? because i did not see a difference in benchmarks ... | |||||
| Why not larger? Because I did not see a difference in benchmarks ... | |||||
| */ | */ | ||||
| /* benchmarks with p3 | /* benchmarks with p3 | ||||
| memalign(64)+1 3071,3051,3032 | memalign(64)+1 3071,3051,3032 | ||||
| @@ -47,7 +47,7 @@ LinBlendDeinterlace e E E* | |||||
| MedianDeinterlace# E Ec Ec | MedianDeinterlace# E Ec Ec | ||||
| TempDeNoiser# E e e Ec | TempDeNoiser# E e e Ec | ||||
| * i do not have a 3DNow! CPU -> it is untested, but no one said it does not work so it seems to work | |||||
| * I do not have a 3DNow! CPU -> it is untested, but no one said it does not work so it seems to work | |||||
| # more or less selfinvented filters so the exactness is not too meaningful | # more or less selfinvented filters so the exactness is not too meaningful | ||||
| E = Exact implementation | E = Exact implementation | ||||
| e = allmost exact implementation (slightly different rounding,...) | e = allmost exact implementation (slightly different rounding,...) | ||||
| @@ -110,9 +110,9 @@ static inline int vertClassify_altivec(uint8_t src[], int stride, PPContext *c) | |||||
| (vector signed short)vec_mergeh((vector signed char)zero, \ | (vector signed short)vec_mergeh((vector signed char)zero, \ | ||||
| (vector signed char)v_srcA##i) | (vector signed char)v_srcA##i) | ||||
| // special casing the aligned case is worthwhile, as all call from | |||||
| // the (transposed) horizontable deblocks will be aligned, i naddition | |||||
| // to the naturraly aligned vertical deblocks. | |||||
| /* Special-casing the aligned case is worthwhile, as all calls from | |||||
| * the (transposed) horizontable deblocks will be aligned, in addition | |||||
| * to the naturally aligned vertical deblocks. */ | |||||
| if (properStride && srcAlign) { | if (properStride && srcAlign) { | ||||
| LOAD_LINE_ALIGNED(0); | LOAD_LINE_ALIGNED(0); | ||||
| LOAD_LINE_ALIGNED(1); | LOAD_LINE_ALIGNED(1); | ||||
| @@ -230,9 +230,9 @@ static inline void doVertLowPass_altivec(uint8_t *src, int stride, PPContext *c) | |||||
| (vector signed short)vec_mergeh((vector signed char)zero, \ | (vector signed short)vec_mergeh((vector signed char)zero, \ | ||||
| (vector signed char)vbT##i) | (vector signed char)vbT##i) | ||||
| // special casing the aligned case is worthwhile, as all call from | |||||
| // the (transposed) horizontable deblocks will be aligned, in addition | |||||
| // to the naturraly aligned vertical deblocks. | |||||
| /* Special-casing the aligned case is worthwhile, as all calls from | |||||
| * the (transposed) horizontable deblocks will be aligned, in addition | |||||
| * to the naturally aligned vertical deblocks. */ | |||||
| if (properStride && srcAlign) { | if (properStride && srcAlign) { | ||||
| LOAD_LINE_ALIGNED(0); | LOAD_LINE_ALIGNED(0); | ||||
| LOAD_LINE_ALIGNED(1); | LOAD_LINE_ALIGNED(1); | ||||
| @@ -348,9 +348,9 @@ static inline void doVertLowPass_altivec(uint8_t *src, int stride, PPContext *c) | |||||
| vec_perm(vf##i, vbT##i, permHH); \ | vec_perm(vf##i, vbT##i, permHH); \ | ||||
| vec_st(vg##i, i * stride, src2) | vec_st(vg##i, i * stride, src2) | ||||
| // special casing the aligned case is worthwhile, as all call from | |||||
| // the (transposed) horizontable deblocks will be aligned, in addition | |||||
| // to the naturraly aligned vertical deblocks. | |||||
| /* Special-casing the aligned case is worthwhile, as all calls from | |||||
| * the (transposed) horizontable deblocks will be aligned, in addition | |||||
| * to the naturally aligned vertical deblocks. */ | |||||
| if (properStride && srcAlign) { | if (properStride && srcAlign) { | ||||
| PACK_AND_STORE_ALIGNED(1); | PACK_AND_STORE_ALIGNED(1); | ||||
| PACK_AND_STORE_ALIGNED(2); | PACK_AND_STORE_ALIGNED(2); | ||||