001package net.bramp.ffmpeg.adapter; 002 003import com.google.gson.JsonDeserializationContext; 004import com.google.gson.JsonDeserializer; 005import com.google.gson.JsonElement; 006import com.google.gson.JsonObject; 007import com.google.gson.JsonParseException; 008import java.lang.reflect.AnnotatedType; 009import java.lang.reflect.Field; 010import java.lang.reflect.Type; 011import net.bramp.ffmpeg.probe.FFmpegStream; 012 013/** Gson type adapter that deserializes FFmpeg stream side data from JSON. */ 014public class FFmpegStreamSideDataAdapter implements JsonDeserializer<FFmpegStream.SideData> { 015 @Override 016 public FFmpegStream.SideData deserialize( 017 JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) 018 throws JsonParseException { 019 if (!(jsonElement instanceof JsonObject)) { 020 return null; 021 } 022 try { 023 Object sideData = 024 Class.forName(FFmpegStream.SideData.class.getName()).getConstructor().newInstance(); 025 Field[] fields = Class.forName(FFmpegStream.SideData.class.getName()).getFields(); 026 for (Field field : fields) { 027 String fieldName = field.getName(); 028 AnnotatedType annotatedType = field.getAnnotatedType(); 029 Object deserialize = 030 jsonDeserializationContext.deserialize( 031 ((JsonObject) jsonElement).get(fieldName), annotatedType.getType()); 032 field.set(sideData, deserialize); 033 } 034 return (FFmpegStream.SideData) sideData; 035 } catch (Exception exception) { 036 return null; 037 } 038 } 039}