Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#13186 closed Developer Task (Fixed)

Replace deprecated ffmpeg functions

Reported by: Peter Bennett Owned by: Peter Bennett
Priority: minor Milestone: 30.0
Component: MythTV - General Version: Master Head
Severity: medium Keywords:
Cc: JYA Ticket locked: no

Description

I aim to get rid of all the deprecated messages that relate to ffmpeg, replacing the outdated code with newer functions and structures as recommended in ffmpeg. This may not have much impact on performance since most of the deprecated functions now call the updated ones internally. However this does provide for the future in case ffmpeg removes those functions from the code base.

I will be posting patches here before applying them to the code, so that people can view them, test them or make comments, before they start affecting users.

Attachments (16)

002_avpicture.patch (62.1 KB) - added by Peter Bennett 6 years ago.
Patch 002 AVPicture
001_avcodec_decode_audio4.2.patch (3.1 KB) - added by Peter Bennett 6 years ago.
Patch 001 avcode_decode_audio4 (updated)
003_avcodec_encode_audio2.patch (5.4 KB) - added by Peter Bennett 6 years ago.
Patch 003 - avcodec_encode_audio2
004_avcodec_decode_video2.patch (5.9 KB) - added by Peter Bennett 6 years ago.
Patch 004 - avcodec_decode_video2
005_avstream_codec_avformatdecoder.patch (37.9 KB) - added by Peter Bennett 6 years ago.
Updated Patch 005 - AVStream::codec in avformatdecoder
006_more_avstream_codec.patch (18.6 KB) - added by Peter Bennett 6 years ago.
Patch 006 - deprecated AVStream::codec, avcodec_close, avcodec_get_context_defaults3
007_avpicture_plugins.patch (3.7 KB) - added by Peter Bennett 6 years ago.
007 AVPicture fixes for Plugins
008_avcodec_decode_video2_plugins.patch (3.4 KB) - added by Peter Bennett 6 years ago.
Patch 008 avcodec_decode_video in Plugins
009_avstream_codec_plugins.patch (9.6 KB) - added by Peter Bennett 6 years ago.
Patch 009 - AVStream::codec and related functions in Plugins
010_jump_segfault.patch (1.1 KB) - added by Peter Bennett 6 years ago.
Patch 010 - Fix segfault when jumping in file with multiple video streams.
011_deprecated_codec_context_options.patch (8.5 KB) - added by Peter Bennett 6 years ago.
Patch 011 - Fix deprecated AVCodecContext fields plus some other left overs.
012_mpeg2fix_avcodec_encode_video2.patch (1.5 KB) - added by Peter Bennett 6 years ago.
Patch 012 - Fix deprecated avcodec_encode_video2 in mpeg2fix.cpp
013_deinterlace.patch (875 bytes) - added by Peter Bennett 6 years ago.
Patch 023 - Fix for deinterlacer bug
export_info.jpeg (492.2 KB) - added by warpme@… 6 years ago.
mach-o exports for lib mythtv
014_plugin_build_lib_fix.patch (478 bytes) - added by Peter Bennett 6 years ago.
Fix plugin build problem on OSX
015_mheg_avstream_codec.patch (2.8 KB) - added by Peter Bennett 6 years ago.
Fix use of AVStream::codec for MHEG

Download all attachments as: .zip

Change History (54)

comment:1 Changed 6 years ago by Peter Bennett

Patch 001 - fix deprecated calls to avcodec_decode_audio4

Now that avcodec_decode_audio4 is deprecated and replaced by 2 calls (receive frame and send packet), this could be optimized into separate routines or separate threads. Also now that it always consumes a whole buffer some code in the caller may be able to be optimized.

avcodec_decode_audio4 calls become

  • avcodec_receive_frame
  • avcodec_send_packet

comment:2 Changed 6 years ago by Peter Bennett

Patch 002 - Fix deprecated structure AVPicture and associated functions.

Many of the new functions take a parameter for alignment. The old functions always use 1 for alignment. I found a recommendation on the web to use 32. I added a configuration item for it and set it to 1 for now.

Deprecated structures and functions and the replacements:

  • AVPicture -> AVFrame
  • avpicture_fill -> av_image_fill_arrays
  • av_picture_copy -> av_image_copy
  • avpicture_get_size -> av_image_get_buffer_size
  • avpicture_alloc -> av_image_alloc
  • avpicture_free -> av_freep
  • av_picture_pad -- I could not find a replacement function. There is no documentation on what it does, apart from "deprecated - unused".

I did not test compile the following modules since I don't have the correct setups:

  • libs/libmythtv/obj/privatedecoder_vda.cpp : MACX only
  • libs/libmythtv/obj/videoout_d3d.cpp : MS Windows only (direct 3d)
Last edited 6 years ago by Peter Bennett (previous) (diff)

Changed 6 years ago by Peter Bennett

Attachment: 002_avpicture.patch added

Patch 002 AVPicture

Changed 6 years ago by Peter Bennett

Patch 001 avcode_decode_audio4 (updated)

comment:3 Changed 6 years ago by Peter Bennett

Status: newaccepted

Patch 003 - fix deprecated calls to avcodec_encode_audio2

Now that avcodec_encode_audio2 is deprecated and replaced by 2 calls, this could be optimized into separate routines or separate threads.

avcodec_encode_audio2 calls become

  • avcodec_receive_packet
  • avcodec_send_frame

If ret from avcodec_send_frame is AVERROR(EAGAIN) then there are 2 packets to be received while only 1 frame to be sent. The code does not cater for this. Hopefully it will not happen.

Changed 6 years ago by Peter Bennett

Patch 003 - avcodec_encode_audio2

comment:4 Changed 6 years ago by Peter Bennett

Patch 004 - fix deprecated calls to avcodec_decode_video2

Now that avcodec_decode_video2 is deprecated and replaced by 2 calls (receive frame and send packet), this could be optimized into separate routines or separate threads. Also now that it always consumes a whole buffer some code in the caller may be able to be optimized.

avcodec_decode_video2 calls become

  • avcodec_receive_frame
  • avcodec_send_packet

The code assumes that there is always space to add a new packet. This seems risky but has always worked. It should actually check if (ret == AVERROR(EAGAIN)) and then keep the packet around and try it again after processing the frame received here.

Changed 6 years ago by Peter Bennett

Patch 004 - avcodec_decode_video2

