avcodec/noise_bsf: move the reference in the bsf internal buffer
There's no need to allocate a new packet for it. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
		
							parent
							
								
									ed1f08bfb5
								
							
						
					
					
						commit
						dc99ee6b08
					
				| @ -35,45 +35,38 @@ typedef struct NoiseContext { | ||||
|     unsigned int state; | ||||
| } NoiseContext; | ||||
| 
 | ||||
| static int noise(AVBSFContext *ctx, AVPacket *out) | ||||
| static int noise(AVBSFContext *ctx, AVPacket *pkt) | ||||
| { | ||||
|     NoiseContext *s = ctx->priv_data; | ||||
|     AVPacket *in; | ||||
|     int amount = s->amount > 0 ? s->amount : (s->state % 10001 + 1); | ||||
|     int i, ret = 0; | ||||
| 
 | ||||
|     if (amount <= 0) | ||||
|         return AVERROR(EINVAL); | ||||
| 
 | ||||
|     ret = ff_bsf_get_packet(ctx, &in); | ||||
|     ret = ff_bsf_get_packet_ref(ctx, pkt); | ||||
|     if (ret < 0) | ||||
|         return ret; | ||||
| 
 | ||||
|     if (s->dropamount > 0 && s->state % s->dropamount == 0) { | ||||
|         s->state++; | ||||
|         av_packet_free(&in); | ||||
|         av_packet_unref(pkt); | ||||
|         return AVERROR(EAGAIN); | ||||
|     } | ||||
| 
 | ||||
|     ret = av_new_packet(out, in->size); | ||||
|     ret = av_packet_make_writable(pkt); | ||||
|     if (ret < 0) | ||||
|         goto fail; | ||||
| 
 | ||||
|     ret = av_packet_copy_props(out, in); | ||||
|     if (ret < 0) | ||||
|         goto fail; | ||||
| 
 | ||||
|     memcpy(out->data, in->data, in->size); | ||||
| 
 | ||||
|     for (i = 0; i < out->size; i++) { | ||||
|         s->state += out->data[i] + 1; | ||||
|     for (i = 0; i < pkt->size; i++) { | ||||
|         s->state += pkt->data[i] + 1; | ||||
|         if (s->state % amount == 0) | ||||
|             out->data[i] = s->state; | ||||
|             pkt->data[i] = s->state; | ||||
|     } | ||||
| fail: | ||||
|     if (ret < 0) | ||||
|         av_packet_unref(out); | ||||
|     av_packet_free(&in); | ||||
|         av_packet_unref(pkt); | ||||
| 
 | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user