Фильтр Direct Show с использованием libde265

Эй, я работаю над декодером DirectShow Filer. Я использую библиотеку 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, мы читаем данные из файла, и здесь мы работаем с непрерывным потоком.
Так что есть проблема в обработке данных, как непрерывный поток кодированного видео в реальном времени.
Итак, что я могу сделать, чтобы разобраться в этом, чтобы он хорошо декодировался и записать его в файл.
Любая помощь будет по достоинству оценена, потому что я застрял.

1

Решение

Порядок декодирования изображений в H.265 не совпадает с порядком отображения. Это означает, что декодеру иногда приходится задерживать вывод кадра до тех пор, пока не будет достигнута его позиция отображения. Следовательно, для некоторых кадров он ничего не выводит, а для других кадров он выводит несколько (буферизованных) кадров одновременно. Вы можете использовать пользовательские данные, чтобы определить, какой кадр пришел с какого входа.

0

Другие решения


По вопросам рекламы [email protected]