Merge pull request #1676 from CobaltSpace/master
Add H.264 RGB export option
This commit is contained in:
@@ -34,6 +34,8 @@ QString ExportCodec::GetCodecName(ExportCodec::Codec c)
|
||||
return tr("DNxHD");
|
||||
case kCodecH264:
|
||||
return tr("H.264");
|
||||
case kCodecH264rgb:
|
||||
return tr("H.264 RGB");
|
||||
case kCodecH265:
|
||||
return tr("H.265");
|
||||
case kCodecOpenEXR:
|
||||
@@ -74,6 +76,7 @@ bool ExportCodec::IsCodecAStillImage(ExportCodec::Codec c)
|
||||
switch (c) {
|
||||
case kCodecDNxHD:
|
||||
case kCodecH264:
|
||||
case kCodecH264rgb:
|
||||
case kCodecH265:
|
||||
case kCodecProRes:
|
||||
case kCodecMP2:
|
||||
|
||||
@@ -37,6 +37,7 @@ public:
|
||||
// Video codecs
|
||||
kCodecDNxHD,
|
||||
kCodecH264,
|
||||
kCodecH264rgb,
|
||||
kCodecH265,
|
||||
kCodecOpenEXR,
|
||||
kCodecPNG,
|
||||
|
||||
@@ -107,9 +107,9 @@ QList<ExportCodec::Codec> ExportFormat::GetVideoCodecs(ExportFormat::Format f)
|
||||
case kFormatDNxHD:
|
||||
return {ExportCodec::kCodecDNxHD};
|
||||
case kFormatMatroska:
|
||||
return {ExportCodec::kCodecH264, ExportCodec::kCodecH265};
|
||||
return {ExportCodec::kCodecH264, ExportCodec::kCodecH264rgb, ExportCodec::kCodecH265, ExportCodec::kCodecVP9};
|
||||
case kFormatMPEG4:
|
||||
return {ExportCodec::kCodecH264, ExportCodec::kCodecH265};
|
||||
return {ExportCodec::kCodecH264, ExportCodec::kCodecH264rgb, ExportCodec::kCodecH265};
|
||||
case kFormatOpenEXR:
|
||||
return {ExportCodec::kCodecOpenEXR};
|
||||
case kFormatPNG:
|
||||
@@ -117,7 +117,7 @@ QList<ExportCodec::Codec> ExportFormat::GetVideoCodecs(ExportFormat::Format f)
|
||||
case kFormatTIFF:
|
||||
return {ExportCodec::kCodecTIFF};
|
||||
case kFormatQuickTime:
|
||||
return {ExportCodec::kCodecH264, ExportCodec::kCodecH265, ExportCodec::kCodecProRes};
|
||||
return {ExportCodec::kCodecH264, ExportCodec::kCodecH264rgb, ExportCodec::kCodecH265, ExportCodec::kCodecProRes};
|
||||
case kFormatWebM:
|
||||
return {ExportCodec::kCodecVP9};
|
||||
case kFormatOgg:
|
||||
@@ -140,7 +140,7 @@ QList<ExportCodec::Codec> ExportFormat::GetAudioCodecs(ExportFormat::Format f)
|
||||
case kFormatDNxHD:
|
||||
return {ExportCodec::kCodecPCM};
|
||||
case kFormatMatroska:
|
||||
return {ExportCodec::kCodecAAC, ExportCodec::kCodecMP2, ExportCodec::kCodecMP3, ExportCodec::kCodecPCM, ExportCodec::kCodecVorbis, ExportCodec::kCodecOpus};
|
||||
return {ExportCodec::kCodecAAC, ExportCodec::kCodecMP2, ExportCodec::kCodecMP3, ExportCodec::kCodecPCM, ExportCodec::kCodecVorbis, ExportCodec::kCodecOpus, ExportCodec::kCodecFLAC};
|
||||
case kFormatMPEG4:
|
||||
return {ExportCodec::kCodecAAC, ExportCodec::kCodecMP2, ExportCodec::kCodecMP3};
|
||||
case kFormatQuickTime:
|
||||
|
||||
@@ -56,6 +56,9 @@ QStringList FFmpegEncoder::GetPixelFormatsForCodec(ExportCodec::Codec c) const
|
||||
case ExportCodec::kCodecH264:
|
||||
codec_info = avcodec_find_encoder(AV_CODEC_ID_H264);
|
||||
break;
|
||||
case ExportCodec::kCodecH264rgb:
|
||||
codec_info = avcodec_find_encoder_by_name("libx264rgb");
|
||||
break;
|
||||
case ExportCodec::kCodecDNxHD:
|
||||
codec_info = avcodec_find_encoder(AV_CODEC_ID_DNXHD);
|
||||
break;
|
||||
@@ -624,6 +627,7 @@ bool FFmpegEncoder::InitializeStream(AVMediaType type, AVStream** stream_ptr, AV
|
||||
codec_id = AV_CODEC_ID_MP3;
|
||||
break;
|
||||
case ExportCodec::kCodecH264:
|
||||
case ExportCodec::kCodecH264rgb:
|
||||
codec_id = AV_CODEC_ID_H264;
|
||||
break;
|
||||
case ExportCodec::kCodecH265:
|
||||
@@ -669,7 +673,8 @@ bool FFmpegEncoder::InitializeStream(AVMediaType type, AVStream** stream_ptr, AV
|
||||
}
|
||||
|
||||
// Find encoder with this name
|
||||
AVCodec* encoder = avcodec_find_encoder(codec_id);
|
||||
AVCodec* encoder =
|
||||
codec == ExportCodec::kCodecH264rgb ? avcodec_find_encoder_by_name("libx264rgb") : avcodec_find_encoder(codec_id);
|
||||
|
||||
if (!encoder) {
|
||||
SetError(tr("Failed to find codec for %1").arg(codec));
|
||||
|
||||
@@ -232,14 +232,16 @@ void ExportVideoTab::VideoCodecChanged()
|
||||
{
|
||||
ExportCodec::Codec codec = GetSelectedCodec();
|
||||
|
||||
if (codec == ExportCodec::kCodecH264) {
|
||||
SetCodecSection(h264_section_);
|
||||
} else if (codec == ExportCodec::kCodecH265) {
|
||||
SetCodecSection(h265_section_);
|
||||
} else if (ExportCodec::IsCodecAStillImage(codec)) {
|
||||
SetCodecSection(image_section_);
|
||||
} else {
|
||||
SetCodecSection(nullptr);
|
||||
switch (codec) {
|
||||
case ExportCodec::kCodecH264:
|
||||
case ExportCodec::kCodecH264rgb:
|
||||
SetCodecSection(h264_section_);
|
||||
break;
|
||||
case ExportCodec::kCodecH265:
|
||||
SetCodecSection(h265_section_);
|
||||
break;
|
||||
default:
|
||||
SetCodecSection(ExportCodec::IsCodecAStillImage(codec) ? image_section_ : nullptr);
|
||||
}
|
||||
|
||||
// Set default pixel format
|
||||
|
||||
Reference in New Issue
Block a user