| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -1452,6 +1452,7 @@ static int dvbsub_decode(AVCodecContext *avctx, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int page_id; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int segment_length; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int got_segment = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    av_dlog(avctx, "DVB sub packet:\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1490,21 +1491,26 @@ static int dvbsub_decode(AVCodecContext *avctx, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            switch (segment_type) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case DVBSUB_PAGE_SEGMENT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                dvbsub_parse_page_segment(avctx, p, segment_length); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                got_segment |= 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case DVBSUB_REGION_SEGMENT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                dvbsub_parse_region_segment(avctx, p, segment_length); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                got_segment |= 2; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case DVBSUB_CLUT_SEGMENT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                dvbsub_parse_clut_segment(avctx, p, segment_length); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                got_segment |= 4; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case DVBSUB_OBJECT_SEGMENT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                dvbsub_parse_object_segment(avctx, p, segment_length); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                got_segment |= 8; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case DVBSUB_DISPLAYDEFINITION_SEGMENT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                dvbsub_parse_display_definition_segment(avctx, p, segment_length); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case DVBSUB_DISPLAY_SEGMENT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                *data_size = dvbsub_display_end_segment(avctx, p, segment_length, sub); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                got_segment |= 16; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            default: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                av_dlog(avctx, "Subtitling segment type 0x%x, page id %d, length %d\n", | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -1515,6 +1521,10 @@ static int dvbsub_decode(AVCodecContext *avctx, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        p += segment_length; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // Some streams do not send a display segment but if we have all the other | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // segments then we need no further data. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (got_segment == 15 && sub) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        *data_size = dvbsub_display_end_segment(avctx, p, 0, sub); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return p - buf; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |