Hi.

Sorry. MailTransport broke my mail.

I create video stream restored from picutures.

[code]
static AVRational grabImgTimeBase = {1, 100000};
static AVRational outTimeBase = {1, 25};

....

                int pix_fmt;
                if (anImg->gim_format == mmioFOURCC('Y', '8', '0', '0'))
                        pix_fmt = PIX_FMT_GRAY8;
                else if (anImg->gim_format == mmioFOURCC('U', 'Y', 'V', 'Y'))
                        pix_fmt = PIX_FMT_UYVY422;
                else if (anImg->gim_format == mmioFOURCC('Y', 'U', 'Y', '2'))
                        pix_fmt = PIX_FMT_YUYV422;
                else {
                        if (!anImg->gim_format) {
                                if (anImg->gim_bpp == 32)
                                        pix_fmt = PIX_FMT_RGB32;
                                else if (anImg->gim_bpp == 32)
                                        pix_fmt = PIX_FMT_RGB24;
                                else if (anImg->gim_bpp == 16)
                                        pix_fmt = PIX_FMT_RGB555;
                                else
                                        return VA_ERROR_UNKNOWN;
                        }
                        else
                                return VA_ERROR_UNKNOWN;
                }

                avpicture_fill((AVPicture *)aChannel->frm_.FF()
                        , (uint8_t 
*)(pix_fmt==PIX_FMT_GRAY8?anImg->gim_image->img_base:anImg->gim_data)
                        , pix_fmt
                        , anImg->gim_image->img_width
                        , anImg->gim_image->img_height);
                
                bo_tm cd;
                memset(&cd, 0, sizeof(tm));
                cd.c.tm_year = anImg->gim_time.wYear-1900;
                cd.c.tm_mon = anImg->gim_time.wMonth-1;
                cd.c.tm_mday = anImg->gim_time.wDay;
                cd.c.tm_hour = anImg->gim_time.wHour;
                cd.c.tm_min = anImg->gim_time.wMinute;
                cd.c.tm_sec = anImg->gim_time.wSecond;
                cd.tm_usec = anImg->gim_time.wMilliseconds*1000; // tm_usec - в 
микросекундах
                
                
                int64_t curAVTime = av_gettime();
                aChannel->frm_.FF()->pts = av_rescale_q(BoMkgmtime(&cd)
                        , grabImgTimeBase, outTimeBase);
[/code]

Then I encode pictures to mpeg4 and used for write avi muxer.
When by default AVCodecContext filed block_align set to 0 avi muxer begin 
endlessness loop.

[code]
    while(enc->block_align==0 && pkt->dts != AV_NOPTS_VALUE && pkt->dts > 
avi->packet_count[stream_index]){
        AVPacket empty_packet;

        av_init_packet(&empty_packet);
        empty_packet.size= 0;
        empty_packet.data= NULL;
        empty_packet.stream_index= stream_index;
        avi_write_packet(s, &empty_packet);
//        av_log(s, AV_LOG_DEBUG, "dup %"PRId64" %d\n", pkt->dts, 
avi->packet_count[stream_index]);
    }
[/code]


What I do wrong?


Vasiliy.

-- реклама -----------------------------------------------------------
http://FREEhost.com.ua - доступный хостинг, домен в подарок

_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to