qdmetadata: Add support for video histogram stats
Change adds support for passing the video histogram stats from video decoder to
the clients.
CRs-Fixed: 2395126
Change-Id: If6b1e0eb51754c3635024a4b37dc9d8991073efb
diff --git a/libqdmetadata/qdMetaData.cpp b/libqdmetadata/qdMetaData.cpp
index 33ce28b..91dbc7a 100644
--- a/libqdmetadata/qdMetaData.cpp
+++ b/libqdmetadata/qdMetaData.cpp
@@ -161,7 +161,26 @@
}
break;
}
- default:
+ case SET_VIDEO_HISTOGRAM_STATS: {
+ struct VideoHistogramMetadata *vidstats = (struct VideoHistogramMetadata *)param;
+ if (vidstats->stat_len <= VIDEO_HISTOGRAM_STATS_SIZE) {
+ memcpy(data->video_histogram_stats.stats_info,
+ vidstats->stats_info, VIDEO_HISTOGRAM_STATS_SIZE);
+ data->video_histogram_stats.stat_len = vidstats->stat_len;
+ data->video_histogram_stats.frame_type = vidstats->frame_type;
+ data->video_histogram_stats.display_width = vidstats->display_width;
+ data->video_histogram_stats.display_height = vidstats->display_height;
+ data->video_histogram_stats.decode_width = vidstats->decode_width;
+ data->video_histogram_stats.decode_height = vidstats->decode_height;
+ } else {
+ data->operation &= ~(paramType);
+ ALOGE("%s: video stats length %u is more than max size %u",
+ __func__, vidstats->stat_len, VIDEO_HISTOGRAM_STATS_SIZE);
+ return -EINVAL;
+ }
+ break;
+ }
+ default:
ALOGE("Unknown paramType %d", paramType);
break;
}
@@ -191,6 +210,9 @@
case SET_CVP_METADATA:
data->cvpMetadata.size = 0;
break;
+ case SET_VIDEO_HISTOGRAM_STATS:
+ data->video_histogram_stats.stat_len = 0;
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
@@ -323,6 +345,23 @@
}
}
break;
+ case GET_VIDEO_HISTOGRAM_STATS:
+ if (data->operation & SET_VIDEO_HISTOGRAM_STATS) {
+ struct VideoHistogramMetadata *vidstats = (struct VideoHistogramMetadata *)param;
+ vidstats->stat_len = 0;
+ if (data->video_histogram_stats.stat_len <= VIDEO_HISTOGRAM_STATS_SIZE) {
+ memcpy(vidstats->stats_info,
+ data->video_histogram_stats.stats_info, VIDEO_HISTOGRAM_STATS_SIZE);
+ vidstats->stat_len = data->video_histogram_stats.stat_len;
+ vidstats->frame_type = data->video_histogram_stats.frame_type;
+ vidstats->display_width = data->video_histogram_stats.display_width;
+ vidstats->display_height = data->video_histogram_stats.display_height;
+ vidstats->decode_width = data->video_histogram_stats.decode_width;
+ vidstats->decode_height = data->video_histogram_stats.decode_height;
+ ret = 0;
+ }
+ }
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;