comment:5 Changed 6 years ago by Peter Bennett

Patch 005 - deprecated AVStream::codec and avcodec_close

This patch has been updated. The original patch crashed on some streams that do not have codecs (e.g. MHEG). It is now changed to use stream->codecpar wherever possible, and to check whether an AVCodecContext exists in cases where it may have failed to be created. There is still a problem that stream->codec is used by some MythTV modifications to FFMPEG code. As of this patch it is still using stream->codec in those cases.

In the old method, ffmpeg automatically creates an AVCodecContext for every AVStream. The context can be opened and closed again any number of times. This is deprecated and the application code is now responsible for creating and freeing an AVCodecContext when needed. The AVCodecContext that the application creates may not be opened and closed more than once. The deprecated function avcodec_close must not be called on an AVCodecContext that you create, instead you have to free the AVCodecContext (using avcodec_free_context) and allocate a new one if you want to read the stream again.

In many cases, reference fields in AVStream::codec are now available in AVStream::codecpar. Where possible the code now uses those fields, to avoid having to create an AVCodecContext.

"codec" no longer shows in the online documentation for AVStream. It is only defined in ffmpeg if you define FF_API_LAVF_AVCTX when compiling ffmpeg. See external/FFmpeg/libavformat/version.h, which has a list of defines that will be set in future to disable this and others. For more information google FF_API_LAVF_AVCTX. Instead of AVStream::codec, the AVStream::codecpar structure contains the information you need to allocate your own AVStream.

Old code for AVStream::codec

AVCodecContext *avctx = stream->codec;

new code using AVStream::codecpar

AVCodec *pCodec = avcodec_find_decoder(stream->codecpar->codec_id);
AVCodecContext *avctx = avcodec_alloc_context3(pCodec);
avcodec_parameters_to_context(avctx, stream->codecpar);
av_codec_set_pkt_timebase(avctx, stream->time_base);

The avctx must saved and the same value used for subsequent calls with that stream. Existing code which uses stream->codec must instead keep track of the axctx value to use each time a packet is received.

Old Code for avcodec_close:

avcodec_close(st->codec);

New code using avcodec_free_context:

avcodec_free_context(&avctx);

Note the old code must still be used for any AVCodecContext obtained from stream->codec.

DVD menu highlighting on the title menu has been working intermittently for some time. That makes it very difficult to navigate a DVD. It seems to be working consistently correctly after these changes, although I could not identify which change made the difference.

The patch is tested with Standard decoding(ffmpeg), VAAPI, VDPAU, OpenMAX (Raspberry pi). Tested playback of recordings, Live TV, Videos, DVD's'.

Some areas not yet changed and not tested. In particular, crystal HD, Windows, and Apple MAC playback may not work. Also transcode has not yet been updated.

Last edited 6 years ago by Peter Bennett (previous) (diff)

Changed 6 years ago by Peter Bennett

Updated Patch 005 - AVStream::codec in avformatdecoder

comment:6 Changed 6 years ago by J.Pilk@…

I built a full fc26 rpm set without these patches on 11 Dec. A build with them added just failed (%build) at libmythgallery.so

rm -f libmythgallery.so g++ -Wl,-O1 -shared -o libmythgallery.so ......

comment:7 Changed 6 years ago by J.Pilk@…

Tried --without mythgallery --without mythzoneminder and it failed at libmythmusic.so

comment:8 Changed 6 years ago by J.Pilk@…

"--without mythgallery --without mythzoneminder --without mythmusic" failed first because mythmusic was required elsewhere; bypassed that and it failed at mythnetvision.so Tried "--without plugins" and it can't find mythwikiscripts...

comment:9 Changed 6 years ago by Stuart Auchterlonie

John,

Can you share on the -dev mailing list the errors you are getting here. I have no problem building this locally on my f26 system, so interested to know how you are trying to build it and the errors you are getting.

Regards Stuart

comment:10 Changed 6 years ago by J.Pilk@…

Hi Stuart: I know this isn't the dev list, but bear with me.

I've been using my variant of the rpmfusion specfile to build with mock in f26 from a codeload .tar.gz

I'm currently running 30pre341 in f26 and SL7.

The 5 patches first caused a failure in the "g++ libmythgallery.so ..." stage, and since then I've been trying to avoid first building individual plugins, and then all of them. This is probably unusual. I commented out the only mention of mythwikiscripts and now it's failing to find things in /usr/share/perl5

I haven't yet looked to see how this latest problem might have arisen, but I think it's now in packaging from the partial build, which I wouldn't normally do.

The initial failure log just gave all the g++ options for libmythgallery.so and said 'bad exit from (some build file in tmp)'

A build cycle takes around an hour. At this stage trying to speed that up would probably make things worse.

I could repeat the first run and post more details if you like, or I can just await developments. I hoped to see what impact there was on DVD navigation.

Changed 6 years ago by Peter Bennett

Patch 006 - deprecated AVStream::codec, avcodec_close, avcodec_get_context_defaults3

comment:11 Changed 6 years ago by Peter Bennett

Patch 006 deprecated AVStream::codec, avcodec_close, avcodec_get_context_defaults3

Fixes AVStream::codec, avcodec_close, and avcodec_get_context_defaults3 in the rest of the mythtv programs and libraries (not plugins yet).

Changes to avcodec_get_context_defaults3

If avcodec_get_context_defaults3 occurs after avcodec_alloc_context3(codec), it is superfluous since avcodec_alloc_context3 already sets up the defaults. If it occurs in other cases it must change to avcodec_free_context and avcodec_alloc_context3 since reusing an AVCodecContext is no longer supported.

Also fixes one error introduced in mythavutil.cpp by the previous commit.

This affects some areas that I cannot test or have not tested yet. These include Crystal HD and VDA output, transcoding, Airplay, nuppel video, MHEG, digital audio encoding.

Changed 6 years ago by Peter Bennett

Attachment: 007_avpicture_plugins.patch added

007 AVPicture fixes for Plugins

comment:12 Changed 6 years ago by Peter Bennett

Patch 007 - Fix deprecated structure AVPicture and associated functions in plugins

Patch 002 was causing a failure to compile in the plugins. This fixes that and makes the AVPicture changes to plugins. Plugins should work now but they still use other deprecated items that have already been fixed in the main build.

comment:13 Changed 6 years ago by J.Pilk@…

Built and running in fc26. Here we go...

