Skip to content

Commit

Permalink
Added runtime bitrate and fps control
Browse files Browse the repository at this point in the history
  • Loading branch information
ReferenceType committed Sep 9, 2023
1 parent 361d593 commit 815b4aa
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 8 deletions.
6 changes: 4 additions & 2 deletions EncoderTest/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,14 @@ static void Main(string[] args)
foreach (var frame in frames)
{

byte[] b = frame.ToByteArray();
frame.CopyTo(buffer, 0);
//byte[] b = frame.ToByteArray();
//frame.CopyTo(buffer, 0);
Decode(frame.Data, frame.Length, frame.Type);
}

}
encoder.SetMaxBitrate((1+i)*100000);
encoder.SetTargetFps(22);
}
Console.WriteLine("\n Time: "+sw.ElapsedMilliseconds);

Expand Down
1 change: 0 additions & 1 deletion H264Sharp/Decoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using namespace System::Drawing;
using namespace System::Drawing::Imaging;
using namespace System::Runtime::InteropServices;
using namespace std::chrono;

namespace H264Sharp {

Expand Down
22 changes: 19 additions & 3 deletions H264Sharp/Encoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include <iostream>
#include "Encoder.h"

using namespace std::chrono;
using namespace System::Drawing;
using namespace System::Drawing::Imaging;
using namespace System::Runtime::InteropServices;
Expand Down Expand Up @@ -323,9 +322,9 @@ namespace H264Sharp {

}

bool Encoder::Encode(array<Byte>^ i420, [Out]array<EncodedFrame^>^% frame)
bool Encoder::Encode(array<Byte>^ i420, int startIndex, [Out]array<EncodedFrame^>^% frame)
{
pin_ptr<Byte> ptr = &i420[0];
pin_ptr<Byte> ptr = &i420[startIndex];
bool res = Encode(innerBuffer, frame);

ptr = nullptr; // unpin
Expand Down Expand Up @@ -381,6 +380,23 @@ namespace H264Sharp {
return encoder->ForceIntraFrame(true);
}

void H264Sharp::Encoder::SetMaxBitrate(int target)
{
SBitrateInfo param;

memset(&param, 0, sizeof(SBitrateInfo));
param.iBitrate = target;
param.iLayer = SPATIAL_LAYER_ALL;
encoder->SetOption(ENCODER_OPTION_MAX_BITRATE, &param);
encoder->SetOption(ENCODER_OPTION_BITRATE, &param);
}
void H264Sharp::Encoder::SetTargetFps(float target)
{

encoder->SetOption(ENCODER_OPTION_FRAME_RATE, &target);
}


Encoder::~Encoder()
{
this->!Encoder();
Expand Down
5 changes: 3 additions & 2 deletions H264Sharp/Encoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,13 @@ namespace H264Sharp {
bool Encode(BgraImage ^bgra, array<EncodedFrame^>^% frame);
bool Encode(RgbImage ^rgb, array<EncodedFrame^>^% frame);
bool Encode(RgbaImage ^rgba, array<EncodedFrame^>^% frame);
bool Encode(array<Byte> ^i420, array<EncodedFrame^>^% frame);
bool Encode(array<Byte> ^i420, int startIndex, array<EncodedFrame^>^% frame);
bool Encode(unsigned char* i420, array<EncodedFrame^>^% frame);
bool Encode(IntPtr^ i420, array<EncodedFrame^>^% frame);

int ForceIntraFrame();

void SetMaxBitrate(int target);
void SetTargetFps(float target);

private:
int buffer_size;
Expand Down

0 comments on commit 815b4aa

Please sign in to comment.