[Cin] New thread on bdwrite + mpeg2 HDV video
Andrew Randrianasulu
randrianasulu at gmail.com
Mon Nov 7 17:10:37 CET 2022
Because old thread now a bit too big for mobile gmail client.
Yes, I'll try to see if it fails same way on my end.
code seems to check first 100 frames
2528 static int field_probe(AVFormatContext *fmt_ctx, AVStream *st)
2529 {
2530 AVDictionary *copts = 0;
2531 //av_dict_copy(&copts, opts, 0);
2532 AVCodecID codec_id = st->codecpar->codec_id;
2533 #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(58,134,100)
2534 AVCodec *decoder = avcodec_find_decoder(codec_id);
2535 #endif
2536 #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100)
2537 const AVCodec *decoder = avcodec_find_decoder(codec_id);
2538 #endif
2539 AVCodecContext *ctx = avcodec_alloc_context3(decoder);
2540 if( !ctx ) {
2541 fprintf(stderr,"codec alloc failed\n");
2542 return -1;
2543 }
2544 avcodec_parameters_to_context(ctx, st->codecpar);
2545 if( avcodec_open2(ctx, decoder, &copts) < 0 ) {
2546 fprintf(stderr,"codec open failed\n");
2547 return -1;
2548 }
2549 av_dict_free(&copts);
2550
2551 AVFrame *ipic = av_frame_alloc();
2552 AVPacket ipkt;
2553 av_init_packet(&ipkt);
2554 int ilaced = -1;
2555 for( int retrys=100; --retrys>=0 && ilaced<0; ) {
2556 av_packet_unref(&ipkt);
2557 int ret = av_read_frame(fmt_ctx, &ipkt);
2558 if( ret == AVERROR_EOF ) break;
2559 if( ret != 0 ) continue;
2560 if( ipkt.stream_index != st->index ) continue;
2561 if( !ipkt.data || !ipkt.size ) continue;
2562 ret = avcodec_send_packet(ctx, &ipkt);
2563 if( ret < 0 ) {
2564 fprintf(stderr, "avcodec_send_packet failed\n");
2565 break;
2566 }
2567 ret = avcodec_receive_frame(ctx, ipic);
2568 if( ret >= 0 ) {
2569 ilaced = ipic->interlaced_frame ? 1 : 0;
2570 break;
2571 }
2572 if( ret != AVERROR(EAGAIN) )
2573 fprintf(stderr, "avcodec_receive_frame failed %d\n", ret);
2574 }
2575 av_packet_unref(&ipkt);
2576 av_frame_free(&ipic);
2577 avcodec_free_context(&ctx);
2578 return ilaced;
may be we can add flags to force interlaced vs progressive to bdwrite ...
and/or debug why it fails.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20221107/be785ea1/attachment.htm>
More information about the Cin
mailing list