Use below code and might help you in solving your problem.

while (av_read_frame(refrenceFormatCtx, &packet) >= 0) {

if (packet.stream<http://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<http://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]<mailto:[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]<mailto:[email protected]>> on behalf 
of Vasiliy Volkov <[email protected]<mailto:[email protected]>>
Sent: Wednesday, October 3, 2018 3:08:08 PM
To: [email protected]<mailto:[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]<mailto:[email protected]>
http://ffmpeg.org/mailman/listinfo/libav-user
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to