Dekoder strumienia video

0

Mianowicie napisalem dekoder video na podstawie ffmpeg
program sie kompiluje ale podczas uruchomienia wyskakuja mi takie blędy"

[code]'dekoder.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Cannot find or open the PDB file
'dekoder.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file
'dekoder.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file
The program '[1396] dekoder.exe: Native' has exited with code -1 (0xffffffff).[/code]

czy ktos wie czym to moze byc spowodowane i jak to naprawic ?

0

To nie są żadne błędy. Program wykonał się poprawnie (z punktu widzenia systemu operacyjnego) i zwrócił kod -1. Teraz spójrz do swojego kodu i sprawdź gdzie zwracasz taki kod. Najlepiej odpal debugger, bo pewnie return -1 jest zwracane przy każdym błędzie.

0

błąd jest tutaj:

[code]
int main(int argc, char** argv)
{
av_register_all();

AVFormatContext* pFormatCtx = NULL;
argv[1] = "sample.mpeg";
if( avformat_open_input( &pFormatCtx, argv[1], NULL, NULL ) != 0)
return -1;
[/code]

zawsze zwraca -1 nie wiem dlaczego co robie zle ?

0

Dlaczego próbujesz zmieniać argv? Tam pewnie nawet pamięć nie jest zaalokowana.

char plik[] = "sample.mpeg" i to przekaż do tej funkcji.

0

dalej to samo zawsze -1

0

Sprawdź co dokładnie zwraca ta funkcja i spójrz do dokumentacji co oznacza zwrócony kod błędu.

0

tak bedzie dobrze ?

    char ret = avformat_open_input( &pFormatCtx, filename, NULL, NULL );
   if (ret < 0){
   printf(&ret);
   return -1;
   }
0

Nie. Po co ten dupa debugging i dlaczego sądzisz, że ta funkcja zwraca char, a printf jako pierwszy argument pobiera wskaźnik do jednego znaku? Użyj debuggera jak człowiek, postaw breakpointa i przeczytaj tą wartość bezpośrednio z IDE. Tylko zamień to char na int. Potem w nagłówkach albo tutaj znajdź opis tego błędu.

Strzelam, że po prostu nie może znaleźć pliku, no bo raczej nic innego nie może się tutaj nie udać.

0

xD
[code]
avformat_open_input CXX0017: Error: symbol "avformat_open_input" not found
[/code]

0

To ten kod się kompiluje czy nie? Z pierwszego posta wynika, że tak, z tego, że nie.

Proponuję nauczyć się programować w C/C++ zanim zaczniesz pisać programy do odtwarzania filmów.

0

dobra ogarnąłem błąd :D
funkcja przyjmuje tylko pliki typu AVI, MOV, MP4, etc

0

mam teraz inny problem bo ta funkcja nie chce mi dzialac
konwertuje z yuv do rgb

            if(img_convert_ctx == NULL)
            {
               int w = pCodecCtx->width;
               int h = pCodecCtx->height;

               img_convert_ctx = sws_getContext(w, h, pCodecCtx->pix_fmt,
                                 w, h, PIX_FMT_RGB24, SWS_BICUBIC,
                                 NULL, NULL, NULL);

               if(img_convert_ctx == NULL)
               {
                  fprintf(stderr, "Cannot initialize the conversion context!\n");
                  exit(1);
               }

               int ret = sws_scale(img_convert_ctx, pFrame->data, 
                           pFrame->linesize, 0, pCodecCtx->height,
                           pFrameRGB->data, pFrameRGB->linesize);

               if(ret) 
               {
                  fprintf(stderr, "SWS_Scale failed [%d]!\n", ret);
                  exit(-1);
               } 

zawsze failed :(

0
               if(ret == 0)  //z dokumentacji wynika, że sws_scale zwraca "the height of the output slice"
               {
                  fprintf(stderr, "SWS_Scale failed [%d]!\n", ret);
                  exit(-1);
               } 
0

dobra działa :D
teraz jeszcze tylko musze zrobic jakis zapis do bmp czy cos

1 użytkowników online, w tym zalogowanych: 0, gości: 1