So there is no way to determine decoding errors except parsing log messages? It smells terrible ) I see only way to detect such green images by analyzing color of decoded frames, but it can be CPU-intensive
Also of course it's possible to patch some decoders, but It's also not correct way I guess. ср, 3 окт. 2018 г. в 13:48, Anton Shekhovtsov <[email protected]>: > > > ср, 3 окт. 2018 г. в 13:31, Niraj Gandha <[email protected]>: > >> Use below code and might help you in solving your problem. >> >> while (av_read_frame(refrenceFormatCtx, &packet) >= 0) { >> >> if (packet.stream_index == video_stream_index) { //packet is video >> >> if (stream == NULL) { //create stream in file >> >> stream = avformat_new_stream(output_ctx, >> refrenceFormatCtx->streams[video_stream_index]->codec->codec); >> >> avcodec_copy_context(stream->codec, >> refrenceFormatCtx->streams[video_stream_index]->codec); >> >> stream->sample_aspect_ratio = >> refrenceFormatCtx->streams[video_stream_index]->codec->sample_aspect_ratio; >> >> } >> int check = 0; >> packet.stream_index = stream->id; >> int result = avcodec_decode_video2(codec_ctx, picture_yuv, &check, >> &packet); >> >> av_free_packet(&packet); >> >> av_packet_unref(&packet); >> >> if(result <= 0 || check == 0){ >> >> continue; >> >> } >> >> if(initialize_rgb_requirements) { >> >> sizeofrgbpicture = avpicture_get_size(AV_PIX_FMT_RGB24, codec_ctx->width, >> codec_ctx->height); >> >> picture_rgb = av_frame_alloc(); >> >> picture_buffer_rgb = (uint8_t*) (av_malloc(sizeofrgbpicture)); >> >> avpicture_fill((AVPicture *) picture_rgb, picture_buffer_rgb, >> AV_PIX_FMT_RGB24, codec_ctx->width, codec_ctx->height); >> >> img_convert_ctx = sws_getContext(codec_ctx->width, codec_ctx->height, >> AV_PIX_FMT_YUV420P, codec_ctx->width, codec_ctx->height,AV_PIX_FMT_RGB24, >> SWS_BICUBIC, NULL, NULL, NULL); >> initialize_rgb_requirements=0; >> >> } >> >> int height = 0; >> >> if(picture_yuv->data != NULL) { >> height = sws_scale(img_convert_ctx, ((AVPicture*)picture_yuv)->data, >> ((AVPicture*)picture_yuv)->linesize, 0, codec_ctx->height, >> ((AVPicture*)picture_rgb)->data,((AVPicture*)picture_rgb)->linesize); >> >> } >> >> rgb_image_data = (uint8_t *)malloc(sizeofrgbpicture * sizeof(uint8_t)); >> >> int ret = avpicture_layout((AVPicture *)picture_rgb, AV_PIX_FMT_RGB24, >> codec_ctx->width, codec_ctx->height, rgb_image_data, sizeofrgbpicture); >> >> emit imageQueued(rgb_image_data, codec_ctx->width,codec_ctx->height); >> >> } >> } >> >> Get Outlook for Android <https://aka.ms/ghei36> >> >> ------------------------------ >> *From:* Libav-user <[email protected]> on behalf of Vasiliy >> Volkov <[email protected]> >> *Sent:* Wednesday, October 3, 2018 3:44:49 PM >> *To:* [email protected] >> *Subject:* Re: [Libav-user] [External] Questions about decoding broken >> streams >> >> Well there is no anything unusual in our code. We're simply use this API: >> https://ffmpeg.org/doxygen/4.0/group__lavc__encdec.html >> >> avcodec_send_packet >> avcodec_receive_frame >> >> And for context we setup: >> context->err_recognition = AV_EF_EXPLODE | AV_EF_BITSTREAM | AV_EF_BUFFER >> | AV_EF_CAREFUL | AV_EF_COMPLIANT | AV_EF_AGGRESSIVE; >> >> >> ср, 3 окт. 2018 г. в 12:58, Niraj Gandha <[email protected]>: >> >>> Hi Vasiliy, >>> >>> Can you share the code in which you are decoding the stream? >>> >>> Thanks, >>> Niraj Gandha >>> >>> Get Outlook for Android <https://aka.ms/ghei36> >>> >>> ------------------------------ >>> *From:* Libav-user <[email protected]> on behalf of Vasiliy >>> Volkov <[email protected]> >>> *Sent:* Wednesday, October 3, 2018 3:08:08 PM >>> *To:* [email protected] >>> *Subject:* [External] [Libav-user] Questions about decoding broken >>> streams >>> >>> CAUTION: This email originated from outside of the organization. Do not >>> click links or open attachments unless you recognize the sender and know >>> the content is safe. >>> >>> Hi, >>> >>> I'm trying to deal with broken streams with libav. Sometimes streams can >>> be broken due to nature of incoming network channel (UDP multicast) but i'd >>> like to "fix them" as much as possible. I'm trying to fill broken frames >>> with last good decoded frame. There are situations when I can do such thing >>> and everything is ok but most of time it's not helping: libav tries to >>> decode broken stream and add some green frames (h264 decoding) which really >>> catch your eyes when you watch this stream after encoding. >>> Is it possible to change this color to black for example? Can libav >>> while decoding set some flags to frames and mark them as broken or "green"? >>> It will be helpful because next I'll can replace such frames with >>> correctly decoded which fix it. >>> >>> Thanks >>> ************************************************************************************************************************************************************* >>> eInfochips Business Disclaimer: This e-mail message and all attachments >>> transmitted with it are intended solely for the use of the addressee and >>> may contain legally privileged and confidential information. If the reader >>> of this message is not the intended recipient, or an employee or agent >>> responsible for delivering this message to the intended recipient, you are >>> hereby notified that any dissemination, distribution, copying, or other use >>> of this message or its attachments is strictly prohibited. If you have >>> received this message in error, please notify the sender immediately by >>> replying to this message and please delete it from your computer. Any views >>> expressed in this message are those of the individual sender unless >>> otherwise stated. Company has taken enough precautions to prevent the >>> spread of viruses. However the company accepts no liability for any damage >>> caused by any virus transmitted by this email. >>> ************************************************************************************************************************************************************* >>> >>> _______________________________________________ >>> Libav-user mailing list >>> [email protected] >>> http://ffmpeg.org/mailman/listinfo/libav-user >>> >> _______________________________________________ >> Libav-user mailing list >> [email protected] >> http://ffmpeg.org/mailman/listinfo/libav-user > > > What you wanted to show with this example? That's true, some (or all) > decoders don't return errors. > Example in ffv1dec.c > av_log(f->avctx, AV_LOG_ERROR, "CRC mismatch %X!", crc); > No error code returned from here. It is possible to abuse log hook somehow. > > _______________________________________________ > Libav-user mailing list > [email protected] > http://ffmpeg.org/mailman/listinfo/libav-user >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
