| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -82,12 +82,6 @@ static void delta_decode(uint8_t *dst, const uint8_t *src, int src_size, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    *state = val; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static void raw_decode(uint8_t *dst, const int8_t *src, int src_size) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    while (src_size--) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        *dst++ = *src++ + 128; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/** decode a frame */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                 int *got_frame_ptr, AVPacket *avpkt) | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -95,8 +89,7 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    EightSvxContext *esc = avctx->priv_data; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int buf_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int ch, ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int is_compr = (avctx->codec_id != AV_CODEC_ID_PCM_S8_PLANAR); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int hdr_size  = is_compr ? 2 : 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int hdr_size = 2; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    /* decode and interleave the first packet */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!esc->data[0] && avpkt) { | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -110,11 +103,9 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return AVERROR(EINVAL); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (is_compr) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            esc->fib_acc[0] = avpkt->data[1] + 128; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (avctx->channels == 2) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                esc->fib_acc[1] = avpkt->data[2+chan_size+1] + 128; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        esc->fib_acc[0] = avpkt->data[1] + 128; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (avctx->channels == 2) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            esc->fib_acc[1] = avpkt->data[2+chan_size+1] + 128; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        esc->data_idx  = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        esc->data_size = chan_size; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -143,20 +134,15 @@ static int eightsvx_decode_frame(AVCodecContext *avctx, void *data, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    /* get output buffer */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    esc->frame.nb_samples = buf_size * (is_compr + 1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    esc->frame.nb_samples = buf_size * 2; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if ((ret = avctx->get_buffer(avctx, &esc->frame)) < 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (ch = 0; ch < avctx->channels; ch++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (is_compr) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            delta_decode(esc->frame.data[ch], &esc->data[ch][esc->data_idx], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                         buf_size, &esc->fib_acc[ch], esc->table); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            raw_decode(esc->frame.data[ch], &esc->data[ch][esc->data_idx], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       buf_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        delta_decode(esc->frame.data[ch], &esc->data[ch][esc->data_idx], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                     buf_size, &esc->fib_acc[ch], esc->table); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    esc->data_idx += buf_size; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -179,8 +165,6 @@ static av_cold int eightsvx_decode_init(AVCodecContext *avctx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    switch (avctx->codec->id) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case AV_CODEC_ID_8SVX_FIB: esc->table = fibonacci;    break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case AV_CODEC_ID_8SVX_EXP: esc->table = exponential;  break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case AV_CODEC_ID_PCM_S8_PLANAR: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case AV_CODEC_ID_8SVX_RAW: esc->table = NULL;         break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    default: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(avctx, AV_LOG_ERROR, "Invalid codec id %d.\n", avctx->codec->id); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR_INVALIDDATA; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -235,18 +219,3 @@ AVCodec ff_eightsvx_exp_decoder = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                    AV_SAMPLE_FMT_NONE }, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if CONFIG_PCM_S8_PLANAR_DECODER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			AVCodec ff_pcm_s8_planar_decoder = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .name           = "pcm_s8_planar", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .type           = AVMEDIA_TYPE_AUDIO, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .id             = AV_CODEC_ID_PCM_S8_PLANAR, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .priv_data_size = sizeof(EightSvxContext), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .init           = eightsvx_decode_init, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .close          = eightsvx_decode_close, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .decode         = eightsvx_decode_frame, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .capabilities   = CODEC_CAP_DR1, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .long_name      = NULL_IF_CONFIG_SMALL("PCM signed 8-bit planar"), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                      AV_SAMPLE_FMT_NONE }, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif |