mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-27 02:41:54 +08:00 
			
		
		
		
	log prediction order search method
Originally committed as revision 5763 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		| @@ -43,6 +43,7 @@ | ||||
| #define ORDER_METHOD_4LEVEL  2 | ||||
| #define ORDER_METHOD_8LEVEL  3 | ||||
| #define ORDER_METHOD_SEARCH  4 | ||||
| #define ORDER_METHOD_LOG     5 | ||||
|  | ||||
| #define FLAC_STREAMINFO_SIZE  34 | ||||
|  | ||||
| @@ -291,7 +292,7 @@ static int flac_encode_init(AVCodecContext *avctx) | ||||
|            s->options.min_prediction_order, s->options.max_prediction_order); | ||||
|  | ||||
|     if(avctx->prediction_order_method >= 0) { | ||||
|         if(avctx->prediction_order_method > ORDER_METHOD_SEARCH) { | ||||
|         if(avctx->prediction_order_method > ORDER_METHOD_LOG) { | ||||
|             av_log(avctx, AV_LOG_ERROR, "invalid prediction order method: %d\n", | ||||
|                    avctx->prediction_order_method); | ||||
|             return -1; | ||||
| @@ -309,6 +310,8 @@ static int flac_encode_init(AVCodecContext *avctx) | ||||
|                                          "8-level"); break; | ||||
|         case ORDER_METHOD_SEARCH: av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", | ||||
|                                          "full search"); break; | ||||
|         case ORDER_METHOD_LOG:    av_log(avctx, AV_LOG_DEBUG, " order method: %s\n", | ||||
|                                          "log search"); break; | ||||
|     } | ||||
|  | ||||
|     if(avctx->min_partition_order >= 0) { | ||||
| @@ -951,6 +954,26 @@ static int encode_residual(FlacEncodeContext *ctx, int ch) | ||||
|             } | ||||
|         } | ||||
|         opt_order++; | ||||
|     } else if(omethod == ORDER_METHOD_LOG) { | ||||
|         uint32_t bits[MAX_LPC_ORDER]; | ||||
|         int step; | ||||
|  | ||||
|         opt_order= min_order - 1 + (max_order-min_order)/3; | ||||
|         memset(bits, -1, sizeof(bits)); | ||||
|  | ||||
|         for(step=16 ;step; step>>=1){ | ||||
|             int last= opt_order; | ||||
|             for(i=last-step; i<=last+step; i+= step){ | ||||
|                 if(i<min_order-1 || i>=max_order || bits[i] < UINT32_MAX) | ||||
|                     continue; | ||||
|                 encode_residual_lpc(res, smp, n, i+1, coefs[i], shift[i]); | ||||
|                 bits[i] = calc_rice_params_lpc(&sub->rc, min_porder, max_porder, | ||||
|                                             res, n, i+1, sub->obits, precision); | ||||
|                 if(bits[i] < bits[opt_order]) | ||||
|                     opt_order= i; | ||||
|             } | ||||
|         } | ||||
|         opt_order++; | ||||
|     } | ||||
|  | ||||
|     sub->order = opt_order; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Niedermayer
					Michael Niedermayer