mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -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);
|
av_dump_format(inputContext, 0, path, false);
|
||||||
|
|
||||||
const unsigned int outputCount = inputContext->nb_streams;
|
const unsigned int outputCount = inputContext->nb_streams;
|
||||||
AVFormatContext* outputList[5];// = new AVFormatContext * [outputCount];
|
AVFormatContext** outputList = new AVFormatContext*[outputCount];
|
||||||
|
|
||||||
//Initialize output and set headers.
|
//Initialize output and set headers.
|
||||||
for (unsigned int i = 0; i < inputContext->nb_streams; i++)
|
for (unsigned int i = 0; i < inputContext->nb_streams; i++)
|
||||||
@ -80,7 +80,7 @@ void ExtractSubtitles(const char* path, const char* outPath)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//outputContext->metadata = inputContext->metadata; //ITS A FUCKING POINTER
|
av_dict_copy(&outputContext->metadata, inputContext->metadata, NULL);
|
||||||
|
|
||||||
AVStream* outputStream = avformat_new_stream(outputContext, NULL);
|
AVStream* outputStream = avformat_new_stream(outputContext, NULL);
|
||||||
if (outputStream == NULL)
|
if (outputStream == NULL)
|
||||||
@ -96,7 +96,30 @@ void ExtractSubtitles(const char* path, const char* outPath)
|
|||||||
}
|
}
|
||||||
outputStream->codecpar->codec_tag = 0;
|
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->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);
|
av_dump_format(outputContext, 0, output, true);
|
||||||
|
|
||||||
@ -117,32 +140,6 @@ void ExtractSubtitles(const char* path, const char* outPath)
|
|||||||
goto end;
|
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;
|
outputList[i] = outputContext;
|
||||||
|
|
||||||
if (false)
|
if (false)
|
||||||
@ -162,8 +159,8 @@ void ExtractSubtitles(const char* path, const char* outPath)
|
|||||||
AVPacket pkt;
|
AVPacket pkt;
|
||||||
while (av_read_frame(inputContext, &pkt) == 0)
|
while (av_read_frame(inputContext, &pkt) == 0)
|
||||||
{
|
{
|
||||||
//if (pkt.stream_index >= outputCount)
|
if (pkt.stream_index >= outputCount)
|
||||||
// continue;
|
continue;
|
||||||
|
|
||||||
AVFormatContext* outputContext = outputList[pkt.stream_index];
|
AVFormatContext* outputContext = outputList[pkt.stream_index];
|
||||||
if(outputContext == nullptr)
|
if(outputContext == nullptr)
|
||||||
@ -206,5 +203,5 @@ void ExtractSubtitles(const char* path, const char* outPath)
|
|||||||
avformat_free_context(outputContext);
|
avformat_free_context(outputContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
//delete[] outputList;
|
delete[] outputList;
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user