[Libav-user] HEVC 2/3 of the frame is green

Strahinja Radman dr.strashni at gmail.com
Fri Mar 24 14:40:30 EET 2023



> On 24. 3. 2023., at 10:59, Michael Wood <mornwood23 at gmail.com> wrote:
> 
> 
> 
> On Fri, Mar 24, 2023 at 10:28 AM Strahinja Radman <dr.strashni at gmail.com <mailto:dr.strashni at gmail.com>> wrote:
>> 
>> 
>>> On 23. 3. 2023., at 20:19, Michael Wood <mornwood23 at gmail.com <mailto:mornwood23 at gmail.com>> wrote:
>>> 
>>> 
>>> 
>>> On Thu, Mar 23, 2023 at 8:06 PM Strahinja Radman <dr.strashni at gmail.com <mailto:dr.strashni at gmail.com>> wrote:
>>> 
>>> 
>>> On Thu, 23 Mar 2023 at 20:05, Michael Wood <mornwood23 at gmail.com <mailto:mornwood23 at gmail.com>> wrote:
>>> 
>>> 
>>> On Thu, Mar 23, 2023 at 6:20 PM Michael Wood <mornwood23 at gmail.com <mailto:mornwood23 at gmail.com>> wrote:
>>> Hi,
>>> 
>>> I'm having a weird issue with the decoding of H265 4K stream where 1/3 of the frame is rendered normally and the other 2/3 is in green (https://ibb.co/C8yFygm). This only happens if i try to decode 4K stream, for non 4K streams everything works as expected.
>>> 
>>> I'm using live555 library to get stream from RTSP server after which packets are sent to the ffmpeg to be decoded and later rendered
>>> 
>>> DESCRIBE response contains all required VPS,SPS,PPS fields that are passed as extra data to the codec context.
>>> 
>>> This is what is returned from DESCRIBE:
>>> 
>>> v=0
>>> o=- 1679598602413481 1679598602413481 IN IP4 192.168.1.212
>>> s=Media Presentation
>>> e=NONE
>>> b=AS:5050
>>> t=0 0
>>> a=control:rtsp://192.168.1.212/Streaming/Channels/101/?transportmode=unicast&profile=Profile_1 <http://192.168.1.212/Streaming/Channels/101/?transportmode=unicast&profile=Profile_1>
>>> m=video 0 RTP/AVP 96
>>> c=IN IP4 0.0.0.0
>>> b=AS:5000
>>> a=recvonly
>>> a=x-dimensions:3840,2160
>>> a=control:rtsp://192.168.1.212/Streaming/Channels/101/trackID=1?transportmode=unicast&profile=Profile_1 <http://192.168.1.212/Streaming/Channels/101/trackID=1?transportmode=unicast&profile=Profile_1>
>>> a=rtpmap:96 H265/90000
>>> a=fmtp:96 sprop-vps=QAEMA///AWAAAAMAgAAAAwAAAwCWAAC94Eg=; sprop-sps=QgEDAWAAAAMAgAAAAwAAAwCWAACgAeAgAhx/jb33am7uS/YC3AQEBBAAAD6AAALuByHe5RAAmRgACsPgAEyMAAVh8EACZGAAKw+AATIwABWHwg==; sprop-pps=RAHBcrCcCgFGZA==
>>> a=Media_header:MEDIAINFO=494D4B48010300000400050000000000000000000000000081000000000000000000000000000000;
>>> a=appversion:1.0
>>> 
>>> When trying to decode packets i'm getting this output from hevc, the ffplay/VLC works normally with the incoming stream.
>>> 
>>> [hevc @ 0x14ac15600] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding VPS
>>> [hevc @ 0x14ac15600] Main profile bitstream
>>> [hevc @ 0x14ac15600] Decoding SPS
>>> [hevc @ 0x14ac15600] Main profile bitstream
>>> [hevc @ 0x14ac15600] Decoding VUI
>>> [hevc @ 0x14ac15600] Decoding PPS
>>> [hevc @ 0x14ac15600] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding VPS
>>> [hevc @ 0x14ac15600] Main profile bitstream
>>> [hevc @ 0x14ac15600] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding SPS
>>> [hevc @ 0x14ac15600] Main profile bitstream
>>> [hevc @ 0x14ac15600] Decoding VUI
>>> [hevc @ 0x14ac15600] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding PPS
>>> [hevc @ 0x14ac15600] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Format yuvj420p chosen by get_format().
>>> [hevc @ 0x14ac15600] Output frame with POC 0.
>>> [hevc @ 0x14ac15600] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding VPS
>>> [hevc @ 0x14ac15600] Main profile bitstream
>>> [hevc @ 0x14ac15600] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding SPS
>>> [hevc @ 0x14ac15600] Main profile bitstream
>>> [hevc @ 0x14ac15600] Decoding VUI
>>> [hevc @ 0x14ac15600] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Decoding PPS
>>> [hevc @ 0x14ac15600] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] Output frame with POC 0.
>>> [hevc @ 0x14ac15600] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 1(TRAIL_R), nuh_layer_id: 0, temporal_id: 2
>>> [hevc @ 0x14ac15600] Output frame with POC 1.
>>> [hevc @ 0x14ac15600] nal_unit_type: 1(TRAIL_R), nuh_layer_id: 0, temporal_id: 2
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 1(TRAIL_R), nuh_layer_id: 0, temporal_id: 2
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 1(TRAIL_R), nuh_layer_id: 0, temporal_id: 2
>>> [hevc @ 0x14ac15600] Output frame with POC 2.
>>> [hevc @ 0x14ac15600] nal_unit_type: 1(TRAIL_R), nuh_layer_id: 0, temporal_id: 2
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> [hevc @ 0x14ac15600] nal_unit_type: 1(TRAIL_R), nuh_layer_id: 0, temporal_id: 2
>>> [hevc @ 0x14ac15600] First slice in a frame missing.
>>> 
>>> If I write the stream to the file and play that file either through ffplay or VLC the frames are rendered normally. 
>>> 
>>> Any suggestion would be welcomed.
>>> 
>>> Thanks,
>>> Milos
>>> 
>>>  Hey Strahinja,
>>> 
>>> Thanks for the answer,
>>> 
>>> Can you provide more info on how to do it ?
>>> 
>>> Best,
>>> Milos
>>> _______________________________________________
>>> Libav-user mailing list
>>> Libav-user at ffmpeg.org <mailto:Libav-user at ffmpeg.org>
>>> https://ffmpeg.org/mailman/listinfo/libav-user
>>> 
>>> To unsubscribe, visit link above, or email
>>> libav-user-request at ffmpeg.org <mailto:libav-user-request at ffmpeg.org> with subject "unsubscribe".
>>> Hey Milos,
>>> 
>>> In AVFrame structure, check width, height and stride variables. 
>>> 
>>> 
>>> -- 
>>> 
>>> Regards
>>> Strahinja Radman
>>> _______________________________________________
>>> Libav-user mailing list
>>> Libav-user at ffmpeg.org <mailto:Libav-user at ffmpeg.org>
>>> https://ffmpeg.org/mailman/listinfo/libav-user
>>> 
>>> To unsubscribe, visit link above, or email
>>> libav-user-request at ffmpeg.org <mailto:libav-user-request at ffmpeg.org> with subject "unsubscribe".
>>> 
>>> Hey Strahinja,
>>> 
>>> It seems that both width & height are set correctly. I can't find stride, i don't see any reference to it in the AVFrame header.
>>> 
>>> Thanks,
>>> Milos
>>> _______________________________________________
>>> Libav-user mailing list
>>> Libav-user at ffmpeg.org <mailto:Libav-user at ffmpeg.org>
>>> https://ffmpeg.org/mailman/listinfo/libav-user
>>> 
>>> To unsubscribe, visit link above, or email
>>> libav-user-request at ffmpeg.org <mailto:libav-user-request at ffmpeg.org> with subject "unsubscribe”.
>> 
>> Hey Milos,
>> 
>> What does a parameter linesize say?
>> 
>> AVFrame->linesize[0]
>> 
>> Kind regards,
>> Strahinja
>> 
>> 
> 
> Hi Strahinja,
> 
> The linesize looks good and corresponds to frame size
> 
> frame->linesize[0] = 3840
> frame->linesize[1] = 1920
> frame->linesize[2] = 1920
> 
> Best,
> Milos
> 
> 
>  

Hey Milos,

Can you use this method to save one frame to the PGM file and check its contents right after you receive an AVFrame

static void pgm_save(unsigned char* buf, int wrap, int xsize, int ysize, const char* filename)   
 {  
	FILE* f;        
	int i;
        f = fopen(filename, "w");        
	fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);        
	for (i = 0; i < ysize; i++)            
		fwrite(buf + i * wrap, 1, xsize, f);        
	fclose(f);   
}

buf is frame->data[0]
wrap is frame->linesize[0]
xsize is width and ysize is height

Kind regards,
Strahinja

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20230324/754e9e53/attachment.htm>


More information about the Libav-user mailing list