use ffav_sys::*;
use std::env;
use std::ffi::{CStr, CString};
fn main() {
unsafe {
let mut fmt_ctx: *mut AVFormatContext = std::ptr::null_mut();
let mut tag: *mut AVDictionaryEntry = std::ptr::null_mut();
let mut ret;
let args = env::args().collect::<Vec<_>>();
if args.len() != 2 {
println!(
"usage: {} input_file\n\
example program to demonstrate the use of the libavformat metadata API.",
args[0]
);
std::process::exit(-1);
}
let input_filename = CString::new(args[1].clone()).unwrap();
ret = avformat_open_input(
&mut fmt_ctx,
input_filename.as_ptr(),
std::ptr::null_mut(),
std::ptr::null_mut(),
);
if ret != 0 {
panic!("avformat_open_input({:?}) = {}", input_filename, ret);
}
ret = avformat_find_stream_info(fmt_ctx, std::ptr::null_mut());
if ret < 0 {
panic!("avformat_find_stream_info({:?}) = {}", fmt_ctx, ret);
}
let dummy = CString::new("").unwrap();
loop {
tag = av_dict_get(
(*fmt_ctx).metadata,
dummy.as_ptr(),
tag,
AV_DICT_IGNORE_SUFFIX,
);
if tag.is_null() {
break;
}
println!(
"{:?}={:?}",
CStr::from_ptr((*tag).key),
CStr::from_ptr((*tag).value)
);
}
avformat_close_input(&mut fmt_ctx);
}
}