| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -156,6 +156,8 @@ static char *extradata2psets(AVCodecContext *c) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    char *psets, *p; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const uint8_t *r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const char *pset_string = "; sprop-parameter-sets="; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint8_t *orig_extradata = NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int orig_extradata_size = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (c->extradata_size > MAX_EXTRADATA_SIZE) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(c, AV_LOG_ERROR, "Too much extradata!\n"); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -172,6 +174,15 @@ static char *extradata2psets(AVCodecContext *c) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        orig_extradata_size = c->extradata_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        orig_extradata = av_mallocz(orig_extradata_size + | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    FF_INPUT_BUFFER_PADDING_SIZE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (!orig_extradata) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            av_bitstream_filter_close(bsfc); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        memcpy(orig_extradata, c->extradata, orig_extradata_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_bitstream_filter_filter(bsfc, c, NULL, &dummy_p, &dummy_int, NULL, 0, 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_bitstream_filter_close(bsfc); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -179,6 +190,7 @@ static char *extradata2psets(AVCodecContext *c) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    psets = av_mallocz(MAX_PSET_SIZE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (psets == NULL) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(c, AV_LOG_ERROR, "Cannot allocate memory for the parameter sets.\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_free(orig_extradata); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    memcpy(psets, pset_string, strlen(pset_string)); | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -208,6 +220,11 @@ static char *extradata2psets(AVCodecContext *c) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        p += strlen(p); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        r = r1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (orig_extradata) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_free(c->extradata); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        c->extradata      = orig_extradata; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        c->extradata_size = orig_extradata_size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return psets; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |