You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	ffmpeg: Support copying unknown streams
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										1
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -2822,6 +2822,7 @@ static int transcode_init(void) | ||||
|                 enc_ctx->width  = dec_ctx->width; | ||||
|                 enc_ctx->height = dec_ctx->height; | ||||
|                 break; | ||||
|             case AVMEDIA_TYPE_UNKNOWN: | ||||
|             case AVMEDIA_TYPE_DATA: | ||||
|             case AVMEDIA_TYPE_ATTACHMENT: | ||||
|                 break; | ||||
|   | ||||
							
								
								
									
										24
									
								
								ffmpeg_opt.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ffmpeg_opt.c
									
									
									
									
									
								
							| @@ -112,6 +112,7 @@ static int input_sync; | ||||
| static int override_ffserver  = 0; | ||||
| static int input_stream_potentially_available = 0; | ||||
| static int ignore_unknown_streams = 0; | ||||
| static int copy_unknown_streams = 0; | ||||
|  | ||||
| static void uninit_options(OptionsContext *o) | ||||
| { | ||||
| @@ -1566,6 +1567,19 @@ static OutputStream *new_data_stream(OptionsContext *o, AVFormatContext *oc, int | ||||
|     return ost; | ||||
| } | ||||
|  | ||||
| static OutputStream *new_unknown_stream(OptionsContext *o, AVFormatContext *oc, int source_index) | ||||
| { | ||||
|     OutputStream *ost; | ||||
|  | ||||
|     ost = new_output_stream(o, oc, AVMEDIA_TYPE_UNKNOWN, source_index); | ||||
|     if (!ost->stream_copy) { | ||||
|         av_log(NULL, AV_LOG_FATAL, "Unknown stream encoding not supported yet (only streamcopy)\n"); | ||||
|         exit_program(1); | ||||
|     } | ||||
|  | ||||
|     return ost; | ||||
| } | ||||
|  | ||||
| static OutputStream *new_attachment_stream(OptionsContext *o, AVFormatContext *oc, int source_index) | ||||
| { | ||||
|     OutputStream *ost = new_output_stream(o, oc, AVMEDIA_TYPE_ATTACHMENT, source_index); | ||||
| @@ -2018,6 +2032,11 @@ loop_end: | ||||
|                 case AVMEDIA_TYPE_SUBTITLE:   ost = new_subtitle_stream  (o, oc, src_idx); break; | ||||
|                 case AVMEDIA_TYPE_DATA:       ost = new_data_stream      (o, oc, src_idx); break; | ||||
|                 case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc, src_idx); break; | ||||
|                 case AVMEDIA_TYPE_UNKNOWN: | ||||
|                     if (copy_unknown_streams) { | ||||
|                         ost = new_unknown_stream   (o, oc, src_idx); | ||||
|                         break; | ||||
|                     } | ||||
|                 default: | ||||
|                     av_log(NULL, ignore_unknown_streams ? AV_LOG_WARNING : AV_LOG_FATAL, | ||||
|                            "Cannot map stream #%d:%d - unsupported type.\n", | ||||
| @@ -2025,7 +2044,8 @@ loop_end: | ||||
|                     if (!ignore_unknown_streams) { | ||||
|                         av_log(NULL, AV_LOG_FATAL, | ||||
|                                "If you want unsupported types ignored instead " | ||||
|                                "of failing, please use the -ignore_unknown option\n"); | ||||
|                                "of failing, please use the -ignore_unknown option\n" | ||||
|                                "If you want them copied, please use -copy_unknown\n"); | ||||
|                         exit_program(1); | ||||
|                     } | ||||
|                 } | ||||
| @@ -2864,6 +2884,8 @@ const OptionDef options[] = { | ||||
|         "never overwrite output files" }, | ||||
|     { "ignore_unknown", OPT_BOOL,                                    {              &ignore_unknown_streams }, | ||||
|         "Ignore unknown stream types" }, | ||||
|     { "copy_unknown",   OPT_BOOL | OPT_EXPERT,                       {              ©_unknown_streams }, | ||||
|         "Copy unknown stream types" }, | ||||
|     { "c",              HAS_ARG | OPT_STRING | OPT_SPEC | | ||||
|                         OPT_INPUT | OPT_OUTPUT,                      { .off       = OFFSET(codec_names) }, | ||||
|         "codec name", "codec" }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user