Changed 6 years ago by Peter Bennett

Patch 008 avcodec_decode_video in Plugins

Changed 6 years ago by Peter Bennett

Patch 009 - AVStream::codec and related functions in Plugins

comment:14 Changed 6 years ago by Peter Bennett

Patches 008 and 009 complete the removal of deprecated items in MythPlugins

Patch 008 Replace deprecated avcodec_decode_video2

avcodec_decode_video2 calls become

  • avcodec_receive_frame
  • avcodec_send_packet

Patch 009 deprecated AVStream::codec, avcodec_close, av_free_packet Fixes AVStream::codec, avcodec_close, and av_free_packet in the plugins

  • av_free_packet -> av_packet_unref

With this change, there are now no deprecated items used in the plugins.

comment:15 Changed 6 years ago by warpme@…

Peter,

https://github.com/bennettpeter/mythtv/commit/f70055531a8e3c460dae34704e408e0de201c394

causes FE segfaults in skip forward for some mkv movies for me.

100mb sample is here: http://warped.inet2.org/sample.mkv

just start play and try skip forward. for me fe segfaults.

pls let me know if anything more to debug is needed!

Changed 6 years ago by Peter Bennett

Attachment: 010_jump_segfault.patch added

Patch 010 - Fix segfault when jumping in file with multiple video streams.

comment:16 Changed 6 years ago by Peter Bennett

Patch 010 fixes the seg fault.

This particular file has some extra MJPEG video streams, according to ffmpeg, which triggered the bug.

Attempt to flush buffers on a stream that was not opened causes a seg fault when using the new API. Fixed by checking the stream before calling avcodec_flush_buffers.

Thank you for finding this.

comment:17 Changed 6 years ago by warpme@…

Peter, Thx. patch 010 solves problem. All good now!

Changed 6 years ago by Peter Bennett

Patch 011 - Fix deprecated AVCodecContext fields plus some other left overs.

comment:18 Changed 6 years ago by Peter Bennett

Patch 011 - ffmpeg deprecated AVCodecContext option fields

Various options that are included as fields in AVCodecContext are deprecated and must now be set using av_dict_set or av_opt_set.

One option "rc_buffer_aggressivity’ is now listed in the documentation as "currently useless" so I removed it.

Also fixes 2 missed ‘AVStream::codec’ and one missed 'avpicture_get_size' that should have been done in prior commits.

The only remaining deprecated ffmpeg things are:

  • avcodec_encode_video2 - repleacement was not working so this was skipped.
  • AVStream::codec used in one place by MythTV customized ffmpeg code for MHEG.
  • One occurrence of av_picture_pad, which is deprecated and there is no replacement that I can find, mainly because I do not know what it does - the old documentation on it is gone and all it says is "deprecated".
  • a set of bitstream_filter functions used by crystalhd. It is not clear what the replacement is, and I have no way of testing crystal hd.

Everything appears to be working as before, including some basic testing of transcode.

Changed 6 years ago by Peter Bennett

Patch 012 - Fix deprecated avcodec_encode_video2 in mpeg2fix.cpp

comment:19 Changed 6 years ago by Peter Bennett

Patch 012 fixes deprecated avcodec_encode_video2 in mpeg2fix

mpeg2fix.cpp is used in lossless transcode with cut list. That is working correctly.

The remaining occurrences of avcodec_encode_video2 are in code that does not work, so I cannot test it, and thus have not fixed it. They are in NuppelVideoRecorder and AVFormat.

mythtranscode fails with a segfault without any of my changes in it when run with -avf option to test avformatwriter.cpp.

I created a recorder that uses NuppelVideo by using a capture card that consists of my laptop webcam. When attempting to watch LiveTV on that I had a segfault in frontend, a segfault in backend, and a recording that consists of a green screen with black dots flying around. So - not working, without any changes.

comment:20 Changed 6 years ago by warpme@…

Peter,

Since last commits I start to see issue with 2x HD deinterlacer (I'm on Nvidia). Namely:

on some recordings myth selects fallback deinterlacer (x1 HW) while 2x HW should be selected (and is configured as primary). In such case log says:

2017-12-21 08:52:01.253694 I VDPAU: Created VDPAU render device 1920x1080
2017-12-21 08:52:01.981295 E Player(0): Video sync method can\'t support double framerate (refresh rate too low for 2x deint)
2017-12-21 08:52:02.003165 I Player(0): Video timing method: USleep with busy wait

I'm wonder which commit is best candidate to bisect to find offending commit (I'm asking as bisecting in MM2 requires full compile+image building so is time consuming)

comment:21 Changed 6 years ago by Peter Bennett

I do not think anything in these changes will affect that.

I now tried a test with VDPAU High Quality which has deinterlace settings as Advanced (2X) and fallback Advanced (1X). It working fine. Please can you try with -v playback and see what the log says. Look for a message like this

CoreContext mythplayer.cpp:1810 (InitAVSync) - Player(1): Display Refresh Rate: 60.020 Video Frame Rate: 29.970

Perhaps it is not finding the correct rates. If double the frame rate is more than refresh rate you will get that message.

2,4,5,10 are the only patches that affect playback, but they only change decoding not rendering, so I do not think that is the problem.

comment:22 Changed 6 years ago by Peter Bennett

All committed, latest shown first:

  • 1b5e6ac : ffmpeg: Fix deprecated avcodec_encode_video2 in mpeg2fix
  • 0471372 : ffmpeg: deprecated AVCodecContext option fields
  • a88bca9 : ffmpeg: Fix segfault on jump in file with extra video streams
  • 69a8149 : ffmpeg: plugins: deprecated AVStream::codec, avcodec_close, av_free_packet
  • 549ddff : ffmpeg: plugins: Replace deprecated avcodec_decode_video2
  • 780b699 : ffmpeg: plugins: Replace deprecated structure AVPicture and associated functions.
  • f6c4669 : ffmpeg: deprecated AVStream::codec, avcodec_close, avcodec_get_context_defaults3
  • 5c551a0 : ffmpeg: deprecated AVStream::codec and avcodec_close
  • 2fc0b37 : ffmpeg: Replace deprecated avcodec_decode_video2
  • 569336d : ffmpeg: replace deprecated avcodec_encode_audio2
  • 6ed2602 : ffmpeg: Replace deprecated structure AVPicture and associated functions.
  • bc30564 : ffmpeg: Replace calls to deprecated avcodec_decode_audio4

