2013-04-05 2 views
0

Je peux lire avec succès un fichier vidéo à l'aide ffmpegFFMPEG - Lire fichier vidéo et convertir en Bitmap

Maintenant, je veux montrer ces images vidéo sur mon MFC IMD.

Pour que je besoin d'un bitmap pour nourrir ma CBitmap :: FromHandle() fonction

memDC.CreateCompatibleDC(dc); 

CBitmap * bmp = CBitmap::FromHandle(); 

CBitmap * oldBmp = memDC.SelectObject(bmp); 

dc->BitBlt(0,0,320,240,&memDC,0,0,SRCCOPY); 

Pour ffmpeg j'utilise tutoriel Dranger 01

http://dranger.com/ffmpeg/tutorial01.html

S'il vous plaît indiquer comment convertir les cadres en bitmap

Merci

+0

Si vous utilisez une source plus récente, consultez la version du [code source mis à jour] (https://github.com/chelyaev/ffmpeg-tutorial) du tutoriel. – LordNeckbeard

+0

J'ai mis à jour le code et supprimé toutes les fonctions obsolètes. Merci de demander – user1573610

Répondre

0

Je travaille là-dessus pour les 3 derniers jours et arrivé jusqu'ici

maintenant Les cadres sont Bitblt à courant continu avec succès, mais ils sont à l'envers

S'il vous plaît laissez-moi savoir s'il y a quelque chose de mal avec le code

avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, 
       pCodecCtx->width, pCodecCtx->height); 


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); 

/*CClientDC dc;*/ 
BITMAPINFO bmi = {0}; 
bmi.bmiHeader.biBitCount = 24; 
bmi.bmiHeader.biCompression = BI_RGB; 
bmi.bmiHeader.biHeight = -pCodecCtx->height; 
bmi.bmiHeader.biWidth = pCodecCtx->width; 
bmi.bmiHeader.biPlanes = 1; 
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 
bmi.bmiHeader.biSizeImage = pCodecCtx->height * pCodecCtx->width * 3; 
hbmp = CreateDIBSection(hdcmem, &bmi, DIB_RGB_COLORS, &pbmpdata , NULL, 0); //&pbmpdata 

hdcscr = GetDC(0); 
hdcmem = CreateCompatibleDC(hdcscr); 


i=0; 
while((av_read_frame(pFormatCtx, &packet)>=0)) { 
    // Is this a packet from the video stream? 
    if(packet.stream_index==videoStreamIdx) { 

     /// Decode video frame 
     //avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,packet.data, packet.size); 
     avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet); 

     // Did we get a video frame? 
     if(frameFinished) { 
      i++; 
      sws_scale(img_convert_ctx, pFrame->data, 
         pFrame->linesize, 0, pCodecCtx->height, 
         pFrameRGB->data, pFrameRGB->linesize); 


      pFrameRGB->data[0] = (uint8_t*)pbmpdata; 
      pFrameRGB->linesize[0] = pCodecCtx->width * 3; 

      SelectObject(hdcmem, hbmp);//hbmp 


      BitBlt(hdcscr, 0, 0, pCodecCtx->width, pCodecCtx->height, hdcmem , 0, 0, SRCCOPY); 
      Sleep(10); 
     } 
    } 

    // Free the packet that was allocated by av_read_frame 
    av_free_packet(&packet); 
} 
+0

Il suffit de changer bmi.bmiHeader.biHeight à -pCodecCtx-> hauteur fonctionne bien maintenant – user1573610

Questions connexes