mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-10-31 02:27:11 -04:00 
			
		
		
		
	Extract subtitle logic is done.
This commit is contained in:
		
							parent
							
								
									ea5af3c318
								
							
						
					
					
						commit
						40d8575e55
					
				| @ -40,7 +40,7 @@ void ExtractSubtitles(const char* path, const char* outPath) | ||||
| 	av_dump_format(inputContext, 0, path, false); | ||||
| 
 | ||||
| 	const unsigned int outputCount = inputContext->nb_streams; | ||||
| 	AVFormatContext* outputList[5];// = new AVFormatContext * [outputCount];
 | ||||
| 	AVFormatContext** outputList = new AVFormatContext*[outputCount]; | ||||
| 
 | ||||
| 	//Initialize output and set headers.
 | ||||
| 	for (unsigned int i = 0; i < inputContext->nb_streams; i++) | ||||
| @ -80,7 +80,7 @@ void ExtractSubtitles(const char* path, const char* outPath) | ||||
| 				continue; | ||||
| 			} | ||||
| 
 | ||||
| 			//outputContext->metadata = inputContext->metadata; //ITS A FUCKING POINTER
 | ||||
| 			av_dict_copy(&outputContext->metadata, inputContext->metadata, NULL); | ||||
| 
 | ||||
| 			AVStream* outputStream = avformat_new_stream(outputContext, NULL); | ||||
| 			if (outputStream == NULL) | ||||
| @ -96,7 +96,30 @@ void ExtractSubtitles(const char* path, const char* outPath) | ||||
| 			} | ||||
| 			outputStream->codecpar->codec_tag = 0; | ||||
| 
 | ||||
| 			avformat_transfer_internal_stream_timing_info(outputContext->oformat, outputStream, inputStream, AVTimebaseSource::AVFMT_TBCF_AUTO); | ||||
| 			outputStream->time_base = av_add_q(av_stream_get_codec_timebase(outputStream), AVRational { 0, 1 }); | ||||
| 			outputStream->duration = av_rescale_q(inputStream->duration, inputStream->time_base, outputStream->time_base); | ||||
| 			outputStream->disposition = inputStream->disposition; | ||||
| 
 | ||||
| 			av_dict_copy(&outputStream->metadata, inputStream->metadata, NULL); | ||||
| 
 | ||||
| 			//if (inputStream->nb_side_data)
 | ||||
| 			//{
 | ||||
| 			//	for (int i = 0; i < inputStream->nb_side_data; i++)
 | ||||
| 			//	{
 | ||||
| 			//		std::cout << "Copying side packet #" << i << std::endl;
 | ||||
| 
 | ||||
| 			//		AVPacketSideData* sidePkt = &inputStream->side_data[i];
 | ||||
| 			//		uint8_t* newPkt = av_stream_new_side_data(outputStream, sidePkt->type, sidePkt->size);
 | ||||
| 			//		if (newPkt == NULL)
 | ||||
| 			//		{
 | ||||
| 			//			std::cout << "Error copying side package." << std::endl;
 | ||||
| 			//			//Should handle return here
 | ||||
| 			//			return;
 | ||||
| 			//		}
 | ||||
| 			//		memcpy(newPkt, sidePkt->data, sidePkt->size);
 | ||||
| 			//	}
 | ||||
| 			//}
 | ||||
| 
 | ||||
| 			av_dump_format(outputContext, 0, output, true); | ||||
| 
 | ||||
| @ -117,32 +140,6 @@ void ExtractSubtitles(const char* path, const char* outPath) | ||||
| 				goto end; | ||||
| 			} | ||||
| 
 | ||||
| 			#pragma region global metadata try | ||||
| 			//avformat_transfer_internal_stream_timing_info(outputContext->oformat, outputStream, inputStream, AVTimebaseSource::AVFMT_TBCF_AUTO);
 | ||||
| 
 | ||||
| 			//outputStream->time_base = av_add_q(av_stream_get_codec_timebase(outputStream), AVRational{ 0, 1 });
 | ||||
| 
 | ||||
| 			//outputStream->disposition = inputStream->disposition;
 | ||||
| 
 | ||||
| 			//if (inputStream->nb_side_data)
 | ||||
| 			//{
 | ||||
| 			//	for (int i = 0; i < inputStream->nb_side_data; i++)
 | ||||
| 			//	{
 | ||||
| 			//		std::cout << "Copying side packet #" << i << std::endl;
 | ||||
| 
 | ||||
| 			//		AVPacketSideData* sidePkt = &inputStream->side_data[i];
 | ||||
| 			//		uint8_t* newPkt = av_stream_new_side_data(outputStream, sidePkt->type, sidePkt->size);
 | ||||
| 			//		if (newPkt == NULL)
 | ||||
| 			//		{
 | ||||
| 			//			std::cout << "Error copying side package." << std::endl;
 | ||||
| 			//			//Should handle return here
 | ||||
| 			//			return;
 | ||||
| 			//		}
 | ||||
| 			//		memcpy(newPkt, sidePkt->data, sidePkt->size);
 | ||||
| 			//	}
 | ||||
| 			//}
 | ||||
| #pragma endregion | ||||
| 
 | ||||
| 			outputList[i] = outputContext; | ||||
| 
 | ||||
| 			if (false) | ||||
| @ -162,8 +159,8 @@ void ExtractSubtitles(const char* path, const char* outPath) | ||||
| 	AVPacket pkt; | ||||
| 	while (av_read_frame(inputContext, &pkt) == 0) | ||||
| 	{ | ||||
| 		//if (pkt.stream_index >= outputCount)
 | ||||
| 		//	continue;
 | ||||
| 		if (pkt.stream_index >= outputCount) | ||||
| 			continue; | ||||
| 
 | ||||
| 		AVFormatContext* outputContext = outputList[pkt.stream_index]; | ||||
| 		if(outputContext == nullptr) | ||||
| @ -206,5 +203,5 @@ void ExtractSubtitles(const char* path, const char* outPath) | ||||
| 		avformat_free_context(outputContext); | ||||
| 	} | ||||
| 
 | ||||
| 	//delete[] outputList;
 | ||||
| 	delete[] outputList; | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user