comment:23 Changed 6 years ago by warpme@…

Peter, There is something wrong with auto-detecting/auto-selecting 2x HW DI. Pls look at log below. Log is for 1080i TV channel and 2x HW deint. always was working perfectly well for this channel. With current code 2x HW isn't selected automatically - but changing via OSD gives well working 2xHW DI....

2017-12-21 21:09:28.619438 I TV::TV(): Creating TV object
2017-12-21 21:09:28.913763 I TV::TV(): Finished creating TV object
2017-12-21 21:09:28.913822 N Suspending idle timer
2017-12-21 21:09:28.916130 I TV::Init(): Created TvPlayWindow.
2017-12-21 21:09:28.985381 I TV::HandleStateChange(): Attempting to change from None to WatchingPreRecorded
2017-12-21 21:09:28.992781 I FileRingBuf(myth://mythtv/23806_20171221190000.ts): OpenFile(myth://mythtv/23806_20171221190000.ts, 2000 ms)
2017-12-21 21:09:29.047711 I TV::StartPlayer(): Elapsed time since TV constructor was called: 428 ms
2017-12-21 21:09:29.222718 I ALSA: OpenDevice iec958:CARD=Intel,DEV=0
2017-12-21 21:09:29.234866 I AOS: Sample rate 44100 is supported
2017-12-21 21:09:29.234898 I AOS: Sample rate 48000 is supported
2017-12-21 21:09:29.234928 I AOS: Sample rate 96000 is supported
2017-12-21 21:09:29.235001 I AOS: Format signed 16 bit is supported
2017-12-21 21:09:29.235024 I AOS: Format signed 24 bit MSB is supported
2017-12-21 21:09:29.235038 I AOS: Format signed 32 bit is supported
2017-12-21 21:09:29.235093 I AOS: 2 channel(s) are supported
2017-12-21 21:09:29.289312 I AOS: may be AC3 or DTS capable
2017-12-21 21:09:29.289353 I AOS: 6 channel(s) are supported
2017-12-21 21:09:29.293917 N AudioPlayer: Enabling Audio
2017-12-21 21:09:29.311794 I AFD: PlayerFlags: 0xc0, AudioReadAhead: 100 msec
2017-12-21 21:09:29.311896 I Player(0): Stretch Factor 1, allow passthru 
2017-12-21 21:09:29.315507 I AFD: Buffer size: 32768 streamed 0 seekable 1
2017-12-21 21:09:30.626632 I AFD: Stream #0, has id 0x217 codec id H264, type Video, bitrate 0 at 0x40e5e20
2017-12-21 21:09:30.626667 I AFD: Stream #1, has id 0x352 codec id MP2, type Audio, bitrate 192000 at 0x4168d00
2017-12-21 21:09:30.626691 I AFD: codec MP2 has 2 channels
2017-12-21 21:09:30.626704 I AFD: Looking for decoder for MP2
2017-12-21 21:09:30.627222 I AFD: Opened codec 0x5a32140, id(MP2) type(Audio)
2017-12-21 21:09:30.627452 I AFD: Audio Track #1, of type (Normalny) is A/V stream #1 (id=0x352) and has 2 channels in the Polish language(7368556).
2017-12-21 21:09:30.627482 I AFD: Stream #2, has id 0x353 codec id MP2, type Audio, bitrate 192000 at 0x414f8c0
2017-12-21 21:09:30.627501 I AFD: codec MP2 has 2 channels
2017-12-21 21:09:30.627515 I AFD: Looking for decoder for MP2
2017-12-21 21:09:30.627874 I AFD: Opened codec 0x5a32da0, id(MP2) type(Audio)
2017-12-21 21:09:30.627945 I AFD: Audio Track #2, of type (Audio Description) is A/V stream #2 (id=0x353) and has 2 channels in the Unknown language(7303783).
2017-12-21 21:09:30.627975 I AFD: Stream #3, has id 0x17d8 codec id DVB_SUBTITLE, type Subtitle, bitrate 0 at 0x5a30240
2017-12-21 21:09:30.627990 I AFD: subtitle codec (Subtitle)
2017-12-21 21:09:30.628003 I AFD: Looking for decoder for DVB_SUBTITLE
2017-12-21 21:09:30.628110 I AFD: Opened codec 0x5a4ffc0, id(DVB_SUBTITLE) type(Subtitle)
2017-12-21 21:09:30.628141 I AFD: Subtitle track #1 is A/V stream #3 and is in the Polish language(7368556).
2017-12-21 21:09:30.628154 I AFD: Trying to select best video track
2017-12-21 21:09:30.628288 I AFD: Selected track #0 (id 0x217 codec id H264, type Video, bitrate 500000 at 0x40e5e20)
2017-12-21 21:09:30.630547 I VDP: Accepting: cmp() w(>=0) h(>=720) framerate() codecs() dec(vdpau) cpus(4) skiploop(enabled) rend(vdpau) osd(vdpau) osdfade(enabled) deint(vdpaubasicdoublerate,vdpauadvanced) filt(vdpaucolorspace=auto,vdpausharpen=1.0)
2017-12-21 21:09:30.630637 I VDP: Accepting: cmp() w() h() framerate() codecs() dec(vdpau) cpus(4) skiploop(enabled) rend(vdpau) osd(vdpau) osdfade(enabled) deint(vdpauadvanceddoublerate,vdpauadvanced) filt(vdpaucolorspace=auto)
2017-12-21 21:09:30.630676 I VDP: LoadBestPreferences(1920x1080, 0.000, h264)
2017-12-21 21:09:30.630801 I VDP: LoadBestPreferences Result prio:1, w:>=0, h:>=720, fps:, codecs:, decoder:vdpau, renderer:vdpau, deint:vdpaubasicdoublerate
2017-12-21 21:09:30.630926 I VDPAU: Checking VDPAU support.
2017-12-21 21:09:31.128106 I VDPAU: Version 1
2017-12-21 21:09:31.128135 I VDPAU: Information NVIDIA VDPAU Driver Shared Library 340.104 Thu Sep 14 16:45:03 PDT 2017
2017-12-21 21:09:31.128181 I VDPAU: HQ scaling level 1 of 9 available.
2017-12-21 21:09:31.128198 I VDPAU: MPEG4 hardware acceleration supported.
2017-12-21 21:09:31.128210 I VDPAU: HEVC hardware acceleration not supported.
2017-12-21 21:09:31.139987 I AFD: Using 1 CPUs for decoding
2017-12-21 21:09:31.140019 I AFD: InitVideoCodec() 0x5a51e80 id(H264) type (Video).
2017-12-21 21:09:31.140071 I AFD: Selected FPS is 50 (avg 25 codec 0 container 90000 estimated 50)
2017-12-21 21:09:31.140132 I Player(0): SetFrameInterval ps:1 scan:3
2017-12-21 21:09:31.140178 I Player(0): detectInterlace(Detect Scan, Interlaced Scan, 50, 1080) ->Progressive Scan
2017-12-21 21:09:31.140241 I AFD: Using vdpau for video decoding
2017-12-21 21:09:31.140459 I AFD: Opened codec 0x5a51e80, id(H264) type(Video)
2017-12-21 21:09:31.153743 I AFD: Trying to select audio track (w/lang)
2017-12-21 21:09:31.153846 I AFD: Selected track 1: Polish MP2 2ch (A/V Stream #1)
2017-12-21 21:09:31.153946 I AFD: Audio data is planar
2017-12-21 21:09:31.154020 I AFD: Initializing audio parms from audio track #1
2017-12-21 21:09:31.154083 I AFD: Audio format changed 
from id(NONE) -1Hz -1/-1ch -1bps (profile 0) to id( MP2) 48000Hz 2/2ch 16bps (profile 0)
2017-12-21 21:09:31.154134 I AOBase: Killing AudioOutputDSP
2017-12-21 21:09:31.154188 I AOBase: Original codec was MP2, signed 16 bit, 48 kHz, 2 channels
2017-12-21 21:09:31.154230 I AOBase: enc(0), passthru(0), features (AC3,DTS) configured_channels(2), 2 channels supported(1) max_channels(6)
2017-12-21 21:09:31.154264 I AOBase: Opening audio device \'iec958:CARD=Intel,DEV=0\' ch 2(2) sr 48000 sf signed 16 bit reenc 0
2017-12-21 21:09:31.154279 I ALSA: OpenDevice iec958:CARD=Intel,DEV=0
2017-12-21 21:09:31.157805 I ALSA: SetParameters(format=2, channels=2, rate=48000, buffer_time=500000, period_time=4)
2017-12-21 21:09:31.158211 I ALSA: Buffer size range from 64 to 16384
2017-12-21 21:09:31.158229 I ALSA: Period size range from 32 to 8192
2017-12-21 21:09:31.158300 W ALSA: Requested 500000us got 341333 buffer time
2017-12-21 21:09:31.158564 I ALSA: Hardware audio buffer cur: 64 need: 128 max allowed: 32768
2017-12-21 21:09:31.158624 W ALSA: Try to manually increase audio buffer with: echo 128 | sudo tee /proc/asound/card0/pcm1p/sub0/prealloc
2017-12-21 21:09:31.158648 I ALSA: Buffer time = 341333 us
2017-12-21 21:09:31.158728 I ALSA: Period time = 4 periods
2017-12-21 21:09:31.166633 I ALSA: Buffer size = 16384 | Period size = 4096
2017-12-21 21:09:31.166895 I AOBase: Audio fragment size: 8192
2017-12-21 21:09:31.166944 I AOBase: Audio Stretch Factor: 1
2017-12-21 21:09:31.167070 I AOBase: Ending Reconfigure()
2017-12-21 21:09:31.167132 I Dec: Selected track #1 (type 2) in the Unknown language(0)
2017-12-21 21:09:31.167161 I Dec: Selected track #1 (type 3) in the Polish language(7368556)
2017-12-21 21:09:31.167185 I Dec: Resyncing position map. posmapStarted = 0 livetv(0) watchingRec(0)
2017-12-21 21:09:31.167355 I AOBase: kickoffOutputAudioLoop: pid = 8296
2017-12-21 21:09:31.167424 I AOBase: OutputAudioLoop: Play Event
2017-12-21 21:09:31.219658 I Dec: Position map filled from DB to: 67276
2017-12-21 21:09:31.223378 I Dec: Duration map filled from DB to: 67276
2017-12-21 21:09:31.224613 I Dec: SyncPositionMap prerecorded, from DB: 3013 entries
2017-12-21 21:09:31.224674 I Dec: SyncPositionMap, new totframes: 67276, new length: 1345, posMap size: 3013
2017-12-21 21:09:31.227380 I AFD: Position map found
2017-12-21 21:09:31.227421 I AFD: Successfully opened decoder for file: "myth://mythtv/23806_20171221190000.ts". novideo(0)
2017-12-21 21:09:31.234358 I Using file start
2017-12-21 21:09:31.235588 I VideoOutput: Allowed renderers: vdpau
2017-12-21 21:09:31.235633 I VideoOutput: Allowed renderers (filt: vdpau): vdpau
2017-12-21 21:09:31.235940 I VDP: Accepting: cmp() w(>=0) h(>=720) framerate() codecs() dec(vdpau) cpus(4) skiploop(enabled) rend(vdpau) osd(vdpau) osdfade(enabled) deint(vdpaubasicdoublerate,vdpauadvanced) filt(vdpaucolorspace=auto,vdpausharpen=1.0)
2017-12-21 21:09:31.236070 I VDP: Accepting: cmp() w() h() framerate() codecs() dec(vdpau) cpus(4) skiploop(enabled) rend(vdpau) osd(vdpau) osdfade(enabled) deint(vdpauadvanceddoublerate,vdpauadvanced) filt(vdpaucolorspace=auto)
2017-12-21 21:09:31.236119 I VDP: LoadBestPreferences(1920x1080, 50.000, h264)
2017-12-21 21:09:31.236290 I VDP: LoadBestPreferences Result prio:1, w:>=0, h:>=720, fps:, codecs:, decoder:vdpau, renderer:vdpau, deint:vdpaubasicdoublerate
2017-12-21 21:09:31.236336 I VideoOutput: Preferred renderer: vdpau
2017-12-21 21:09:31.236355 I VideoOutput: Trying video renderer: \'vdpau\'
2017-12-21 21:09:31.250104 I PreviewQueue: Not requesting preview for "Kropka nad i",as it is already being generated
2017-12-21 21:09:31.258508 I PreviewQueue: Not requesting preview for "Kropka nad i",as it is already being generated
2017-12-21 21:09:31.524754 I VideoOutWindow::SetPIPState. pip_state: 0]
2017-12-21 21:09:31.524794 I Clearing OpenGL painter cache.
2017-12-21 21:09:31.739068 I Snapping width to avoid scaling: width: 1920, left: 0
2017-12-21 21:09:31.739125 I Display Rect left: 0, top: 135, width: 1920, height: 810, aspect: 1.33333
2017-12-21 21:09:31.739159 I Video Rect left: 0, top: 0, width: 1920, height: 1080, aspect: 1.77778
2017-12-21 21:09:31.739200 I VDP: LoadBestPreferences(1920x1088, 50.000, h264)
2017-12-21 21:09:31.739356 I VDP: LoadBestPreferences Result prio:1, w:>=0, h:>=720, fps:, codecs:, decoder:vdpau, renderer:vdpau, deint:vdpaubasicdoublerate
2017-12-21 21:09:31.739386 I Snapping width to avoid scaling: width: 1920, left: 0
2017-12-21 21:09:31.739416 I Display Rect left: 0, top: 135, width: 1920, height: 810, aspect: 1.33333
2017-12-21 21:09:31.739444 I Video Rect left: 0, top: 0, width: 1920, height: 1080, aspect: 1.77778
2017-12-21 21:09:31.739470 I VDP: SetVideoRenderer(vdpau)
2017-12-21 21:09:31.739488 I VDP: SetVideoRender(vdpau) == GetVideoRenderer()
2017-12-21 21:09:31.740767 I Trying to match best refresh rate 50.000Hz
2017-12-21 21:09:31.740817 I Using 1920x1080 50.000 Hz
2017-12-21 21:09:31.740864 I SwitchToVideo: Video size 1920 x 1080: 
Already displaying resolution 1920 x 1080, 650mm x 366mm
2017-12-21 21:09:31.740891 I VideoOutput: Pixel dimensions: Screen 1920x1080, window 1920x1080
2017-12-21 21:09:31.740919 I VideoOutput: Actual display dimensions: 650x366 mm Aspect: 1.77596
2017-12-21 21:09:31.740946 I VideoOutput: Estimated window dimensions: 650x366 mm Aspect: 1.77596
2017-12-21 21:09:31.741008 I VidOutVDPAU: VDPAU Sharpen 1.00
2017-12-21 21:09:31.936773 I VDPAU: Created 2 output surfaces.
2017-12-21 21:09:31.936828 I VDPAU: Set colorkey to 0x20202
2017-12-21 21:09:31.936851 I VDPAU: Created VDPAU render device 1920x1080
2017-12-21 21:09:31.941149 I VidOutVDPAU: Created VDPAU osd (1920x1080)
2017-12-21 21:09:32.280173 I ColourSpace: PictureAttributes: Brightness, Contrast, Colour, Hue, Studio Levels, 
2017-12-21 21:09:32.280208 I VidOutVDPAU: Using ITU BT.709 colorspace
2017-12-21 21:09:32.280276 I Snapping height to avoid scaling: height: 1080, top: 0
2017-12-21 21:09:32.280302 I Snapping width to avoid scaling: width: 1920, left: 0
2017-12-21 21:09:32.280343 I Display Rect left: 0, top: 0, width: 1920, height: 1080, aspect: 1.77778
2017-12-21 21:09:32.280374 I Video Rect left: 0, top: 0, width: 1920, height: 1080, aspect: 1.77778
2017-12-21 21:09:32.280392 I VidOutVDPAU: Created VDPAU context (GPU decode)
2017-12-21 21:09:32.288659 I Over/underscan. V: 0, H: 0
2017-12-21 21:09:32.288697 I Snapping height to avoid scaling: height: 1080, top: 0
2017-12-21 21:09:32.288715 I Snapping width to avoid scaling: width: 1920, left: 0
2017-12-21 21:09:32.288748 I Display Rect left: 0, top: 0, width: 1920, height: 1080, aspect: 1.77778
2017-12-21 21:09:32.288777 I Video Rect left: 0, top: 0, width: 1920, height: 1080, aspect: 1.77778
2017-12-21 21:09:32.288869 I FilterManager: GetFilterInfo(convert) returning: 0x0
2017-12-21 21:09:32.288917 I Player(0): LoadFilters(\'vdpaucolorspace=auto,vdpausharpen=1.0\'..) -> 0x0
2017-12-21 21:09:32.291127 I Player(0): Decoder thread starting.
2017-12-21 21:09:32.323609 I OSD: Loaded window osd_message
2017-12-21 21:09:32.338916 I OSD: Loaded window osd_input
2017-12-21 21:09:32.414150 I OSD: Loaded window program_info
2017-12-21 21:09:32.442470 I OSD: Loaded window browse_info
2017-12-21 21:09:32.476951 I OSD: Loaded window osd_status
2017-12-21 21:09:32.553061 I OSD: Loaded window osd_program_editor
2017-12-21 21:09:32.596281 I OSD: Loaded window osd_debug
2017-12-21 21:09:32.596335 I OSD: Loaded OSD: size 1920x1080 offset 0+0
2017-12-21 21:09:32.596674 I OSD: Created window aa_OSD_SUBTITLES
2017-12-21 21:09:32.598216 I EnableCaptions(4) msg: Napisy 1: Polish WłÄ
cz
2017-12-21 21:09:32.598274 I Player(0): ClearAfterSeek(0)
2017-12-21 21:09:32.599643 I VDP: GetFilteredDeint() : vdpau -> \'vdpaubasicdoublerate\'
2017-12-21 21:09:32.602568 I VidOutVDPAU: Enabled deinterlacing.
2017-12-21 21:09:32.602708 E VSYNC: DRMVideoSync: VBlank ioctl did not work, unimplemented in this driver?
2017-12-21 21:09:32.602838 E VSYNC: RTCVideoSync: Could not open /dev/rtc: 
eno: No such file or directory (2)
2017-12-21 21:09:32.602871 E Player(0): Video sync method can\'t support double framerate (refresh rate too low for 2x deint)
2017-12-21 21:09:32.604975 I AOBase: OutputAudioLoop: Play Event
2017-12-21 21:09:32.605448 I VDP: GetFilteredDeint(vdpauadvanced) : vdpau -> \'vdpauadvanced\'
2017-12-21 21:09:32.608519 I VidOutVDPAU: Enabled deinterlacing.
2017-12-21 21:09:32.611928 I Player(0): Video timing method: USleep with busy wait
2017-12-21 21:09:32.611970 I Player(0): Display Refresh Rate: 50.000 Video Frame Rate: 50.000
2017-12-21 21:09:32.611997 I Player(0): SetFrameInterval ps:1 scan:1
2017-12-21 21:09:32.613317 E Failed to set RT thread
2017-12-21 21:09:32.613336 W Failed to set realtime priority for video timing thread
2017-12-21 21:09:32.614423 I playCtx: StartPlaying(): took 0 ms to start player.
2017-12-21 21:09:32.614467 I TV::StartPlayer(): Created player.
2017-12-21 21:09:32.614590 I TV::HandleStateChange(): Changing from None to WatchingPreRecorded
2017-12-21 21:09:32.624155 I TV::HandleStateChange(): Main UI disabled.
2017-12-21 21:09:32.624367 I TV::StartTV(): Entering main playback loop.
2017-12-21 21:09:32.632872 I Player(0): SetFrameInterval ps:1 scan:3
2017-12-21 21:09:32.632928 I VDP: LoadBestPreferences(1920x1088, 25.000, h264)
2017-12-21 21:09:32.633178 I VDP: LoadBestPreferences Result prio:1, w:>=0, h:>=720, fps:, codecs:, decoder:vdpau, renderer:vdpau, deint:vdpaubasicdoublerate
2017-12-21 21:09:32.633228 I VidOutVDPAU: InputChanged(1920,1080,1.77778) \'H.264 VDPAU\'->\'H.264 VDPAU\'
2017-12-21 21:09:32.634703 I Player(0): detectInterlace(Detect Scan, Interlaced Scan, 25, 1080) ->Interlaced Scan
2017-12-21 21:09:32.634759 I AFD: avFPS(50) != seqFPS(25)
2017-12-21 21:09:32.635706 I Player(0): Enabled deinterlacing
2017-12-21 21:09:32.635774 I Player(0): Waiting for video buffers...
2017-12-21 21:09:32.691326 I VidOutVDPAU: Added 2 new buffers. New buffer size 16 (4 decode and 12 process)
2017-12-21 21:09:32.727183 I VidOutVDPAU: Created VDPAU decoder (4 ref frames)
2017-12-21 21:09:32.737257 N Player(0): Waited 102ms for video buffers AAAAAAAAAAALLLLL
2017-12-21 21:09:32.829666 I VDPAU: Added 2 output surfaces (total 4, max 4)
2017-12-21 21:09:33.936505 I TV::DoPlayerSeek(): 30 seconds
2017-12-21 21:09:33.936542 I AOBase: Pause 1
2017-12-21 21:09:33.936620 I UpdateOSDSeekMessage(Skocz naprzĂłd, 2)
2017-12-21 21:09:33.945715 I AOBase: OutputAudioLoop: audio paused
2017-12-21 21:09:33.949181 I AFD: DoFastForward(781 (41), do discard frames)
2017-12-21 21:09:33.949207 I Dec: DoFastForward(781 (41), do discard frames)
2017-12-21 21:09:33.949241 I Dec: FindPosition(781, search not adjusted) --> 
[34:764(27042296),35:788(27702552)]
2017-12-21 21:09:34.010442 I AFD: SeekReset(788, 0, do flush, do discard)
2017-12-21 21:09:34.010560 I AFD: SeekReset() flushing
2017-12-21 21:09:34.010851 I VidOutVDPAU: DiscardFrames(1)
2017-12-21 21:09:34.010912 I VideoBuffers::DiscardFrames(1): ADUUUUUUUUAAADDU
2017-12-21 21:09:34.010961 I VideoBuffers::DiscardFrames(1): ADAAAAAAAAAAADDA -- done
2017-12-21 21:09:34.010994 I VidOutVDPAU: DiscardFrames() 3: ADAAAAAAAAAAADDA -- done()
2017-12-21 21:09:34.042057 I Player(0): ClearAfterSeek(0)
2017-12-21 21:09:34.042102 I Player(0): Waiting for video buffers...
2017-12-21 21:09:34.190414 I AOBase: Pause 0
2017-12-21 21:09:34.190606 I AOBase: OutputAudioLoop: Play Event

comment:24 Changed 6 years ago by warpme@…

comment:25 Changed 6 years ago by Peter Bennett

I see in the log above "Player(0): Display Refresh Rate: 50.000 Video Frame Rate: 50.000". That is what is causing the problem.

Please can you supply a 100MB extract of the video, because on videos that I have it is working correctly.

comment:26 Changed 6 years ago by warpme@…

comment:27 Changed 6 years ago by Peter Bennett

MythTV is finding the wrong framerate for the video, it thinks it is 50fps interlaced, which means 100 fields per second. It may be a consequence of some MythTV customizations of ffmpeg, because ffprobe gives the correct 25fps but mythffprobe gives 50fps.

Presumably the 50 it is picking up is the number of fields per second rather than frames per second.

Assuming that interlaced content is always 25fps or 30fps, I can make a simple change to correct the double rate check by assuming that anything that has interlaced content with higher than 33 fps is getting a doubled value, and adjusting accordingly.

Changed 6 years ago by Peter Bennett

Attachment: 013_deinterlace.patch added

Patch 023 - Fix for deinterlacer bug

comment:28 Changed 6 years ago by Peter Bennett <pbennett@…>

In 52f430fcd93c4d3948fa1f477142ee65063ce291/mythtv:

ffmpeg: Workaround for incorrect interlaced frame rate detection

ffmpeg is sometimes picking double the frame rate for interlaced video.
Work around that bad information bt assuming interlaced video is not
used at more than 33 fps, and higher values are doubled.

Refs #13186

comment:29 Changed 6 years ago by warpme@…

Pater, I started to have issue with building myth music on OSX platform (macOS 10.13.2)

Build fails like this:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.9 -L/Users/piotro/Devel/mythtv-master/.osx-packager/build/lib -F/Users/piotro/Devel/Qt5.5.1/5.5/clang_64/lib  -Wl,-dynamic,-search_paths_first -Qunused-arguments -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -stdlib=libc++ -mmacosx-version-min=10.7 -single_module -dynamiclib -o libmythmusic.dylib obj/decoder.o obj/flacencoder.o obj/main.o obj/mainvisual.o obj/playlist.o obj/encoder.o obj/dbcheck.o obj/synaesthesia.o obj/lameencoder.o obj/vorbisencoder.o obj/visualize.o obj/bumpscope.o obj/genres.o obj/importmusic.o obj/filters.o obj/goom_core.o obj/graphic.o obj/tentacle3d.o obj/ifs.o obj/ifs_display.o obj/lines.o obj/surf3d.o obj/zoom_filter_mmx.o obj/zoom_filter_xmmx.o obj/mythgoom.o obj/avfdecoder.o obj/editmetadata.o obj/smartplaylist.o obj/musicplayer.o obj/miniplayer.o obj/playlistcontainer.o obj/musicdata.o obj/musiccommon.o obj/decoderhandler.o obj/pls.o obj/playlistview.o obj/playlisteditorview.o obj/visualizerview.o obj/searchview.o obj/streamview.o obj/generalsettings.o obj/visualizationsettings.o obj/importsettings.o obj/playersettings.o obj/ratingsettings.o obj/lyricsview.o obj/moc_mainvisual.o obj/moc_playlist.o obj/moc_avfdecoder.o obj/moc_importmusic.o obj/moc_editmetadata.o obj/moc_smartplaylist.o obj/moc_musicplayer.o obj/moc_miniplayer.o obj/moc_musicdata.o obj/moc_musiccommon.o obj/moc_decoderhandler.o obj/moc_playlistview.o obj/moc_playlisteditorview.o obj/moc_visualizerview.o obj/moc_searchview.o obj/moc_streamview.o obj/moc_generalsettings.o obj/moc_visualizationsettings.o obj/moc_importsettings.o obj/moc_playersettings.o obj/moc_ratingsettings.o obj/moc_lyricsview.o  -F/Users/piotro/Devel/Qt5.5.1/5.5/clang_64/lib -L/Users/piotro/Devel/mythtv-master/.osx-packager/build/lib -framework QuartzCore -framework AppKit -framework OpenGL -framework QTKit -framework Foundation -framework CoreVideo -framework AVFoundation -framework CoreMedia -framework CoreFoundation -framework VideoToolbox -framework AudioToolbox -framework VideoDecodeAcceleration -lcrypto -liconv -Wl,-framework,CoreFoundation -Wl,-framework,Security -Wl,-framework,OpenGL -framework CoreGraphics -lm -pthread -framework CoreServices -lfreetype -lz -lbz2 -F/Users/piotro/Devel/mythtv-master/.osx-packager/build/lib -framework AVCVideoServices -lmythbase-30 -lmyth-30 -lmythui-30 -lmythupnp-30 -lmythservicecontracts-30 -lmythswresample -lmythavformat -lmythavcodec -lmythavutil -ltag -logg -lvorbisfile -lvorbis -lvorbisenc -lFLAC -lmp3lame -lmythmetadata-30 -framework QtOpenGL -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework QtWebKitWidgets -framework QtWebKit -framework QtNetwork -framework QtXml -framework QtSql -framework AGL
Undefined symbols for architecture x86_64:
  "MythCodecMap::getCodecContext(AVStream const*, AVCodec const*, bool)", referenced from:
      avfDecoder::initialize() in avfdecoder.o
  "MythCodecMap::freeCodecContext(AVStream const*)", referenced from:
      avfDecoder::deinit() in avfdecoder.o
  "_gCodecMap", referenced from:
      avfDecoder::deinit() in avfdecoder.o
      avfDecoder::initialize() in avfdecoder.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libmythmusic.dylib] Error 1
make[1]: *** [sub-mythmusic-make_first] Error 2
make: *** [sub-mythmusic-make_first] Error 2
[osx-pkg] Failed system call: " /usr/bin/make -j9 " with error code 2

comment:30 Changed 6 years ago by Peter Bennett

Did you first rebuild the main MythTV? It needs to have the changes built and installed on MythTV before you can build plugins. I suspect you have an older version of MythTV installed.

If that is not the case -

The MythCodecMap is a new entry in libmythtv. I don't know if anything special needs to be done for MACOS when adding a new entry in a library. For Linux all it needs is to have MTV_PUBLIC on the class declaration, which is done in patch 009. Check that the plugins build is looking at the latest libmythtv and that mythtv/libs/libmythtv/mythavutil.h has MTV_PUBLIC on the class definition of MythCodecMap.

Changed 6 years ago by warpme@…

Attachment: export_info.jpeg added

mach-o exports for lib mythtv

comment:31 Changed 6 years ago by warpme@…

Peter, I'm building mythtv for macOS in regular way since year or more (https://forum.mythtv.org/viewtopic.php?f=26&t=1599). Looking on mach-o viewer it looks like MythCodecMap? is exported by libmythtv. It looks like issue is more subtle. I'm wonder what JYA thinks here....

Changed 6 years ago by Peter Bennett

Fix plugin build problem on OSX

comment:32 Changed 6 years ago by Peter Bennett

Please try patch 014 and let me know if it fixes the problem.

comment:33 Changed 6 years ago by Peter Bennett <pbennett@…>

In a5a83435c44a90cf83b85a6b0dd8fdfa5c56d7da/mythtv:

ffmpeg: Additional Library for music plugin

Music plugin now uses libmythtv.

Refs #13186

comment:34 Changed 6 years ago by warpme@…

Peter, thx!. Now compiles under macOS 10.13.2 perfectly!

comment:35 Changed 6 years ago by Peter Bennett

Patch 015 fixes the last remaining use of deprecated AVStream::codec. This was used in mheg. I have tested with an file from the UK with mheg stream, and with manyvideos with different subtitle formats.

Changed 6 years ago by Peter Bennett

Fix use of AVStream::codec for MHEG

comment:36 Changed 6 years ago by Peter Bennett <pbennett@…>

In e24857a3ad35f20dbfe493e8174f99fce07b4b34/mythtv:

ffmpeg: Fix last remaining deprecated AVStream::codec usages

Move MythTV fields used for MHEG from AVCodecContext to AVStream
so that MHEG no longer accesses AVStream::codec

Refs #13186

comment:37 Changed 6 years ago by Peter Bennett

Resolution: Fixed
Status: acceptedclosed

comment:38 Changed 6 years ago by Peter Bennett

Owner: changed from Peter Bennett to Peter Bennett
Note: See TracTickets for help on using tickets.