Привет, я работаю над фильтром directshow для декодера. Для этого я использую библиотеку libde265. Но я столкнулся некоторые проблемы:Фильтр прямых показов с использованием libde265
HRESULT decoder::Transform(IMediaSample *pIn, IMediaSample *pOut)
{
FILE * fh;
tn++;
long sizein = 0;
BYTE *bufin;
BYTE *bufout;
BYTE *central_buffer;
int counter_tobuff = 0;
unsigned long nSrcDataSize;
unsigned long nMaxDestSize;
int totalbytes;
totalbytes = 0;
HRESULT hr;
// get the input and output buffers
pIn->GetPointer(&bufin);
pOut->GetPointer(&bufout);
nSrcDataSize = pIn->GetActualDataLength();
/**************************************de265.cc******************************************************/
de265_error err;
/********Intilializing the decoder*******/
if (tn == 1)
{
Init_decoder();
//de265_start_worker_threads(ctx, 1);
//de265_set_parameter_bool(ctx, DE265_DECODER_PARAM_DUMP_PPS_HEADERS, false);
}
/********Setting the parameters ********/
/*de265_set_parameter_bool(ctx, DE265_DECODER_PARAM_DUMP_PPS_HEADERS, true);*/
err = de265_push_data(ctx, bufin,nSrcDataSize, 1, NULL);
pos += nSrcDataSize;
if (!de265_isOK(err)) {
}
int more = 0;
const de265_image * img;
do {
err = de265_decode(ctx, &more);
if (err == DE265_OK)
{
img = de265_get_next_picture(ctx);
if (img)
{
set_output_filename("D:\\testnotcreated.yuv");
write_picture(img);
more = 0;
}
}
else
{
memcpy(bufout, bufin, nSrcDataSize);
more = 0;
}
} while (more);
counter_tobuff = 0;
/***************************************************************************************************/
//nMaxDestSize = pOut->GetSize();
hr = pOut->SetActualDataLength(nSrcDataSize);
//free(bufin);
if (FAILED(hr))
{
//m_pDbg->SendDbg(APP_ID_RGB2YUY2, DBG_ERROR, "CRGB2YUY2::Transform SetActualDataLength failed");
return S_FALSE;
}
return S_OK;
}
Что я предполагаю, что bufin непрерывно получать образцы и я должен передать его функции push_data, а затем декодировать его и записать в файл. Но этого не происходит. это не декодирование. Иногда он декодирует один или два кадра. Хотя этот код протестирован в exe, но разница в exe мы читаем данные из файла, и здесь мы работаем над непрерывным потоком. Так есть ли какая-то проблема в обработке данных, как непрерывный живой поток закодированного видео. Так что я могу сделать, чтобы разобраться в этом, чтобы он хорошо декодировал и записывал его в файл. Любая помощь будет действительно оценена, потому что я застрял.
У libde265 уже есть декодер DirectShow, интегрированный в фильтры LAV, почему бы просто не использовать их? – Ralf