@@ -88,7 +88,6 @@ def sandboxed(*args, **kwargs):
8888doctest_test_doctest_blocks = ""
8989
9090extlinks = {
91- "ffmpeg" : ("https://ffmpeg.org/doxygen/trunk/%s.html" , "%s" ),
9291 "ffstruct" : ("https://ffmpeg.org/doxygen/trunk/struct%s.html" , "struct %s" ),
9392 "issue" : ("https://github.com/PyAV-Org/PyAV/issues/%s" , "#%s" ),
9493 "pr" : ("https://github.com/PyAV-Org/PyAV/pull/%s" , "#%s" ),
@@ -203,9 +202,7 @@ def makerow(*texts):
203202
204203 seen = set ()
205204 enum_items = [
206- (name , item )
207- for name , item in vars (enum ).items ()
208- if isinstance (item , enum )
205+ (name , item ) for name , item in vars (enum ).items () if isinstance (item , enum )
209206 ]
210207 for name , item in enum_items :
211208 if name .lower () in seen :
@@ -226,8 +223,45 @@ def makerow(*texts):
226223 return [table ]
227224
228225
226+ def ffmpeg_role (name , rawtext , text , lineno , inliner , options = {}, content = []):
227+ """
228+ Custom role for FFmpeg API links.
229+ Converts :ffmpeg:`AVSomething` into proper FFmpeg API documentation links.
230+ """
231+
232+ base_url = "https://ffmpeg.org/doxygen/7.0/struct{}.html"
233+
234+ try :
235+ struct_name , member = text .split ("." )
236+ except Exception :
237+ struct_name = None
238+
239+ if struct_name is None :
240+ url = base_url .format (text )
241+ else :
242+ fragment = {
243+ "AVCodecContext.thread_count" : "#aa852b6227d0778b62e9cc4034ad3720c" ,
244+ "AVCodecContext.thread_type" : "#a7651614f4309122981d70e06a4b42fcb" ,
245+ "AVCodecContext.skip_frame" : "#af869b808363998c80adf7df6a944a5a6" ,
246+ "AVCodec.capabilities" : "#af51f7ff3dac8b730f46b9713e49a2518" ,
247+ "AVCodecDescriptor.props" : "#a9949288403a12812cd6e3892ac45f40f" ,
248+ }.get (text , f"#{ member } " )
249+
250+ url = base_url .format (struct_name ) + fragment
251+
252+ node = nodes .reference (rawtext , text , refuri = url , ** options )
253+ return [node ], []
254+
255+
229256def setup (app ):
230257 app .add_css_file ("custom.css" )
258+ app .add_role ("ffmpeg" , ffmpeg_role )
231259 app .add_directive ("flagtable" , EnumTable )
232260 app .add_directive ("enumtable" , EnumTable )
233261 app .add_directive ("pyinclude" , PyInclude )
262+
263+ return {
264+ "version" : "1.0" ,
265+ "parallel_read_safe" : True ,
266+ "parallel_write_safe" : True ,
267+ }
0 commit comments