|  | @@ -89,6 +89,7 @@ typedef struct G726Context { | 
														
													
														
															
																|  |  | int se;             /**< estimated signal for the next iteration */ |  |  | int se;             /**< estimated signal for the next iteration */ | 
														
													
														
															
																|  |  | int sez;            /**< estimated second order prediction */ |  |  | int sez;            /**< estimated second order prediction */ | 
														
													
														
															
																|  |  | int y;              /**< quantizer scaling factor for the next iteration */ |  |  | int y;              /**< quantizer scaling factor for the next iteration */ | 
														
													
														
															
																|  |  |  |  |  | int code_size; | 
														
													
														
															
																|  |  | } G726Context; |  |  | } G726Context; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | static const int quant_tbl16[] =                  /**< 16kbit/s 2bits per sample */ |  |  | static const int quant_tbl16[] =                  /**< 16kbit/s 2bits per sample */ | 
														
													
												
													
														
															
																|  | @@ -299,14 +300,9 @@ static int16_t g726_encode(G726Context* c, int16_t sig) | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | /* Interfacing to the libavcodec */ |  |  | /* Interfacing to the libavcodec */ | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | typedef struct AVG726Context { |  |  |  | 
														
													
														
															
																|  |  | G726Context c; |  |  |  | 
														
													
														
															
																|  |  | int code_size; |  |  |  | 
														
													
														
															
																|  |  | } AVG726Context; |  |  |  | 
														
													
														
															
																|  |  | 
 |  |  |  | 
														
													
														
															
																|  |  | static av_cold int g726_init(AVCodecContext * avctx) |  |  | static av_cold int g726_init(AVCodecContext * avctx) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | AVG726Context* c = (AVG726Context*)avctx->priv_data; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | G726Context* c = avctx->priv_data; | 
														
													
														
															
																|  |  | unsigned int index= (avctx->bit_rate + avctx->sample_rate/2) / avctx->sample_rate - 2; |  |  | unsigned int index= (avctx->bit_rate + avctx->sample_rate/2) / avctx->sample_rate - 2; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | if (avctx->bit_rate % avctx->sample_rate && avctx->codec->encode) { |  |  | if (avctx->bit_rate % avctx->sample_rate && avctx->codec->encode) { | 
														
													
												
													
														
															
																|  | @@ -321,8 +317,8 @@ static av_cold int g726_init(AVCodecContext * avctx) | 
														
													
														
															
																|  |  | av_log(avctx, AV_LOG_ERROR, "Unsupported number of bits %d\n", index+2); |  |  | av_log(avctx, AV_LOG_ERROR, "Unsupported number of bits %d\n", index+2); | 
														
													
														
															
																|  |  | return -1; |  |  | return -1; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | g726_reset(&c->c, index); |  |  |  | 
														
													
														
															
																|  |  | c->code_size = c->c.tbls->bits; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | g726_reset(c, index); | 
														
													
														
															
																|  |  |  |  |  | c->code_size = c->tbls->bits; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | avctx->coded_frame = avcodec_alloc_frame(); |  |  | avctx->coded_frame = avcodec_alloc_frame(); | 
														
													
														
															
																|  |  | if (!avctx->coded_frame) |  |  | if (!avctx->coded_frame) | 
														
													
												
													
														
															
																|  | @@ -342,14 +338,14 @@ static av_cold int g726_close(AVCodecContext *avctx) | 
														
													
														
															
																|  |  | static int g726_encode_frame(AVCodecContext *avctx, |  |  | static int g726_encode_frame(AVCodecContext *avctx, | 
														
													
														
															
																|  |  | uint8_t *dst, int buf_size, void *data) |  |  | uint8_t *dst, int buf_size, void *data) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | AVG726Context *c = avctx->priv_data; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | G726Context *c = avctx->priv_data; | 
														
													
														
															
																|  |  | short *samples = data; |  |  | short *samples = data; | 
														
													
														
															
																|  |  | PutBitContext pb; |  |  | PutBitContext pb; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | init_put_bits(&pb, dst, 1024*1024); |  |  | init_put_bits(&pb, dst, 1024*1024); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | for (; buf_size; buf_size--) |  |  | for (; buf_size; buf_size--) | 
														
													
														
															
																|  |  | put_bits(&pb, c->code_size, g726_encode(&c->c, *samples++)); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | put_bits(&pb, c->code_size, g726_encode(c, *samples++)); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | flush_put_bits(&pb); |  |  | flush_put_bits(&pb); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -361,14 +357,14 @@ static int g726_decode_frame(AVCodecContext *avctx, | 
														
													
														
															
																|  |  | void *data, int *data_size, |  |  | void *data, int *data_size, | 
														
													
														
															
																|  |  | const uint8_t *buf, int buf_size) |  |  | const uint8_t *buf, int buf_size) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | AVG726Context *c = avctx->priv_data; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | G726Context *c = avctx->priv_data; | 
														
													
														
															
																|  |  | short *samples = data; |  |  | short *samples = data; | 
														
													
														
															
																|  |  | GetBitContext gb; |  |  | GetBitContext gb; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | init_get_bits(&gb, buf, buf_size * 8); |  |  | init_get_bits(&gb, buf, buf_size * 8); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | while (get_bits_count(&gb) + c->code_size <= buf_size*8) |  |  | while (get_bits_count(&gb) + c->code_size <= buf_size*8) | 
														
													
														
															
																|  |  | *samples++ = g726_decode(&c->c, get_bits(&gb, c->code_size)); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | *samples++ = g726_decode(c, get_bits(&gb, c->code_size)); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | if(buf_size*8 != get_bits_count(&gb)) |  |  | if(buf_size*8 != get_bits_count(&gb)) | 
														
													
														
															
																|  |  | av_log(avctx, AV_LOG_ERROR, "Frame invalidly split, missing parser?\n"); |  |  | av_log(avctx, AV_LOG_ERROR, "Frame invalidly split, missing parser?\n"); | 
														
													
												
													
														
															
																|  | @@ -382,7 +378,7 @@ AVCodec adpcm_g726_encoder = { | 
														
													
														
															
																|  |  | "g726", |  |  | "g726", | 
														
													
														
															
																|  |  | CODEC_TYPE_AUDIO, |  |  | CODEC_TYPE_AUDIO, | 
														
													
														
															
																|  |  | CODEC_ID_ADPCM_G726, |  |  | CODEC_ID_ADPCM_G726, | 
														
													
														
															
																|  |  | sizeof(AVG726Context), |  |  |  | 
														
													
														
															
																|  |  |  |  |  | sizeof(G726Context), | 
														
													
														
															
																|  |  | g726_init, |  |  | g726_init, | 
														
													
														
															
																|  |  | g726_encode_frame, |  |  | g726_encode_frame, | 
														
													
														
															
																|  |  | g726_close, |  |  | g726_close, | 
														
													
												
													
														
															
																|  | @@ -395,7 +391,7 @@ AVCodec adpcm_g726_decoder = { | 
														
													
														
															
																|  |  | "g726", |  |  | "g726", | 
														
													
														
															
																|  |  | CODEC_TYPE_AUDIO, |  |  | CODEC_TYPE_AUDIO, | 
														
													
														
															
																|  |  | CODEC_ID_ADPCM_G726, |  |  | CODEC_ID_ADPCM_G726, | 
														
													
														
															
																|  |  | sizeof(AVG726Context), |  |  |  | 
														
													
														
															
																|  |  |  |  |  | sizeof(G726Context), | 
														
													
														
															
																|  |  | g726_init, |  |  | g726_init, | 
														
													
														
															
																|  |  | NULL, |  |  | NULL, | 
														
													
														
															
																|  |  | g726_close, |  |  | g726_close, | 
														
													
												
													
														
															
																|  | 
 |